aboutsummaryrefslogtreecommitdiff
path: root/test/fixedbugs
diff options
context:
space:
mode:
Diffstat (limited to 'test/fixedbugs')
-rw-r--r--test/fixedbugs/bug13343.go4
-rw-r--r--test/fixedbugs/bug176.go2
-rw-r--r--test/fixedbugs/bug195.go16
-rw-r--r--test/fixedbugs/bug332.go2
-rw-r--r--test/fixedbugs/bug340.go2
-rw-r--r--test/fixedbugs/bug429_run.go3
-rw-r--r--test/fixedbugs/bug487.go4
-rw-r--r--test/fixedbugs/bug510.dir/a.go13
-rw-r--r--test/fixedbugs/bug510.dir/b.go14
-rw-r--r--test/fixedbugs/bug510.go9
-rw-r--r--test/fixedbugs/issue10700.dir/test.go30
-rw-r--r--test/fixedbugs/issue10975.go2
-rw-r--r--test/fixedbugs/issue11326.go16
-rw-r--r--test/fixedbugs/issue11361.go4
-rw-r--r--test/fixedbugs/issue11371.go6
-rw-r--r--test/fixedbugs/issue11590.go6
-rw-r--r--test/fixedbugs/issue11610.go4
-rw-r--r--test/fixedbugs/issue11614.go2
-rw-r--r--test/fixedbugs/issue12006.go4
-rw-r--r--test/fixedbugs/issue13248.go4
-rw-r--r--test/fixedbugs/issue13266.go2
-rw-r--r--test/fixedbugs/issue13273.go4
-rw-r--r--test/fixedbugs/issue13274.go2
-rw-r--r--test/fixedbugs/issue13365.go14
-rw-r--r--test/fixedbugs/issue13415.go2
-rw-r--r--test/fixedbugs/issue13471.go22
-rw-r--r--test/fixedbugs/issue13799.go4
-rw-r--r--test/fixedbugs/issue13821b.go12
-rw-r--r--test/fixedbugs/issue14006.go14
-rw-r--r--test/fixedbugs/issue14010.go4
-rw-r--r--test/fixedbugs/issue14321.go8
-rw-r--r--test/fixedbugs/issue17645.go2
-rw-r--r--test/fixedbugs/issue21576.go3
-rw-r--r--test/fixedbugs/issue21709.go4
-rw-r--r--test/fixedbugs/issue22904.go4
-rw-r--r--test/fixedbugs/issue23732.go6
-rw-r--r--test/fixedbugs/issue23823.go3
-rw-r--r--test/fixedbugs/issue24491a.go65
-rw-r--r--test/fixedbugs/issue24491b.go46
-rw-r--r--test/fixedbugs/issue26855.go4
-rw-r--r--test/fixedbugs/issue30898.go2
-rw-r--r--test/fixedbugs/issue31573.go24
-rw-r--r--test/fixedbugs/issue35739.dir/a.go15
-rw-r--r--test/fixedbugs/issue35739.dir/b.go11
-rw-r--r--test/fixedbugs/issue35739.go9
-rw-r--r--test/fixedbugs/issue37837.dir/a.go33
-rw-r--r--test/fixedbugs/issue37837.dir/b.go32
-rw-r--r--test/fixedbugs/issue37837.go7
-rw-r--r--test/fixedbugs/issue38745.go18
-rw-r--r--test/fixedbugs/issue39292.go6
-rw-r--r--test/fixedbugs/issue40954.go35
-rw-r--r--test/fixedbugs/issue41239.go19
-rw-r--r--test/fixedbugs/issue41247.go2
-rw-r--r--test/fixedbugs/issue41440.go14
-rw-r--r--test/fixedbugs/issue41500.go20
-rw-r--r--test/fixedbugs/issue41575.go36
-rw-r--r--test/fixedbugs/issue41635.go17
-rw-r--r--test/fixedbugs/issue41680.go21
-rw-r--r--test/fixedbugs/issue41736.go105
-rw-r--r--test/fixedbugs/issue41780.go39
-rw-r--r--test/fixedbugs/issue41872.go26
-rw-r--r--test/fixedbugs/issue42032.go27
-rw-r--r--test/fixedbugs/issue42058a.go13
-rw-r--r--test/fixedbugs/issue42058b.go13
-rw-r--r--test/fixedbugs/issue42075.go16
-rw-r--r--test/fixedbugs/issue42076.go21
-rw-r--r--test/fixedbugs/issue42284.dir/a.go30
-rw-r--r--test/fixedbugs/issue42284.dir/b.go18
-rw-r--r--test/fixedbugs/issue42284.go7
-rw-r--r--test/fixedbugs/issue4232.go8
-rw-r--r--test/fixedbugs/issue42401.dir/a.go11
-rw-r--r--test/fixedbugs/issue42401.dir/b.go24
-rw-r--r--test/fixedbugs/issue42401.go10
-rw-r--r--test/fixedbugs/issue42568.go25
-rw-r--r--test/fixedbugs/issue42587.go15
-rw-r--r--test/fixedbugs/issue42686.go11
-rw-r--r--test/fixedbugs/issue42703.go19
-rw-r--r--test/fixedbugs/issue42727.go23
-rw-r--r--test/fixedbugs/issue42753.go13
-rw-r--r--test/fixedbugs/issue42784.go26
-rw-r--r--test/fixedbugs/issue42790.go9
-rw-r--r--test/fixedbugs/issue42876.go18
-rw-r--r--test/fixedbugs/issue42944.go24
-rw-r--r--test/fixedbugs/issue43099.go34
-rw-r--r--test/fixedbugs/issue43111.go70
-rw-r--r--test/fixedbugs/issue43112.go41
-rw-r--r--test/fixedbugs/issue4348.go4
-rw-r--r--test/fixedbugs/issue4458.go2
-rw-r--r--test/fixedbugs/issue5172.go2
-rw-r--r--test/fixedbugs/issue6750.go2
-rw-r--r--test/fixedbugs/issue6977.go8
-rw-r--r--test/fixedbugs/issue7921.go10
-rw-r--r--test/fixedbugs/issue8183.go6
-rw-r--r--test/fixedbugs/issue9036.go4
-rw-r--r--test/fixedbugs/issue9076.go4
-rw-r--r--test/fixedbugs/issue9083.go1
-rw-r--r--test/fixedbugs/issue9370.go122
97 files changed, 1341 insertions, 213 deletions
diff --git a/test/fixedbugs/bug13343.go b/test/fixedbugs/bug13343.go
index 5dc736d443..a7febeae7e 100644
--- a/test/fixedbugs/bug13343.go
+++ b/test/fixedbugs/bug13343.go
@@ -7,8 +7,8 @@
package main
var (
- a, b = f() // ERROR "initialization loop|depends upon itself"
- c = b
+ a, b = f() // ERROR "initialization loop|depends upon itself|depend upon each other"
+ c = b // GCCGO_ERROR "depends upon itself|depend upon each other"
)
func f() (int, int) {
diff --git a/test/fixedbugs/bug176.go b/test/fixedbugs/bug176.go
index ea3a909747..7001dd081e 100644
--- a/test/fixedbugs/bug176.go
+++ b/test/fixedbugs/bug176.go
@@ -9,6 +9,6 @@ package main
var x int
var a = []int{ x: 1} // ERROR "constant"
-var b = [...]int{x: 1}
+var b = [...]int{x: 1} // GCCGO_ERROR "constant"
var c = map[int]int{ x: 1}
diff --git a/test/fixedbugs/bug195.go b/test/fixedbugs/bug195.go
index 496c0be610..aef7bd2d89 100644
--- a/test/fixedbugs/bug195.go
+++ b/test/fixedbugs/bug195.go
@@ -6,22 +6,22 @@
package main
-type I1 interface { I2 } // ERROR "interface"
+type I1 interface{ I2 } // ERROR "interface"
type I2 int
-type I3 interface { int } // ERROR "interface"
+type I3 interface{ int } // ERROR "interface"
type S struct {
- x interface{ S } // ERROR "interface"
+ x interface{ S } // ERROR "interface"
}
-type I4 interface { // GC_ERROR "invalid recursive type"
- I4 // GCCGO_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"
- I6 // 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"
+ I5 // GCCGO_ERROR "interface"
}
diff --git a/test/fixedbugs/bug332.go b/test/fixedbugs/bug332.go
index d43c2ddcff..159c8b4e68 100644
--- a/test/fixedbugs/bug332.go
+++ b/test/fixedbugs/bug332.go
@@ -14,4 +14,4 @@ func main() {}
// important: no newline on end of next line.
// 6g used to print <epoch> instead of bug332.go:111
-func (t *T) F() {} // ERROR "undefined: T" \ No newline at end of file
+func (t *T) F() {} // ERROR "undefined.*T" \ No newline at end of file
diff --git a/test/fixedbugs/bug340.go b/test/fixedbugs/bug340.go
index 118bbacc22..8c543c98d9 100644
--- a/test/fixedbugs/bug340.go
+++ b/test/fixedbugs/bug340.go
@@ -12,6 +12,6 @@ func main() {
var x interface{}
switch t := x.(type) {
case 0: // ERROR "type"
- t.x = 1 // ERROR "type interface \{\}|reference to undefined field or method"
+ t.x = 1 // ERROR "type interface \{\}|reference to undefined field or method|interface with no methods"
}
}
diff --git a/test/fixedbugs/bug429_run.go b/test/fixedbugs/bug429_run.go
index c6a02aae5e..c2bb1b85cb 100644
--- a/test/fixedbugs/bug429_run.go
+++ b/test/fixedbugs/bug429_run.go
@@ -1,6 +1,7 @@
-// +build !nacl,!js
// run
+// +build !nacl,!js
+
// Copyright 2014 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.
diff --git a/test/fixedbugs/bug487.go b/test/fixedbugs/bug487.go
index ab61a19a94..e60af6c8e2 100644
--- a/test/fixedbugs/bug487.go
+++ b/test/fixedbugs/bug487.go
@@ -14,8 +14,8 @@ func G() (int, int, int) {
}
func F() {
- a, b := G() // ERROR "assignment mismatch"
- a, b = G() // ERROR "assignment mismatch"
+ a, b := G() // ERROR "mismatch"
+ a, b = G() // ERROR "mismatch"
_, _ = a, b
}
diff --git a/test/fixedbugs/bug510.dir/a.go b/test/fixedbugs/bug510.dir/a.go
new file mode 100644
index 0000000000..db1cfef366
--- /dev/null
+++ b/test/fixedbugs/bug510.dir/a.go
@@ -0,0 +1,13 @@
+// Copyright 2020 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 a
+
+import "reflect"
+
+type A = map[int] bool
+
+func F() interface{} {
+ return reflect.New(reflect.TypeOf((*A)(nil))).Elem().Interface()
+}
diff --git a/test/fixedbugs/bug510.dir/b.go b/test/fixedbugs/bug510.dir/b.go
new file mode 100644
index 0000000000..56b0201858
--- /dev/null
+++ b/test/fixedbugs/bug510.dir/b.go
@@ -0,0 +1,14 @@
+// Copyright 2020 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
+
+import "./a"
+
+func main() {
+ _, ok := a.F().(*map[int]bool)
+ if !ok {
+ panic("bad type")
+ }
+}
diff --git a/test/fixedbugs/bug510.go b/test/fixedbugs/bug510.go
new file mode 100644
index 0000000000..8a6da5dfd6
--- /dev/null
+++ b/test/fixedbugs/bug510.go
@@ -0,0 +1,9 @@
+// rundir
+
+// Copyright 2020 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.
+
+// Gccgo confused type descriptors for aliases.
+
+package ignored
diff --git a/test/fixedbugs/issue10700.dir/test.go b/test/fixedbugs/issue10700.dir/test.go
index 2033efc9d8..2dfc24af07 100644
--- a/test/fixedbugs/issue10700.dir/test.go
+++ b/test/fixedbugs/issue10700.dir/test.go
@@ -21,27 +21,27 @@ func (me *HasAMethod) Do() {
}
func InMyCode(x *Imported, y *HasAMethod, z *other.Exported) {
- x.Do() // ERROR "x\.Do undefined \(type \*Imported is pointer to interface, not interface\)"
- x.do() // ERROR "x\.do undefined \(type \*Imported is pointer to interface, not interface\)"
+ x.Do() // ERROR "x\.Do undefined \(type \*Imported is pointer to interface, not interface\)|type that is pointer to interface"
+ x.do() // ERROR "x\.do undefined \(type \*Imported is pointer to interface, not interface\)|type that is pointer to interface"
(*x).Do()
- x.Dont() // ERROR "x\.Dont undefined \(type \*Imported is pointer to interface, not interface\)"
- (*x).Dont() // ERROR "\(\*x\)\.Dont undefined \(type Imported has no field or method Dont\)"
+ x.Dont() // ERROR "x\.Dont undefined \(type \*Imported is pointer to interface, not interface\)|type that is pointer to interface"
+ (*x).Dont() // ERROR "\(\*x\)\.Dont undefined \(type Imported has no field or method Dont\)|reference to undefined field or method"
y.Do()
- y.do() // ERROR "y\.do undefined \(type \*HasAMethod has no field or method do, but does have Do\)"
+ y.do() // ERROR "y\.do undefined \(type \*HasAMethod has no field or method do, but does have Do\)|reference to undefined field or method"
(*y).Do()
- (*y).do() // ERROR "\(\*y\)\.do undefined \(type HasAMethod has no field or method do, but does have Do\)"
- y.Dont() // ERROR "y\.Dont undefined \(type \*HasAMethod has no field or method Dont\)"
- (*y).Dont() // ERROR "\(\*y\)\.Dont undefined \(type HasAMethod has no field or method Dont\)"
+ (*y).do() // ERROR "\(\*y\)\.do undefined \(type HasAMethod has no field or method do, but does have Do\)|reference to undefined field or method"
+ y.Dont() // ERROR "y\.Dont undefined \(type \*HasAMethod has no field or method Dont\)|reference to undefined field or method"
+ (*y).Dont() // ERROR "\(\*y\)\.Dont undefined \(type HasAMethod has no field or method Dont\)|reference to undefined field or method"
- z.Do() // ERROR "z\.Do undefined \(type \*other\.Exported is pointer to interface, not interface\)"
- z.do() // ERROR "z\.do undefined \(type \*other\.Exported is pointer to interface, not interface\)"
+ z.Do() // ERROR "z\.Do undefined \(type \*other\.Exported is pointer to interface, not interface\)|type that is pointer to interface"
+ z.do() // ERROR "z\.do undefined \(type \*other\.Exported is pointer to interface, not interface\)|type that is pointer to interface"
(*z).Do()
- (*z).do() // ERROR "\(\*z\)\.do undefined \(type other.Exported has no field or method do, but does have Do\)"
- z.Dont() // ERROR "z\.Dont undefined \(type \*other\.Exported is pointer to interface, not interface\)"
- (*z).Dont() // ERROR "\(\*z\)\.Dont undefined \(type other\.Exported has no field or method Dont\)"
- z.secret() // ERROR "z\.secret undefined \(type \*other\.Exported is pointer to interface, not interface\)"
- (*z).secret() // ERROR "\(\*z\)\.secret undefined \(cannot refer to unexported field or method secret\)"
+ (*z).do() // ERROR "\(\*z\)\.do undefined \(type other.Exported has no field or method do, but does have Do\)|reference to undefined field or method"
+ z.Dont() // ERROR "z\.Dont undefined \(type \*other\.Exported is pointer to interface, not interface\)|type that is pointer to interface"
+ (*z).Dont() // ERROR "\(\*z\)\.Dont undefined \(type other\.Exported has no field or method Dont\)|reference to undefined field or method"
+ z.secret() // ERROR "z\.secret undefined \(type \*other\.Exported is pointer to interface, not interface\)|type that is pointer to interface"
+ (*z).secret() // ERROR "\(\*z\)\.secret undefined \(cannot refer to unexported field or method secret\)|reference to unexported field or method"
}
diff --git a/test/fixedbugs/issue10975.go b/test/fixedbugs/issue10975.go
index b5f043f0a7..933badfd2f 100644
--- a/test/fixedbugs/issue10975.go
+++ b/test/fixedbugs/issue10975.go
@@ -10,7 +10,7 @@
package main
type I interface {
- int // ERROR "interface contains embedded non-interface int"
+ int // ERROR "interface contains embedded non-interface"
}
func New() I {
diff --git a/test/fixedbugs/issue11326.go b/test/fixedbugs/issue11326.go
index 82754c73fb..f3037d53c4 100644
--- a/test/fixedbugs/issue11326.go
+++ b/test/fixedbugs/issue11326.go
@@ -18,14 +18,14 @@ func main() {
// Any implementation must be able to handle these constants at
// compile time (even though they cannot be assigned to a float64).
- var _ = 1e646456992 // ERROR "1e\+646456992 overflows float64"
- var _ = 1e64645699 // ERROR "1e\+64645699 overflows float64"
- var _ = 1e6464569 // ERROR "1e\+6464569 overflows float64"
- var _ = 1e646456 // ERROR "1e\+646456 overflows float64"
- var _ = 1e64645 // ERROR "1e\+64645 overflows float64"
- var _ = 1e6464 // ERROR "1e\+6464 overflows float64"
- var _ = 1e646 // ERROR "1e\+646 overflows float64"
- var _ = 1e309 // ERROR "1e\+309 overflows float64"
+ var _ = 1e646456992 // ERROR "1e\+646456992 overflows float64|floating-point constant overflow"
+ var _ = 1e64645699 // ERROR "1e\+64645699 overflows float64|floating-point constant overflow"
+ var _ = 1e6464569 // ERROR "1e\+6464569 overflows float64|floating-point constant overflow"
+ var _ = 1e646456 // ERROR "1e\+646456 overflows float64|floating-point constant overflow"
+ var _ = 1e64645 // ERROR "1e\+64645 overflows float64|floating-point constant overflow"
+ var _ = 1e6464 // ERROR "1e\+6464 overflows float64|floating-point constant overflow"
+ var _ = 1e646 // ERROR "1e\+646 overflows float64|floating-point constant overflow"
+ var _ = 1e309 // ERROR "1e\+309 overflows float64|floating-point constant overflow"
var _ = 1e308
}
diff --git a/test/fixedbugs/issue11361.go b/test/fixedbugs/issue11361.go
index 1260ea89c9..63dbf05d73 100644
--- a/test/fixedbugs/issue11361.go
+++ b/test/fixedbugs/issue11361.go
@@ -6,6 +6,6 @@
package a
-import "fmt" // ERROR "imported and not used"
+import "fmt" // GC_ERROR "imported and not used"
-const n = fmt // ERROR "fmt without selector"
+const n = fmt // ERROR "fmt without selector|unexpected reference to package"
diff --git a/test/fixedbugs/issue11371.go b/test/fixedbugs/issue11371.go
index b2d966fac8..05b8fcfebe 100644
--- a/test/fixedbugs/issue11371.go
+++ b/test/fixedbugs/issue11371.go
@@ -9,9 +9,9 @@
package issue11371
-const a int = 1.1 // ERROR "constant 1.1 truncated to integer"
-const b int = 1e20 // ERROR "overflows int"
+const a int = 1.1 // ERROR "constant 1.1 truncated to integer|floating-point constant truncated to integer"
+const b int = 1e20 // ERROR "overflows int|integer constant overflow"
const c int = 1 + 1e-100 // ERROR "constant truncated to integer"
const d int = 1 - 1e-100 // ERROR "constant truncated to integer"
const e int = 1.00000001 // ERROR "constant truncated to integer"
-const f int = 0.00000001 // ERROR "constant 1e-08 truncated to integer"
+const f int = 0.00000001 // ERROR "constant 1e-08 truncated to integer|floating-point constant truncated to integer"
diff --git a/test/fixedbugs/issue11590.go b/test/fixedbugs/issue11590.go
index 09345473fb..f2a955f96d 100644
--- a/test/fixedbugs/issue11590.go
+++ b/test/fixedbugs/issue11590.go
@@ -6,6 +6,6 @@
package p
-var _ = int8(4) * 300 // ERROR "constant 300 overflows int8" "constant 1200 overflows int8"
-var _ = complex64(1) * 1e200 // ERROR "constant 1e\+200 overflows complex64"
-var _ = complex128(1) * 1e500 // ERROR "constant 1e\+500 overflows complex128"
+var _ = int8(4) * 300 // ERROR "constant 300 overflows int8" "constant 1200 overflows int8|integer constant overflow"
+var _ = complex64(1) * 1e200 // ERROR "constant 1e\+200 overflows complex64|complex real part overflow"
+var _ = complex128(1) * 1e500 // ERROR "constant 1e\+500 overflows complex128|complex real part overflow"
diff --git a/test/fixedbugs/issue11610.go b/test/fixedbugs/issue11610.go
index 8ca31bf394..7ebfae6709 100644
--- a/test/fixedbugs/issue11610.go
+++ b/test/fixedbugs/issue11610.go
@@ -9,9 +9,9 @@
package a
import"" // ERROR "import path is empty"
-var? // ERROR "invalid character U\+003F '\?'"
+var? // ERROR "invalid character U\+003F '\?'|invalid character 0x3f in input file"
-var x int // ERROR "unexpected var"
+var x int // ERROR "unexpected var|expected identifier|expected type"
func main() {
}
diff --git a/test/fixedbugs/issue11614.go b/test/fixedbugs/issue11614.go
index 91f134d44a..d1642a3faf 100644
--- a/test/fixedbugs/issue11614.go
+++ b/test/fixedbugs/issue11614.go
@@ -11,7 +11,7 @@
package main
type I interface {
- int // ERROR "interface contains embedded non-interface int"
+ int // ERROR "interface contains embedded non-interface"
}
func n() {
diff --git a/test/fixedbugs/issue12006.go b/test/fixedbugs/issue12006.go
index c44f2e5547..0a2ef8dad0 100644
--- a/test/fixedbugs/issue12006.go
+++ b/test/fixedbugs/issue12006.go
@@ -144,7 +144,7 @@ func TFooK2() {
a := int32(1) // ERROR "moved to heap: a"
b := "cat"
c := &a
- fs := fakeSlice{3, &[4]interface{}{a, b, c, nil}} // ERROR "a escapes to heap" "b escapes to heap" "&\[4\]interface {} literal does not escape"
+ fs := fakeSlice{3, &[4]interface{}{a, b, c, nil}} // ERROR "a escapes to heap" "b escapes to heap" "&\[4\]interface {}{...} does not escape"
isink = FooK(fs)
}
@@ -169,6 +169,6 @@ func TFooL2() {
a := int32(1) // ERROR "moved to heap: a"
b := "cat"
c := &a
- s := []interface{}{a, b, c} // ERROR "a escapes to heap" "b escapes to heap" "\[\]interface {} literal does not escape"
+ s := []interface{}{a, b, c} // ERROR "a escapes to heap" "b escapes to heap" "\[\]interface {}{...} does not escape"
isink = FooL(s)
}
diff --git a/test/fixedbugs/issue13248.go b/test/fixedbugs/issue13248.go
index 524628159c..e23ba47b58 100644
--- a/test/fixedbugs/issue13248.go
+++ b/test/fixedbugs/issue13248.go
@@ -9,5 +9,5 @@
package main
func main() {
- foo(
-} // ERROR "unexpected }"
+ foo( // GCCGO_ERROR "undefined name"
+} // ERROR "unexpected }|expected operand|missing"
diff --git a/test/fixedbugs/issue13266.go b/test/fixedbugs/issue13266.go
index 37c5594a24..73c9e16bcc 100644
--- a/test/fixedbugs/issue13266.go
+++ b/test/fixedbugs/issue13266.go
@@ -7,4 +7,4 @@
// Offending character % must not be interpreted as
// start of format verb when emitting error message.
-package% // ERROR "unexpected %"
+package% // ERROR "unexpected %|package name must be an identifier|after package clause|expected declaration"
diff --git a/test/fixedbugs/issue13273.go b/test/fixedbugs/issue13273.go
index f8f679daab..2498da4d47 100644
--- a/test/fixedbugs/issue13273.go
+++ b/test/fixedbugs/issue13273.go
@@ -47,9 +47,9 @@ func f() {
<-(<-chan (<-chan (<-chan (<-chan int))))(nil)
<-(<-chan (<-chan (<-chan (<-chan (<-chan int)))))(nil)
- type _ <-<-chan int // ERROR "unexpected <-, expecting chan"
+ type _ <-<-chan int // ERROR "unexpected <-, expecting chan|expected .*chan.*"
<-<-chan int // ERROR "unexpected <-, expecting chan|expecting {" (new parser: same error as for type decl)
- type _ <-chan<-int // ERROR "unexpected int, expecting chan|expecting chan"
+ type _ <-chan<-int // ERROR "unexpected int, expecting chan|expected .*chan.*|expecting chan|expected .*;.* or .*}.* or newline"
<-chan<-int // ERROR "unexpected int, expecting chan|expecting {" (new parser: same error as for type decl)
}
diff --git a/test/fixedbugs/issue13274.go b/test/fixedbugs/issue13274.go
index 480f5bcc11..816bd9b8f2 100644
--- a/test/fixedbugs/issue13274.go
+++ b/test/fixedbugs/issue13274.go
@@ -8,4 +8,4 @@
package p
-var f = func() { // ERROR "unexpected EOF" \ No newline at end of file
+var f = func() { // ERROR "unexpected EOF|expected .*}.*" \ No newline at end of file
diff --git a/test/fixedbugs/issue13365.go b/test/fixedbugs/issue13365.go
index 4bd103e38d..31a663eb1f 100644
--- a/test/fixedbugs/issue13365.go
+++ b/test/fixedbugs/issue13365.go
@@ -11,15 +11,15 @@ package main
var t struct{}
func main() {
- _ = []int{-1: 0} // ERROR "index must be non\-negative integer constant"
- _ = [10]int{-1: 0} // ERROR "index must be non\-negative integer constant"
- _ = [...]int{-1: 0} // ERROR "index must be non\-negative integer constant"
+ _ = []int{-1: 0} // ERROR "index must be non\-negative integer constant|index expression is negative"
+ _ = [10]int{-1: 0} // ERROR "index must be non\-negative integer constant|index expression is negative"
+ _ = [...]int{-1: 0} // ERROR "index must be non\-negative integer constant|index expression is negative"
_ = []int{100: 0}
- _ = [10]int{100: 0} // ERROR "array index 100 out of bounds"
+ _ = [10]int{100: 0} // ERROR "array index 100 out of bounds|out of range"
_ = [...]int{100: 0}
- _ = []int{t} // ERROR "cannot use .* as type int in slice literal"
- _ = [10]int{t} // ERROR "cannot use .* as type int in array literal"
- _ = [...]int{t} // ERROR "cannot use .* as type int in array literal"
+ _ = []int{t} // ERROR "cannot use .* as type int in slice literal|incompatible type"
+ _ = [10]int{t} // ERROR "cannot use .* as type int in array literal|incompatible type"
+ _ = [...]int{t} // ERROR "cannot use .* as type int in array literal|incompatible type"
}
diff --git a/test/fixedbugs/issue13415.go b/test/fixedbugs/issue13415.go
index 989a1ed50f..4c4655e547 100644
--- a/test/fixedbugs/issue13415.go
+++ b/test/fixedbugs/issue13415.go
@@ -11,7 +11,7 @@ package p
func f() {
select {
- case x, x := <-func() chan int { // ERROR "x repeated on left side of :="
+ case x, x := <-func() chan int { // ERROR "x repeated on left side of :=|redefinition|declared but not used"
c := make(chan int)
return c
}():
diff --git a/test/fixedbugs/issue13471.go b/test/fixedbugs/issue13471.go
index 0bfed42616..9bfc8c3d2c 100644
--- a/test/fixedbugs/issue13471.go
+++ b/test/fixedbugs/issue13471.go
@@ -9,17 +9,17 @@
package main
func main() {
- const _ int64 = 1e646456992 // ERROR "integer too large"
- const _ int32 = 1e64645699 // ERROR "integer too large"
- const _ int16 = 1e6464569 // ERROR "integer too large"
- const _ int8 = 1e646456 // ERROR "integer too large"
- const _ int = 1e64645 // ERROR "integer too large"
+ const _ int64 = 1e646456992 // ERROR "integer too large|floating-point constant truncated to integer"
+ const _ int32 = 1e64645699 // ERROR "integer too large|floating-point constant truncated to integer"
+ const _ int16 = 1e6464569 // ERROR "integer too large|floating-point constant truncated to integer"
+ const _ int8 = 1e646456 // ERROR "integer too large|floating-point constant truncated to integer"
+ const _ int = 1e64645 // ERROR "integer too large|floating-point constant truncated to integer"
- const _ uint64 = 1e646456992 // ERROR "integer too large"
- const _ uint32 = 1e64645699 // ERROR "integer too large"
- const _ uint16 = 1e6464569 // ERROR "integer too large"
- const _ uint8 = 1e646456 // ERROR "integer too large"
- const _ uint = 1e64645 // ERROR "integer too large"
+ const _ uint64 = 1e646456992 // ERROR "integer too large|floating-point constant truncated to integer"
+ const _ uint32 = 1e64645699 // ERROR "integer too large|floating-point constant truncated to integer"
+ const _ uint16 = 1e6464569 // ERROR "integer too large|floating-point constant truncated to integer"
+ const _ uint8 = 1e646456 // ERROR "integer too large|floating-point constant truncated to integer"
+ const _ uint = 1e64645 // ERROR "integer too large|floating-point constant truncated to integer"
- const _ rune = 1e64645 // ERROR "integer too large"
+ const _ rune = 1e64645 // ERROR "integer too large|floating-point constant truncated to integer"
}
diff --git a/test/fixedbugs/issue13799.go b/test/fixedbugs/issue13799.go
index 5c57494777..fbdd4c32bc 100644
--- a/test/fixedbugs/issue13799.go
+++ b/test/fixedbugs/issue13799.go
@@ -162,7 +162,7 @@ func test5(iter int) {
var fn *str
for i := 0; i < maxI; i++ {
// var fn *str // this makes it work, because fn stays off heap
- fn = &str{m} // ERROR "&str literal escapes to heap"
+ fn = &str{m} // ERROR "&str{...} escapes to heap"
recur1(0, fn)
}
@@ -180,7 +180,7 @@ func test6(iter int) {
// var fn *str
for i := 0; i < maxI; i++ {
var fn *str // this makes it work, because fn stays off heap
- fn = &str{m} // ERROR "&str literal does not escape"
+ fn = &str{m} // ERROR "&str{...} does not escape"
recur1(0, fn)
}
diff --git a/test/fixedbugs/issue13821b.go b/test/fixedbugs/issue13821b.go
index be67cea6dd..df68e8d626 100644
--- a/test/fixedbugs/issue13821b.go
+++ b/test/fixedbugs/issue13821b.go
@@ -15,10 +15,10 @@ var b B
var b2 B2
var x1 = b && 1 < 2 // x1 has type B, not ideal bool
var x2 = 1 < 2 && b // x2 has type B, not ideal bool
-var x3 = b && b2 // ERROR "mismatched types B and B2"
-var x4 = x1 && b2 // ERROR "mismatched types B and B2"
-var x5 = x2 && b2 // ERROR "mismatched types B and B2"
-var x6 = b2 && x1 // ERROR "mismatched types B2 and B"
-var x7 = b2 && x2 // ERROR "mismatched types B2 and B"
+var x3 = b && b2 // ERROR "mismatched types B and B2|incompatible types"
+var x4 = x1 && b2 // ERROR "mismatched types B and B2|incompatible types"
+var x5 = x2 && b2 // ERROR "mismatched types B and B2|incompatible types"
+var x6 = b2 && x1 // ERROR "mismatched types B2 and B|incompatible types"
+var x7 = b2 && x2 // ERROR "mismatched types B2 and B|incompatible types"
-var x8 = b && !B2(true) // ERROR "mismatched types B and B2"
+var x8 = b && !B2(true) // ERROR "mismatched types B and B2|incompatible types"
diff --git a/test/fixedbugs/issue14006.go b/test/fixedbugs/issue14006.go
index 02041cc290..9cad2b4c9d 100644
--- a/test/fixedbugs/issue14006.go
+++ b/test/fixedbugs/issue14006.go
@@ -21,26 +21,26 @@ func f() {
var x int
switch x {
case 1:
- 2: // ERROR "unexpected :"
+ 2: // ERROR "unexpected :|expected .*;.* or .*}.* or newline|value computed is not used"
case 2:
}
switch x {
case 1:
- 2: ; // ERROR "unexpected :"
+ 2: ; // ERROR "unexpected :|expected .*;.* or .*}.* or newline|value computed is not used"
case 2:
}
var y string
switch y {
case "foo":
- "bar": // ERROR "unexpected :"
+ "bar": // ERROR "unexpected :|expected .*;.* or .*}.* or newline|value computed is not used"
case "bar":
}
switch y {
case "foo":
- "bar": ; // ERROR "unexpected :"
+ "bar": ; // ERROR "unexpected :|expected .*;.* or .*}.* or newline|value computed is not used"
case "bar":
}
@@ -56,12 +56,12 @@ func g() {
var z bool
switch {
case z:
- labelname: // ERROR "label labelname defined and not used"
+ labelname: // ERROR "label labelname defined and not used|previous definition|defined and not used"
}
switch {
case z:
- labelname: ; // ERROR "label labelname already defined at LINE-5"
+ labelname: ; // ERROR "label labelname already defined at LINE-5|label .*labelname.* already defined"
case false:
}
-} \ No newline at end of file
+}
diff --git a/test/fixedbugs/issue14010.go b/test/fixedbugs/issue14010.go
index 2786e107e8..0b233342be 100644
--- a/test/fixedbugs/issue14010.go
+++ b/test/fixedbugs/issue14010.go
@@ -10,6 +10,6 @@
package main
func main() {
- true = false // ERROR "cannot assign to true"
- byte = 0 // ERROR "not an expression"
+ true = false // ERROR "cannot assign to true|invalid left hand side"
+ byte = 0 // ERROR "not an expression|invalid left hand side|invalid use of type"
}
diff --git a/test/fixedbugs/issue14321.go b/test/fixedbugs/issue14321.go
index 058008c386..e1149c3f9d 100644
--- a/test/fixedbugs/issue14321.go
+++ b/test/fixedbugs/issue14321.go
@@ -27,7 +27,7 @@ type C struct {
B
}
-var _ = C.F // ERROR "ambiguous selector"
-var _ = C.G // ERROR "ambiguous selector"
-var _ = C.H // ERROR "ambiguous selector"
-var _ = C.I // ERROR "no method I"
+var _ = C.F // ERROR "ambiguous"
+var _ = C.G // ERROR "ambiguous"
+var _ = C.H // ERROR "ambiguous"
+var _ = C.I // ERROR "no method .*I.*"
diff --git a/test/fixedbugs/issue17645.go b/test/fixedbugs/issue17645.go
index af785eae2a..95fcecd1e0 100644
--- a/test/fixedbugs/issue17645.go
+++ b/test/fixedbugs/issue17645.go
@@ -12,5 +12,5 @@ type Foo struct {
func main() {
var s []int
- var _ string = append(s, Foo{""}) // ERROR "cannot use .. \(type untyped string\) as type int in field value" "cannot use Foo literal \(type Foo\) as type int in append" "cannot use append\(s\, Foo literal\) \(type \[\]int\) as type string in assignment"
+ var _ string = append(s, Foo{""}) // ERROR "cannot use .. \(type untyped string\) as type int in field value" "cannot use Foo{...} \(type Foo\) as type int in append" "cannot use append\(s\, Foo{...}\) \(type \[\]int\) as type string in assignment"
}
diff --git a/test/fixedbugs/issue21576.go b/test/fixedbugs/issue21576.go
index b7a32f07ac..ae6161ccf5 100644
--- a/test/fixedbugs/issue21576.go
+++ b/test/fixedbugs/issue21576.go
@@ -1,6 +1,7 @@
-// +build !nacl,!js
// run
+// +build !nacl,!js
+
// Copyright 2019 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.
diff --git a/test/fixedbugs/issue21709.go b/test/fixedbugs/issue21709.go
index cc5896ab53..20be10e792 100644
--- a/test/fixedbugs/issue21709.go
+++ b/test/fixedbugs/issue21709.go
@@ -16,7 +16,7 @@ var N int
func F1() {
var s S
for i := 0; i < N; i++ {
- fs := []func(){ // ERROR "\[\]func\(\) literal does not escape"
+ fs := []func(){ // ERROR "\[\]func\(\){...} does not escape"
s.Inc, // ERROR "s.Inc does not escape"
}
for _, f := range fs {
@@ -28,7 +28,7 @@ func F1() {
func F2() {
var s S
for i := 0; i < N; i++ {
- for _, f := range []func(){ // ERROR "\[\]func\(\) literal does not escape"
+ for _, f := range []func(){ // ERROR "\[\]func\(\){...} does not escape"
s.Inc, // ERROR "s.Inc does not escape"
} {
f()
diff --git a/test/fixedbugs/issue22904.go b/test/fixedbugs/issue22904.go
index 46cb7c048a..09f4a2118e 100644
--- a/test/fixedbugs/issue22904.go
+++ b/test/fixedbugs/issue22904.go
@@ -9,8 +9,8 @@
package p
-type a struct{ b }
-type b struct{ a } // ERROR "invalid recursive type"
+type a struct{ b } // ERROR "invalid recursive type"
+type b struct{ a }
var x interface{}
diff --git a/test/fixedbugs/issue23732.go b/test/fixedbugs/issue23732.go
index be17bf4f61..5e63eb2074 100644
--- a/test/fixedbugs/issue23732.go
+++ b/test/fixedbugs/issue23732.go
@@ -24,19 +24,19 @@ func main() {
_ = Foo{
1,
2,
- 3, // ERROR "too few values in Foo literal"
+ 3, // ERROR "too few values in Foo{...}"
}
_ = Foo{
1,
2,
3,
- Bar{"A", "B"}, // ERROR "too many values in Bar literal"
+ Bar{"A", "B"}, // ERROR "too many values in Bar{...}"
}
_ = Foo{
1,
2,
- Bar{"A", "B"}, // ERROR "too many values in Bar literal" "too few values in Foo literal"
+ Bar{"A", "B"}, // ERROR "too many values in Bar{...}" "too few values in Foo{...}"
}
}
diff --git a/test/fixedbugs/issue23823.go b/test/fixedbugs/issue23823.go
index 2f802d0988..fe6cef1fb4 100644
--- a/test/fixedbugs/issue23823.go
+++ b/test/fixedbugs/issue23823.go
@@ -10,6 +10,7 @@ type I1 = interface {
I2
}
-type I2 interface { // ERROR "invalid recursive type"
+// 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$"
I1
}
diff --git a/test/fixedbugs/issue24491a.go b/test/fixedbugs/issue24491a.go
new file mode 100644
index 0000000000..8accf8c0a3
--- /dev/null
+++ b/test/fixedbugs/issue24491a.go
@@ -0,0 +1,65 @@
+// run
+
+// Copyright 2020 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.
+
+// This test makes sure unsafe-uintptr arguments are handled correctly.
+
+package main
+
+import (
+ "runtime"
+ "unsafe"
+)
+
+var done = make(chan bool, 1)
+
+func setup() unsafe.Pointer {
+ s := "ok"
+ runtime.SetFinalizer(&s, func(p *string) { *p = "FAIL" })
+ return unsafe.Pointer(&s)
+}
+
+//go:noinline
+//go:uintptrescapes
+func test(s string, p, q uintptr, rest ...uintptr) int {
+ runtime.GC()
+ runtime.GC()
+
+ if *(*string)(unsafe.Pointer(p)) != "ok" {
+ panic(s + ": p failed")
+ }
+ if *(*string)(unsafe.Pointer(q)) != "ok" {
+ panic(s + ": q failed")
+ }
+ for _, r := range rest {
+ if *(*string)(unsafe.Pointer(r)) != "ok" {
+ panic(s + ": r[i] failed")
+ }
+ }
+
+ done <- true
+ return 0
+}
+
+//go:noinline
+func f() int {
+ return test("return", uintptr(setup()), uintptr(setup()), uintptr(setup()), uintptr(setup()))
+}
+
+func main() {
+ test("normal", uintptr(setup()), uintptr(setup()), uintptr(setup()), uintptr(setup()))
+ <-done
+
+ go test("go", uintptr(setup()), uintptr(setup()), uintptr(setup()), uintptr(setup()))
+ <-done
+
+ func() {
+ defer test("defer", uintptr(setup()), uintptr(setup()), uintptr(setup()), uintptr(setup()))
+ }()
+ <-done
+
+ f()
+ <-done
+}
diff --git a/test/fixedbugs/issue24491b.go b/test/fixedbugs/issue24491b.go
new file mode 100644
index 0000000000..142d798500
--- /dev/null
+++ b/test/fixedbugs/issue24491b.go
@@ -0,0 +1,46 @@
+// run
+
+// Copyright 2020 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.
+
+// This test makes sure unsafe-uintptr arguments are not
+// kept alive longer than expected.
+
+package main
+
+import (
+ "runtime"
+ "unsafe"
+)
+
+var done = make(chan bool)
+
+func setup() unsafe.Pointer {
+ s := "ok"
+ runtime.SetFinalizer(&s, func(p *string) { close(done) })
+ return unsafe.Pointer(&s)
+}
+
+//go:noinline
+//go:uintptrescapes
+func before(p uintptr) int {
+ runtime.GC()
+ select {
+ case <-done:
+ panic("GC early")
+ default:
+ }
+ return 0
+}
+
+func after() int {
+ runtime.GC()
+ runtime.GC()
+ <-done
+ return 0
+}
+
+func main() {
+ _ = before(uintptr(setup())) + after()
+}
diff --git a/test/fixedbugs/issue26855.go b/test/fixedbugs/issue26855.go
index d5b95ddbf1..144e4415f7 100644
--- a/test/fixedbugs/issue26855.go
+++ b/test/fixedbugs/issue26855.go
@@ -20,9 +20,9 @@ type P struct {
type T struct{}
var _ = S{
- f: &T{}, // ERROR "cannot use &T literal"
+ f: &T{}, // ERROR "cannot use &T{}"
}
var _ = P{
- f: T{}, // ERROR "cannot use T literal"
+ f: T{}, // ERROR "cannot use T{}"
}
diff --git a/test/fixedbugs/issue30898.go b/test/fixedbugs/issue30898.go
index 012d5a2634..b6376d3f9e 100644
--- a/test/fixedbugs/issue30898.go
+++ b/test/fixedbugs/issue30898.go
@@ -15,5 +15,5 @@ func debugf(format string, args ...interface{}) { // ERROR "can inline debugf" "
func bar() { // ERROR "can inline bar"
value := 10
- debugf("value is %d", value) // ERROR "inlining call to debugf" "value does not escape" "\[\]interface {} literal does not escape"
+ debugf("value is %d", value) // ERROR "inlining call to debugf" "value does not escape" "\[\]interface {}{...} does not escape"
}
diff --git a/test/fixedbugs/issue31573.go b/test/fixedbugs/issue31573.go
index c9ea84bbae..005910e00d 100644
--- a/test/fixedbugs/issue31573.go
+++ b/test/fixedbugs/issue31573.go
@@ -14,18 +14,18 @@ func g() {
defer f(new(int), new(int)) // ERROR "... argument does not escape$" "new\(int\) does not escape$"
defer f(nil...)
- defer f([]*int{}...) // ERROR "\[\]\*int literal does not escape$"
- defer f([]*int{new(int)}...) // ERROR "\[\]\*int literal does not escape$" "new\(int\) does not escape$"
- defer f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int literal does not escape$" "new\(int\) does not escape$"
+ defer f([]*int{}...) // ERROR "\[\]\*int{} does not escape$"
+ defer f([]*int{new(int)}...) // ERROR "\[\]\*int{...} does not escape$" "new\(int\) does not escape$"
+ defer f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int{...} does not escape$" "new\(int\) does not escape$"
go f()
go f(new(int)) // ERROR "... argument escapes to heap$" "new\(int\) escapes to heap$"
go f(new(int), new(int)) // ERROR "... argument escapes to heap$" "new\(int\) escapes to heap$"
go f(nil...)
- go f([]*int{}...) // ERROR "\[\]\*int literal escapes to heap$"
- go f([]*int{new(int)}...) // ERROR "\[\]\*int literal escapes to heap$" "new\(int\) escapes to heap$"
- go f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int literal escapes to heap$" "new\(int\) escapes to heap$"
+ go f([]*int{}...) // ERROR "\[\]\*int{} escapes to heap$"
+ go f([]*int{new(int)}...) // ERROR "\[\]\*int{...} escapes to heap$" "new\(int\) escapes to heap$"
+ go f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int{...} escapes to heap$" "new\(int\) escapes to heap$"
for {
defer f()
@@ -33,17 +33,17 @@ func g() {
defer f(new(int), new(int)) // ERROR "... argument escapes to heap$" "new\(int\) escapes to heap$"
defer f(nil...)
- defer f([]*int{}...) // ERROR "\[\]\*int literal escapes to heap$"
- defer f([]*int{new(int)}...) // ERROR "\[\]\*int literal escapes to heap$" "new\(int\) escapes to heap$"
- defer f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int literal escapes to heap$" "new\(int\) escapes to heap$"
+ defer f([]*int{}...) // ERROR "\[\]\*int{} escapes to heap$"
+ defer f([]*int{new(int)}...) // ERROR "\[\]\*int{...} escapes to heap$" "new\(int\) escapes to heap$"
+ defer f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int{...} escapes to heap$" "new\(int\) escapes to heap$"
go f()
go f(new(int)) // ERROR "... argument escapes to heap$" "new\(int\) escapes to heap$"
go f(new(int), new(int)) // ERROR "... argument escapes to heap$" "new\(int\) escapes to heap$"
go f(nil...)
- go f([]*int{}...) // ERROR "\[\]\*int literal escapes to heap$"
- go f([]*int{new(int)}...) // ERROR "\[\]\*int literal escapes to heap$" "new\(int\) escapes to heap$"
- go f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int literal escapes to heap$" "new\(int\) escapes to heap$"
+ go f([]*int{}...) // ERROR "\[\]\*int{} escapes to heap$"
+ go f([]*int{new(int)}...) // ERROR "\[\]\*int{...} escapes to heap$" "new\(int\) escapes to heap$"
+ go f([]*int{new(int), new(int)}...) // ERROR "\[\]\*int{...} escapes to heap$" "new\(int\) escapes to heap$"
}
}
diff --git a/test/fixedbugs/issue35739.dir/a.go b/test/fixedbugs/issue35739.dir/a.go
new file mode 100644
index 0000000000..b79503e996
--- /dev/null
+++ b/test/fixedbugs/issue35739.dir/a.go
@@ -0,0 +1,15 @@
+// Copyright 2020 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 a
+
+type myError string
+
+func (e myError) Error() string { return string(e) }
+
+const myErrorVal myError = "error"
+
+func IsMyError(err error) bool {
+ return err == error(myErrorVal)
+}
diff --git a/test/fixedbugs/issue35739.dir/b.go b/test/fixedbugs/issue35739.dir/b.go
new file mode 100644
index 0000000000..8d22aac8d6
--- /dev/null
+++ b/test/fixedbugs/issue35739.dir/b.go
@@ -0,0 +1,11 @@
+// Copyright 2020 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 b
+
+import "./a"
+
+func F(err error) bool {
+ return a.IsMyError(err)
+}
diff --git a/test/fixedbugs/issue35739.go b/test/fixedbugs/issue35739.go
new file mode 100644
index 0000000000..26f09d8c1b
--- /dev/null
+++ b/test/fixedbugs/issue35739.go
@@ -0,0 +1,9 @@
+// compiledir
+
+// Copyright 2020 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.
+
+// Issue 35739: gccgo inlining error with constant with method.
+
+package ignored
diff --git a/test/fixedbugs/issue37837.dir/a.go b/test/fixedbugs/issue37837.dir/a.go
new file mode 100644
index 0000000000..49d830ffbc
--- /dev/null
+++ b/test/fixedbugs/issue37837.dir/a.go
@@ -0,0 +1,33 @@
+// Copyright 2020 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 a
+
+func F(i interface{}) int { // ERROR "can inline F" "i does not escape"
+ switch i.(type) {
+ case nil:
+ return 0
+ case int:
+ return 1
+ case float64:
+ return 2
+ default:
+ return 3
+ }
+}
+
+func G(i interface{}) interface{} { // ERROR "can inline G" "leaking param: i"
+ switch i := i.(type) {
+ case nil: // ERROR "moved to heap: i"
+ return &i
+ case int: // ERROR "moved to heap: i"
+ return &i
+ case float64: // ERROR "moved to heap: i"
+ return &i
+ case string, []byte: // ERROR "moved to heap: i"
+ return &i
+ default: // ERROR "moved to heap: i"
+ return &i
+ }
+}
diff --git a/test/fixedbugs/issue37837.dir/b.go b/test/fixedbugs/issue37837.dir/b.go
new file mode 100644
index 0000000000..461f5c7a55
--- /dev/null
+++ b/test/fixedbugs/issue37837.dir/b.go
@@ -0,0 +1,32 @@
+// Copyright 2020 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
+
+import "./a"
+
+func main() {
+ // Test that inlined type switches without short variable
+ // declarations work correctly.
+ check(0, a.F(nil)) // ERROR "inlining call to a.F"
+ check(1, a.F(0)) // ERROR "inlining call to a.F" "does not escape"
+ check(2, a.F(0.0)) // ERROR "inlining call to a.F" "does not escape"
+ check(3, a.F("")) // ERROR "inlining call to a.F" "does not escape"
+
+ // Test that inlined type switches with short variable
+ // declarations work correctly.
+ _ = a.G(nil).(*interface{}) // ERROR "inlining call to a.G"
+ _ = a.G(1).(*int) // ERROR "inlining call to a.G" "does not escape"
+ _ = a.G(2.0).(*float64) // ERROR "inlining call to a.G" "does not escape"
+ _ = (*a.G("").(*interface{})).(string) // ERROR "inlining call to a.G" "does not escape"
+ _ = (*a.G(([]byte)(nil)).(*interface{})).([]byte) // ERROR "inlining call to a.G" "does not escape"
+ _ = (*a.G(true).(*interface{})).(bool) // ERROR "inlining call to a.G" "does not escape"
+}
+
+//go:noinline
+func check(want, got int) {
+ if want != got {
+ println("want", want, "but got", got)
+ }
+}
diff --git a/test/fixedbugs/issue37837.go b/test/fixedbugs/issue37837.go
new file mode 100644
index 0000000000..2e8abc5f05
--- /dev/null
+++ b/test/fixedbugs/issue37837.go
@@ -0,0 +1,7 @@
+// errorcheckandrundir -0 -m
+
+// Copyright 2020 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 ignored
diff --git a/test/fixedbugs/issue38745.go b/test/fixedbugs/issue38745.go
new file mode 100644
index 0000000000..83a3bc6fad
--- /dev/null
+++ b/test/fixedbugs/issue38745.go
@@ -0,0 +1,18 @@
+// errorcheck
+
+// Copyright 2020 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 p
+
+type t struct{ x int }
+
+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\)"
+}
+
+func f2() (*t, error) {
+ return t{}.M() // ERROR "t{}.M undefined \(type t has no field or method M\)"
+}
diff --git a/test/fixedbugs/issue39292.go b/test/fixedbugs/issue39292.go
index 1be88653e9..7dac2e5fc6 100644
--- a/test/fixedbugs/issue39292.go
+++ b/test/fixedbugs/issue39292.go
@@ -12,18 +12,18 @@ func (t) f() {
}
func x() {
- x := t{}.f // ERROR "t literal.f escapes to heap"
+ x := t{}.f // ERROR "t{}.f escapes to heap"
x()
}
func y() {
var i int // ERROR "moved to heap: i"
- y := (&t{&i}).f // ERROR "\(&t literal\).f escapes to heap" "&t literal escapes to heap"
+ y := (&t{&i}).f // ERROR "\(&t{...}\).f escapes to heap" "&t{...} escapes to heap"
y()
}
func z() {
var i int // ERROR "moved to heap: i"
- z := t{&i}.f // ERROR "t literal.f escapes to heap"
+ z := t{&i}.f // ERROR "t{...}.f escapes to heap"
z()
}
diff --git a/test/fixedbugs/issue40954.go b/test/fixedbugs/issue40954.go
new file mode 100644
index 0000000000..53e9ccf387
--- /dev/null
+++ b/test/fixedbugs/issue40954.go
@@ -0,0 +1,35 @@
+// run
+
+// Copyright 2020 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
+
+import (
+ "unsafe"
+)
+
+//go:notinheap
+type S struct{ x int }
+
+func main() {
+ var i int
+ p := (*S)(unsafe.Pointer(uintptr(unsafe.Pointer(&i))))
+ v := uintptr(unsafe.Pointer(p))
+ // p is a pointer to a go:notinheap type. Like some C libraries,
+ // we stored an integer in that pointer. That integer just happens
+ // to be the address of i.
+ // v is also the address of i.
+ // p has a base type which is marked go:notinheap, so it
+ // should not be adjusted when the stack is copied.
+ recurse(100, p, v)
+}
+func recurse(n int, p *S, v uintptr) {
+ if n > 0 {
+ recurse(n-1, p, v)
+ }
+ if uintptr(unsafe.Pointer(p)) != v {
+ panic("adjusted notinheap pointer")
+ }
+}
diff --git a/test/fixedbugs/issue41239.go b/test/fixedbugs/issue41239.go
new file mode 100644
index 0000000000..3e9ef5eb66
--- /dev/null
+++ b/test/fixedbugs/issue41239.go
@@ -0,0 +1,19 @@
+// run
+
+// Copyright 2020 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
+
+import "fmt"
+
+func main() {
+ const N = 1024
+ var a [N]int
+ x := cap(append(a[:N-1:N], 9, 9))
+ y := cap(append(a[:N:N], 9))
+ if x != y {
+ panic(fmt.Sprintf("different capacity on append: %d vs %d", x, y))
+ }
+}
diff --git a/test/fixedbugs/issue41247.go b/test/fixedbugs/issue41247.go
index 2df919c9e6..b8bd81274f 100644
--- a/test/fixedbugs/issue41247.go
+++ b/test/fixedbugs/issue41247.go
@@ -7,5 +7,5 @@
package p
func f() [2]int {
- return [...]int{2: 0} // ERROR "cannot use \[\.\.\.\]int literal \(type \[3\]int\)"
+ return [...]int{2: 0} // ERROR "cannot use \[\.\.\.\]int{...} \(type \[3\]int\)"
}
diff --git a/test/fixedbugs/issue41440.go b/test/fixedbugs/issue41440.go
new file mode 100644
index 0000000000..2b441db803
--- /dev/null
+++ b/test/fixedbugs/issue41440.go
@@ -0,0 +1,14 @@
+// errorcheck
+
+// Copyright 2020 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 p
+
+func f(...int) {}
+
+func g() {
+ var x []int
+ f(x, x...) // ERROR "have \(\[\]int, \.\.\.int\)"
+}
diff --git a/test/fixedbugs/issue41500.go b/test/fixedbugs/issue41500.go
new file mode 100644
index 0000000000..d1e4efc8fd
--- /dev/null
+++ b/test/fixedbugs/issue41500.go
@@ -0,0 +1,20 @@
+// errorcheck
+
+// Copyright 2020 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 p
+
+type s struct {
+ slice []int
+}
+
+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\)"
+}
diff --git a/test/fixedbugs/issue41575.go b/test/fixedbugs/issue41575.go
new file mode 100644
index 0000000000..d03d1c8b3e
--- /dev/null
+++ b/test/fixedbugs/issue41575.go
@@ -0,0 +1,36 @@
+// errorcheck
+
+// Copyright 2020 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 p
+
+type T1 struct { // ERROR "invalid recursive type T1\n\tLINE: T1 refers to\n\tLINE+4: T2 refers to\n\tLINE: T1$"
+ f2 T2
+}
+
+type T2 struct {
+ f1 T1
+}
+
+type a b
+type b c // ERROR "invalid recursive type b\n\tLINE: b refers to\n\tLINE+1: c refers to\n\tLINE: b$"
+type c b
+
+type d e
+type e f
+type f f // ERROR "invalid recursive type f\n\tLINE: f refers to\n\tLINE: f$"
+
+type g struct { // ERROR "invalid recursive type g\n\tLINE: g refers to\n\tLINE: g$"
+ h struct {
+ g
+ }
+}
+
+type w x
+type x y // ERROR "invalid recursive type x\n\tLINE: x refers to\n\tLINE+1: y refers to\n\tLINE+2: z refers to\n\tLINE: x$"
+type y struct{ z }
+type z [10]x
+
+type w2 w // refer to the type loop again
diff --git a/test/fixedbugs/issue41635.go b/test/fixedbugs/issue41635.go
new file mode 100644
index 0000000000..35c0034cdd
--- /dev/null
+++ b/test/fixedbugs/issue41635.go
@@ -0,0 +1,17 @@
+//errorcheck -0 -m -m
+
+// Copyright 2020 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 p
+
+func f() { // ERROR ""
+ n, m := 100, 200
+ _ = make([]byte, 1<<17) // ERROR "too large for stack" ""
+ _ = make([]byte, 100, 1<<17) // ERROR "too large for stack" ""
+ _ = make([]byte, n, 1<<17) // ERROR "too large for stack" ""
+
+ _ = make([]byte, n) // ERROR "non-constant size" ""
+ _ = make([]byte, 100, m) // ERROR "non-constant size" ""
+}
diff --git a/test/fixedbugs/issue41680.go b/test/fixedbugs/issue41680.go
new file mode 100644
index 0000000000..9dfeb7d503
--- /dev/null
+++ b/test/fixedbugs/issue41680.go
@@ -0,0 +1,21 @@
+// compile
+
+// Copyright 2020 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 p
+
+func F(s string) bool {
+ const m = 16
+ const n = 1e5
+ _ = make([]int, n)
+ return len(s) < n*m
+}
+
+func G() {
+ const n = 1e5
+ _ = make([]int, n)
+ f := n
+ var _ float64 = f
+}
diff --git a/test/fixedbugs/issue41736.go b/test/fixedbugs/issue41736.go
new file mode 100644
index 0000000000..36f127f4fb
--- /dev/null
+++ b/test/fixedbugs/issue41736.go
@@ -0,0 +1,105 @@
+// compile
+
+// Copyright 2020 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 p
+
+type I struct {
+ x int64
+}
+
+type F struct {
+ x float64
+}
+
+type C struct {
+ x *complex128
+}
+
+type D struct {
+ x complex64
+}
+
+type A [1]*complex128
+
+//go:noinline
+func (i I) X() C {
+ cx := complex(0, float64(i.x))
+ return C{&cx}
+}
+
+//go:noinline
+func (f F) X() C {
+ cx := complex(f.x, 0)
+ return C{&cx}
+}
+
+//go:noinline
+func (c C) X() C {
+ cx := complex(imag(*c.x), real(*c.x))
+ return C{&cx}
+}
+
+//go:noinline
+func (d D) X() C {
+ cx := complex(float64(imag(d.x)), -float64(real(d.x)))
+ return C{&cx}
+}
+
+//go:noinline
+func (a A) X() C {
+ cx := complex(-float64(imag(*a[0])), float64(real(*a[0])))
+ return C{&cx}
+}
+
+//go:noinline
+func (i I) id() I {
+ return i
+}
+
+//go:noinline
+func (f F) id() F {
+ return f
+}
+
+//go:noinline
+func (c C) id() C {
+ return c
+}
+
+//go:noinline
+func (d D) id() D {
+ return d
+}
+
+//go:noinline
+func (a A) id() A {
+ return a
+}
+
+type T interface {
+ X() C
+}
+
+func G(x []T) []T {
+ var y []T
+ for _, a := range x {
+ var v T
+ switch u := a.(type) {
+ case I:
+ v = u.id()
+ case F:
+ v = u.id()
+ case C:
+ v = u.id()
+ case D:
+ v = u.id()
+ case A:
+ v = u.id()
+ }
+ y = append(y, v)
+ }
+ return y
+}
diff --git a/test/fixedbugs/issue41780.go b/test/fixedbugs/issue41780.go
new file mode 100644
index 0000000000..632c144a48
--- /dev/null
+++ b/test/fixedbugs/issue41780.go
@@ -0,0 +1,39 @@
+// run
+
+// Copyright 2020 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.
+
+// Checks that conversion of CMP(x,-y) -> CMN(x,y) is only applied in correct context.
+
+package main
+
+type decimal struct {
+ d [8]byte // digits, big-endian representation
+ dp int // decimal point
+}
+
+var powtab = []int{1, 3, 6, 9, 13, 16, 19, 23, 26}
+
+//go:noinline
+func foo(d *decimal) int {
+ exp := int(d.d[1])
+ if d.dp < 0 || d.dp == 0 && d.d[0] < '5' {
+ var n int
+ if -d.dp >= len(powtab) {
+ n = 27
+ } else {
+ n = powtab[-d.dp] // incorrect CMP -> CMN substitution causes indexing panic.
+ }
+ exp += n
+ }
+ return exp
+}
+
+func main() {
+ var d decimal
+ d.d[0] = '1'
+ if foo(&d) != 1 {
+ println("FAILURE (though not the one this test was written to catch)")
+ }
+}
diff --git a/test/fixedbugs/issue41872.go b/test/fixedbugs/issue41872.go
new file mode 100644
index 0000000000..837d61ae0a
--- /dev/null
+++ b/test/fixedbugs/issue41872.go
@@ -0,0 +1,26 @@
+// run
+
+// Copyright 2020 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
+
+//go:noinline
+func f8(x int32) bool {
+ return byte(x&0xc0) == 64
+}
+
+//go:noinline
+func f16(x int32) bool {
+ return uint16(x&0x8040) == 64
+}
+
+func main() {
+ if !f8(64) {
+ panic("wanted true, got false")
+ }
+ if !f16(64) {
+ panic("wanted true, got false")
+ }
+}
diff --git a/test/fixedbugs/issue42032.go b/test/fixedbugs/issue42032.go
new file mode 100644
index 0000000000..c456b1db02
--- /dev/null
+++ b/test/fixedbugs/issue42032.go
@@ -0,0 +1,27 @@
+// run
+
+// Copyright 2020 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
+
+//go:notinheap
+type NIH struct {
+}
+
+type T struct {
+ x *NIH
+ p *int
+}
+
+var y NIH
+var z int
+
+func main() {
+ a := []T{{&y, &z}}
+ a = append(a, T{&y, &z})
+ if a[1].x == nil {
+ panic("pointer not written")
+ }
+}
diff --git a/test/fixedbugs/issue42058a.go b/test/fixedbugs/issue42058a.go
new file mode 100644
index 0000000000..67751a1b0c
--- /dev/null
+++ b/test/fixedbugs/issue42058a.go
@@ -0,0 +1,13 @@
+// errorcheck
+
+// Copyright 2020 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 p
+
+var c chan [2 << 16]byte // ERROR "channel element type too large"
+
+type T [1 << 17]byte
+
+var x chan T // ERROR "channel element type too large"
diff --git a/test/fixedbugs/issue42058b.go b/test/fixedbugs/issue42058b.go
new file mode 100644
index 0000000000..03f86ee1b1
--- /dev/null
+++ b/test/fixedbugs/issue42058b.go
@@ -0,0 +1,13 @@
+// errorcheck
+
+// Copyright 2020 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 p
+
+var c chan [2 << 16]byte // ERROR "channel element type too large"
+
+func f() {
+ _ = 42
+}
diff --git a/test/fixedbugs/issue42075.go b/test/fixedbugs/issue42075.go
new file mode 100644
index 0000000000..af85fb281d
--- /dev/null
+++ b/test/fixedbugs/issue42075.go
@@ -0,0 +1,16 @@
+// errorcheck
+
+// Copyright 2020 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 p
+
+import "unsafe"
+
+type T struct { // ERROR "recursive type"
+ x int
+ p unsafe.Pointer
+
+ f T
+}
diff --git a/test/fixedbugs/issue42076.go b/test/fixedbugs/issue42076.go
new file mode 100644
index 0000000000..3e954813c9
--- /dev/null
+++ b/test/fixedbugs/issue42076.go
@@ -0,0 +1,21 @@
+// run
+
+// Copyright 2020 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
+
+import "reflect"
+
+//go:notinheap
+type NIH struct {
+}
+
+var x, y NIH
+
+func main() {
+ if reflect.DeepEqual(&x, &y) != true {
+ panic("should report true")
+ }
+}
diff --git a/test/fixedbugs/issue42284.dir/a.go b/test/fixedbugs/issue42284.dir/a.go
new file mode 100644
index 0000000000..ffe9310be3
--- /dev/null
+++ b/test/fixedbugs/issue42284.dir/a.go
@@ -0,0 +1,30 @@
+// Copyright 2020 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 a
+
+type I interface{ M() }
+type T int
+
+func (T) M() {} // ERROR "can inline T.M"
+
+func E() I { // ERROR "can inline E"
+ return T(0) // ERROR "T\(0\) escapes to heap"
+}
+
+func F(i I) I { // ERROR "can inline F" "leaking param: i to result ~r1 level=0"
+ i = nil
+ return i
+}
+
+func g() {
+ h := E() // ERROR "inlining call to E" "T\(0\) does not escape"
+ h.M() // ERROR "devirtualizing h.M to T"
+
+ // BAD: T(0) could be stack allocated.
+ i := F(T(0)) // ERROR "inlining call to F" "T\(0\) escapes to heap"
+
+ // Testing that we do NOT devirtualize here:
+ i.M()
+}
diff --git a/test/fixedbugs/issue42284.dir/b.go b/test/fixedbugs/issue42284.dir/b.go
new file mode 100644
index 0000000000..652aa32122
--- /dev/null
+++ b/test/fixedbugs/issue42284.dir/b.go
@@ -0,0 +1,18 @@
+// Copyright 2020 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 b
+
+import "./a"
+
+func g() {
+ h := a.E() // ERROR "inlining call to a.E" "a.I\(a.T\(0\)\) does not escape"
+ h.M() // ERROR "devirtualizing h.M to a.T"
+
+ // BAD: T(0) could be stack allocated.
+ i := a.F(a.T(0)) // ERROR "inlining call to a.F" "a.T\(0\) escapes to heap"
+
+ // Testing that we do NOT devirtualize here:
+ i.M()
+}
diff --git a/test/fixedbugs/issue42284.go b/test/fixedbugs/issue42284.go
new file mode 100644
index 0000000000..e5d6173f5c
--- /dev/null
+++ b/test/fixedbugs/issue42284.go
@@ -0,0 +1,7 @@
+// errorcheckdir -0 -m
+
+// Copyright 2020 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 ignored
diff --git a/test/fixedbugs/issue4232.go b/test/fixedbugs/issue4232.go
index 935f3820c6..30d132683a 100644
--- a/test/fixedbugs/issue4232.go
+++ b/test/fixedbugs/issue4232.go
@@ -19,7 +19,7 @@ func f() {
_ = a[10:10]
_ = a[9:12] // ERROR "invalid slice index 12|index out of bounds"
_ = a[11:12] // ERROR "invalid slice index 11|index out of bounds"
- _ = a[1<<100 : 1<<110] // ERROR "overflows int" "invalid slice index 1 << 100|index out of bounds"
+ _ = a[1<<100 : 1<<110] // ERROR "overflows int|integer constant overflow" "invalid slice index 1 << 100|index out of bounds"
var s []int
_ = s[-1] // ERROR "invalid slice index -1|index out of bounds"
@@ -30,7 +30,7 @@ func f() {
_ = s[10:10]
_ = s[9:12]
_ = s[11:12]
- _ = s[1<<100 : 1<<110] // ERROR "overflows int" "invalid slice index 1 << 100|index out of bounds"
+ _ = s[1<<100 : 1<<110] // ERROR "overflows int|integer constant overflow" "invalid slice index 1 << 100|index out of bounds"
const c = "foofoofoof"
_ = c[-1] // ERROR "invalid string index -1|index out of bounds"
@@ -41,7 +41,7 @@ func f() {
_ = c[10:10]
_ = c[9:12] // ERROR "invalid slice index 12|index out of bounds"
_ = c[11:12] // ERROR "invalid slice index 11|index out of bounds"
- _ = c[1<<100 : 1<<110] // ERROR "overflows int" "invalid slice index 1 << 100|index out of bounds"
+ _ = c[1<<100 : 1<<110] // ERROR "overflows int|integer constant overflow" "invalid slice index 1 << 100|index out of bounds"
var t string
_ = t[-1] // ERROR "invalid string index -1|index out of bounds"
@@ -52,5 +52,5 @@ func f() {
_ = t[10:10]
_ = t[9:12]
_ = t[11:12]
- _ = t[1<<100 : 1<<110] // ERROR "overflows int" "invalid slice index 1 << 100|index out of bounds"
+ _ = t[1<<100 : 1<<110] // ERROR "overflows int|integer constant overflow" "invalid slice index 1 << 100|index out of bounds"
}
diff --git a/test/fixedbugs/issue42401.dir/a.go b/test/fixedbugs/issue42401.dir/a.go
new file mode 100644
index 0000000000..75f8e7f91f
--- /dev/null
+++ b/test/fixedbugs/issue42401.dir/a.go
@@ -0,0 +1,11 @@
+// Copyright 2020 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 a
+
+var s string
+
+func init() { s = "a" }
+
+func Get() string { return s }
diff --git a/test/fixedbugs/issue42401.dir/b.go b/test/fixedbugs/issue42401.dir/b.go
new file mode 100644
index 0000000000..a834f4efe8
--- /dev/null
+++ b/test/fixedbugs/issue42401.dir/b.go
@@ -0,0 +1,24 @@
+// Copyright 2020 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
+
+import (
+ "./a"
+ _ "unsafe"
+)
+
+//go:linkname s a.s
+var s string
+
+func main() {
+ if a.Get() != "a" {
+ panic("FAIL")
+ }
+
+ s = "b"
+ if a.Get() != "b" {
+ panic("FAIL")
+ }
+}
diff --git a/test/fixedbugs/issue42401.go b/test/fixedbugs/issue42401.go
new file mode 100644
index 0000000000..794d5b01b5
--- /dev/null
+++ b/test/fixedbugs/issue42401.go
@@ -0,0 +1,10 @@
+// rundir
+
+// Copyright 2020 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.
+
+// Issue 42401: linkname doesn't work correctly when a variable symbol
+// is both imported (possibly through inlining) and linkname'd.
+
+package ignored
diff --git a/test/fixedbugs/issue42568.go b/test/fixedbugs/issue42568.go
new file mode 100644
index 0000000000..834fdc58f3
--- /dev/null
+++ b/test/fixedbugs/issue42568.go
@@ -0,0 +1,25 @@
+// compile
+
+// Copyright 2020 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.
+
+// Ensure that late expansion correctly handles an OpIData with type interface{}
+
+package p
+
+type S struct{}
+
+func (S) M() {}
+
+type I interface {
+ M()
+}
+
+func f(i I) {
+ o := i.(interface{})
+ if _, ok := i.(*S); ok {
+ o = nil
+ }
+ println(o)
+}
diff --git a/test/fixedbugs/issue42587.go b/test/fixedbugs/issue42587.go
new file mode 100644
index 0000000000..d10ba979d5
--- /dev/null
+++ b/test/fixedbugs/issue42587.go
@@ -0,0 +1,15 @@
+// compile
+
+// Copyright 2020 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 p
+
+func f() {
+ var i, j int
+ _ = func() {
+ i = 32
+ j = j>>i | len([]int{})
+ }
+}
diff --git a/test/fixedbugs/issue42686.go b/test/fixedbugs/issue42686.go
new file mode 100644
index 0000000000..962bdd35cb
--- /dev/null
+++ b/test/fixedbugs/issue42686.go
@@ -0,0 +1,11 @@
+// compile -d=fieldtrack
+
+// Copyright 2020 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 p
+
+func a(x struct{ f int }) { _ = x.f }
+
+func b() { a(struct{ f int }{}) }
diff --git a/test/fixedbugs/issue42703.go b/test/fixedbugs/issue42703.go
new file mode 100644
index 0000000000..15f7a915e6
--- /dev/null
+++ b/test/fixedbugs/issue42703.go
@@ -0,0 +1,19 @@
+// run
+
+// Copyright 2020 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
+
+var ok [2]bool
+
+func main() {
+ f()()
+ if !ok[0] || !ok[1] {
+ panic("FAIL")
+ }
+}
+
+func f() func() { ok[0] = true; return g }
+func g() { ok[1] = true }
diff --git a/test/fixedbugs/issue42727.go b/test/fixedbugs/issue42727.go
new file mode 100644
index 0000000000..40081708b1
--- /dev/null
+++ b/test/fixedbugs/issue42727.go
@@ -0,0 +1,23 @@
+// compile
+
+// Copyright 2020 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.
+
+// Ensure that late expansion correctly handles an OpLoad with type interface{}
+
+package p
+
+type iface interface {
+ m()
+}
+
+type it interface{}
+
+type makeIface func() iface
+
+func f() {
+ var im makeIface
+ e := im().(it)
+ _ = &e
+}
diff --git a/test/fixedbugs/issue42753.go b/test/fixedbugs/issue42753.go
new file mode 100644
index 0000000000..a998d1d3b3
--- /dev/null
+++ b/test/fixedbugs/issue42753.go
@@ -0,0 +1,13 @@
+// compile -d=ssa/check/on
+
+// Copyright 2020 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
+
+func f() uint32 {
+ s := "\x01"
+ x := -int32(s[0])
+ return uint32(x) & 0x7fffffff
+}
diff --git a/test/fixedbugs/issue42784.go b/test/fixedbugs/issue42784.go
new file mode 100644
index 0000000000..e2b06e9307
--- /dev/null
+++ b/test/fixedbugs/issue42784.go
@@ -0,0 +1,26 @@
+// compile
+
+// Copyright 2020 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.
+
+// Ensure that late expansion correctly set OpLoad argument type interface{}
+
+package p
+
+type iface interface {
+ m()
+}
+
+type it interface{}
+
+type makeIface func() iface
+
+func f() {
+ var im makeIface
+ e := im().(it)
+ g(e)
+}
+
+//go:noinline
+func g(i it) {}
diff --git a/test/fixedbugs/issue42790.go b/test/fixedbugs/issue42790.go
new file mode 100644
index 0000000000..d83a02247a
--- /dev/null
+++ b/test/fixedbugs/issue42790.go
@@ -0,0 +1,9 @@
+// compile
+
+// Copyright 2020 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 p
+
+const _ = -uint(len(string(1<<32)) - len("\uFFFD"))
diff --git a/test/fixedbugs/issue42876.go b/test/fixedbugs/issue42876.go
new file mode 100644
index 0000000000..67cf4919ac
--- /dev/null
+++ b/test/fixedbugs/issue42876.go
@@ -0,0 +1,18 @@
+// run
+
+// Copyright 2020 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
+
+var x = [4]int32{-0x7fffffff, 0x7fffffff, 2, 4}
+
+func main() {
+ if x[0] > x[1] {
+ panic("fail 1")
+ }
+ if x[2]&x[3] < 0 {
+ panic("fail 2") // Fails here
+ }
+}
diff --git a/test/fixedbugs/issue42944.go b/test/fixedbugs/issue42944.go
new file mode 100644
index 0000000000..bb947bc609
--- /dev/null
+++ b/test/fixedbugs/issue42944.go
@@ -0,0 +1,24 @@
+// errorcheck -0 -live
+
+// Copyright 2020 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.
+
+// Issue 42944: address of callee args area should only be short-lived
+// and never across a call.
+
+package p
+
+type T [10]int // trigger DUFFCOPY when passing by value, so it uses the address
+
+func F() {
+ var x T
+ var i int
+ for {
+ x = G(i) // no autotmp live at this and next calls
+ H(i, x)
+ }
+}
+
+func G(int) T
+func H(int, T)
diff --git a/test/fixedbugs/issue43099.go b/test/fixedbugs/issue43099.go
new file mode 100644
index 0000000000..16f18e5f96
--- /dev/null
+++ b/test/fixedbugs/issue43099.go
@@ -0,0 +1,34 @@
+// compile
+
+// Copyright 2020 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.
+
+// Check to make sure we don't try to constant fold a divide by zero.
+// This is a tricky test, as we need a value that's not recognized as 0
+// until lowering (otherwise it gets handled in a different path).
+
+package p
+
+func f() {
+ var i int
+ var s string
+ for i > 0 {
+ _ = s[0]
+ i++
+ }
+
+ var c chan int
+ c <- 1 % i
+}
+
+func f32() uint32 {
+ s := "\x00\x00\x00\x00"
+ c := uint32(s[0]) | uint32(s[1])<<8 | uint32(s[2])<<16 | uint32(s[3])<<24
+ return 1 / c
+}
+func f64() uint64 {
+ s := "\x00\x00\x00\x00\x00\x00\x00\x00"
+ c := uint64(s[0]) | uint64(s[1])<<8 | uint64(s[2])<<16 | uint64(s[3])<<24 | uint64(s[4])<<32 | uint64(s[5])<<40 | uint64(s[6])<<48 | uint64(s[7])<<56
+ return 1 / c
+}
diff --git a/test/fixedbugs/issue43111.go b/test/fixedbugs/issue43111.go
new file mode 100644
index 0000000000..76d7beb084
--- /dev/null
+++ b/test/fixedbugs/issue43111.go
@@ -0,0 +1,70 @@
+// run
+
+// Copyright 2020 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
+
+var ch chan int
+var x int
+
+func f() int {
+ close(ch)
+ ch = nil
+ return 0
+}
+
+func g() int {
+ ch = nil
+ x = 0
+ return 0
+}
+
+func main() {
+ var nilch chan int
+ var v int
+ var ok bool
+ _, _ = v, ok
+
+ ch = make(chan int)
+ select {
+ case <-ch:
+ case nilch <- f():
+ }
+
+ ch = make(chan int)
+ select {
+ case v = <-ch:
+ case nilch <- f():
+ }
+
+ ch = make(chan int)
+ select {
+ case v := <-ch: _ = v
+ case nilch <- f():
+ }
+
+ ch = make(chan int)
+ select {
+ case v, ok = <-ch:
+ case nilch <- f():
+ }
+
+ ch = make(chan int)
+ select {
+ case v, ok := <-ch: _, _ = v, ok
+ case nilch <- f():
+ }
+
+ ch1 := make(chan int, 1)
+ ch = ch1
+ x = 42
+ select {
+ case ch <- x:
+ case nilch <- g():
+ }
+ if got := <-ch1; got != 42 {
+ panic(got)
+ }
+}
diff --git a/test/fixedbugs/issue43112.go b/test/fixedbugs/issue43112.go
new file mode 100644
index 0000000000..e36627a015
--- /dev/null
+++ b/test/fixedbugs/issue43112.go
@@ -0,0 +1,41 @@
+// compile
+
+// Copyright 2020 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 p
+
+type Symbol interface{}
+
+type Value interface {
+ String() string
+}
+
+type Object interface {
+ String() string
+}
+
+type Scope struct {
+ outer *Scope
+ elems map[string]Object
+}
+
+func (s *Scope) findouter(name string) (*Scope, Object) {
+ return s.outer.findouter(name)
+}
+
+func (s *Scope) Resolve(name string) (sym Symbol) {
+ if _, obj := s.findouter(name); obj != nil {
+ sym = obj.(Symbol)
+ }
+ return
+}
+
+type ScopeName struct {
+ scope *Scope
+}
+
+func (n *ScopeName) Get(name string) (Value, error) {
+ return n.scope.Resolve(name).(Value), nil
+}
diff --git a/test/fixedbugs/issue4348.go b/test/fixedbugs/issue4348.go
index c59b6b8caa..8b1a56c1d5 100644
--- a/test/fixedbugs/issue4348.go
+++ b/test/fixedbugs/issue4348.go
@@ -1,4 +1,4 @@
-// compile
+// skip
// Copyright 2012 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
@@ -7,6 +7,8 @@
// Issue 4348. After switch to 64-bit ints the compiler generates
// illegal instructions when using large array bounds or indexes.
+// Skip. We reject symbols larger that 2GB (Issue #9862).
+
package main
// 1<<32 on a 64-bit machine, 1 otherwise.
diff --git a/test/fixedbugs/issue4458.go b/test/fixedbugs/issue4458.go
index 98ffea79dc..59cfa9fcee 100644
--- a/test/fixedbugs/issue4458.go
+++ b/test/fixedbugs/issue4458.go
@@ -16,5 +16,5 @@ func (T) foo() {}
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"
}
diff --git a/test/fixedbugs/issue5172.go b/test/fixedbugs/issue5172.go
index 0339935b64..ed92ac6ff2 100644
--- a/test/fixedbugs/issue5172.go
+++ b/test/fixedbugs/issue5172.go
@@ -21,6 +21,6 @@ func main() {
go f.bar() // ERROR "undefined"
defer f.bar() // ERROR "undefined"
- t := T{1} // ERROR "too many values"
+ t := T{1} // ERROR "too many"
go t.Bar()
}
diff --git a/test/fixedbugs/issue6750.go b/test/fixedbugs/issue6750.go
index dbbb454435..f62a85009c 100644
--- a/test/fixedbugs/issue6750.go
+++ b/test/fixedbugs/issue6750.go
@@ -18,5 +18,5 @@ func printmany(nums ...int) {
func main() {
printmany(1, 2, 3)
printmany([]int{1, 2, 3}...)
- printmany(1, "abc", []int{2, 3}...) // ERROR "too many arguments in call to printmany\n\thave \(number, string, \[\]int\.\.\.\)\n\twant \(...int\)"
+ printmany(1, "abc", []int{2, 3}...) // ERROR "too many arguments in call to printmany\n\thave \(number, string, \.\.\.int\)\n\twant \(...int\)"
}
diff --git a/test/fixedbugs/issue6977.go b/test/fixedbugs/issue6977.go
index 0f657eec41..4525e406b8 100644
--- a/test/fixedbugs/issue6977.go
+++ b/test/fixedbugs/issue6977.go
@@ -34,7 +34,7 @@ type U3 interface { M; m() }
type U4 interface { M; M; M }
type U5 interface { U1; U2; U3; U4 }
-type U6 interface { m(); m() } // ERROR "duplicate method m"
-type U7 interface { M32; m() } // ERROR "duplicate method m"
-type U8 interface { m(); M32 } // ERROR "duplicate method m"
-type U9 interface { M32; M64 } // ERROR "duplicate method m"
+type U6 interface { m(); m() } // ERROR "duplicate method .*m"
+type U7 interface { M32; m() } // ERROR "duplicate method .*m"
+type U8 interface { m(); M32 } // ERROR "duplicate method .*m"
+type U9 interface { M32; M64 } // ERROR "duplicate method .*m"
diff --git a/test/fixedbugs/issue7921.go b/test/fixedbugs/issue7921.go
index a8efc8dd9e..5dce557ca3 100644
--- a/test/fixedbugs/issue7921.go
+++ b/test/fixedbugs/issue7921.go
@@ -18,12 +18,12 @@ func bufferNotEscape() string {
// can be stack-allocated.
var b bytes.Buffer
b.WriteString("123")
- b.Write([]byte{'4'}) // ERROR "\[\]byte literal does not escape$"
+ b.Write([]byte{'4'}) // ERROR "\[\]byte{...} does not escape$"
return b.String() // ERROR "inlining call to bytes.\(\*Buffer\).String$" "string\(bytes.b.buf\[bytes.b.off:\]\) escapes to heap$"
}
func bufferNoEscape2(xs []string) int { // ERROR "xs does not escape$"
- b := bytes.NewBuffer(make([]byte, 0, 64)) // ERROR "&bytes.Buffer literal does not escape$" "make\(\[\]byte, 0, 64\) does not escape$" "inlining call to bytes.NewBuffer$"
+ b := bytes.NewBuffer(make([]byte, 0, 64)) // ERROR "&bytes.Buffer{...} does not escape$" "make\(\[\]byte, 0, 64\) does not escape$" "inlining call to bytes.NewBuffer$"
for _, x := range xs {
b.WriteString(x)
}
@@ -31,7 +31,7 @@ func bufferNoEscape2(xs []string) int { // ERROR "xs does not escape$"
}
func bufferNoEscape3(xs []string) string { // ERROR "xs does not escape$"
- b := bytes.NewBuffer(make([]byte, 0, 64)) // ERROR "&bytes.Buffer literal does not escape$" "make\(\[\]byte, 0, 64\) does not escape$" "inlining call to bytes.NewBuffer$"
+ b := bytes.NewBuffer(make([]byte, 0, 64)) // ERROR "&bytes.Buffer{...} does not escape$" "make\(\[\]byte, 0, 64\) does not escape$" "inlining call to bytes.NewBuffer$"
for _, x := range xs {
b.WriteString(x)
b.WriteByte(',')
@@ -41,13 +41,13 @@ func bufferNoEscape3(xs []string) string { // ERROR "xs does not escape$"
func bufferNoEscape4() []byte {
var b bytes.Buffer
- b.Grow(64) // ERROR "bufferNoEscape4 ignoring self-assignment in bytes.b.buf = bytes.b.buf\[:bytes.m·3\]$" "inlining call to bytes.\(\*Buffer\).Grow$"
+ b.Grow(64) // ERROR "bufferNoEscape4 ignoring self-assignment in bytes.b.buf = bytes.b.buf\[:bytes.m·3\]$" "inlining call to bytes.\(\*Buffer\).Grow$"
useBuffer(&b)
return b.Bytes() // ERROR "inlining call to bytes.\(\*Buffer\).Bytes$"
}
func bufferNoEscape5() { // ERROR "can inline bufferNoEscape5$"
- b := bytes.NewBuffer(make([]byte, 0, 128)) // ERROR "&bytes.Buffer literal does not escape$" "make\(\[\]byte, 0, 128\) does not escape$" "inlining call to bytes.NewBuffer$"
+ b := bytes.NewBuffer(make([]byte, 0, 128)) // ERROR "&bytes.Buffer{...} does not escape$" "make\(\[\]byte, 0, 128\) does not escape$" "inlining call to bytes.NewBuffer$"
useBuffer(b)
}
diff --git a/test/fixedbugs/issue8183.go b/test/fixedbugs/issue8183.go
index 531dd4dbf8..caac667346 100644
--- a/test/fixedbugs/issue8183.go
+++ b/test/fixedbugs/issue8183.go
@@ -12,12 +12,12 @@ const (
ok = byte(iota + 253)
bad
barn
- bard // ERROR "constant 256 overflows byte"
+ bard // ERROR "constant 256 overflows byte|integer constant overflow"
)
const (
c = len([1 - iota]int{})
d
- e // ERROR "array bound must be non-negative"
- f // ERROR "array bound must be non-negative"
+ e // ERROR "array bound must be non-negative|negative array bound"
+ f // ERROR "array bound must be non-negative|negative array bound"
)
diff --git a/test/fixedbugs/issue9036.go b/test/fixedbugs/issue9036.go
index 38f06c30c8..e3d394f7f2 100644
--- a/test/fixedbugs/issue9036.go
+++ b/test/fixedbugs/issue9036.go
@@ -18,8 +18,8 @@ const (
)
const x4 = 0x1p10 // valid hexadecimal float
-const x5 = 1p10 // ERROR "'p' exponent requires hexadecimal mantissa"
-const x6 = 0P0 // ERROR "'P' exponent requires hexadecimal mantissa"
+const x5 = 1p10 // ERROR "'p' exponent requires hexadecimal mantissa|invalid prefix"
+const x6 = 0P0 // ERROR "'P' exponent requires hexadecimal mantissa|invalid prefix"
func main() {
fmt.Printf("%g %T\n", x1, x1)
diff --git a/test/fixedbugs/issue9076.go b/test/fixedbugs/issue9076.go
index 8daf12fee8..1613d5ede3 100644
--- a/test/fixedbugs/issue9076.go
+++ b/test/fixedbugs/issue9076.go
@@ -11,5 +11,5 @@ package main
import "unsafe"
const Hundred = 100
-var _ int32 = 100/unsafe.Sizeof(int(0)) + 1 // GC_ERROR "100 \/ unsafe.Sizeof\(int\(0\)\) \+ 1"
-var _ int32 = Hundred/unsafe.Sizeof(int(0)) + 1 // GC_ERROR "Hundred \/ unsafe.Sizeof\(int\(0\)\) \+ 1"
+var _ int32 = 100/unsafe.Sizeof(int(0)) + 1 // ERROR "100 \/ unsafe.Sizeof\(int\(0\)\) \+ 1|incompatible type"
+var _ int32 = Hundred/unsafe.Sizeof(int(0)) + 1 // ERROR "Hundred \/ unsafe.Sizeof\(int\(0\)\) \+ 1|incompatible type"
diff --git a/test/fixedbugs/issue9083.go b/test/fixedbugs/issue9083.go
index 8fbd78be7a..d4762f802e 100644
--- a/test/fixedbugs/issue9083.go
+++ b/test/fixedbugs/issue9083.go
@@ -19,4 +19,5 @@ func main() {
x = make(chan int) // ERROR "cannot use make\(chan int\)|incompatible"
x = make(chan int, 0) // ERROR "cannot use make\(chan int, 0\)|incompatible"
x = make(chan int, zero) // ERROR "cannot use make\(chan int, zero\)|incompatible"
+ _ = x
}
diff --git a/test/fixedbugs/issue9370.go b/test/fixedbugs/issue9370.go
index 120af35397..6cc8d5b9e5 100644
--- a/test/fixedbugs/issue9370.go
+++ b/test/fixedbugs/issue9370.go
@@ -33,95 +33,95 @@ var (
var (
_ = e == c
_ = e != c
- _ = e >= c // ERROR "invalid operation.*not defined"
+ _ = e >= c // ERROR "invalid operation.*not defined|invalid comparison"
_ = c == e
_ = c != e
- _ = c >= e // ERROR "invalid operation.*not defined"
+ _ = c >= e // ERROR "invalid operation.*not defined|invalid comparison"
_ = i == c
_ = i != c
- _ = i >= c // ERROR "invalid operation.*not defined"
+ _ = i >= c // ERROR "invalid operation.*not defined|invalid comparison"
_ = c == i
_ = c != i
- _ = c >= i // ERROR "invalid operation.*not defined"
+ _ = c >= i // ERROR "invalid operation.*not defined|invalid comparison"
_ = e == n
_ = e != n
- _ = e >= n // ERROR "invalid operation.*not defined"
+ _ = e >= n // ERROR "invalid operation.*not defined|invalid comparison"
_ = n == e
_ = n != e
- _ = n >= e // ERROR "invalid operation.*not defined"
+ _ = n >= e // ERROR "invalid operation.*not defined|invalid comparison"
// i and n are not assignable to each other
- _ = i == n // ERROR "invalid operation.*mismatched types"
- _ = i != n // ERROR "invalid operation.*mismatched types"
- _ = i >= n // ERROR "invalid operation.*mismatched types"
- _ = n == i // ERROR "invalid operation.*mismatched types"
- _ = n != i // ERROR "invalid operation.*mismatched types"
- _ = n >= i // ERROR "invalid operation.*mismatched types"
+ _ = i == n // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = i != n // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = i >= n // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = n == i // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = n != i // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = n >= i // ERROR "invalid operation.*mismatched types|incompatible types"
_ = e == 1
_ = e != 1
- _ = e >= 1 // ERROR "invalid operation.*not defined"
+ _ = e >= 1 // ERROR "invalid operation.*not defined|invalid comparison"
_ = 1 == e
_ = 1 != e
- _ = 1 >= e // ERROR "invalid operation.*not defined"
+ _ = 1 >= e // ERROR "invalid operation.*not defined|invalid comparison"
- _ = i == 1 // ERROR "invalid operation.*mismatched types"
- _ = i != 1 // ERROR "invalid operation.*mismatched types"
- _ = i >= 1 // ERROR "invalid operation.*mismatched types"
- _ = 1 == i // ERROR "invalid operation.*mismatched types"
- _ = 1 != i // ERROR "invalid operation.*mismatched types"
- _ = 1 >= i // ERROR "invalid operation.*mismatched types"
+ _ = i == 1 // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = i != 1 // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = i >= 1 // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = 1 == i // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = 1 != i // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = 1 >= i // ERROR "invalid operation.*mismatched types|incompatible types"
- _ = e == f // ERROR "invalid operation.*not defined"
- _ = e != f // ERROR "invalid operation.*not defined"
- _ = e >= f // ERROR "invalid operation.*not defined"
- _ = f == e // ERROR "invalid operation.*not defined"
- _ = f != e // ERROR "invalid operation.*not defined"
- _ = f >= e // ERROR "invalid operation.*not defined"
+ _ = e == f // ERROR "invalid operation.*not defined|invalid operation"
+ _ = e != f // ERROR "invalid operation.*not defined|invalid operation"
+ _ = e >= f // ERROR "invalid operation.*not defined|invalid comparison"
+ _ = f == e // ERROR "invalid operation.*not defined|invalid operation"
+ _ = f != e // ERROR "invalid operation.*not defined|invalid operation"
+ _ = f >= e // ERROR "invalid operation.*not defined|invalid comparison"
- _ = i == f // ERROR "invalid operation.*mismatched types"
- _ = i != f // ERROR "invalid operation.*mismatched types"
- _ = i >= f // ERROR "invalid operation.*mismatched types"
- _ = f == i // ERROR "invalid operation.*mismatched types"
- _ = f != i // ERROR "invalid operation.*mismatched types"
- _ = f >= i // ERROR "invalid operation.*mismatched types"
+ _ = i == f // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = i != f // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = i >= f // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = f == i // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = f != i // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = f >= i // ERROR "invalid operation.*mismatched types|incompatible types"
- _ = e == g // ERROR "invalid operation.*not defined"
- _ = e != g // ERROR "invalid operation.*not defined"
- _ = e >= g // ERROR "invalid operation.*not defined"
- _ = g == e // ERROR "invalid operation.*not defined"
- _ = g != e // ERROR "invalid operation.*not defined"
- _ = g >= e // ERROR "invalid operation.*not defined"
+ _ = e == g // ERROR "invalid operation.*not defined|invalid operation"
+ _ = e != g // ERROR "invalid operation.*not defined|invalid operation"
+ _ = e >= g // ERROR "invalid operation.*not defined|invalid comparison"
+ _ = g == e // ERROR "invalid operation.*not defined|invalid operation"
+ _ = g != e // ERROR "invalid operation.*not defined|invalid operation"
+ _ = g >= e // ERROR "invalid operation.*not defined|invalid comparison"
- _ = i == g // ERROR "invalid operation.*not defined"
- _ = i != g // ERROR "invalid operation.*not defined"
- _ = i >= g // ERROR "invalid operation.*not defined"
- _ = g == i // ERROR "invalid operation.*not defined"
- _ = g != i // ERROR "invalid operation.*not defined"
- _ = g >= i // ERROR "invalid operation.*not defined"
+ _ = i == g // ERROR "invalid operation.*not defined|invalid operation"
+ _ = i != g // ERROR "invalid operation.*not defined|invalid operation"
+ _ = i >= g // ERROR "invalid operation.*not defined|invalid comparison"
+ _ = g == i // ERROR "invalid operation.*not defined|invalid operation"
+ _ = g != i // ERROR "invalid operation.*not defined|invalid operation"
+ _ = g >= i // ERROR "invalid operation.*not defined|invalid comparison"
- _ = _ == e // ERROR "cannot use _ as value"
- _ = _ == i // ERROR "cannot use _ as value"
- _ = _ == c // ERROR "cannot use _ as value"
- _ = _ == n // ERROR "cannot use _ as value"
- _ = _ == f // ERROR "cannot use _ as value"
- _ = _ == g // ERROR "cannot use _ as value"
+ _ = _ == e // ERROR "cannot use .*_.* as value"
+ _ = _ == i // ERROR "cannot use .*_.* as value"
+ _ = _ == c // ERROR "cannot use .*_.* as value"
+ _ = _ == n // ERROR "cannot use .*_.* as value"
+ _ = _ == f // ERROR "cannot use .*_.* as value"
+ _ = _ == g // ERROR "cannot use .*_.* as value"
- _ = e == _ // ERROR "cannot use _ as value"
- _ = i == _ // ERROR "cannot use _ as value"
- _ = c == _ // ERROR "cannot use _ as value"
- _ = n == _ // ERROR "cannot use _ as value"
- _ = f == _ // ERROR "cannot use _ as value"
- _ = g == _ // ERROR "cannot use _ as value"
+ _ = e == _ // ERROR "cannot use .*_.* as value"
+ _ = i == _ // ERROR "cannot use .*_.* as value"
+ _ = c == _ // ERROR "cannot use .*_.* as value"
+ _ = n == _ // ERROR "cannot use .*_.* as value"
+ _ = f == _ // ERROR "cannot use .*_.* as value"
+ _ = g == _ // ERROR "cannot use .*_.* as value"
- _ = _ == _ // ERROR "cannot use _ as value"
+ _ = _ == _ // ERROR "cannot use .*_.* as value"
- _ = e ^ c // ERROR "invalid operation.*mismatched types"
- _ = c ^ e // ERROR "invalid operation.*mismatched types"
- _ = 1 ^ e // ERROR "invalid operation.*mismatched types"
- _ = e ^ 1 // ERROR "invalid operation.*mismatched types"
+ _ = e ^ c // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = c ^ e // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = 1 ^ e // ERROR "invalid operation.*mismatched types|incompatible types"
+ _ = e ^ 1 // ERROR "invalid operation.*mismatched types|incompatible types"
_ = 1 ^ c
_ = c ^ 1
)