mirror of
https://github.com/golang/go.git
synced 2025-05-05 23:53:05 +00:00
cmd/compile: remove interfacecycles debug flag
Per the discussion on the issue, since no problems related to this appeared since Go 1.20, remove the ability to disable the check for anonymous interface cycles permanently. Adjust various tests accordingly. For #56103. Change-Id: Ica2b28752dca08934bbbc163a9b062ae1eb2a834 Reviewed-on: https://go-review.googlesource.com/c/go/+/550896 Run-TryBot: Robert Griesemer <gri@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
90daaa0576
commit
6fe0d3758b
@ -36,7 +36,6 @@ type DebugFlags struct {
|
|||||||
Gossahash string `help:"hash value for use in debugging the compiler"`
|
Gossahash string `help:"hash value for use in debugging the compiler"`
|
||||||
InlFuncsWithClosures int `help:"allow functions with closures to be inlined" concurrent:"ok"`
|
InlFuncsWithClosures int `help:"allow functions with closures to be inlined" concurrent:"ok"`
|
||||||
InlStaticInit int `help:"allow static initialization of inlined calls" concurrent:"ok"`
|
InlStaticInit int `help:"allow static initialization of inlined calls" concurrent:"ok"`
|
||||||
InterfaceCycles int `help:"allow anonymous interface cycles"`
|
|
||||||
Libfuzzer int `help:"enable coverage instrumentation for libfuzzer"`
|
Libfuzzer int `help:"enable coverage instrumentation for libfuzzer"`
|
||||||
LoopVar int `help:"shared (0, default), 1 (private loop variables), 2, private + log"`
|
LoopVar int `help:"shared (0, default), 1 (private loop variables), 2, private + log"`
|
||||||
LoopVarHash string `help:"for debugging changes in loop behavior. Overrides experiment and loopvar flag."`
|
LoopVarHash string `help:"for debugging changes in loop behavior. Overrides experiment and loopvar flag."`
|
||||||
|
@ -92,7 +92,7 @@ func checkFiles(m posMap, noders []*noder) (*types2.Package, *types2.Info) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check for anonymous interface cycles (#56103).
|
// Check for anonymous interface cycles (#56103).
|
||||||
if base.Debug.InterfaceCycles == 0 {
|
// TODO(gri) move this code into the type checkers (types2 and go/types)
|
||||||
var f cycleFinder
|
var f cycleFinder
|
||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
syntax.Inspect(file, func(n syntax.Node) bool {
|
syntax.Inspect(file, func(n syntax.Node) bool {
|
||||||
@ -109,7 +109,6 @@ func checkFiles(m posMap, noders []*noder) (*types2.Package, *types2.Info) {
|
|||||||
return true
|
return true
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
|
||||||
base.ExitIfErrors()
|
base.ExitIfErrors()
|
||||||
|
|
||||||
// Implementation restriction: we don't allow not-in-heap types to
|
// Implementation restriction: we don't allow not-in-heap types to
|
||||||
|
@ -311,6 +311,7 @@ func TestStdFixed(t *testing.T) {
|
|||||||
|
|
||||||
testTestDir(t, filepath.Join(testenv.GOROOT(t), "test", "fixedbugs"),
|
testTestDir(t, filepath.Join(testenv.GOROOT(t), "test", "fixedbugs"),
|
||||||
"bug248.go", "bug302.go", "bug369.go", // complex test instructions - ignore
|
"bug248.go", "bug302.go", "bug369.go", // complex test instructions - ignore
|
||||||
|
"bug398.go", // types2 doesn't check for anonymous interface cycles (go.dev/issue/56103)
|
||||||
"issue6889.go", // gc-specific test
|
"issue6889.go", // gc-specific test
|
||||||
"issue11362.go", // canonical import path check
|
"issue11362.go", // canonical import path check
|
||||||
"issue16369.go", // types2 handles this correctly - not an issue
|
"issue16369.go", // types2 handles this correctly - not an issue
|
||||||
|
@ -312,6 +312,7 @@ func TestStdFixed(t *testing.T) {
|
|||||||
|
|
||||||
testTestDir(t, filepath.Join(testenv.GOROOT(t), "test", "fixedbugs"),
|
testTestDir(t, filepath.Join(testenv.GOROOT(t), "test", "fixedbugs"),
|
||||||
"bug248.go", "bug302.go", "bug369.go", // complex test instructions - ignore
|
"bug248.go", "bug302.go", "bug369.go", // complex test instructions - ignore
|
||||||
|
"bug398.go", // go/types doesn't check for anonymous interface cycles (go.dev/issue/56103)
|
||||||
"issue6889.go", // gc-specific test
|
"issue6889.go", // gc-specific test
|
||||||
"issue11362.go", // canonical import path check
|
"issue11362.go", // canonical import path check
|
||||||
"issue16369.go", // go/types handles this correctly - not an issue
|
"issue16369.go", // go/types handles this correctly - not an issue
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// compile -d=interfacecycles
|
// errorcheck
|
||||||
|
|
||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
// Copyright 2012 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
@ -11,11 +11,11 @@ package p
|
|||||||
|
|
||||||
// exported interfaces
|
// exported interfaces
|
||||||
|
|
||||||
type I1 interface {
|
type I1 interface { // ERROR "invalid recursive type: anonymous interface refers to itself"
|
||||||
F() interface{I1}
|
F() interface{I1}
|
||||||
}
|
}
|
||||||
|
|
||||||
type I2 interface {
|
type I2 interface { // ERROR "invalid recursive type: anonymous interface refers to itself"
|
||||||
F() interface{I2}
|
F() interface{I2}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -28,11 +28,11 @@ func F() bool {
|
|||||||
|
|
||||||
// non-exported interfaces
|
// non-exported interfaces
|
||||||
|
|
||||||
type i1 interface {
|
type i1 interface { // ERROR "invalid recursive type: anonymous interface refers to itself"
|
||||||
F() interface{i1}
|
F() interface{i1}
|
||||||
}
|
}
|
||||||
|
|
||||||
type i2 interface {
|
type i2 interface { // ERROR "invalid recursive type: anonymous interface refers to itself"
|
||||||
F() interface{i2}
|
F() interface{i2}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// compile -d=interfacecycles
|
// errorcheck
|
||||||
|
|
||||||
// Copyright 2016 The Go Authors. All rights reserved.
|
// Copyright 2016 The Go Authors. All rights reserved.
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
package p
|
package p
|
||||||
|
|
||||||
type T interface {
|
type T interface { // ERROR "invalid recursive type: anonymous interface refers to itself"
|
||||||
M(interface {
|
M(interface {
|
||||||
T
|
T
|
||||||
})
|
})
|
||||||
|
Loading…
x
Reference in New Issue
Block a user