]> Cypherpunks repositories - gostls13.git/commitdiff
[dev.typeparams] cmd/compile/internal/types2: overlapping embedded interfaces require...
authorRobert Griesemer <gri@golang.org>
Wed, 10 Feb 2021 20:32:59 +0000 (12:32 -0800)
committerRobert Griesemer <gri@golang.org>
Wed, 10 Feb 2021 22:35:14 +0000 (22:35 +0000)
Add respective check to type checker.
Enables another excluded test in test/run.go.

This CL completes the currently required checks for
language compatibility in types2.

Updates #31793.

Change-Id: Icececff9e6023d38f600c93bcb54cdcafcf501b9
Reviewed-on: https://go-review.googlesource.com/c/go/+/290911
Trust: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
src/cmd/compile/internal/types2/stdlib_test.go
src/cmd/compile/internal/types2/testdata/go1_13.src [new file with mode: 0644]
src/cmd/compile/internal/types2/typexpr.go
test/run.go

index 2949e230193593189d0dc2206066281a3487ba9c..0477e549983db4dfcafefbbcf8b0dd000b01e9bb 100644 (file)
@@ -192,7 +192,6 @@ func TestStdFixed(t *testing.T) {
                "issue22200b.go", // go/types does not have constraints on stack size
                "issue25507.go",  // go/types does not have constraints on stack size
                "issue20780.go",  // go/types does not have constraints on stack size
-               "issue34329.go",  // go/types does not have constraints on language level (-lang=go1.13) (see #31793)
                "issue42058a.go", // go/types does not have constraints on channel element size
                "issue42058b.go", // go/types does not have constraints on channel element size
                "bug251.go",      // issue #34333 which was exposed with fix for #34151
diff --git a/src/cmd/compile/internal/types2/testdata/go1_13.src b/src/cmd/compile/internal/types2/testdata/go1_13.src
new file mode 100644 (file)
index 0000000..93cb4c7
--- /dev/null
@@ -0,0 +1,21 @@
+// Copyright 2021 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Check Go language version-specific errors.
+
+package go1_13 // go1.13
+
+// interface embedding
+
+type I interface { m() }
+
+type _ interface {
+       m()
+       I // ERROR "duplicate method m"
+}
+
+type _ interface {
+       I
+       I // ERROR "duplicate method m"
+}
index b758c0f358b01852eb4e7a696c103fd5afe116f0..b67a35ed3056452ec241e1b040b1c92d05bba979 100644 (file)
@@ -943,9 +943,13 @@ func (check *Checker) completeInterface(pos syntax.Pos, ityp *Interface) {
                        check.errorf(pos, "duplicate method %s", m.name)
                        check.errorf(mpos[other.(*Func)], "\tother declaration of %s", m.name) // secondary error, \t indented
                default:
-                       // check method signatures after all types are computed (issue #33656)
+                       // We have a duplicate method name in an embedded (not explicitly declared) method.
+                       // Check method signatures after all types are computed (issue #33656).
+                       // If we're pre-go1.14 (overlapping embeddings are not permitted), report that
+                       // error here as well (even though we could do it eagerly) because it's the same
+                       // error message.
                        check.atEnd(func() {
-                               if !check.identical(m.typ, other.Type()) {
+                               if !check.allowVersion(m.pkg, 1, 14) || !check.identical(m.typ, other.Type()) {
                                        check.errorf(pos, "duplicate method %s", m.name)
                                        check.errorf(mpos[other.(*Func)], "\tother declaration of %s", m.name) // secondary error, \t indented
                                }
index b1d6fe241424c8b0870fcc45845da676da5c7f59..3ff5d9c1e03c7620dcf76e5774c5074006fb2a44 100644 (file)
@@ -1964,7 +1964,6 @@ var excluded = map[string]bool{
        "fixedbugs/issue28079b.go": true, // types2 reports follow-on errors
        "fixedbugs/issue28268.go":  true, // types2 reports follow-on errors
        "fixedbugs/issue33460.go":  true, // types2 reports alternative positions in separate error
-       "fixedbugs/issue34329.go":  true, // types2 is missing support for -lang flag
        "fixedbugs/issue41575.go":  true, // types2 reports alternative positions in separate error
        "fixedbugs/issue42058a.go": true, // types2 doesn't report "channel element type too large"
        "fixedbugs/issue42058b.go": true, // types2 doesn't report "channel element type too large"