For #55326.
Change-Id: Ia3c1124305986dcd49ac769e700055b263cfbd59
Reviewed-on: https://go-review.googlesource.com/c/go/+/432615
Reviewed-by: Robert Findley <rfindley@google.com>
Auto-Submit: Robert Griesemer <gri@google.com>
Run-TryBot: Robert Griesemer <gri@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Robert Griesemer <gri@google.com>
func (check *Checker) reportCycle(cycle []Object) {
obj := cycle[0]
var err error_
- if check.conf.CompilerErrorMessages {
- err.errorf(obj, "initialization loop for %s", obj.Name())
- } else {
- err.errorf(obj, "initialization cycle for %s", obj.Name())
- }
+ err.errorf(obj, "initialization cycle for %s", obj.Name())
// subtle loop: print cycle[i] for i = 0, n-1, n-2, ... 1 for len(cycle) = n
for i := len(cycle) - 1; i >= 0; i-- {
err.errorf(obj, "%s refers to", obj.Name())
package main
var (
- a, b = f() // ERROR "initialization loop|depends upon itself|depend upon each other"
+ a, b = f() // ERROR "initialization cycle|depends upon itself|depend upon each other"
c = b // GCCGO_ERROR "depends upon itself|depend upon each other"
)
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// check that initialization loop is diagnosed
+// check that initialization cycle is diagnosed
// and that closure cannot be used to hide it.
// error message is not standard format, so no errchk above.
}
}
-var m = map[string]F{"f": f} // ERROR "initialization loop|depends upon itself|initialization cycle"
+var m = map[string]F{"f": f} // ERROR "initialization cycle|depends upon itself|initialization cycle"
func f(i int) int { return i }
-var i = func() int {a := f(i); return a}() // ERROR "initialization loop|depends upon itself"
+var i = func() int {a := f(i); return a}() // ERROR "initialization cycle|depends upon itself"
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// Issue 3890: missing detection of init loop involving
+// Issue 3890: missing detection of init cycle involving
// method calls in function bodies.
package flag
-var commandLine = NewFlagSet() // ERROR "loop|depends upon itself"
+var commandLine = NewFlagSet() // ERROR "initialization cycle|depends upon itself"
type FlagSet struct {
}
package main
-const a = a // ERROR "refers to itself|definition loop|initialization loop"
+const a = a // ERROR "refers to itself|definition loop|initialization cycle"
const (
X = A
- A = B // ERROR "refers to itself|definition loop|initialization loop"
+ A = B // ERROR "refers to itself|definition loop|initialization cycle"
B = D
C, D = 1, A
)
package p
-var f = func() { f() } // ERROR "initialization loop|initialization expression for .*f.* depends upon itself"
+var f = func() { f() } // ERROR "initialization cycle|initialization expression for .*f.* depends upon itself"
package p
-var a [len(a)]int // ERROR "\[len\(a\)\]int|initialization loop"
+var a [len(a)]int // ERROR "\[len\(a\)\]int|initialization cycle"
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
-// Issue 4847: initialization loop is not detected.
+// Issue 4847: initialization cycle is not detected.
package p
var foo = matcher(matchList)
-var matchAny = matcher(matchList) // ERROR "initialization loop|depends upon itself"
+var matchAny = matcher(matchList) // ERROR "initialization cycle|depends upon itself"
func matchAnyFn(s *S) (err E) { return matchAny(s) }
type S[T any] struct{}
-const c = unsafe.Sizeof(S[[c]byte]{}) // ERROR "initialization loop"
+const c = unsafe.Sizeof(S[[c]byte]{}) // ERROR "initialization cycle"
return 0
}
-var x = fx // ERROR "initialization loop|depends upon itself"
+var x = fx // ERROR "initialization cycle|depends upon itself"
return 0
}
-var x = fx() // ERROR "initialization loop|depends upon itself"
+var x = fx() // ERROR "initialization cycle|depends upon itself"
return 0
}
-var x = T.m // ERROR "initialization loop|depends upon itself"
+var x = T.m // ERROR "initialization cycle|depends upon itself"
return 0
}
-var x = T.m(0) // ERROR "initialization loop|depends upon itself"
+var x = T.m(0) // ERROR "initialization cycle|depends upon itself"
return 0
}
-var x = T(0).m // ERROR "initialization loop|depends upon itself"
+var x = T(0).m // ERROR "initialization cycle|depends upon itself"
return 0
}
-var x = T(0).m() // ERROR "initialization loop|depends upon itself"
+var x = T(0).m() // ERROR "initialization cycle|depends upon itself"
type E struct{ T }
-var x = E.m // ERROR "initialization loop|depends upon itself"
+var x = E.m // ERROR "initialization cycle|depends upon itself"
type E struct{ T }
-var x = E.m(E{0}) // ERROR "initialization loop|depends upon itself"
+var x = E.m(E{0}) // ERROR "initialization cycle|depends upon itself"
type E struct{ T }
-var x = E{}.m // ERROR "initialization loop|depends upon itself"
+var x = E{}.m // ERROR "initialization cycle|depends upon itself"
type E struct{ T }
-var x = E{}.m() // ERROR "initialization loop|depends upon itself"
+var x = E{}.m() // ERROR "initialization cycle|depends upon itself"
var (
t T
- x = t.m // ERROR "initialization loop|depends upon itself"
+ x = t.m // ERROR "initialization cycle|depends upon itself"
)
var (
t T
- x = t.m() // ERROR "initialization loop|depends upon itself"
+ x = t.m() // ERROR "initialization cycle|depends upon itself"
)
var (
t T
- x = f().m // ERROR "initialization loop|depends upon itself"
+ x = f().m // ERROR "initialization cycle|depends upon itself"
)
var (
t T
- x = f().m() // ERROR "initialization loop|depends upon itself"
+ x = f().m() // ERROR "initialization cycle|depends upon itself"
)
var (
e E
- x = e.m // ERROR "initialization loop|depends upon itself"
+ x = e.m // ERROR "initialization cycle|depends upon itself"
)
var (
e E
- x = e.m() // ERROR "initialization loop|depends upon itself"
+ x = e.m() // ERROR "initialization cycle|depends upon itself"
)
var (
e E
- x = g().m // ERROR "initialization loop|depends upon itself"
+ x = g().m // ERROR "initialization cycle|depends upon itself"
)
var (
e E
- x = g().m() // ERROR "initialization loop|depends upon itself"
+ x = g().m() // ERROR "initialization cycle|depends upon itself"
)
return 0
}
-var x = (*T).pm // ERROR "initialization loop|depends upon itself"
+var x = (*T).pm // ERROR "initialization cycle|depends upon itself"
return 0
}
-var x = (*T).pm(nil) // ERROR "initialization loop|depends upon itself"
+var x = (*T).pm(nil) // ERROR "initialization cycle|depends upon itself"
return 0
}
-var x = (*T)(nil).pm // ERROR "initialization loop|depends upon itself"
+var x = (*T)(nil).pm // ERROR "initialization cycle|depends upon itself"
return 0
}
-var x = (*T)(nil).pm() // ERROR "initialization loop|depends upon itself"
+var x = (*T)(nil).pm() // ERROR "initialization cycle|depends upon itself"
var (
p *T
- x = p.pm // ERROR "initialization loop|depends upon itself"
+ x = p.pm // ERROR "initialization cycle|depends upon itself"
)
var (
p *T
- x = p.pm() // ERROR "initialization loop|depends upon itself"
+ x = p.pm() // ERROR "initialization cycle|depends upon itself"
)
return nil
}
-var x = pf().pm // ERROR "initialization loop|depends upon itself"
+var x = pf().pm // ERROR "initialization cycle|depends upon itself"
return nil
}
-var x = pf().pm() // ERROR "initialization loop|depends upon itself"
+var x = pf().pm() // ERROR "initialization cycle|depends upon itself"
import "unsafe"
-var x struct { // GC_ERROR "initialization loop for x"
+var x struct { // GC_ERROR "initialization cycle for x"
a [unsafe.Sizeof(x.a)]int // GCCGO_ERROR "array bound|typechecking loop|invalid expression"
}
package main
-var y struct { // GC_ERROR "initialization loop for y"
+var y struct { // GC_ERROR "initialization cycle for y"
d [len(y.d)]int // GCCGO_ERROR "array bound|typechecking loop|invalid array"
}
package main
-var z struct { // GC_ERROR "initialization loop for z"
+var z struct { // GC_ERROR "initialization cycle for z"
e [cap(z.e)]int // GCCGO_ERROR "array bound|typechecking loop|invalid array"
}
import "unsafe"
-var x struct { // GC_ERROR "initialization loop for x"
+var x struct { // GC_ERROR "initialization cycle for x"
b [unsafe.Offsetof(x.b)]int // GCCGO_ERROR "array bound|typechecking loop|invalid array"
}
import "unsafe"
-var x struct { // GC_ERROR "initialization loop for x"
+var x struct { // GC_ERROR "initialization cycle for x"
c [unsafe.Alignof(x.c)]int // GCCGO_ERROR "array bound|typechecking loop|invalid array"
}
// and runs in a fraction of a second without it.
// 10 seconds (-t 10 above) should be plenty if the code is working.
-var x = f() + z() // ERROR "initialization loop"
+var x = f() + z() // ERROR "initialization cycle"
func f() int { return a1() + a2() + a3() + a4() + a5() + a6() + a7() }
func z() int { return x }
package main
-const A = 1 + B // ERROR "constant definition loop\n.*A uses B\n.*B uses C\n.*C uses A|initialization loop"
-const B = C - 1 // ERROR "constant definition loop\n.*B uses C\n.*C uses B|initialization loop"
+const A = 1 + B // ERROR "constant definition loop\n.*A uses B\n.*B uses C\n.*C uses A|initialization cycle"
+const B = C - 1 // ERROR "constant definition loop\n.*B uses C\n.*C uses B|initialization cycle"
const C = A + B + 1