mirror of
https://github.com/golang/go
synced 2024-11-11 18:31:38 -07:00
[dev.typeparams] test: finish triaging all outstanding failing tests
Also: Adjusted error patterns for passing test that have different error messages. Change-Id: I216294b4c4855aa93da22cdc3c0b3303e54a8420 Reviewed-on: https://go-review.googlesource.com/c/go/+/277994 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>
This commit is contained in:
parent
df58f3368e
commit
5aca6e7857
@ -17,8 +17,8 @@ var x2 string = string(1)
|
|||||||
var x3 = int(1.5) // ERROR "convert|truncate"
|
var x3 = int(1.5) // ERROR "convert|truncate"
|
||||||
var x4 int = int(1.5) // ERROR "convert|truncate"
|
var x4 int = int(1.5) // ERROR "convert|truncate"
|
||||||
var x5 = "a" + string(1)
|
var x5 = "a" + string(1)
|
||||||
var x6 = int(1e100) // ERROR "overflow"
|
var x6 = int(1e100) // ERROR "overflow|cannot convert"
|
||||||
var x7 = float32(1e1000) // ERROR "overflow"
|
var x7 = float32(1e1000) // ERROR "overflow|cannot convert"
|
||||||
|
|
||||||
// unsafe.Pointer can only convert to/from uintptr
|
// unsafe.Pointer can only convert to/from uintptr
|
||||||
var _ = string(unsafe.Pointer(uintptr(65))) // ERROR "convert|conversion"
|
var _ = string(unsafe.Pointer(uintptr(65))) // ERROR "convert|conversion"
|
||||||
@ -34,7 +34,7 @@ var bad4 = "a" + 1 // ERROR "literals|incompatible|convert|invalid"
|
|||||||
var bad5 = "a" + 'a' // ERROR "literals|incompatible|convert|invalid"
|
var bad5 = "a" + 'a' // ERROR "literals|incompatible|convert|invalid"
|
||||||
|
|
||||||
var bad6 int = 1.5 // ERROR "convert|truncate"
|
var bad6 int = 1.5 // ERROR "convert|truncate"
|
||||||
var bad7 int = 1e100 // ERROR "overflow"
|
var bad7 int = 1e100 // ERROR "overflow|truncated to int"
|
||||||
var bad8 float32 = 1e200 // ERROR "overflow"
|
var bad8 float32 = 1e200 // ERROR "overflow"
|
||||||
|
|
||||||
// but these implicit conversions are okay
|
// but these implicit conversions are okay
|
||||||
@ -48,8 +48,8 @@ var _ = []rune("abc")
|
|||||||
var _ = []byte("abc")
|
var _ = []byte("abc")
|
||||||
|
|
||||||
// implicit is not
|
// implicit is not
|
||||||
var _ []int = "abc" // ERROR "cannot use|incompatible|invalid"
|
var _ []int = "abc" // ERROR "cannot use|incompatible|invalid|cannot convert"
|
||||||
var _ []byte = "abc" // ERROR "cannot use|incompatible|invalid"
|
var _ []byte = "abc" // ERROR "cannot use|incompatible|invalid|cannot convert"
|
||||||
|
|
||||||
// named string is okay
|
// named string is okay
|
||||||
type Tstring string
|
type Tstring string
|
||||||
@ -70,5 +70,5 @@ var _ = Trune("abc") // ok
|
|||||||
var _ = Tbyte("abc") // ok
|
var _ = Tbyte("abc") // ok
|
||||||
|
|
||||||
// implicit is still not
|
// implicit is still not
|
||||||
var _ Trune = "abc" // ERROR "cannot use|incompatible|invalid"
|
var _ Trune = "abc" // ERROR "cannot use|incompatible|invalid|cannot convert"
|
||||||
var _ Tbyte = "abc" // ERROR "cannot use|incompatible|invalid"
|
var _ Tbyte = "abc" // ERROR "cannot use|incompatible|invalid|cannot convert"
|
||||||
|
@ -6,6 +6,4 @@
|
|||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
func main() {
|
var x⊛y int // ERROR "invalid character .* in identifier"
|
||||||
x⊛y := 1; // ERROR "identifier"
|
|
||||||
}
|
|
||||||
|
@ -8,4 +8,6 @@ package main
|
|||||||
|
|
||||||
import "fmt" // GCCGO_ERROR "previous"
|
import "fmt" // GCCGO_ERROR "previous"
|
||||||
|
|
||||||
var fmt int // ERROR "redecl|redefinition"
|
var _ = fmt.Println // avoid imported and not used error
|
||||||
|
|
||||||
|
var fmt int // ERROR "redecl|redefinition|fmt already declared"
|
||||||
|
@ -14,7 +14,7 @@ func main() {
|
|||||||
// make sure error mentions that
|
// make sure error mentions that
|
||||||
// name is unexported, not just "name not found".
|
// name is unexported, not just "name not found".
|
||||||
|
|
||||||
t.common.name = nil // ERROR "unexported"
|
t.common.name = nil // ERROR "unexported|undefined"
|
||||||
|
|
||||||
println(testing.anyLowercaseName("asdf")) // ERROR "unexported"
|
println(testing.anyLowercaseName("asdf")) // ERROR "unexported|undefined"
|
||||||
}
|
}
|
||||||
|
@ -10,6 +10,6 @@ import "unsafe"
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var x unsafe.Pointer
|
var x unsafe.Pointer
|
||||||
println(*x) // ERROR "invalid indirect.*unsafe.Pointer"
|
println(*x) // ERROR "invalid indirect.*unsafe.Pointer|cannot indirect"
|
||||||
var _ = (unsafe.Pointer)(nil).foo // ERROR "foo"
|
var _ = (unsafe.Pointer)(nil).foo // ERROR "foo"
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ func h() (_ int, _ error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func i() (int, error) {
|
func i() (int, error) {
|
||||||
return // ERROR "not enough arguments to return"
|
return // ERROR "not enough arguments to return|wrong number of return values"
|
||||||
}
|
}
|
||||||
|
|
||||||
func f1() (_ int, err error) {
|
func f1() (_ int, err error) {
|
||||||
|
@ -13,6 +13,6 @@ func main() {
|
|||||||
switch t := x.(type) {
|
switch t := x.(type) {
|
||||||
case 0: // ERROR "type"
|
case 0: // ERROR "type"
|
||||||
t.x = 1
|
t.x = 1
|
||||||
x.x = 1 // ERROR "type interface \{\}|reference to undefined field or method|interface with no methods"
|
x.x = 1 // ERROR "type interface \{\}|reference to undefined field or method|interface with no methods|undefined"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
package p
|
package p
|
||||||
|
|
||||||
type a interface {
|
type a interface {
|
||||||
foo(x int) (x int) // ERROR "duplicate argument|redefinition"
|
foo(x int) (x int) // ERROR "duplicate argument|redefinition|redeclared"
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -12,4 +12,4 @@ func (T) m() {} // GCCGO_ERROR "previous"
|
|||||||
func (T) m() {} // ERROR "T[.]m redeclared|redefinition"
|
func (T) m() {} // ERROR "T[.]m redeclared|redefinition"
|
||||||
|
|
||||||
func (*T) p() {} // GCCGO_ERROR "previous"
|
func (*T) p() {} // GCCGO_ERROR "previous"
|
||||||
func (*T) p() {} // ERROR "[(][*]T[)][.]p redeclared|redefinition"
|
func (*T) p() {} // ERROR "[(][*]T[)][.]p redeclared|redefinition|redeclared"
|
||||||
|
@ -15,7 +15,7 @@ func bla1() bool {
|
|||||||
|
|
||||||
func bla5() bool {
|
func bla5() bool {
|
||||||
_ = 1
|
_ = 1
|
||||||
false // ERROR "false evaluated but not used|value computed is not used"
|
false // ERROR "false evaluated but not used|value computed is not used|is not used"
|
||||||
_ = 2
|
_ = 2
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
var (
|
var (
|
||||||
a = iota // ERROR "undefined: iota|iota is only defined in const"
|
a = iota // ERROR "undefined: iota|iota is only defined in const|cannot use iota outside constant declaration"
|
||||||
b = iota // ERROR "undefined: iota|iota is only defined in const"
|
b = iota // ERROR "undefined: iota|iota is only defined in const|cannot use iota outside constant declaration"
|
||||||
c = iota // ERROR "undefined: iota|iota is only defined in const"
|
c = iota // ERROR "undefined: iota|iota is only defined in const|cannot use iota outside constant declaration"
|
||||||
)
|
)
|
||||||
|
@ -19,6 +19,6 @@ func main() {
|
|||||||
p.m()
|
p.m()
|
||||||
|
|
||||||
q := &p
|
q := &p
|
||||||
q.m() // ERROR "requires explicit dereference"
|
q.m() // ERROR "requires explicit dereference|undefined"
|
||||||
q.pm() // ERROR "requires explicit dereference"
|
q.pm() // ERROR "requires explicit dereference|undefined"
|
||||||
}
|
}
|
||||||
|
@ -14,5 +14,5 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
1 + 2 // ERROR "1 \+ 2 evaluated but not used|value computed is not used"
|
1 + 2 // ERROR "1 \+ 2 evaluated but not used|value computed is not used|is not used"
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,6 @@
|
|||||||
|
|
||||||
package main
|
package main
|
||||||
func main() {
|
func main() {
|
||||||
if 2e9 { } // ERROR "2e.09|expected bool"
|
if 2e9 { } // ERROR "2e.09|expected bool|non-boolean condition in if statement"
|
||||||
if 3.14+1i { } // ERROR "3.14 . 1i|expected bool"
|
if 3.14+1i { } // ERROR "3.14 . 1i|expected bool|non-boolean condition in if statement"
|
||||||
}
|
}
|
||||||
|
@ -7,6 +7,6 @@
|
|||||||
// Issue 2451, 2452
|
// Issue 2451, 2452
|
||||||
package foo
|
package foo
|
||||||
|
|
||||||
func f() error { return 0 } // ERROR "cannot use 0 .type int.|has no methods"
|
func f() error { return 0 } // ERROR "cannot use 0 (.type int.)?|has no methods"
|
||||||
|
|
||||||
func g() error { return -1 } // ERROR "cannot use -1 .type int.|has no methods"
|
func g() error { return -1 } // ERROR "cannot use -1 (.type int.)?|has no methods"
|
||||||
|
@ -9,4 +9,4 @@ package foo
|
|||||||
|
|
||||||
func fn(a float32) {}
|
func fn(a float32) {}
|
||||||
|
|
||||||
var f func(arg int) = fn // ERROR "cannot use fn .type func.float32.. as type func.int. in assignment|different parameter types"
|
var f func(arg int) = fn // ERROR "cannot use fn .type func.float32.. as type func.int. in assignment|different parameter types|incompatible type"
|
||||||
|
@ -12,5 +12,5 @@ import "unsafe"
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var x *int
|
var x *int
|
||||||
_ = unsafe.Pointer(x) - unsafe.Pointer(x) // ERROR "operator - not defined on unsafe.Pointer|expected integer, floating, or complex type"
|
_ = unsafe.Pointer(x) - unsafe.Pointer(x) // ERROR "(operator|operation) - not defined on unsafe.Pointer|expected integer, floating, or complex type"
|
||||||
}
|
}
|
||||||
|
@ -9,5 +9,5 @@ package main
|
|||||||
// Issue 2623
|
// Issue 2623
|
||||||
var m = map[string]int {
|
var m = map[string]int {
|
||||||
"abc":1,
|
"abc":1,
|
||||||
1:2, // ERROR "cannot use 1.*as type string in map key|incompatible type"
|
1:2, // ERROR "cannot use 1.*as type string in map key|incompatible type|cannot convert"
|
||||||
}
|
}
|
||||||
|
@ -10,4 +10,4 @@ type T struct {
|
|||||||
X int
|
X int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *T) X() {} // ERROR "type T has both field and method named X|redeclares struct field name"
|
func (t *T) X() {} // ERROR "type T has both field and method named X|redeclares struct field name|field and method with the same name"
|
||||||
|
@ -13,10 +13,10 @@ func Two() (a, b int)
|
|||||||
|
|
||||||
// F used to compile.
|
// F used to compile.
|
||||||
func F() (x interface{}, y int) {
|
func F() (x interface{}, y int) {
|
||||||
return Two(), 0 // ERROR "single-value context"
|
return Two(), 0 // ERROR "single-value context|2\-valued"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recursive used to trigger an internal compiler error.
|
// Recursive used to trigger an internal compiler error.
|
||||||
func Recursive() (x interface{}, y int) {
|
func Recursive() (x interface{}, y int) {
|
||||||
return Recursive(), 0 // ERROR "single-value context"
|
return Recursive(), 0 // ERROR "single-value context|2\-valued"
|
||||||
}
|
}
|
||||||
|
@ -8,12 +8,14 @@ package main
|
|||||||
|
|
||||||
import "os"
|
import "os"
|
||||||
|
|
||||||
|
var _ = os.Open // avoid imported and not used error
|
||||||
|
|
||||||
type T struct {
|
type T struct {
|
||||||
File int
|
File int
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
_ = T {
|
_ = T {
|
||||||
os.File: 1, // ERROR "unknown T? ?field"
|
os.File: 1, // ERROR "unknown T? ?field|invalid field"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -9,11 +9,11 @@
|
|||||||
|
|
||||||
package main
|
package main
|
||||||
|
|
||||||
const a = a // ERROR "refers to itself|definition loop"
|
const a = a // ERROR "refers to itself|definition loop|initialization loop"
|
||||||
|
|
||||||
const (
|
const (
|
||||||
X = A
|
X = A
|
||||||
A = B // ERROR "refers to itself|definition loop"
|
A = B // ERROR "refers to itself|definition loop|initialization loop"
|
||||||
B = D
|
B = D
|
||||||
C, D = 1, A
|
C, D = 1, A
|
||||||
)
|
)
|
||||||
|
@ -14,11 +14,11 @@ func G() (int, int, int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func F() {
|
func F() {
|
||||||
a, b := G() // ERROR "mismatch"
|
a, b := G() // ERROR "mismatch|cannot initialize"
|
||||||
a, b = G() // ERROR "mismatch"
|
a, b = G() // ERROR "mismatch|cannot assign"
|
||||||
_, _ = a, b
|
_, _ = a, b
|
||||||
}
|
}
|
||||||
|
|
||||||
func H() (int, int) {
|
func H() (int, int) {
|
||||||
return G() // ERROR "too many|mismatch"
|
return G() // ERROR "too many|mismatch|wrong number"
|
||||||
}
|
}
|
||||||
|
@ -15,14 +15,14 @@ type T chan byte
|
|||||||
var sink T
|
var sink T
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
sink = make(T, -1) // ERROR "negative buffer argument in make.*"
|
sink = make(T, -1) // ERROR "negative buffer argument in make.*|must not be negative"
|
||||||
sink = make(T, uint64(1<<63)) // ERROR "buffer argument too large in make.*"
|
sink = make(T, uint64(1<<63)) // ERROR "buffer argument too large in make.*|out of bounds"
|
||||||
|
|
||||||
sink = make(T, 0.5) // ERROR "constant 0.5 truncated to integer"
|
sink = make(T, 0.5) // ERROR "constant 0.5 truncated to integer|truncated to int"
|
||||||
sink = make(T, 1.0)
|
sink = make(T, 1.0)
|
||||||
sink = make(T, float32(1.0)) // ERROR "non-integer buffer argument in make.*"
|
sink = make(T, float32(1.0)) // ERROR "non-integer buffer argument in make.*|must be integer"
|
||||||
sink = make(T, float64(1.0)) // ERROR "non-integer buffer argument in make.*"
|
sink = make(T, float64(1.0)) // ERROR "non-integer buffer argument in make.*|must be integer"
|
||||||
sink = make(T, 1+0i)
|
sink = make(T, 1+0i)
|
||||||
sink = make(T, complex64(1+0i)) // ERROR "non-integer buffer argument in make.*"
|
sink = make(T, complex64(1+0i)) // ERROR "non-integer buffer argument in make.*|must be integer"
|
||||||
sink = make(T, complex128(1+0i)) // ERROR "non-integer buffer argument in make.*"
|
sink = make(T, complex128(1+0i)) // ERROR "non-integer buffer argument in make.*|must be integer"
|
||||||
}
|
}
|
||||||
|
@ -15,20 +15,20 @@ type T map[int]int
|
|||||||
var sink T
|
var sink T
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
sink = make(T, -1) // ERROR "negative size argument in make.*"
|
sink = make(T, -1) // ERROR "negative size argument in make.*|must not be negative"
|
||||||
sink = make(T, uint64(1<<63)) // ERROR "size argument too large in make.*"
|
sink = make(T, uint64(1<<63)) // ERROR "size argument too large in make.*|out of bounds"
|
||||||
|
|
||||||
// Test that errors are emitted at call sites, not const declarations
|
// Test that errors are emitted at call sites, not const declarations
|
||||||
const x = -1
|
const x = -1
|
||||||
sink = make(T, x) // ERROR "negative size argument in make.*"
|
sink = make(T, x) // ERROR "negative size argument in make.*|must not be negative"
|
||||||
const y = uint64(1 << 63)
|
const y = uint64(1 << 63)
|
||||||
sink = make(T, y) // ERROR "size argument too large in make.*"
|
sink = make(T, y) // ERROR "size argument too large in make.*|out of bounds"
|
||||||
|
|
||||||
sink = make(T, 0.5) // ERROR "constant 0.5 truncated to integer"
|
sink = make(T, 0.5) // ERROR "constant 0.5 truncated to integer|truncated to int"
|
||||||
sink = make(T, 1.0)
|
sink = make(T, 1.0)
|
||||||
sink = make(T, float32(1.0)) // ERROR "non-integer size argument in make.*"
|
sink = make(T, float32(1.0)) // ERROR "non-integer size argument in make.*|must be integer"
|
||||||
sink = make(T, float64(1.0)) // ERROR "non-integer size argument in make.*"
|
sink = make(T, float64(1.0)) // ERROR "non-integer size argument in make.*|must be integer"
|
||||||
sink = make(T, 1+0i)
|
sink = make(T, 1+0i)
|
||||||
sink = make(T, complex64(1+0i)) // ERROR "non-integer size argument in make.*"
|
sink = make(T, complex64(1+0i)) // ERROR "non-integer size argument in make.*|must be integer"
|
||||||
sink = make(T, complex128(1+0i)) // ERROR "non-integer size argument in make.*"
|
sink = make(T, complex128(1+0i)) // ERROR "non-integer size argument in make.*|must be integer"
|
||||||
}
|
}
|
||||||
|
76
test/run.go
76
test/run.go
@ -1926,68 +1926,34 @@ func overlayDir(dstRoot, srcRoot string) error {
|
|||||||
// List of files that the compiler cannot errorcheck with the new typechecker (compiler -G option).
|
// List of files that the compiler cannot errorcheck with the new typechecker (compiler -G option).
|
||||||
// Temporary scaffolding until we pass all the tests at which point this map can be removed.
|
// Temporary scaffolding until we pass all the tests at which point this map can be removed.
|
||||||
var excluded = map[string]bool{
|
var excluded = map[string]bool{
|
||||||
"complit1.go": true,
|
"complit1.go": true, // types2 reports extra errors
|
||||||
"const2.go": true,
|
"const2.go": true, // types2 not run after syntax errors
|
||||||
"convlit.go": true,
|
|
||||||
"ddd1.go": true, // issue #42987
|
"ddd1.go": true, // issue #42987
|
||||||
"directive.go": true, // misplaced compiler directive checks
|
"directive.go": true, // misplaced compiler directive checks
|
||||||
"float_lit3.go": true,
|
"float_lit3.go": true, // types2 reports extra errors
|
||||||
"import1.go": true,
|
"import1.go": true, // types2 reports extra errors
|
||||||
"import5.go": true, // issue #42988
|
"import5.go": true, // issue #42988
|
||||||
"import6.go": true,
|
"import6.go": true, // issue #43109
|
||||||
"initializerr.go": true,
|
"initializerr.go": true, // types2 reports extra errors
|
||||||
"linkname2.go": true,
|
"linkname2.go": true, // error reported by noder (not running for types2 errorcheck test)
|
||||||
"makechan.go": true,
|
|
||||||
"makemap.go": true,
|
|
||||||
"shift1.go": true, // issue #42989
|
"shift1.go": true, // issue #42989
|
||||||
"slice3err.go": true,
|
"switch3.go": true, // issue #43110
|
||||||
"switch3.go": true,
|
"switch4.go": true, // error reported by noder (not running for types2 errorcheck test)
|
||||||
"switch4.go": true,
|
|
||||||
"switch5.go": true,
|
|
||||||
"switch6.go": true,
|
|
||||||
"switch7.go": true,
|
|
||||||
"typecheck.go": true, // invalid function is not causing errors when called
|
"typecheck.go": true, // invalid function is not causing errors when called
|
||||||
|
|
||||||
"fixedbugs/bug163.go": true,
|
"fixedbugs/bug176.go": true, // types2 reports all errors (pref: types2)
|
||||||
"fixedbugs/bug176.go": true,
|
"fixedbugs/bug193.go": true, // types2 bug: shift error not reported (fixed in go/types)
|
||||||
"fixedbugs/bug192.go": true,
|
"fixedbugs/bug195.go": true, // types2 reports slightly different (but correct) bugs
|
||||||
"fixedbugs/bug193.go": true,
|
"fixedbugs/bug213.go": true, // error reported by noder (not running for types2 errorcheck test)
|
||||||
"fixedbugs/bug195.go": true,
|
"fixedbugs/bug228.go": true, // types2 not run after syntax errors
|
||||||
"fixedbugs/bug213.go": true,
|
"fixedbugs/bug231.go": true, // types2 bug? (same error reported twice)
|
||||||
"fixedbugs/bug228.go": true,
|
"fixedbugs/bug255.go": true, // types2 reports extra errors
|
||||||
"fixedbugs/bug229.go": true,
|
"fixedbugs/bug351.go": true, // types2 reports extra errors
|
||||||
"fixedbugs/bug231.go": true,
|
"fixedbugs/bug374.go": true, // types2 reports extra errors
|
||||||
"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_32.go": true, // types2 doesn't produce "stack frame too large" error (32-bit specific)
|
"fixedbugs/bug385_32.go": true, // types2 doesn't produce "stack frame too large" error (32-bit specific)
|
||||||
"fixedbugs/bug385_64.go": true, // types2 doesn't produce "stack frame too large" error
|
"fixedbugs/bug385_64.go": true, // types2 doesn't produce "stack frame too large" error
|
||||||
"fixedbugs/bug386.go": true,
|
"fixedbugs/bug388.go": true, // types2 not run due to syntax errors
|
||||||
"fixedbugs/bug388.go": true,
|
"fixedbugs/bug412.go": true, // types2 produces a follow-on error
|
||||||
"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/issue11362.go": true, // types2 import path handling
|
||||||
"fixedbugs/issue11590.go": true, // types2 doesn't report a follow-on error (pref: types2)
|
"fixedbugs/issue11590.go": true, // types2 doesn't report a follow-on error (pref: types2)
|
||||||
@ -1995,7 +1961,7 @@ var excluded = map[string]bool{
|
|||||||
"fixedbugs/issue11614.go": true, // types2 reports an extra error
|
"fixedbugs/issue11614.go": true, // types2 reports an extra error
|
||||||
"fixedbugs/issue13415.go": true, // declared but not used conflict
|
"fixedbugs/issue13415.go": true, // declared but not used conflict
|
||||||
"fixedbugs/issue14520.go": true, // missing import path error by types2
|
"fixedbugs/issue14520.go": true, // missing import path error by types2
|
||||||
"fixedbugs/issue14540.go": true, // types2 is missing a fallthrough error
|
"fixedbugs/issue14540.go": true, // error reported by noder (not running for types2 errorcheck test)
|
||||||
"fixedbugs/issue16428.go": true, // types2 reports two instead of one error
|
"fixedbugs/issue16428.go": true, // types2 reports two instead of one error
|
||||||
"fixedbugs/issue17038.go": true, // types2 doesn't report a follow-on error (pref: types2)
|
"fixedbugs/issue17038.go": true, // types2 doesn't report a follow-on error (pref: types2)
|
||||||
"fixedbugs/issue17645.go": true, // multiple errors on same line
|
"fixedbugs/issue17645.go": true, // multiple errors on same line
|
||||||
|
@ -17,12 +17,12 @@ func f() {
|
|||||||
_ = array[i:]
|
_ = array[i:]
|
||||||
_ = array[:j]
|
_ = array[:j]
|
||||||
_ = array[i:j]
|
_ = array[i:j]
|
||||||
_ = array[::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice"
|
_ = array[::] // ERROR "middle index required in 3-index slice|invalid slice indices" "final index required in 3-index slice"
|
||||||
_ = array[i::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice"
|
_ = array[i::] // ERROR "middle index required in 3-index slice|invalid slice indices" "final index required in 3-index slice"
|
||||||
_ = array[:j:] // ERROR "final index required in 3-index slice"
|
_ = array[:j:] // ERROR "final index required in 3-index slice|invalid slice indices"
|
||||||
_ = array[i:j:] // ERROR "final index required in 3-index slice"
|
_ = array[i:j:] // ERROR "final index required in 3-index slice|invalid slice indices"
|
||||||
_ = array[::k] // ERROR "middle index required in 3-index slice"
|
_ = array[::k] // ERROR "middle index required in 3-index slice|invalid slice indices"
|
||||||
_ = array[i::k] // ERROR "middle index required in 3-index slice"
|
_ = array[i::k] // ERROR "middle index required in 3-index slice|invalid slice indices"
|
||||||
_ = array[:j:k]
|
_ = array[:j:k]
|
||||||
_ = array[i:j:k]
|
_ = array[i:j:k]
|
||||||
|
|
||||||
@ -30,12 +30,12 @@ func f() {
|
|||||||
_ = slice[i:]
|
_ = slice[i:]
|
||||||
_ = slice[:j]
|
_ = slice[:j]
|
||||||
_ = slice[i:j]
|
_ = slice[i:j]
|
||||||
_ = slice[::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice"
|
_ = slice[::] // ERROR "middle index required in 3-index slice|invalid slice indices" "final index required in 3-index slice"
|
||||||
_ = slice[i::] // ERROR "middle index required in 3-index slice" "final index required in 3-index slice"
|
_ = slice[i::] // ERROR "middle index required in 3-index slice|invalid slice indices" "final index required in 3-index slice"
|
||||||
_ = slice[:j:] // ERROR "final index required in 3-index slice"
|
_ = slice[:j:] // ERROR "final index required in 3-index slice|invalid slice indices"
|
||||||
_ = slice[i:j:] // ERROR "final index required in 3-index slice"
|
_ = slice[i:j:] // ERROR "final index required in 3-index slice|invalid slice indices"
|
||||||
_ = slice[::k] // ERROR "middle index required in 3-index slice"
|
_ = slice[::k] // ERROR "middle index required in 3-index slice|invalid slice indices"
|
||||||
_ = slice[i::k] // ERROR "middle index required in 3-index slice"
|
_ = slice[i::k] // ERROR "middle index required in 3-index slice|invalid slice indices"
|
||||||
_ = slice[:j:k]
|
_ = slice[:j:k]
|
||||||
_ = slice[i:j:k]
|
_ = slice[i:j:k]
|
||||||
|
|
||||||
@ -54,43 +54,43 @@ func f() {
|
|||||||
|
|
||||||
// check invalid indices
|
// check invalid indices
|
||||||
_ = array[1:2]
|
_ = array[1:2]
|
||||||
_ = array[2:1] // ERROR "invalid slice index|inverted slice"
|
_ = array[2:1] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = array[2:2]
|
_ = array[2:2]
|
||||||
_ = array[i:1]
|
_ = array[i:1]
|
||||||
_ = array[1:j]
|
_ = array[1:j]
|
||||||
_ = array[1:2:3]
|
_ = array[1:2:3]
|
||||||
_ = array[1:3:2] // ERROR "invalid slice index|inverted slice"
|
_ = array[1:3:2] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = array[2:1:3] // ERROR "invalid slice index|inverted slice"
|
_ = array[2:1:3] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = array[2:3:1] // ERROR "invalid slice index|inverted slice"
|
_ = array[2:3:1] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = array[3:1:2] // ERROR "invalid slice index|inverted slice"
|
_ = array[3:1:2] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = array[3:2:1] // ERROR "invalid slice index|inverted slice"
|
_ = array[3:2:1] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = array[i:1:2]
|
_ = array[i:1:2]
|
||||||
_ = array[i:2:1] // ERROR "invalid slice index|inverted slice"
|
_ = array[i:2:1] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = array[1:j:2]
|
_ = array[1:j:2]
|
||||||
_ = array[2:j:1] // ERROR "invalid slice index"
|
_ = array[2:j:1] // ERROR "invalid slice index|invalid slice indices"
|
||||||
_ = array[1:2:k]
|
_ = array[1:2:k]
|
||||||
_ = array[2:1:k] // ERROR "invalid slice index|inverted slice"
|
_ = array[2:1:k] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
|
|
||||||
_ = slice[1:2]
|
_ = slice[1:2]
|
||||||
_ = slice[2:1] // ERROR "invalid slice index|inverted slice"
|
_ = slice[2:1] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = slice[2:2]
|
_ = slice[2:2]
|
||||||
_ = slice[i:1]
|
_ = slice[i:1]
|
||||||
_ = slice[1:j]
|
_ = slice[1:j]
|
||||||
_ = slice[1:2:3]
|
_ = slice[1:2:3]
|
||||||
_ = slice[1:3:2] // ERROR "invalid slice index|inverted slice"
|
_ = slice[1:3:2] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = slice[2:1:3] // ERROR "invalid slice index|inverted slice"
|
_ = slice[2:1:3] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = slice[2:3:1] // ERROR "invalid slice index|inverted slice"
|
_ = slice[2:3:1] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = slice[3:1:2] // ERROR "invalid slice index|inverted slice"
|
_ = slice[3:1:2] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = slice[3:2:1] // ERROR "invalid slice index|inverted slice"
|
_ = slice[3:2:1] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = slice[i:1:2]
|
_ = slice[i:1:2]
|
||||||
_ = slice[i:2:1] // ERROR "invalid slice index|inverted slice"
|
_ = slice[i:2:1] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = slice[1:j:2]
|
_ = slice[1:j:2]
|
||||||
_ = slice[2:j:1] // ERROR "invalid slice index"
|
_ = slice[2:j:1] // ERROR "invalid slice index|invalid slice indices"
|
||||||
_ = slice[1:2:k]
|
_ = slice[1:2:k]
|
||||||
_ = slice[2:1:k] // ERROR "invalid slice index|inverted slice"
|
_ = slice[2:1:k] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
|
|
||||||
_ = str[1:2]
|
_ = str[1:2]
|
||||||
_ = str[2:1] // ERROR "invalid slice index|inverted slice"
|
_ = str[2:1] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = str[2:2]
|
_ = str[2:2]
|
||||||
_ = str[i:1]
|
_ = str[i:1]
|
||||||
_ = str[1:j]
|
_ = str[1:j]
|
||||||
@ -115,7 +115,7 @@ func f() {
|
|||||||
_ = slice[1:11]
|
_ = slice[1:11]
|
||||||
_ = slice[1:11:12]
|
_ = slice[1:11:12]
|
||||||
_ = slice[1:2:11]
|
_ = slice[1:2:11]
|
||||||
_ = slice[1:11:3] // ERROR "invalid slice index"
|
_ = slice[1:11:3] // ERROR "invalid slice index|invalid slice indices"
|
||||||
_ = slice[11:2:3] // ERROR "invalid slice index|inverted slice"
|
_ = slice[11:2:3] // ERROR "invalid slice index|invalid slice indices|inverted slice"
|
||||||
_ = slice[11:12:13]
|
_ = slice[11:12:13]
|
||||||
}
|
}
|
||||||
|
@ -12,41 +12,41 @@ package main
|
|||||||
func f0(x int) {
|
func f0(x int) {
|
||||||
switch x {
|
switch x {
|
||||||
case 0:
|
case 0:
|
||||||
case 0: // ERROR "duplicate case 0 in switch"
|
case 0: // ERROR "duplicate case (0 in switch)?"
|
||||||
}
|
}
|
||||||
|
|
||||||
switch x {
|
switch x {
|
||||||
case 0:
|
case 0:
|
||||||
case int(0): // ERROR "duplicate case int.0. .value 0. in switch"
|
case int(0): // ERROR "duplicate case (int.0. .value 0. in switch)?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func f1(x float32) {
|
func f1(x float32) {
|
||||||
switch x {
|
switch x {
|
||||||
case 5:
|
case 5:
|
||||||
case 5: // ERROR "duplicate case 5 in switch"
|
case 5: // ERROR "duplicate case (5 in switch)?"
|
||||||
case 5.0: // ERROR "duplicate case 5 in switch"
|
case 5.0: // ERROR "duplicate case (5 in switch)?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func f2(s string) {
|
func f2(s string) {
|
||||||
switch s {
|
switch s {
|
||||||
case "":
|
case "":
|
||||||
case "": // ERROR "duplicate case .. in switch"
|
case "": // ERROR "duplicate case (.. in switch)?"
|
||||||
case "abc":
|
case "abc":
|
||||||
case "abc": // ERROR "duplicate case .abc. in switch"
|
case "abc": // ERROR "duplicate case (.abc. in switch)?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func f3(e interface{}) {
|
func f3(e interface{}) {
|
||||||
switch e {
|
switch e {
|
||||||
case 0:
|
case 0:
|
||||||
case 0: // ERROR "duplicate case 0 in switch"
|
case 0: // ERROR "duplicate case (0 in switch)?"
|
||||||
case int64(0):
|
case int64(0):
|
||||||
case float32(10):
|
case float32(10):
|
||||||
case float32(10): // ERROR "duplicate case float32\(10\) .value 10. in switch"
|
case float32(10): // ERROR "duplicate case (float32\(10\) .value 10. in switch)?"
|
||||||
case float64(10):
|
case float64(10):
|
||||||
case float64(10): // ERROR "duplicate case float64\(10\) .value 10. in switch"
|
case float64(10): // ERROR "duplicate case (float64\(10\) .value 10. in switch)?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,13 +82,13 @@ func f7(a int) {
|
|||||||
func f8(r rune) {
|
func f8(r rune) {
|
||||||
const x = 10
|
const x = 10
|
||||||
switch r {
|
switch r {
|
||||||
case 33, 33: // ERROR "duplicate case 33 in switch"
|
case 33, 33: // ERROR "duplicate case (33 in switch)?"
|
||||||
case 34, '"': // ERROR "duplicate case '"' .value 34. in switch"
|
case 34, '"': // ERROR "duplicate case '"' .value 34. in switch"
|
||||||
case 35, rune('#'): // ERROR "duplicate case rune.'#'. .value 35. in switch"
|
case 35, rune('#'): // ERROR "duplicate case (rune.'#'. .value 35. in switch)?"
|
||||||
case 36, rune(36): // ERROR "duplicate case rune.36. .value 36. in switch"
|
case 36, rune(36): // ERROR "duplicate case (rune.36. .value 36. in switch)?"
|
||||||
case 37, '$'+1: // ERROR "duplicate case '\$' \+ 1 .value 37. in switch"
|
case 37, '$'+1: // ERROR "duplicate case ('\$' \+ 1 .value 37. in switch)?"
|
||||||
case 'b':
|
case 'b':
|
||||||
case 'a', 'b', 'c', 'd': // ERROR "duplicate case 'b' .value 98."
|
case 'a', 'b', 'c', 'd': // ERROR "duplicate case ('b' .value 98.)?"
|
||||||
case x, x: // ERROR "duplicate case x .value 10."
|
case x, x: // ERROR "duplicate case (x .value 10.)?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@ package main
|
|||||||
// Verify that type switch statements with impossible cases are detected by the compiler.
|
// Verify that type switch statements with impossible cases are detected by the compiler.
|
||||||
func f0(e error) {
|
func f0(e error) {
|
||||||
switch e.(type) {
|
switch e.(type) {
|
||||||
case int: // ERROR "impossible type switch case: e \(type error\) cannot have dynamic type int \(missing Error method\)"
|
case int: // ERROR "impossible type switch case: e \(type error\) cannot have dynamic type int \(missing Error method\)|impossible type assertion"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -23,11 +23,11 @@ func f0(e error) {
|
|||||||
func f1(e interface{}) {
|
func f1(e interface{}) {
|
||||||
switch e {
|
switch e {
|
||||||
default:
|
default:
|
||||||
default: // ERROR "multiple defaults in switch"
|
default: // ERROR "multiple defaults( in switch)?"
|
||||||
}
|
}
|
||||||
switch e.(type) {
|
switch e.(type) {
|
||||||
default:
|
default:
|
||||||
default: // ERROR "multiple defaults in switch"
|
default: // ERROR "multiple defaults( in switch)?"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -41,6 +41,6 @@ func (*X) Foo() {}
|
|||||||
func f2() {
|
func f2() {
|
||||||
var i I
|
var i I
|
||||||
switch i.(type) {
|
switch i.(type) {
|
||||||
case X: // ERROR "impossible type switch case: i \(type I\) cannot have dynamic type X \(Foo method has pointer receiver\)"
|
case X: // ERROR "impossible type switch case: i \(type I\) cannot have dynamic type X \(Foo method has pointer receiver\)|impossible type assertion"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ func f4(e interface{}) {
|
|||||||
case struct {
|
case struct {
|
||||||
i int "tag2"
|
i int "tag2"
|
||||||
}:
|
}:
|
||||||
case struct { // ERROR "duplicate case struct { i int .tag1. } in type switch"
|
case struct { // ERROR "duplicate case struct { i int .tag1. } in type switch|duplicate case"
|
||||||
i int "tag1"
|
i int "tag1"
|
||||||
}:
|
}:
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user