mirror of
https://github.com/golang/go
synced 2024-11-08 05:56:12 -07:00
0e85fd7561
Similar to how we report initialization loops in initorder.go and type alias loops in typecheck.go, this CL updates align.go to warn about invalid recursive types. The code is based on the loop code from initorder.go, with minimal changes to adapt from detecting variable/function initialization loops to detecting type declaration loops. Thanks to Cuong Manh Le for investigating this, helping come up with test cases, and exploring solutions. Fixes #41575 Updates #41669. Change-Id: Idb2cb8c5e1d645e62900e178fcb50af33e1700a1 Reviewed-on: https://go-review.googlesource.com/c/go/+/258177 Run-TryBot: Matthew Dempsky <mdempsky@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Robert Griesemer <gri@golang.org> Reviewed-by: Cuong Manh Le <cuong.manhle.vn@gmail.com> Trust: Matthew Dempsky <mdempsky@google.com> Trust: Cuong Manh Le <cuong.manhle.vn@gmail.com>
28 lines
686 B
Go
28 lines
686 B
Go
// errorcheck
|
|
|
|
// Copyright 2009 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.
|
|
|
|
package main
|
|
|
|
type I1 interface{ I2 } // ERROR "interface"
|
|
type I2 int
|
|
|
|
type I3 interface{ int } // ERROR "interface"
|
|
|
|
type S struct {
|
|
x interface{ S } // ERROR "interface"
|
|
}
|
|
type I4 interface { // GC_ERROR "invalid recursive type I4\n\tLINE: I4 refers to\n\tLINE: I4$"
|
|
I4 // GCCGO_ERROR "interface"
|
|
}
|
|
|
|
type I5 interface { // GC_ERROR "invalid recursive type I5\n\tLINE: I5 refers to\n\tLINE+4: I6 refers to\n\tLINE: I5$"
|
|
I6 // GCCGO_ERROR "interface"
|
|
}
|
|
|
|
type I6 interface {
|
|
I5 // GCCGO_ERROR "interface"
|
|
}
|