Triaged and adjusted more test/fixedbugs/* tests.
Change-Id: I80b9ead2445bb8d126b7d79db4bea9ddcb225a84
Reviewed-on: https://go-review.googlesource.com/c/go/+/276812
Trust: Robert Griesemer <gri@golang.org>
Run-TryBot: Robert Griesemer <gri@golang.org>
Reviewed-by: Robert Findley <rfindley@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
// cycle? That would be more consistent with other error messages.
i := firstInSrc(cycle)
obj := cycle[i]
- check.errorf(obj.Pos(), "illegal cycle in declaration of %s", obj.Name())
+ if check.conf.CompilerErrorMessages {
+ check.errorf(obj.Pos(), "invalid recursive type %s", obj.Name())
+ } else {
+ check.errorf(obj.Pos(), "illegal cycle in declaration of %s", obj.Name())
+ }
for range cycle {
check.errorf(obj.Pos(), "\t%s refers to", obj.Name()) // secondary error, \t indented
i++
func (check *Checker) op(m opPredicates, x *operand, op syntax.Operator) bool {
if pred := m[op]; pred != nil {
if !pred(x.typ) {
- check.invalidOpf(x, "operator %s not defined for %s", op, x)
+ if check.conf.CompilerErrorMessages {
+ check.invalidOpf(x, "operator %s not defined on %s", op, x)
+ } else {
+ check.invalidOpf(x, "operator %s not defined for %s", op, x)
+ }
return false
}
} else {
if x.isNil() {
typ = y.typ
}
- err = check.sprintf("operator %s not defined for %s", op, typ)
+ if check.conf.CompilerErrorMessages {
+ err = check.sprintf("operator %s not defined on %s", op, typ)
+ } else {
+ err = check.sprintf("operator %s not defined for %s", op, typ)
+ }
}
} else {
err = check.sprintf("mismatched types %s and %s", x.typ, y.typ)
}
i := fieldIndex(utyp.fields, check.pkg, key.Value)
if i < 0 {
- check.errorf(kv, "unknown field %s in struct literal", key.Value)
+ if check.conf.CompilerErrorMessages {
+ check.errorf(kv, "unknown field '%s' in struct literal of type %s", key.Value, base)
+ } else {
+ check.errorf(kv, "unknown field %s in struct literal", key.Value)
+ }
continue
}
fld := fields[i]
path := obj.imported.path
base := pkgName(path)
if obj.name == base {
- check.softErrorf(obj.pos, "%q imported but not used", path)
+ if check.conf.CompilerErrorMessages {
+ check.softErrorf(obj.pos, "%q imported and not used", path)
+ } else {
+ check.softErrorf(obj.pos, "%q imported but not used", path)
+ }
} else {
- check.softErrorf(obj.pos, "%q imported but not used as %s", path, obj.name)
+ if check.conf.CompilerErrorMessages {
+ check.softErrorf(obj.pos, "%q imported and not used as %s", path, obj.name)
+ } else {
+ check.softErrorf(obj.pos, "%q imported but not used as %s", path, obj.name)
+ }
}
}
}
// check use of dot-imported packages
for _, unusedDotImports := range check.unusedDotImports {
for pkg, pos := range unusedDotImports {
- check.softErrorf(pos, "%q imported but not used", pkg.path)
+ if check.conf.CompilerErrorMessages {
+ check.softErrorf(pos, "%q imported and not used", pkg.path)
+ } else {
+ check.softErrorf(pos, "%q imported but not used", pkg.path)
+ }
}
}
}
var m M
var f F
- _ = s == S(nil) // ERROR "compare.*to nil|operator \=\= not defined for ."
- _ = S(nil) == s // ERROR "compare.*to nil|operator \=\= not defined for ."
+ _ = s == S(nil) // ERROR "compare.*to nil|operator \=\= not defined for .|cannot compare"
+ _ = S(nil) == s // ERROR "compare.*to nil|operator \=\= not defined for .|cannot compare"
switch s {
- case S(nil): // ERROR "compare.*to nil|operator \=\= not defined for ."
+ case S(nil): // ERROR "compare.*to nil|operator \=\= not defined for .|cannot compare"
}
- _ = m == M(nil) // ERROR "compare.*to nil|operator \=\= not defined for ."
- _ = M(nil) == m // ERROR "compare.*to nil|operator \=\= not defined for ."
+ _ = m == M(nil) // ERROR "compare.*to nil|operator \=\= not defined for .|cannot compare"
+ _ = M(nil) == m // ERROR "compare.*to nil|operator \=\= not defined for .|cannot compare"
switch m {
- case M(nil): // ERROR "compare.*to nil|operator \=\= not defined for ."
+ case M(nil): // ERROR "compare.*to nil|operator \=\= not defined for .|cannot compare"
}
- _ = f == F(nil) // ERROR "compare.*to nil|operator \=\= not defined for ."
- _ = F(nil) == f // ERROR "compare.*to nil|operator \=\= not defined for ."
+ _ = f == F(nil) // ERROR "compare.*to nil|operator \=\= not defined for .|cannot compare"
+ _ = F(nil) == f // ERROR "compare.*to nil|operator \=\= not defined for .|cannot compare"
switch f {
- case F(nil): // ERROR "compare.*to nil|operator \=\= not defined for ."
+ case F(nil): // ERROR "compare.*to nil|operator \=\= not defined for .|cannot compare"
}
}
package p
-type F func(b T) // ERROR "T is not a type"
+type F func(b T) // ERROR "T .*is not a type"
func T(fn F) {
func() {
// TODO(mdempsky): This should be an error, but this error is
// nonsense. The error should actually mention that there's a
// type loop.
- Fn(A.Fn) // ERROR "type A has no method Fn"
+ Fn(A.Fn) // ERROR "type A has no method Fn|A.Fn undefined"
}
func g() {}
func f() {
- g()[:] // ERROR "g.. used as value"
+ g()[:] // ERROR "g.* used as value"
}
func g2() ([]byte, []byte) { return nil, nil }
func f2() {
- g2()[:] // ERROR "multiple-value g2.. in single-value context"
+ g2()[:] // ERROR "multiple-value g2.. in single-value context|2-valued g"
}
var (
y = T{"stare"}
- w = T{_: "look"} // ERROR "invalid field name _ in struct initializer"
+ w = T{_: "look"} // ERROR "invalid field name _ in struct initializer|unknown field '_' in struct literal of type T"
_ = T{"page"}
- _ = T{_: "out"} // ERROR "invalid field name _ in struct initializer"
+ _ = T{_: "out"} // ERROR "invalid field name _ in struct initializer|unknown field '_' in struct literal of type T"
)
func bad() {
- var z = T{_: "verse"} // ERROR "invalid field name _ in struct initializer"
+ var z = T{_: "verse"} // ERROR "invalid field name _ in struct initializer|unknown field '_' in struct literal of type T"
_ = z
- _ = T{_: "itinerary"} // ERROR "invalid field name _ in struct initializer"
+ _ = T{_: "itinerary"} // ERROR "invalid field name _ in struct initializer|unknown field '_' in struct literal of type T"
}
} else {
return true
}
-} // ERROR "missing return at end of function"
+} // ERROR "missing return( at end of function)?"
}
func a() {
- _ = T // ERROR "type T is not an expression"
+ _ = T // ERROR "type T is not an expression|T \(type\) is not an expression"
}
func b() {
package issue19947
-var _ = float32(1) * 1e200 // ERROR "constant 1e\+200 overflows float32"
-var _ = float64(1) * 1e500 // ERROR "constant 1e\+500 overflows float64"
+var _ = float32(1) * 1e200 // ERROR "constant 1e\+200 overflows float32|1e200 .* overflows float32"
+var _ = float64(1) * 1e500 // ERROR "constant 1e\+500 overflows float64|1e500 .* overflows float64"
-var _ = complex64(1) * 1e200 // ERROR "constant 1e\+200 overflows complex64"
-var _ = complex128(1) * 1e500 // ERROR "constant 1e\+500 overflows complex128"
+var _ = complex64(1) * 1e200 // ERROR "constant 1e\+200 overflows complex64|1e200 .* overflows complex64"
+var _ = complex128(1) * 1e500 // ERROR "constant 1e\+500 overflows complex128|1e500 .* overflows complex128"
package p
func F() {
- switch t := nil.(type) { // ERROR "cannot type switch on non-interface value nil"
+ switch t := nil.(type) { // ERROR "cannot type switch on non-interface value nil|not an interface"
default:
_ = t
}
const x = 1
func G() {
- switch t := x.(type) { // ERROR "cannot type switch on non-interface value x \(type untyped int\)"
+ switch t := x.(type) { // ERROR "cannot type switch on non-interface value x \(type untyped int\)|not an interface"
default:
}
}
package p
-var _ = 1 / 1e-600000000i // ERROR "complex division by zero"
-var _ = 1i / 1e-600000000 // ERROR "complex division by zero"
-var _ = 1i / 1e-600000000i // ERROR "complex division by zero"
+var _ = 1 / 1e-600000000i // ERROR "(complex )?division by zero"
+var _ = 1i / 1e-600000000 // ERROR "(complex )?division by zero"
+var _ = 1i / 1e-600000000i // ERROR "(complex )?division by zero"
-var _ = 1 / (1e-600000000 + 1e-600000000i) // ERROR "complex division by zero"
-var _ = 1i / (1e-600000000 + 1e-600000000i) // ERROR "complex division by zero"
+var _ = 1 / (1e-600000000 + 1e-600000000i) // ERROR "(complex )?division by zero"
+var _ = 1i / (1e-600000000 + 1e-600000000i) // ERROR "(complex )?division by zero"
// 1
var f byte
-var f interface{} // ERROR "previous declaration at issue20415.go:12"
+var f interface{} // ERROR "previous declaration at issue20415.go:12|f redeclared"
func _(f int) {
}
func _(g int) {
}
-var g interface{} // ERROR "previous declaration at issue20415.go:20"
+var g interface{} // ERROR "previous declaration at issue20415.go:20|g redeclared"
// 3
func _(h int) {
var h byte
-var h interface{} // ERROR "previous declaration at issue20415.go:31"
+var h interface{} // ERROR "previous declaration at issue20415.go:31|h redeclared"
// Verify that the compiler complains even if the array
// has length 0.
var a [0]int
-var _ = a[2:] // ERROR "invalid slice index 2"
+var _ = a[2:] // ERROR "invalid slice index 2|index 2 out of bounds"
var b [1]int
-var _ = b[2:] // ERROR "invalid slice index 2"
+var _ = b[2:] // ERROR "invalid slice index 2|index 2 out of bounds"
func main() {
f := &Foo{}
- f.Call(func(f) {}) // ERROR "f is not a type"
+ f.Call(func(f) {}) // ERROR "f .*is not a type"
}
i1 := it{Floats: true}
if i1.floats { // ERROR "(type it .* field or method floats, but does have Floats)"
}
- i2 := &it{floats: false} // ERROR "(but does have Floats)"
- _ = &it{InneR: "foo"} // ERROR "(but does have inner)"
+ i2 := &it{floats: false} // ERROR "(but does have Floats)|unknown field"
+ _ = &it{InneR: "foo"} // ERROR "(but does have inner)|unknown field"
+ _ = i2
}
func F() {
slice := []int{1, 2, 3}
len := int(2)
- println(len(slice)) // ERROR "cannot call non-function len .type int., declared at"
+ println(len(slice)) // ERROR "cannot call non-function len .type int., declared at|cannot call non-function len"
+ _ = slice
}
import "bytes"
-type _ struct{ bytes.nonexist } // ERROR "unexported"
+type _ struct{ bytes.nonexist } // ERROR "unexported|undefined"
-type _ interface{ bytes.nonexist } // ERROR "unexported"
+type _ interface{ bytes.nonexist } // ERROR "unexported|undefined"
func main() {
var _ bytes.Buffer
- var _ bytes.buffer // ERROR "unexported"
+ var _ bytes.buffer // ERROR "unexported|undefined"
}
package p
-var a [len(a)]int // ERROR "\[len\(a\)\]int"
+var a [len(a)]int // ERROR "\[len\(a\)\]int|initialization loop"
}
var (
- _ = t2{t1f1: 600} // ERROR "cannot use promoted field t1.t1f1 in struct literal of type t2"
- _ = t3{t1f2: 800} // ERROR "cannot use promoted field t2.t1.t1f2 in struct literal of type t3"
- _ = t3{t2f1: 900} // ERROR "cannot use promoted field t2.t2f1 in struct literal of type t3"
+ _ = t2{t1f1: 600} // ERROR "cannot use promoted field t1.t1f1 in struct literal of type t2|unknown field"
+ _ = t3{t1f2: 800} // ERROR "cannot use promoted field t2.t1.t1f2 in struct literal of type t3|unknown field"
+ _ = t3{t2f1: 900} // ERROR "cannot use promoted field t2.t2f1 in struct literal of type t3|unknown field"
)
}
// BAD: type loop should mention I1; see also #41669
-type I2 interface { // ERROR "invalid recursive type I2\n\tLINE: I2 refers to\n\tLINE: I2$"
+type I2 interface { // ERROR "invalid recursive type I2\n\tLINE: I2 refers to\n\tLINE: I2$|invalid recursive type"
I1
}
func f(i interface{}) {
if x, ok := i.(type); ok { // ERROR "outside type switch"
+ _ = x
}
}
import "net/http"
var s = http.Server{}
-var _ = s.doneChan // ERROR "s.doneChan undefined .cannot refer to unexported field or method doneChan.$"
+var _ = s.doneChan // ERROR "s.doneChan undefined .cannot refer to unexported field or method doneChan.$|s.doneChan undefined"
var _ = s.DoneChan // ERROR "s.DoneChan undefined .type http.Server has no field or method DoneChan.$"
-var _ = http.Server{tlsConfig: nil} // ERROR "unknown field 'tlsConfig' in struct literal.+ .but does have TLSConfig.$"
+var _ = http.Server{tlsConfig: nil} // ERROR "unknown field 'tlsConfig' in struct literal.+ .but does have TLSConfig.$|unknown field 'tlsConfig'"
var _ = http.Server{DoneChan: nil} // ERROR "unknown field 'DoneChan' in struct literal of type http.Server$"
type foo struct {
bar int
}
-var _ = &foo{bAr: 10} // ERROR "unknown field 'bAr' in struct literal.+ .but does have bar.$"
+var _ = &foo{bAr: 10} // ERROR "unknown field 'bAr' in struct literal.+ .but does have bar.$|unknown field 'bAr'"
}
var (
- _ = t2{t1f1: 600} // ERROR "cannot use promoted field t1.t1f1 in struct literal of type t2"
- _ = t3{t1f2: 800} // ERROR "cannot use promoted field t2.t1.t1f2 in struct literal of type t3"
- _ = t3{t2f1: 900} // ERROR "cannot use promoted field t2.t2f1 in struct literal of type t3"
+ _ = t2{t1f1: 600} // ERROR "cannot use promoted field t1.t1f1 in struct literal of type t2|unknown field"
+ _ = t3{t1f2: 800} // ERROR "cannot use promoted field t2.t1.t1f2 in struct literal of type t3|unknown field"
+ _ = t3{t2f1: 900} // ERROR "cannot use promoted field t2.t2f1 in struct literal of type t3|unknown field"
)
package p
-var x int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values"
+var x int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|3\-valued"
func f() {
- var _ int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values"
- var a int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values"
- a = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values"
- b := three() // ERROR "assignment mismatch: 1 variable but three returns 3 values"
+ var _ int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|3\-valued"
+ var a int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|3\-valued"
+ a = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|cannot assign"
+ b := three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|cannot initialize"
_, _ = a, b
}
package main
-var a = twoResults() // ERROR "assignment mismatch: 1 variable but twoResults returns 2 values"
-var b, c, d = twoResults() // ERROR "assignment mismatch: 3 variables but twoResults returns 2 values"
-var e, f = oneResult() // ERROR "assignment mismatch: 2 variables but oneResult returns 1 values"
+var a = twoResults() // ERROR "assignment mismatch: 1 variable but twoResults returns 2 values|2\-valued"
+var b, c, d = twoResults() // ERROR "assignment mismatch: 3 variables but twoResults returns 2 values|cannot initialize"
+var e, f = oneResult() // ERROR "assignment mismatch: 2 variables but oneResult returns 1 values|cannot initialize"
func twoResults() (int, int) {
return 1, 2
import "unsafe"
func f() {
- _ = complex(1<<uintptr(unsafe.Pointer(nil)), 0) // ERROR "invalid operation: .*shift of type float64.*"
+ _ = complex(1<<uintptr(unsafe.Pointer(nil)), 0) // ERROR "invalid operation: .*shift of type float64.*|shifted operand .* must be integer"
}
package p
-func f(a, b, c, d ...int) {} // ERROR "non-final parameter a"
-func g(a ...int, b ...int) {} // ERROR "non-final parameter a"
-func h(...int, ...int, float32) {} // ERROR "non-final parameter"
+func f(a, b, c, d ...int) {} // ERROR "non-final parameter a|can only use ... with final parameter"
+func g(a ...int, b ...int) {} // ERROR "non-final parameter a|can only use ... with final parameter"
+func h(...int, ...int, float32) {} // ERROR "non-final parameter|can only use ... with final parameter"
-type a func(...float32, ...interface{}) // ERROR "non-final parameter"
+type a func(...float32, ...interface{}) // ERROR "non-final parameter|can only use ... with final parameter"
type b interface {
- f(...int, ...int) // ERROR "non-final parameter"
- g(a ...int, b ...int, c float32) // ERROR "non-final parameter a"
+ f(...int, ...int) // ERROR "non-final parameter|can only use ... with final parameter"
+ g(a ...int, b ...int, c float32) // ERROR "non-final parameter a|can only use ... with final parameter"
valid(...int)
}
package main
func main() {
- var c, d = 1, 2, 3 // ERROR "assignment mismatch: 2 variables but 3 values"
- var e, f, g = 1, 2 // ERROR "assignment mismatch: 3 variables but 2 values"
+ var c, d = 1, 2, 3 // ERROR "assignment mismatch: 2 variables but 3 values|extra init expr"
+ var e, f, g = 1, 2 // ERROR "assignment mismatch: 3 variables but 2 values|missing init expr"
+ _, _, _, _ = c, d, e, f
}
package main
func main() {
- var a, b = 1 // ERROR "assignment mismatch: 2 variables but 1 values"
- _ = 1, 2 // ERROR "assignment mismatch: 1 variables but 2 values"
- c, d := 1 // ERROR "assignment mismatch: 2 variables but 1 values"
- e, f := 1, 2, 3 // ERROR "assignment mismatch: 2 variables but 3 values"
+ var a, b = 1 // ERROR "assignment mismatch: 2 variables but 1 values|cannot initialize"
+ _ = 1, 2 // ERROR "assignment mismatch: 1 variables but 2 values|cannot assign"
+ c, d := 1 // ERROR "assignment mismatch: 2 variables but 1 values|cannot initialize"
+ e, f := 1, 2, 3 // ERROR "assignment mismatch: 2 variables but 3 values|cannot initialize"
+ _, _, _, _ = c, d, e, f
}
var s = []string{
1: "dup",
- 1: "dup", // ERROR "duplicate index in slice literal: 1"
+ 1: "dup", // ERROR "duplicate index in slice literal: 1|duplicate index 1 in array or slice literal"
}
_ = int(complex64(int(0)))
_ = float64(complex128(float64(0)))
- _ = int8(complex128(1000)) // ERROR "overflow"
+ _ = int8(complex128(1000)) // ERROR "overflow|cannot convert"
)
func f1() {
t{}.M() // ERROR "t{}.M undefined \(type t has no field or method M\)"
- t{x: 1}.M() // ERROR "t{...}.M undefined \(type t has no field or method M\)"
+ t{x: 1}.M() // ERROR "t{(...|…)}.M undefined \(type t has no field or method M\)"
}
func f2() (*t, error) {
var _ = []string{
"foo",
"bar",
- 20, // ERROR "cannot use|incompatible type"
+ 20, // ERROR "cannot use|incompatible type|cannot convert"
}
func main() {
_ = make(T, -1) // ERROR "negative"
- _ = make(T, 0.5) // ERROR "constant 0.5 truncated to integer|non-integer len argument"
+ _ = make(T, 0.5) // ERROR "constant 0.5 truncated to integer|non-integer len argument|truncated to int"
_ = make(T, 1.0) // ok
- _ = make(T, 1<<63) // ERROR "len argument too large"
- _ = make(T, 0, -1) // ERROR "negative cap"
- _ = make(T, 10, 0) // ERROR "len larger than cap"
+ _ = make(T, 1<<63) // ERROR "len argument too large|overflows int"
+ _ = make(T, 0, -1) // ERROR "negative cap|must not be negative"
+ _ = make(T, 10, 0) // ERROR "len larger than cap|length and capacity swapped"
}
package p
func f() [2]int {
- return [...]int{2: 0} // ERROR "cannot use \[\.\.\.\]int{...} \(type \[3\]int\)"
+ return [...]int{2: 0} // ERROR "cannot use \[\.\.\.\]int{...} \(type \[3\]int\)|cannot use"
}
func g() {
var x []int
- f(x, x...) // ERROR "have \(\[\]int, \.\.\.int\)"
+ f(x, x...) // ERROR "have \(\[\]int, \.\.\.int\)|too many arguments in call to f"
}
func f() {
var x *s
- _ = x == nil || len(x.slice) // ERROR "invalid operation: .+ \(operator \|\| not defined on int\)"
- _ = len(x.slice) || x == nil // ERROR "invalid operation: .+ \(operator \|\| not defined on int\)"
- _ = x == nil && len(x.slice) // ERROR "invalid operation: .+ \(operator && not defined on int\)"
- _ = len(x.slice) && x == nil // ERROR "invalid operation: .+ \(operator && not defined on int\)"
+ _ = x == nil || len(x.slice) // ERROR "invalid operation: .+ \(operator \|\| not defined on int\)|cannot convert x == nil"
+ _ = len(x.slice) || x == nil // ERROR "invalid operation: .+ \(operator \|\| not defined on int\)|cannot convert x == nil"
+ _ = x == nil && len(x.slice) // ERROR "invalid operation: .+ \(operator && not defined on int\)|cannot convert x == nil"
+ _ = len(x.slice) && x == nil // ERROR "invalid operation: .+ \(operator && not defined on int\)|cannot convert x == nil"
}
package main
func foo() (int, int) {
- return 2.3 // ERROR "not enough arguments to return\n\thave \(number\)\n\twant \(int, int\)"
+ return 2.3 // ERROR "not enough arguments to return\n\thave \(number\)\n\twant \(int, int\)|wrong number of return values"
}
func foo2() {
- return int(2), 2 // ERROR "too many arguments to return\n\thave \(int, number\)\n\twant \(\)"
+ return int(2), 2 // ERROR "too many arguments to return\n\thave \(int, number\)\n\twant \(\)|no result values expected"
}
func foo3(v int) (a, b, c, d int) {
if v >= 0 {
- return 1 // ERROR "not enough arguments to return\n\thave \(number\)\n\twant \(int, int, int, int\)"
+ return 1 // ERROR "not enough arguments to return\n\thave \(number\)\n\twant \(int, int, int, int\)|wrong number of return values"
}
- return 2, 3 // ERROR "not enough arguments to return\n\thave \(number, number\)\n\twant \(int, int, int, int\)"
+ return 2, 3 // ERROR "not enough arguments to return\n\thave \(number, number\)\n\twant \(int, int, int, int\)|wrong number of return values"
}
func foo4(name string) (string, int) {
switch name {
case "cow":
- return "moo" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(string, int\)"
+ return "moo" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(string, int\)|wrong number of return values"
case "dog":
- return "dog", 10, true // ERROR "too many arguments to return\n\thave \(string, number, bool\)\n\twant \(string, int\)"
+ return "dog", 10, true // ERROR "too many arguments to return\n\thave \(string, number, bool\)\n\twant \(string, int\)|wrong number of return values"
case "fish":
- return "" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(string, int\)"
+ return "" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(string, int\)|wrong number of return values"
default:
return "lizard", 10
}
func foo5() (S, T, U) {
if false {
- return "" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(S, T, U\)"
+ return "" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(S, T, U\)|wrong number of return values"
} else {
ptr := new(T)
- return ptr // ERROR "not enough arguments to return\n\thave \(\*T\)\n\twant \(S, T, U\)"
+ return ptr // ERROR "not enough arguments to return\n\thave \(\*T\)\n\twant \(S, T, U\)|wrong number of return values"
}
- return new(S), 12.34, 1 + 0i, 'r', true // ERROR "too many arguments to return\n\thave \(\*S, number, number, number, bool\)\n\twant \(S, T, U\)"
+ return new(S), 12.34, 1 + 0i, 'r', true // ERROR "too many arguments to return\n\thave \(\*S, number, number, number, bool\)\n\twant \(S, T, U\)|wrong number of return values"
}
func foo6() (T, string) {
- return "T", true, true // ERROR "too many arguments to return\n\thave \(string, bool, bool\)\n\twant \(T, string\)"
+ return "T", true, true // ERROR "too many arguments to return\n\thave \(string, bool, bool\)\n\twant \(T, string\)|wrong number of return values"
}
package p
func F1(s []byte) []byte {
- return s[2:1] // ERROR "invalid slice index|inverted slice range"
+ return s[2:1] // ERROR "invalid slice index|inverted slice range|invalid slice indices"
}
func F2(a [10]byte) []byte {
- return a[2:1] // ERROR "invalid slice index|inverted slice range"
+ return a[2:1] // ERROR "invalid slice index|inverted slice range|invalid slice indices"
}
func F3(s string) string {
- return s[2:1] // ERROR "invalid slice index|inverted slice range"
+ return s[2:1] // ERROR "invalid slice index|inverted slice range|invalid slice indices"
}
func main() {
av := a{};
- _ = *a(av); // ERROR "invalid indirect|expected pointer"
+ _ = *a(av); // ERROR "invalid indirect|expected pointer|cannot indirect"
}
func main() {
av := T{}
pav := &av
- (**T).foo(&pav) // ERROR "no method foo|requires named type or pointer to named"
+ (**T).foo(&pav) // ERROR "no method foo|requires named type or pointer to named|undefined"
}
switch (i.(type)) { // ERROR "outside type switch"
default:
}
+ _ = i
}
package p
-import init "fmt" // ERROR "cannot import package as init"
+import init "fmt" // ERROR "cannot import package as init|cannot declare init"
var t T
var p *T
-const N1 = unsafe.Offsetof(t.X) // ERROR "indirection"
-const N2 = unsafe.Offsetof(p.X) // ERROR "indirection"
+const N1 = unsafe.Offsetof(t.X) // ERROR "indirection|field X is embedded via a pointer in T"
+const N2 = unsafe.Offsetof(p.X) // ERROR "indirection|field X is embedded via a pointer in T"
const N3 = unsafe.Offsetof(t.B.X) // valid
const N4 = unsafe.Offsetof(p.B.X) // valid
const N5 = unsafe.Offsetof(t.Method) // ERROR "method value"
for _, pattern := range []string{
"-+",
"-0",
+ "-e=0",
"-m",
"-live",
+ "-std",
"wb",
"append",
"slice",
"switch7.go": true,
"typecheck.go": true, // invalid function is not causing errors when called
- "fixedbugs/bug163.go": true,
- "fixedbugs/bug176.go": true,
- "fixedbugs/bug192.go": true,
- "fixedbugs/bug193.go": true,
- "fixedbugs/bug195.go": true,
- "fixedbugs/bug213.go": true,
- "fixedbugs/bug228.go": true,
- "fixedbugs/bug229.go": true,
- "fixedbugs/bug231.go": true,
- "fixedbugs/bug251.go": true,
- "fixedbugs/bug255.go": true,
- "fixedbugs/bug256.go": true,
- "fixedbugs/bug325.go": true,
- "fixedbugs/bug326.go": true,
- "fixedbugs/bug340.go": true,
- "fixedbugs/bug342.go": true,
- "fixedbugs/bug350.go": true,
- "fixedbugs/bug351.go": true,
- "fixedbugs/bug353.go": true,
- "fixedbugs/bug357.go": true,
- "fixedbugs/bug362.go": true,
- "fixedbugs/bug371.go": true,
- "fixedbugs/bug374.go": true,
- "fixedbugs/bug379.go": true,
- "fixedbugs/bug383.go": true,
- "fixedbugs/bug385_64.go": true,
- "fixedbugs/bug386.go": true,
- "fixedbugs/bug388.go": true,
- "fixedbugs/bug389.go": true,
- "fixedbugs/bug390.go": true,
- "fixedbugs/bug397.go": true,
- "fixedbugs/bug412.go": true,
- "fixedbugs/bug413.go": true,
- "fixedbugs/bug416.go": true,
- "fixedbugs/bug418.go": true,
- "fixedbugs/bug459.go": true,
- "fixedbugs/bug462.go": true,
- "fixedbugs/bug463.go": true,
- "fixedbugs/bug487.go": true,
- "fixedbugs/issue11362.go": true,
- "fixedbugs/issue11590.go": true,
- "fixedbugs/issue11610.go": true,
+ "fixedbugs/bug163.go": true,
+ "fixedbugs/bug176.go": true,
+ "fixedbugs/bug192.go": true,
+ "fixedbugs/bug193.go": true,
+ "fixedbugs/bug195.go": true,
+ "fixedbugs/bug213.go": true,
+ "fixedbugs/bug228.go": true,
+ "fixedbugs/bug229.go": true,
+ "fixedbugs/bug231.go": true,
+ "fixedbugs/bug251.go": true,
+ "fixedbugs/bug255.go": true,
+ "fixedbugs/bug256.go": true,
+ "fixedbugs/bug325.go": true,
+ "fixedbugs/bug326.go": true,
+ "fixedbugs/bug340.go": true,
+ "fixedbugs/bug342.go": true,
+ "fixedbugs/bug350.go": true,
+ "fixedbugs/bug351.go": true,
+ "fixedbugs/bug353.go": true,
+ "fixedbugs/bug357.go": true,
+ "fixedbugs/bug362.go": true,
+ "fixedbugs/bug371.go": true,
+ "fixedbugs/bug374.go": true,
+ "fixedbugs/bug379.go": true,
+ "fixedbugs/bug383.go": true,
+ "fixedbugs/bug385_64.go": true,
+ "fixedbugs/bug386.go": true,
+ "fixedbugs/bug388.go": true,
+ "fixedbugs/bug389.go": true,
+ "fixedbugs/bug390.go": true,
+ "fixedbugs/bug397.go": true,
+ "fixedbugs/bug412.go": true,
+ "fixedbugs/bug413.go": true,
+ "fixedbugs/bug416.go": true,
+ "fixedbugs/bug418.go": true,
+ "fixedbugs/bug459.go": true,
+ "fixedbugs/bug462.go": true,
+ "fixedbugs/bug463.go": true,
+ "fixedbugs/bug487.go": true,
+
+ "fixedbugs/issue11362.go": true, // types2 import path handling
+ "fixedbugs/issue11590.go": true, // types2 doesn't report a follow-on error (pref: types2)
+ "fixedbugs/issue11610.go": true, // types2 not run after syntax errors
"fixedbugs/issue11614.go": true, // types2 reports an extra error
"fixedbugs/issue13415.go": true, // declared but not used conflict
"fixedbugs/issue14520.go": true, // missing import path error by types2
"fixedbugs/issue14540.go": true, // types2 is missing a fallthrough error
"fixedbugs/issue16428.go": true, // types2 reports two instead of one error
- "fixedbugs/issue17038.go": true,
- "fixedbugs/issue17588.go": true,
- "fixedbugs/issue17631.go": true,
- "fixedbugs/issue17645.go": true,
- "fixedbugs/issue18331.go": true,
- "fixedbugs/issue18392.go": true,
- "fixedbugs/issue18393.go": true,
- "fixedbugs/issue19012.go": true,
- "fixedbugs/issue19323.go": true,
- "fixedbugs/issue19482.go": true,
- "fixedbugs/issue19699b.go": true,
- "fixedbugs/issue19880.go": true,
- "fixedbugs/issue19947.go": true,
- "fixedbugs/issue20185.go": true,
- "fixedbugs/issue20227.go": true,
- "fixedbugs/issue20233.go": true,
- "fixedbugs/issue20245.go": true,
- "fixedbugs/issue20298.go": true,
- "fixedbugs/issue20415.go": true,
- "fixedbugs/issue20529.go": true,
- "fixedbugs/issue20749.go": true,
- "fixedbugs/issue20780.go": true,
- "fixedbugs/issue21273.go": true,
- "fixedbugs/issue21882.go": true,
- "fixedbugs/issue21979.go": true,
- "fixedbugs/issue22200.go": true,
- "fixedbugs/issue22200b.go": true,
- "fixedbugs/issue22389.go": true,
- "fixedbugs/issue22794.go": true,
- "fixedbugs/issue22822.go": true,
- "fixedbugs/issue22904.go": true,
- "fixedbugs/issue22921.go": true,
- "fixedbugs/issue23093.go": true,
- "fixedbugs/issue23094.go": true,
- "fixedbugs/issue23609.go": true,
- "fixedbugs/issue23732.go": true,
- "fixedbugs/issue23823.go": true,
- "fixedbugs/issue24339.go": true,
- "fixedbugs/issue24470.go": true,
- "fixedbugs/issue25507.go": true,
- "fixedbugs/issue25727.go": true,
- "fixedbugs/issue25958.go": true,
- "fixedbugs/issue26416.go": true,
- "fixedbugs/issue26616.go": true,
- "fixedbugs/issue27595.go": true,
- "fixedbugs/issue28079b.go": true,
- "fixedbugs/issue28079c.go": true,
- "fixedbugs/issue28268.go": true,
- "fixedbugs/issue28450.go": true,
- "fixedbugs/issue29855.go": true,
- "fixedbugs/issue30085.go": true,
- "fixedbugs/issue30087.go": true,
- "fixedbugs/issue31747.go": true,
- "fixedbugs/issue32133.go": true,
- "fixedbugs/issue32723.go": true,
- "fixedbugs/issue33460.go": true,
- "fixedbugs/issue34329.go": true,
- "fixedbugs/issue35291.go": true,
- "fixedbugs/issue38117.go": true,
- "fixedbugs/issue38745.go": true,
- "fixedbugs/issue3925.go": true,
- "fixedbugs/issue4085a.go": true,
- "fixedbugs/issue41247.go": true,
- "fixedbugs/issue41440.go": true,
- "fixedbugs/issue41500.go": true,
- "fixedbugs/issue41575.go": true,
- "fixedbugs/issue42058a.go": true,
- "fixedbugs/issue42058b.go": true,
- "fixedbugs/issue42075.go": true,
- "fixedbugs/issue4215.go": true,
- "fixedbugs/issue4232.go": true,
- "fixedbugs/issue4251.go": true,
- "fixedbugs/issue4429.go": true,
- "fixedbugs/issue4452.go": true,
- "fixedbugs/issue4458.go": true,
- "fixedbugs/issue4470.go": true,
- "fixedbugs/issue4517d.go": true,
- "fixedbugs/issue4847.go": true,
- "fixedbugs/issue4909a.go": true,
+ "fixedbugs/issue17038.go": true, // types2 doesn't report a follow-on error (pref: types2)
+ "fixedbugs/issue17645.go": true, // multiple errors on same line
+ "fixedbugs/issue18393.go": true, // types2 not run after syntax errors
+ "fixedbugs/issue19012.go": true, // multiple errors on same line
+ "fixedbugs/issue20233.go": true, // types2 reports two instead of one error (pref: compiler)
+ "fixedbugs/issue20245.go": true, // types2 reports two instead of one error (pref: compiler)
+ "fixedbugs/issue20529.go": true, // types2 doesn't produce "stack frame too large" error
+ "fixedbugs/issue20780.go": true, // types2 doesn't produce "stack frame too large" error
+ "fixedbugs/issue21979.go": true, // types2 doesn't report a follow-on error (pref: types2)
+ "fixedbugs/issue22200.go": true, // types2 doesn't produce "stack frame too large" error
+ "fixedbugs/issue22200b.go": true, // types2 doesn't produce "stack frame too large" error
+ "fixedbugs/issue23732.go": true, // types2 reports different (but ok) line numbers
+ "fixedbugs/issue24339.go": true, // types2 reports wrong line number
+ "fixedbugs/issue25507.go": true, // types2 doesn't produce "stack frame too large" error
+ "fixedbugs/issue25958.go": true, // types2 doesn't report a follow-on error (pref: types2)
+ "fixedbugs/issue28079b.go": true, // types2 reports follow-on errors
+ "fixedbugs/issue28268.go": true, // types2 reports follow-on errors
+ "fixedbugs/issue31747.go": true, // types2 is missing support for -lang flag
+ "fixedbugs/issue32133.go": true, // types2 line numbers off?
+ "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"
+ "fixedbugs/issue4232.go": true, // types2 reports (correct) extra errors
+ "fixedbugs/issue4452.go": true, // types2 reports (correct) extra errors
"fixedbugs/issue5609.go": true, // types2 needs a better error message
"fixedbugs/issue6500.go": true, // compiler -G is not reporting an error (but types2 does)
"fixedbugs/issue6889.go": true, // types2 can handle this without constant overflow
- "fixedbugs/issue7525.go": true, // init cycle error on different line - ok otherwise
- "fixedbugs/issue7525b.go": true, // init cycle error on different line - ok otherwise
- "fixedbugs/issue7525c.go": true, // init cycle error on different line - ok otherwise
- "fixedbugs/issue7525d.go": true, // init cycle error on different line - ok otherwise
- "fixedbugs/issue7525e.go": true, // init cycle error on different line - ok otherwise
- "fixedbugs/issue7742.go": true, // type-checking doesn't terminate
- "fixedbugs/issue7746.go": true, // type-checking doesn't terminate
+ "fixedbugs/issue7525.go": true, // types2 reports init cycle error on different line - ok otherwise
+ "fixedbugs/issue7525b.go": true, // types2 reports init cycle error on different line - ok otherwise
+ "fixedbugs/issue7525c.go": true, // types2 reports init cycle error on different line - ok otherwise
+ "fixedbugs/issue7525d.go": true, // types2 reports init cycle error on different line - ok otherwise
+ "fixedbugs/issue7525e.go": true, // types2 reports init cycle error on different line - ok otherwise
+ "fixedbugs/issue7742.go": true, // types2 type-checking doesn't terminate
+ "fixedbugs/issue7746.go": true, // types2 type-checking doesn't terminate
}