]> Cypherpunks.ru repositories - gostls13.git/commitdiff
[dev.typeparams] all: merge dev.regabi into dev.typeparams
authorRobert Griesemer <gri@golang.org>
Mon, 21 Dec 2020 21:41:23 +0000 (13:41 -0800)
committerRobert Griesemer <gri@golang.org>
Tue, 22 Dec 2020 17:50:13 +0000 (17:50 +0000)
The files below had conflicts that required manual resolution.
The unresolved conflict in noder.go was just in the import
declaration (trivial). All the other conflicts are in tests
where the ERROR regex patterns changed to accomodate gccgo
error messages (incoming from dev.regabi), and to accomodate
types2 in dev.typeparams. They were resolved by accepting the
dev.regabi changes (so as not to lose them) and then by re-
applying whatever changes needed to make them pass with types2.
Finally, the new test mainsig.go was excluded from run.go when
using types2 due to issue #43308.

src/cmd/compile/internal/gc/noder.go
test/fixedbugs/bug13343.go
test/fixedbugs/bug462.go
test/fixedbugs/issue10975.go
test/fixedbugs/issue11326.go
test/fixedbugs/issue11361.go
test/fixedbugs/issue11371.go
test/fixedbugs/issue11674.go
test/fixedbugs/issue13365.go
test/fixedbugs/issue13471.go
test/fixedbugs/issue14136.go
test/fixedbugs/issue14321.go
test/fixedbugs/issue14729.go
test/fixedbugs/issue15898.go
test/fixedbugs/issue16439.go
test/fixedbugs/issue17588.go
test/fixedbugs/issue19323.go
test/fixedbugs/issue19482.go
test/fixedbugs/issue19880.go
test/fixedbugs/issue20185.go
test/fixedbugs/issue20227.go
test/fixedbugs/issue20415.go
test/fixedbugs/issue20749.go
test/fixedbugs/issue22794.go
test/fixedbugs/issue22822.go
test/fixedbugs/issue22921.go
test/fixedbugs/issue23823.go
test/fixedbugs/issue25727.go
test/fixedbugs/issue26616.go
test/fixedbugs/issue28079c.go
test/fixedbugs/issue28450.go
test/fixedbugs/issue30085.go
test/fixedbugs/issue30087.go
test/fixedbugs/issue35291.go
test/fixedbugs/issue38745.go
test/fixedbugs/issue41247.go
test/fixedbugs/issue41440.go
test/fixedbugs/issue41500.go
test/fixedbugs/issue4215.go
test/fixedbugs/issue6402.go
test/fixedbugs/issue6772.go
test/fixedbugs/issue7129.go
test/fixedbugs/issue7150.go
test/fixedbugs/issue7153.go
test/fixedbugs/issue7310.go
test/fixedbugs/issue8183.go
test/fixedbugs/issue8385.go
test/fixedbugs/issue8438.go
test/fixedbugs/issue8440.go
test/fixedbugs/issue8507.go
test/fixedbugs/issue9370.go
test/fixedbugs/issue9521.go

Change-Id: I26e6e326fde6e3fca5400711a253834d710ab7f4

49 files changed:
1  2 
src/cmd/compile/internal/gc/go.go
src/cmd/compile/internal/gc/main.go
src/cmd/compile/internal/gc/noder.go
src/go/types/stmt.go
test/fixedbugs/bug462.go
test/fixedbugs/issue10975.go
test/fixedbugs/issue11326.go
test/fixedbugs/issue11361.go
test/fixedbugs/issue11371.go
test/fixedbugs/issue11674.go
test/fixedbugs/issue13365.go
test/fixedbugs/issue13471.go
test/fixedbugs/issue14136.go
test/fixedbugs/issue14321.go
test/fixedbugs/issue14729.go
test/fixedbugs/issue15898.go
test/fixedbugs/issue16439.go
test/fixedbugs/issue17588.go
test/fixedbugs/issue19323.go
test/fixedbugs/issue19482.go
test/fixedbugs/issue19880.go
test/fixedbugs/issue20185.go
test/fixedbugs/issue20415.go
test/fixedbugs/issue20749.go
test/fixedbugs/issue22794.go
test/fixedbugs/issue22822.go
test/fixedbugs/issue23823.go
test/fixedbugs/issue25727.go
test/fixedbugs/issue26616.go
test/fixedbugs/issue28079c.go
test/fixedbugs/issue28450.go
test/fixedbugs/issue30085.go
test/fixedbugs/issue30087.go
test/fixedbugs/issue35291.go
test/fixedbugs/issue38745.go
test/fixedbugs/issue41500.go
test/fixedbugs/issue4215.go
test/fixedbugs/issue6402.go
test/fixedbugs/issue6772.go
test/fixedbugs/issue7129.go
test/fixedbugs/issue7150.go
test/fixedbugs/issue7153.go
test/fixedbugs/issue7310.go
test/fixedbugs/issue8183.go
test/fixedbugs/issue8438.go
test/fixedbugs/issue8440.go
test/fixedbugs/issue9083.go
test/fixedbugs/issue9370.go
test/run.go

Simple merge
index bbc228b313d696e85b053f49e20495749fe3b82b,7f7cd63cdfdde6127df8e500468fc4ee011c8456..ff5c208d0230cb8e12c141cfa7fd7d03e57fcad8
@@@ -221,13 -225,9 +225,14 @@@ func Main(archInit func(*Arch)) 
  
        timings.Start("fe", "parse")
        lines := parseFiles(flag.Args())
+       cgoSymABIs()
        timings.Stop()
        timings.AddEvent(int64(lines), "lines")
 +      if base.Flag.G != 0 && base.Flag.G < 3 {
 +              // can only parse generic code for now
 +              base.ExitIfErrors()
 +              return
 +      }
  
        finishUniverse()
  
index 65df405e24d3f138d330382736e7649a4fb05da7,ee01423833cb5102373190df730a6ff257071b25..e3f3e1813212f65bdcfa127df363b65fd4771930
@@@ -22,17 -20,15 +22,16 @@@ import 
        "cmd/compile/internal/ir"
        "cmd/compile/internal/syntax"
        "cmd/compile/internal/types"
-       "cmd/internal/obj"
 +      "cmd/compile/internal/types2"
        "cmd/internal/objabi"
        "cmd/internal/src"
  )
  
  // parseFiles concurrently parses files into *syntax.File structures.
  // Each declaration in every *syntax.File is converted to a syntax tree
- // and its root represented by *Node is appended to xtop.
+ // and its root represented by *Node is appended to Target.Decls.
  // Returns the total count of parsed lines.
 -func parseFiles(filenames []string) uint {
 +func parseFiles(filenames []string) (lines uint) {
        noders := make([]*noder, 0, len(filenames))
        // Limit the number of simultaneously open files.
        sem := make(chan struct{}, runtime.GOMAXPROCS(0)+10)
@@@ -253,14 -151,9 +253,15 @@@ type noder struct 
  
        // scopeVars is a stack tracking the number of variables declared in the
        // current function at the moment each open scope was opened.
-       scopeVars []int
+       trackScopes bool
+       scopeVars   []int
  
 +      // typeInfo provides access to the type information computed by the new
 +      // typechecker. It is only present if -G is set, and all noders point to
 +      // the same types.Info. For now this is a local field, if need be we can
 +      // make it global.
 +      typeInfo *types2.Info
 +
        lastCloseScopePos syntax.Pos
  }
  
Simple merge
Simple merge
index 415b71b945781e3ee4a5e25b5a0abc81408b74d5,933badfd2f3ebd40b9b2b536d482f2ddb91da114..89ef23c1a86e555cb175daedb55c550b3c874015
@@@ -10,7 -10,7 +10,7 @@@
  package main
  
  type I interface {
-       int // ERROR "interface contains embedded non-interface int|not an interface"
 -      int // ERROR "interface contains embedded non-interface"
++      int // ERROR "interface contains embedded non-interface|not an interface"
  }
  
  func New() I {
index f6cb109ba72b1b8bbe17fedb97724890845ba9e7,e0c6a9f0baa3d2a5c97f4240dac783ca310640b6..7f08e7fa3c254cc19c77617a8b145eea1f6a3efd
@@@ -18,14 -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|exponent too large"
 -      var _ = 1e64645699   // ERROR "1e\+64645699 overflows float64|floating-point constant overflow|exponent too large"
 -      var _ = 1e6464569    // ERROR "1e\+6464569 overflows float64|floating-point constant overflow|exponent too large"
 -      var _ = 1e646456     // ERROR "1e\+646456 overflows float64|floating-point constant overflow|exponent too large"
 -      var _ = 1e64645      // ERROR "1e\+64645 overflows float64|floating-point constant overflow|exponent too large"
 -      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 _ = 1e646456992  // ERROR "1e\+646456992 overflows float64|floating-point constant overflow|exponent too large|overflows float64"
++      var _ = 1e64645699   // ERROR "1e\+64645699 overflows float64|floating-point constant overflow|exponent too large|overflows float64"
++      var _ = 1e6464569    // ERROR "1e\+6464569 overflows float64|floating-point constant overflow|exponent too large|overflows float64"
++      var _ = 1e646456     // ERROR "1e\+646456 overflows float64|floating-point constant overflow|exponent too large|overflows float64"
++      var _ = 1e64645      // ERROR "1e\+64645 overflows float64|floating-point constant overflow|exponent too large|overflows float64"
++      var _ = 1e6464       // ERROR "1e\+6464 overflows float64|floating-point constant overflow|overflows float64"
++      var _ = 1e646        // ERROR "1e\+646 overflows float64|floating-point constant overflow|overflows float64"
++      var _ = 1e309        // ERROR "1e\+309 overflows float64|floating-point constant overflow|overflows float64"
  
        var _ = 1e308
  }
index 2544adb55be6d3960ceeef1b8f7e81d4ae30b428,63dbf05d731ac6109e18d074ab392afd7099e59e..1ef8735a525a40366b4f22809a3f3fe9ac2fe895
@@@ -6,6 -6,6 +6,6 @@@
  
  package a
  
- import "fmt"  // ERROR "imported and not used|imported but not used"
+ import "fmt"  // GC_ERROR "imported and not used"
  
- const n = fmt // ERROR "fmt without selector|not in selector"
 -const n = fmt // ERROR "fmt without selector|unexpected reference to package"
++const n = fmt // ERROR "fmt without selector|unexpected reference to package|use of package fmt not in selector"
index c0fc11768741fb656608aa3174f28753cb91771e,8acd18fccb90dab033c96124c550414ca1681bf1..0965e88d74661272d27c3046181f02c24793a4bb
@@@ -9,9 -9,9 +9,9 @@@
  
  package issue11371
  
- const a int = 1.1        // ERROR "constant 1.1 truncated to integer|truncated to int"
- const b int = 1e20       // ERROR "overflows int|truncated to int"
- const c int = 1 + 1e-100 // ERROR "constant truncated to integer|truncated to int"
- const d int = 1 - 1e-100 // ERROR "constant truncated to integer|truncated to 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-70  // ERROR "constant truncated to integer"
 -const d int = 1 - 1e-70  // 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|floating-point constant truncated to integer"
++const a int = 1.1        // ERROR "constant 1.1 truncated to integer|floating-point constant truncated to integer|truncated to int"
++const b int = 1e20       // ERROR "overflows int|integer constant overflow|truncated to int"
++const c int = 1 + 1e-70  // ERROR "constant truncated to integer|truncated to int"
++const d int = 1 - 1e-70  // ERROR "constant truncated to integer|truncated to int"
 +const e int = 1.00000001 // ERROR "constant truncated to integer|truncated to int"
- const f int = 0.00000001 // ERROR "constant 1e-08 truncated to integer|truncated to int"
++const f int = 0.00000001 // ERROR "constant 1e-08 truncated to integer|floating-point constant truncated to integer|truncated to int"
index 62e8e8f9626e1a97b2866666298c0b48a0f514be,b43032deac45953d0c54525c05bde43d83db64af..183ed133de7767da2c34603e9103925e85d0fa55
@@@ -13,28 -13,28 +13,28 @@@ const x complex64 = 
  const y complex128 = 0
  
  var _ = x / 1e-20
- var _ = x / 1e-50   // ERROR "(complex )?division by zero"
- var _ = x / 1e-1000 // ERROR "(complex )?division by zero"
 -var _ = x / 1e-50   // GC_ERROR "complex division by zero"
 -var _ = x / 1e-1000 // GC_ERROR "complex division by zero"
++var _ = x / 1e-50   // GC_ERROR "division by zero"
++var _ = x / 1e-1000 // GC_ERROR "division by zero"
  var _ = x / 1e-20i
- var _ = x / 1e-50i   // ERROR "(complex )?division by zero"
- var _ = x / 1e-1000i // ERROR "(complex )?division by zero"
 -var _ = x / 1e-50i   // GC_ERROR "complex division by zero"
 -var _ = x / 1e-1000i // GC_ERROR "complex division by zero"
++var _ = x / 1e-50i   // GC_ERROR "division by zero"
++var _ = x / 1e-1000i // GC_ERROR "division by zero"
  
  var _ = x / 1e-45 // smallest positive float32
  
  var _ = x / (1e-20 + 1e-20i)
  var _ = x / (1e-50 + 1e-20i)
  var _ = x / (1e-20 + 1e-50i)
- var _ = x / (1e-50 + 1e-50i)     // ERROR "(complex )?division by zero"
- var _ = x / (1e-1000 + 1e-1000i) // ERROR "(complex )?division by zero"
 -var _ = x / (1e-50 + 1e-50i)     // GC_ERROR "complex division by zero"
 -var _ = x / (1e-1000 + 1e-1000i) // GC_ERROR "complex division by zero"
++var _ = x / (1e-50 + 1e-50i)     // GC_ERROR "division by zero"
++var _ = x / (1e-1000 + 1e-1000i) // GC_ERROR "division by zero"
  
  var _ = y / 1e-50
- var _ = y / 1e-1000 // ERROR "(complex )?division by zero"
 -var _ = y / 1e-1000 // GC_ERROR "complex division by zero"
++var _ = y / 1e-1000 // GC_ERROR "division by zero"
  var _ = y / 1e-50i
- var _ = y / 1e-1000i // ERROR "(complex )?division by zero"
 -var _ = y / 1e-1000i // GC_ERROR "complex division by zero"
++var _ = y / 1e-1000i // GC_ERROR "division by zero"
  
  var _ = y / 5e-324 // smallest positive float64
  
  var _ = y / (1e-50 + 1e-50)
  var _ = y / (1e-1000 + 1e-50i)
  var _ = y / (1e-50 + 1e-1000i)
- var _ = y / (1e-1000 + 1e-1000i) // ERROR "(complex )?division by zero"
 -var _ = y / (1e-1000 + 1e-1000i) // GC_ERROR "complex division by zero"
++var _ = y / (1e-1000 + 1e-1000i) // GC_ERROR "division by zero"
index 5b07e1a6beaa06738ff3a0e5691bdf282fabe977,31a663eb1f69459093f2fe64c8bc82614fcfa9c8..b22fa0fb4e576dcb67f56783e31681e8754983a9
@@@ -11,15 -11,15 +11,15 @@@ package mai
  var t struct{}
  
  func main() {
-       _ = []int{-1: 0}    // ERROR "index must be non\-negative integer constant|must not be negative"
-       _ = [10]int{-1: 0}  // ERROR "index must be non\-negative integer constant|must not be negative"
-       _ = [...]int{-1: 0} // ERROR "index must be non\-negative integer constant|must not be negative"
 -      _ = []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{-1: 0}    // ERROR "index must be non\-negative integer constant|index expression is negative|must not be negative"
++      _ = [10]int{-1: 0}  // ERROR "index must be non\-negative integer constant|index expression is negative|must not be negative"
++      _ = [...]int{-1: 0} // ERROR "index must be non\-negative integer constant|index expression is negative|must not be 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"
++      _ = []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"
  }
index 8382c670edff8a6d7929f13bf479ecda81a04837,9069412ffa6234d14fa96fe75230ea27f783d82a..cab6bedee5a5f5c6ebf17f6a76261ee9d43f8e62
@@@ -9,17 -9,17 +9,17 @@@
  package main
  
  func main() {
-       const _ int64 = 1e646456992 // ERROR "integer too large|truncated to .*"
-       const _ int32 = 1e64645699  // ERROR "integer too large|truncated to .*"
-       const _ int16 = 1e6464569   // ERROR "integer too large|truncated to .*"
-       const _ int8 = 1e646456     // ERROR "integer too large|truncated to .*"
-       const _ int = 1e64645       // ERROR "integer too large|truncated to .*"
 -      const _ int64 = 1e646456992 // ERROR "integer too large|floating-point constant truncated to integer|exponent too large"
 -      const _ int32 = 1e64645699  // ERROR "integer too large|floating-point constant truncated to integer|exponent too large"
 -      const _ int16 = 1e6464569   // ERROR "integer too large|floating-point constant truncated to integer|exponent too large"
 -      const _ int8 = 1e646456     // ERROR "integer too large|floating-point constant truncated to integer|exponent too large"
 -      const _ int = 1e64645       // ERROR "integer too large|floating-point constant truncated to integer|exponent too large"
++      const _ int64 = 1e646456992 // ERROR "integer too large|floating-point constant truncated to integer|exponent too large|truncated"
++      const _ int32 = 1e64645699  // ERROR "integer too large|floating-point constant truncated to integer|exponent too large|truncated"
++      const _ int16 = 1e6464569   // ERROR "integer too large|floating-point constant truncated to integer|exponent too large|truncated"
++      const _ int8 = 1e646456     // ERROR "integer too large|floating-point constant truncated to integer|exponent too large|truncated"
++      const _ int = 1e64645       // ERROR "integer too large|floating-point constant truncated to integer|exponent too large|truncated"
  
-       const _ uint64 = 1e646456992 // ERROR "integer too large|truncated to .*"
-       const _ uint32 = 1e64645699  // ERROR "integer too large|truncated to .*"
-       const _ uint16 = 1e6464569   // ERROR "integer too large|truncated to .*"
-       const _ uint8 = 1e646456     // ERROR "integer too large|truncated to .*"
-       const _ uint = 1e64645       // ERROR "integer too large|truncated to .*"
 -      const _ uint64 = 1e646456992 // ERROR "integer too large|floating-point constant truncated to integer|exponent too large"
 -      const _ uint32 = 1e64645699  // ERROR "integer too large|floating-point constant truncated to integer|exponent too large"
 -      const _ uint16 = 1e6464569   // ERROR "integer too large|floating-point constant truncated to integer|exponent too large"
 -      const _ uint8 = 1e646456     // ERROR "integer too large|floating-point constant truncated to integer|exponent too large"
 -      const _ uint = 1e64645       // ERROR "integer too large|floating-point constant truncated to integer|exponent too large"
++      const _ uint64 = 1e646456992 // ERROR "integer too large|floating-point constant truncated to integer|exponent too large|truncated"
++      const _ uint32 = 1e64645699  // ERROR "integer too large|floating-point constant truncated to integer|exponent too large|truncated"
++      const _ uint16 = 1e6464569   // ERROR "integer too large|floating-point constant truncated to integer|exponent too large|truncated"
++      const _ uint8 = 1e646456     // ERROR "integer too large|floating-point constant truncated to integer|exponent too large|truncated"
++      const _ uint = 1e64645       // ERROR "integer too large|floating-point constant truncated to integer|exponent too large|truncated"
  
-       const _ rune = 1e64645 // ERROR "integer too large|truncated to .*"
 -      const _ rune = 1e64645 // ERROR "integer too large|floating-point constant truncated to integer|exponent too large"
++      const _ rune = 1e64645 // ERROR "integer too large|floating-point constant truncated to integer|exponent too large|truncated"
  }
index ff54a246f14089e27c315a7d5bc0e34b0c668fae,38308cd75c94e298412de4f87a3095d4c49b3032..a066d2664ffcf9f3ebccd6aeab037f5c39fe45e0
@@@ -14,8 -14,6 +14,8 @@@ package mai
  type T struct{}
  
  func main() {
-       t := T{X: 1, X: 1, X: 1, X: 1, X: 1, X: 1, X: 1, X: 1, X: 1, X: 1} // ERROR "unknown field 'X' in struct literal of type T|unknown field X"
+       t := T{X: 1, X: 1, X: 1, X: 1, X: 1, X: 1, X: 1, X: 1, X: 1, X: 1} // ERROR "unknown field 'X' in struct literal of type T|unknown field .*X.* in .*T.*"
 -      var s string = 1 // ERROR "cannot use 1|incompatible type"
 +      _ = t
-       var s string = 1 // ERROR "cannot use 1|cannot convert"
++      var s string = 1 // ERROR "cannot use 1|incompatible type|cannot convert"
 +      _ = s
  }
index 925b0b7a40e490a42c7cb48d1f431a5c184578bd,e1149c3f9d06d865a18ac574fa3adcaaf884425c..0791819907411433a7f15f6a9c3b6f3f4a24baa7
@@@ -27,7 -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|C.I undefined"
+ var _ = C.F // ERROR "ambiguous"
+ var _ = C.G // ERROR "ambiguous"
+ var _ = C.H // ERROR "ambiguous"
 -var _ = C.I // ERROR "no method .*I.*"
++var _ = C.I // ERROR "no method .*I.*|C.I undefined"
index 52201f34e2b32222cad02d9a72e10f1eb92374b7,9b30fd271505b58c06bd56a58f001fe06ecc9c14..e5c8235849b96e2715a6cb41ed6c9b415421e3fa
@@@ -10,5 -10,5 +10,5 @@@ package mai
  
  import "unsafe"
  
- type s struct { unsafe.Pointer } // ERROR "embedded type cannot be a pointer|embedded field type cannot be unsafe.Pointer"
 -type s struct { unsafe.Pointer } // ERROR "embedded type cannot be a pointer|embedded type may not be a pointer"
++type s struct { unsafe.Pointer } // ERROR "embedded type cannot be a pointer|embedded type may not be a pointer||embedded field type cannot be unsafe.Pointer"
  type s1 struct { p unsafe.Pointer }
index 7739bafcccb4f0e93bf4a21880867ec56f028aae,94369f93450f29b46d36da42b8adf53f4fe557c6..09f906ae582c19e929524ad968f27c768268fc42
@@@ -8,11 -8,11 +8,11 @@@ package 
  
  func f(e interface{}) {
        switch e.(type) {
-       case nil, nil: // ERROR "multiple nil cases in type switch|duplicate case nil in type switch"
 -      case nil, nil: // ERROR "multiple nil cases in type switch|duplicate type in switch"
++      case nil, nil: // ERROR "multiple nil cases in type switch|duplicate type in switch|duplicate case nil in type switch"
        }
  
        switch e.(type) {
        case nil:
-       case nil: // ERROR "multiple nil cases in type switch|duplicate case nil in type switch"
 -      case nil: // ERROR "multiple nil cases in type switch|duplicate type in switch"
++      case nil: // ERROR "multiple nil cases in type switch|duplicate type in switch|duplicate case nil in type switch"
        }
  }
index 0a842ca1fb269e2fd6702f400199d06181d588a9,704b6b15a61aac9b2f984a034ef37bf21391bd29..77baa1f4e8c9fdb8196d68eb8154413bba5b0f0e
@@@ -7,12 -7,12 +7,12 @@@
  package p
  
  var a []int = []int{1: 1}
- var b []int = []int{-1: 1} // ERROR "must be non-negative integer constant|must not be negative"
 -var b []int = []int{-1: 1} // ERROR "must be non-negative integer constant|index expression is negative"
++var b []int = []int{-1: 1} // ERROR "must be non-negative integer constant|index expression is negative|must not be negative"
  
  var c []int = []int{2.0: 2}
- var d []int = []int{-2.0: 2} // ERROR "must be non-negative integer constant|must not be negative"
 -var d []int = []int{-2.0: 2} // ERROR "must be non-negative integer constant|index expression is negative"
++var d []int = []int{-2.0: 2} // ERROR "must be non-negative integer constant|index expression is negative|must not be negative"
  
  var e []int = []int{3 + 0i: 3}
- var f []int = []int{3i: 3} // ERROR "truncated to integer|truncated to int"
 -var f []int = []int{3i: 3} // ERROR "truncated to integer|index expression is not integer constant"
++var f []int = []int{3i: 3} // ERROR "truncated to integer|index expression is not integer constant|truncated to int"
  
- var g []int = []int{"a": 4} // ERROR "must be non-negative integer constant|cannot convert"
 -var g []int = []int{"a": 4} // ERROR "must be non-negative integer constant|index expression is not integer constant"
++var g []int = []int{"a": 4} // ERROR "must be non-negative integer constant|index expression is not integer constant|cannot convert"
index 77efaf7ef16d01f9a5a9837e47568dc0b44ffc46,0e3a14ef7c4faa6a398a6d4f598bd762e068a3d9..ed5312fa2165fe542db727b8174e3e7aa0581f34
@@@ -11,7 -11,7 +11,7 @@@
  
  package p
  
- type F func(b T)  // ERROR "T .*is not a type"
 -type F func(b T)  // ERROR "T is not a type|expected type"
++type F func(b T)  // ERROR "T .*is not a type|expected type"
  
  func T(fn F) {
      func() {
index a225d157b23c9116cfd42e31619816b3b0f1ea76,71365e10dd3d8089f8e6c5f536352bf4bc8cdd24..77cac3ee16a230119167bc51d2806225b87f3d48
@@@ -9,11 -9,11 +9,11 @@@ package 
  func g() {}
  
  func f() {
-       g()[:] // ERROR "g.* used as value"
 -      g()[:] // ERROR "g.. used as value|attempt to slice object that is not"
++      g()[:] // ERROR "g.* used as value|attempt to slice object that is not"
  }
  
  func g2() ([]byte, []byte) { return nil, nil }
  
  func f2() {
-       g2()[:] // ERROR "multiple-value g2.. in single-value context|2-valued g"
 -      g2()[:] // ERROR "multiple-value g2.. in single-value context|attempt to slice object that is not"
++      g2()[:] // ERROR "multiple-value g2.. in single-value context|attempt to slice object that is not|2\-valued g"
  }
index d2a0edd0a9f34a792e1d96f731f93749c970aacc,4c2c19ec9d9d4ce63457c29b07b559c236305daf..ee0d340aa3c50ac65bd6e0f21d7e505d8255df33
@@@ -22,13 -22,13 +22,13 @@@ func ok() 
  
  var (
        y = T{"stare"}
-       w = T{_: "look"} // ERROR "invalid field name _ in struct initializer|unknown field '_' in struct literal of type T"
 -      w = T{_: "look"} // ERROR "invalid field name _ in struct initializer|expected struct field name"
++      w = T{_: "look"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
        _ = T{"page"}
-       _ = T{_: "out"} // ERROR "invalid field name _ in struct initializer|unknown field '_' in struct literal of type T"
 -      _ = T{_: "out"} // ERROR "invalid field name _ in struct initializer|expected struct field name"
++      _ = T{_: "out"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
  )
  
  func bad() {
-       var z = T{_: "verse"} // ERROR "invalid field name _ in struct initializer|unknown field '_' in struct literal of type T"
 -      var z = T{_: "verse"} // ERROR "invalid field name _ in struct initializer|expected struct field name"
++      var z = T{_: "verse"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
        _ = z
-       _ = T{_: "itinerary"} // ERROR "invalid field name _ in struct initializer|unknown field '_' in struct literal of type T"
 -      _ = T{_: "itinerary"} // ERROR "invalid field name _ in struct initializer|expected struct field name"
++      _ = T{_: "itinerary"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
  }
index c2d81e6631870b7946a44e1a705b74bb770a8817,3d83cf3a12c3dd287b1fc8e9c42309e108fd3c67..57cdc93ef6629ee611226353c17e830a87a30b28
@@@ -11,7 -11,7 +11,7 @@@ type T struct 
  }
  
  func a() {
-       _ = T // ERROR "type T is not an expression|T \(type\) is not an expression"
 -      _ = T // ERROR "type T is not an expression|invalid use of type"
++      _ = T // ERROR "type T is not an expression|invalid use of type|not an expression"
  }
  
  func b() {
index 86fe0ef8c61666a32a1bbe3cb7633716a483bc44,9065868d7f2ba1c3690e860efc4bc754671f77a7..ee60cabd6f538ca4f435beda1de29e0ea563396c
@@@ -10,7 -10,7 +10,7 @@@
  package p
  
  func F() {
-       switch t := nil.(type) { // ERROR "cannot type switch on non-interface value nil|not an interface"
 -      switch t := nil.(type) { // ERROR "cannot type switch on non-interface value"
++      switch t := nil.(type) { // ERROR "cannot type switch on non-interface value|not an interface"
        default:
                _ = t
        }
@@@ -19,7 -19,7 +19,7 @@@
  const x = 1
  
  func G() {
-       switch t := x.(type) { // ERROR "cannot type switch on non-interface value x \(type untyped int\)|not an interface"
 -      switch t := x.(type) { // ERROR "cannot type switch on non-interface value|declared but not used"
++      switch t := x.(type) { // ERROR "cannot type switch on non-interface value|declared but not used|not an interface"
        default:
        }
  }
index 8a4b528a89acfc942d8b77b93ef6b3d06456a182,1d9a745ab47feda357827b77eb8b41494b41fcf1..71f34bba57cbf4d17076a75a94045accc04b633e
@@@ -11,7 -11,7 +11,7 @@@ package 
  // 1
  var f byte
  
- var f interface{} // ERROR "previous declaration at issue20415.go:12|f redeclared"
 -var f interface{} // ERROR "issue20415.go:12: previous declaration|redefinition"
++var f interface{} // ERROR "issue20415.go:12: previous declaration|redefinition|f redeclared"
  
  func _(f int) {
  }
@@@ -22,7 -22,7 +22,7 @@@ var g byt
  func _(g int) {
  }
  
- var g interface{} // ERROR "previous declaration at issue20415.go:20|g redeclared"
 -var g interface{} // ERROR "issue20415.go:20: previous declaration|redefinition"
++var g interface{} // ERROR "issue20415.go:20: previous declaration|redefinition|g redeclared"
  
  // 3
  func _(h int) {
@@@ -30,4 -30,4 +30,4 @@@
  
  var h byte
  
- var h interface{} // ERROR "previous declaration at issue20415.go:31|h redeclared"
 -var h interface{} // ERROR "issue20415.go:31: previous declaration|redefinition"
++var h interface{} // ERROR "issue20415.go:31: previous declaration|redefinition|h redeclared"
index a670d6ffcd3fb653920aa83fa9b9095bc861ea16,de2d3ad16a854980338b7c63330123fcfc64b752..2ca1f43d02c6fb2881e8b2077e19b65d54d8958c
@@@ -9,7 -9,7 +9,7 @@@ package 
  // Verify that the compiler complains even if the array
  // has length 0.
  var a [0]int
- var _ = a[2:] // ERROR "invalid slice index 2|index 2 out of bounds"
 -var _ = a[2:] // ERROR "invalid slice index 2|array index out of bounds"
++var _ = a[2:] // ERROR "invalid slice index 2|array index out of bounds|index 2 out of bounds"
  
  var b [1]int
- var _ = b[2:] // ERROR "invalid slice index 2|index 2 out of bounds"
 -var _ = b[2:] // ERROR "invalid slice index 2|array index out of bounds"
++var _ = b[2:] // ERROR "invalid slice index 2|array index out of bounds|index 2 out of bounds"
index 0c10208d811f72d72b39d04c5161426a0e036b3a,2ac31ef0c75782f7e6532ba63e2cd9310948185b..e13e470a01eae71c1a2e90001c05b9c0ba94b24c
@@@ -13,9 -13,8 +13,9 @@@ type it struct 
  
  func main() {
        i1 := it{Floats: true}
-       if i1.floats { // ERROR "(type it .* field or method floats, but does have Floats)"
+       if i1.floats { // ERROR "(type it .* field or method floats, but does have Floats)|undefined field or method"
        }
-       i2 := &it{floats: false} // ERROR "(but does have Floats)|unknown field"
+       i2 := &it{floats: false} // ERROR "(but does have Floats)|unknown field|declared but not used"
        _ = &it{InneR: "foo"}    // ERROR "(but does have inner)|unknown field"
 +      _ = i2
  }
index 27c873ab108df597a260d744d6a415550cef9d95,dc86c97fe570655287ac2e0a2b49f76405e76970..9483c9cab0ab1c7b6b401531dea514cc18402bf9
@@@ -11,9 -11,8 +11,9 @@@ package mai
  
  func F() {
        slice := []int{1, 2, 3}
 +      _ = slice
        len := int(2)
-       println(len(slice)) // ERROR "cannot call non-function len .type int., declared at LINE-1|cannot call non-function len"
 -      println(len(slice)) // ERROR "cannot call non-function len .type int., declared at LINE-1|expected function"
++      println(len(slice)) // ERROR "cannot call non-function len .type int., declared at LINE-1|expected function|cannot call non-function len"
        const iota = 1
-       println(iota(slice)) // ERROR "cannot call non-function iota .type int., declared at LINE-1|cannot call non-function iota"
 -      println(iota(slice)) // ERROR "cannot call non-function iota .type int., declared at LINE-1|expected function"
++      println(iota(slice)) // ERROR "cannot call non-function iota .type int., declared at LINE-1|expected function|cannot call non-function iota"
  }
index 4e3cd163b6d4eb546616333f8864372996546dca,067a8f1638c26c4ae33fe5c116d2c0c0c14d8fdf..c53415f7b9146547ae50ea8a5e755d87b6cea7a5
@@@ -11,6 -11,6 +11,6 @@@ type I1 = interface 
  }
  
  // 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$|invalid recursive type"
-       I1
 -type I2 interface { // GC_ERROR "invalid recursive type I2\n\tLINE: I2 refers to\n\tLINE: I2$"
++type I2 interface { // GC_ERROR "invalid recursive type I2\n\tLINE: I2 refers to\n\tLINE: I2$|invalid recursive type I2"
+       I1 // GCCGO_ERROR "invalid recursive interface"
  }
index 9e4da6ddba42b0ccb4cc46e9ca204a00abfa542a,936b9f8ff5cd65e99ff2ea5e2f16f228ed226c93..5599a83dd02111d87120058c682f0e988dde0991
@@@ -9,13 -9,13 +9,13 @@@ package mai
  import "net/http"
  
  var s = http.Server{}
- var _ = s.doneChan                  // ERROR "s.doneChan undefined .cannot refer to unexported field or method doneChan.$|s.doneChan undefined"
- var _ = s.DoneChan                  // ERROR "s.DoneChan undefined .type http.Server has no field or method DoneChan.$"
- var _ = http.Server{tlsConfig: nil} // ERROR "unknown field 'tlsConfig' in struct literal.+ .but does have TLSConfig.$|unknown field 'tlsConfig'"
- var _ = http.Server{DoneChan: nil}  // ERROR "unknown field 'DoneChan' in struct literal of type http.Server$"
 -var _ = s.doneChan                  // ERROR "s.doneChan undefined .cannot refer to unexported field or method doneChan.$|unexported field or method"
++var _ = s.doneChan                  // ERROR "s.doneChan undefined .cannot refer to unexported field or method doneChan.$|unexported field or method|s.doneChan undefined"
+ var _ = s.DoneChan                  // ERROR "s.DoneChan undefined .type http.Server has no field or method DoneChan.$|undefined field or method"
 -var _ = http.Server{tlsConfig: nil} // ERROR "unknown field 'tlsConfig' in struct literal.+ .but does have TLSConfig.$|unknown field .?tlsConfig.? in .?http.Server"
++var _ = http.Server{tlsConfig: nil} // ERROR "unknown field 'tlsConfig' in struct literal.+ .but does have TLSConfig.$|unknown field .?tlsConfig.? in .?http.Server|unknown field"
+ var _ = http.Server{DoneChan: nil}  // ERROR "unknown field 'DoneChan' in struct literal of type http.Server$|unknown field .?DoneChan.? in .?http.Server"
  
  type foo struct {
        bar int
  }
  
- var _ = &foo{bAr: 10} // ERROR "unknown field 'bAr' in struct literal.+ .but does have bar.$|unknown field 'bAr'"
 -var _ = &foo{bAr: 10} // ERROR "unknown field 'bAr' in struct literal.+ .but does have bar.$|unknown field .?bAr.? in .?foo"
++var _ = &foo{bAr: 10} // ERROR "unknown field 'bAr' in struct literal.+ .but does have bar.$|unknown field .?bAr.? in .?foo|unknown field"
index d20d4518c0c0b7d54237fe9f10a8f169361dff44,87c0293661f8ad8dadf1aa3f15ad8b2007d6c674..d5210e87b0f5af9d9183dbd7335f6ece002e6689
@@@ -6,14 -6,14 +6,13 @@@
  
  package p
  
- var x int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|3\-valued"
 -var x int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|multiple-value function call in single-value context"
++var x int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|multiple-value function call in single-value context|3\-valued"
  
  func f() {
-       var _ int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|3\-valued"
-       var a int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|3\-valued"
-       a = three()         // ERROR "assignment mismatch: 1 variable but three returns 3 values|cannot assign"
-       b := three()        // ERROR "assignment mismatch: 1 variable but three returns 3 values|cannot initialize"
 -      var _ int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|multiple-value function call in single-value context"
 -      var a int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|multiple-value function call in single-value context"
 -      a = three()         // ERROR "assignment mismatch: 1 variable but three returns 3 values|multiple-value function call in single-value context"
 -      b := three()        // ERROR "assignment mismatch: 1 variable but three returns 3 values|single variable set to multiple-value|multiple-value function call in single-value context"
--
++      var _ int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|multiple-value function call in single-value context|3\-valued"
++      var a int = three() // ERROR "assignment mismatch: 1 variable but three returns 3 values|multiple-value function call in single-value context|3\-valued"
++      a = three()         // ERROR "assignment mismatch: 1 variable but three returns 3 values|multiple-value function call in single-value context|cannot assign"
++      b := three()        // ERROR "assignment mismatch: 1 variable but three returns 3 values|single variable set to multiple-value|multiple-value function call in single-value context|cannot initialize"
        _, _ = a, b
  }
  
index ec650848ae2e2dda9a246bb287c00c4997a423c2,dfac8d01554737f8ebdc93f51b522a562479a272..f6954eda42e21da97c087fa1006cbd62dace61d8
@@@ -11,5 -11,5 +11,5 @@@ package 
  import "unsafe"
  
  func f() {
-       _ = complex(1<<uintptr(unsafe.Pointer(nil)), 0) // ERROR "invalid operation: .*shift of type float64.*|shifted operand .* must be integer"
 -      _ = complex(1<<uintptr(unsafe.Pointer(nil)), 0) // ERROR "invalid operation: .*shift of type float64.*|non-integer type for left operand of shift"
++      _ = complex(1<<uintptr(unsafe.Pointer(nil)), 0) // ERROR "invalid operation: .*shift of type float64.*|non-integer type for left operand of shift|shifted operand .* must be integer"
  }
index 1fae40ad0809637d32e7ee4cdf12eb69cf896484,2acfe39177a04d68b98eeb3ac772760beaab058c..ca7ba14b1c63321db69a0b12a1197ddb6baf0412
@@@ -6,13 -6,13 +6,13 @@@
  
  package p
  
- func f(a, b, c, d ...int)       {} // ERROR "non-final parameter a|can only use ... with final parameter"
- func g(a ...int, b ...int)      {} // ERROR "non-final parameter a|can only use ... with final parameter"
- func h(...int, ...int, float32) {} // ERROR "non-final parameter|can only use ... with final parameter"
 -func f(a, b, c, d ...int)       {} // ERROR "non-final parameter a|only permits one name"
 -func g(a ...int, b ...int)      {} // ERROR "non-final parameter a|must be last parameter"
 -func h(...int, ...int, float32) {} // ERROR "non-final parameter|must be last parameter"
++func f(a, b, c, d ...int)       {} // ERROR "non-final parameter a|only permits one name|can only use ... with final parameter"
++func g(a ...int, b ...int)      {} // ERROR "non-final parameter a|must be last parameter|can only use ... with final parameter"
++func h(...int, ...int, float32) {} // ERROR "non-final parameter|must be last parameter|can only use ... with final parameter"
  
- type a func(...float32, ...interface{}) // ERROR "non-final parameter|can only use ... with final parameter"
 -type a func(...float32, ...interface{}) // ERROR "non-final parameter|must be last parameter"
++type a func(...float32, ...interface{}) // ERROR "non-final parameter|must be last parameter|can only use ... with final parameter"
  type b interface {
-       f(...int, ...int)                // ERROR "non-final parameter|can only use ... with final parameter"
-       g(a ...int, b ...int, c float32) // ERROR "non-final parameter a|can only use ... with final parameter"
 -      f(...int, ...int)                // ERROR "non-final parameter|must be last parameter"
 -      g(a ...int, b ...int, c float32) // ERROR "non-final parameter a|must be last parameter"
++      f(...int, ...int)                // ERROR "non-final parameter|must be last parameter|can only use ... with final parameter"
++      g(a ...int, b ...int, c float32) // ERROR "non-final parameter a|must be last parameter|can only use ... with final parameter"
        valid(...int)
  }
index ae977e65f97136112069bae16764684f13fffe4a,d2ac4cfbfa7a06bb598fb4b7e20d9aa4799a61eb..512355a443a69c352557a6eafd971d317fa5de0e
@@@ -7,7 -7,6 +7,7 @@@
  package main
  
  func main() {
-       var c, d = 1, 2, 3 // ERROR "assignment mismatch: 2 variables but 3 values|extra init expr"
-       var e, f, g = 1, 2 // ERROR "assignment mismatch: 3 variables but 2 values|missing init expr"
 -      var c, d = 1, 2, 3 // ERROR "assignment mismatch: 2 variables but 3 values|wrong number of initializations"
 -      var e, f, g = 1, 2 // ERROR "assignment mismatch: 3 variables but 2 values|wrong number of initializations"
++      var c, d = 1, 2, 3 // ERROR "assignment mismatch: 2 variables but 3 values|wrong number of initializations|extra init expr"
++      var e, f, g = 1, 2 // ERROR "assignment mismatch: 3 variables but 2 values|wrong number of initializations|missing init expr"
 +      _, _, _, _ = c, d, e, f
  }
index c9280b689f8b34e0682d307c71e1616b049a9446,3ad9c8c8d90c0c32479a5d48b1bf72845df19171..e2aec63a52931debc54d70618b52687f83f61d41
@@@ -7,9 -7,8 +7,9 @@@
  package main
  
  func main() {
-       var a, b = 1    // ERROR "assignment mismatch: 2 variables but 1 values|cannot initialize"
-       _ = 1, 2        // ERROR "assignment mismatch: 1 variables but 2 values|cannot assign"
-       c, d := 1       // ERROR "assignment mismatch: 2 variables but 1 values|cannot initialize"
-       e, f := 1, 2, 3 // ERROR "assignment mismatch: 2 variables but 3 values|cannot initialize"
 -      var a, b = 1    // ERROR "assignment mismatch: 2 variables but 1 values|wrong number of initializations"
 -      _ = 1, 2        // ERROR "assignment mismatch: 1 variables but 2 values|number of variables does not match"
 -      c, d := 1       // ERROR "assignment mismatch: 2 variables but 1 values|wrong number of initializations"
 -      e, f := 1, 2, 3 // ERROR "assignment mismatch: 2 variables but 3 values|wrong number of initializations"
++      var a, b = 1    // ERROR "assignment mismatch: 2 variables but 1 values|wrong number of initializations|cannot initialize"
++      _ = 1, 2        // ERROR "assignment mismatch: 1 variables but 2 values|number of variables does not match|cannot assign"
++      c, d := 1       // ERROR "assignment mismatch: 2 variables but 1 values|wrong number of initializations|cannot initialize"
++      e, f := 1, 2, 3 // ERROR "assignment mismatch: 2 variables but 3 values|wrong number of initializations|cannot initialize"
 +      _, _, _, _ = c, d, e, f
  }
index eb6c4ce80700edef124fcc63dc835b9d1cf0c2b1,5d8381c244e3e663edd36c58b03e6293cc9ddd40..f6cd45573c5e9e52e9f480e3dd6a2c2b9cfba3ff
@@@ -10,5 -10,5 +10,5 @@@ package 
  
  var s = []string{
        1: "dup",
-       1: "dup", // ERROR "duplicate index in slice literal: 1|duplicate index 1 in array or slice literal"
 -      1: "dup", // ERROR "duplicate index in slice literal: 1|duplicate value for index 1"
++      1: "dup", // ERROR "duplicate index in slice literal: 1|duplicate value for index 1|duplicate index 1"
  }
index 78a91653549b6c5a4c43dbb2a77aac5e93c4bbe9,7d4283b8453ddfc0d5e2dc9bf61b3876ab2a60b0..3a84a5622bc4d44060ddaf3da6bc11db1b3ec712
@@@ -9,8 -9,8 +9,8 @@@ package 
  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\)"
+       t{}.M()     // ERROR "t{}.M undefined \(type t has no field or method M\)|undefined field or method .*M"
 -      t{x: 1}.M() // ERROR "t{...}.M undefined \(type t has no field or method M\)|undefined field or method .*M"
++      t{x: 1}.M() // ERROR "t{...}.M undefined \(type t has no field or method M\)|undefined field or method .*M|no field or method M"
  }
  
  func f2() (*t, error) {
index bd51de29bef97254e93c7acdb9ae25a02b197d1b,82dca34820a37726d102fe70e13bbae8afbce244..3ec23a0dfe08ba973230b633a1e59058127d6e35
@@@ -13,8 -13,8 +13,8 @@@ type s struct 
  func f() {
        var x *s
  
-       _ = x == nil || len(x.slice) // ERROR "invalid operation: .+ \(operator \|\| not defined on int\)|cannot convert x == nil"
-       _ = len(x.slice) || x == nil // ERROR "invalid operation: .+ \(operator \|\| not defined on int\)|cannot convert x == nil"
-       _ = x == nil && len(x.slice) // ERROR "invalid operation: .+ \(operator && not defined on int\)|cannot convert x == nil"
-       _ = len(x.slice) && x == nil // ERROR "invalid operation: .+ \(operator && not defined on int\)|cannot convert x == nil"
 -      _ = x == nil || len(x.slice) // ERROR "invalid operation: .+ \(operator \|\| not defined on int\)|incompatible types"
 -      _ = len(x.slice) || x == nil // ERROR "invalid operation: .+ \(operator \|\| not defined on int\)|incompatible types"
 -      _ = x == nil && len(x.slice) // ERROR "invalid operation: .+ \(operator && not defined on int\)|incompatible types"
 -      _ = len(x.slice) && x == nil // ERROR "invalid operation: .+ \(operator && not defined on int\)|incompatible types"
++      _ = x == nil || len(x.slice) // ERROR "invalid operation: .+ \(operator \|\| not defined on int\)|incompatible types|cannot convert"
++      _ = len(x.slice) || x == nil // ERROR "invalid operation: .+ \(operator \|\| not defined on int\)|incompatible types|cannot convert"
++      _ = x == nil && len(x.slice) // ERROR "invalid operation: .+ \(operator && not defined on int\)|incompatible types|cannot convert"
++      _ = len(x.slice) && x == nil // ERROR "invalid operation: .+ \(operator && not defined on int\)|incompatible types|cannot convert"
  }
index df986c179d7e6012830d13a6fa261f8fa3a72b4d,be9fc7434a7d45e28827d9b18998811a1fef4e23..7201591f3f3c851445c7d3d007739acf60359bfa
@@@ -7,28 -7,28 +7,28 @@@
  package main
  
  func foo() (int, int) {
-       return 2.3 // ERROR "not enough arguments to return\n\thave \(number\)\n\twant \(int, int\)|wrong number of return values"
 -      return 2.3 // ERROR "not enough arguments to return\n\thave \(number\)\n\twant \(int, int\)|not enough arguments to return"
++      return 2.3 // ERROR "not enough arguments to return\n\thave \(number\)\n\twant \(int, int\)|not enough arguments to return|wrong number of return values"
  }
  
  func foo2() {
-       return int(2), 2 // ERROR "too many arguments to return\n\thave \(int, number\)\n\twant \(\)|no result values expected"
 -      return int(2), 2 // ERROR "too many arguments to return\n\thave \(int, number\)\n\twant \(\)|return with value in function with no return type"
++      return int(2), 2 // ERROR "too many arguments to return\n\thave \(int, number\)\n\twant \(\)|return with value in function with no return type|no result values expected"
  }
  
  func foo3(v int) (a, b, c, d int) {
        if v >= 0 {
-               return 1 // ERROR "not enough arguments to return\n\thave \(number\)\n\twant \(int, int, int, int\)|wrong number of return values"
 -              return 1 // ERROR "not enough arguments to return\n\thave \(number\)\n\twant \(int, int, int, int\)|not enough arguments to return"
++              return 1 // ERROR "not enough arguments to return\n\thave \(number\)\n\twant \(int, int, int, int\)|not enough arguments to return|wrong number of return values"
        }
-       return 2, 3 // ERROR "not enough arguments to return\n\thave \(number, number\)\n\twant \(int, int, int, int\)|wrong number of return values"
 -      return 2, 3 // ERROR "not enough arguments to return\n\thave \(number, number\)\n\twant \(int, int, int, int\)|not enough arguments to return"
++      return 2, 3 // ERROR "not enough arguments to return\n\thave \(number, number\)\n\twant \(int, int, int, int\)|not enough arguments to return|wrong number of return values"
  }
  
  func foo4(name string) (string, int) {
        switch name {
        case "cow":
-               return "moo" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(string, int\)|wrong number of return values"
 -              return "moo" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(string, int\)|not enough arguments to return"
++              return "moo" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(string, int\)|not enough arguments to return|wrong number of return values"
        case "dog":
-               return "dog", 10, true // ERROR "too many arguments to return\n\thave \(string, number, bool\)\n\twant \(string, int\)|wrong number of return values"
 -              return "dog", 10, true // ERROR "too many arguments to return\n\thave \(string, number, bool\)\n\twant \(string, int\)|too many values in return statement"
++              return "dog", 10, true // ERROR "too many arguments to return\n\thave \(string, number, bool\)\n\twant \(string, int\)|too many values in return statement|wrong number of return values"
        case "fish":
-               return "" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(string, int\)|wrong number of return values"
 -              return "" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(string, int\)|not enough arguments to return"
++              return "" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(string, int\)|not enough arguments to return|wrong number of return values"
        default:
                return "lizard", 10
        }
@@@ -40,14 -40,14 +40,14 @@@ type U float6
  
  func foo5() (S, T, U) {
        if false {
-               return "" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(S, T, U\)|wrong number of return values"
 -              return "" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(S, T, U\)|not enough arguments to return"
++              return "" // ERROR "not enough arguments to return\n\thave \(string\)\n\twant \(S, T, U\)|not enough arguments to return|wrong number of return values"
        } else {
                ptr := new(T)
-               return ptr // ERROR "not enough arguments to return\n\thave \(\*T\)\n\twant \(S, T, U\)|wrong number of return values"
 -              return ptr // ERROR "not enough arguments to return\n\thave \(\*T\)\n\twant \(S, T, U\)|not enough arguments to return"
++              return ptr // ERROR "not enough arguments to return\n\thave \(\*T\)\n\twant \(S, T, U\)|not enough arguments to return|wrong number of return values"
        }
-       return new(S), 12.34, 1 + 0i, 'r', true // ERROR "too many arguments to return\n\thave \(\*S, number, number, number, bool\)\n\twant \(S, T, U\)|wrong number of return values"
 -      return new(S), 12.34, 1 + 0i, 'r', true // ERROR "too many arguments to return\n\thave \(\*S, number, number, number, bool\)\n\twant \(S, T, U\)|too many values in return statement"
++      return new(S), 12.34, 1 + 0i, 'r', true // ERROR "too many arguments to return\n\thave \(\*S, number, number, number, bool\)\n\twant \(S, T, U\)|too many values in return statement|wrong number of return values"
  }
  
  func foo6() (T, string) {
-       return "T", true, true // ERROR "too many arguments to return\n\thave \(string, bool, bool\)\n\twant \(T, string\)|wrong number of return values"
 -      return "T", true, true // ERROR "too many arguments to return\n\thave \(string, bool, bool\)\n\twant \(T, string\)|too many values in return statement"
++      return "T", true, true // ERROR "too many arguments to return\n\thave \(string, bool, bool\)\n\twant \(T, string\)|too many values in return statement|wrong number of return values"
  }
index 027291a0ea5795707bd8d91a5d199d0e12c43ff8,ecde9ae5105c88ea7564584ca253525e6926e198..db83e94b86fee432d7373fd1735609d0e73133fc
@@@ -9,5 -9,5 +9,5 @@@
  package p
  
  func f() uintptr {
-       return nil // ERROR "cannot use nil as type uintptr in return argument|cannot convert nil"
 -      return nil // ERROR "cannot use nil as type uintptr in return argument|incompatible type"
++      return nil // ERROR "cannot use nil as type uintptr in return argument|incompatible type|cannot convert nil"
  }
index cb8d0a11f2181203557051fe7c80750623a09cf8,5bd15ba72ece24fead41e144f48293c86ea3acee..5cc89b47b537e7db05059d6b70d038d3c1972d58
@@@ -7,14 -7,14 +7,14 @@@
  package p
  
  func f1() {
-       for a, a := range []int{1, 2, 3} { // ERROR "a repeated on left side of :=|a redeclared"
 -      for a, a := range []int{1, 2, 3} { // ERROR "a.* repeated on left side of :="
++      for a, a := range []int{1, 2, 3} { // ERROR "a.* repeated on left side of :=|a redeclared"
                println(a)
        }
  }
  
  func f2() {
        var a int
-       for a, a := range []int{1, 2, 3} { // ERROR "a repeated on left side of :=|a redeclared"
 -      for a, a := range []int{1, 2, 3} { // ERROR "a.* repeated on left side of :="
++      for a, a := range []int{1, 2, 3} { // ERROR "a.* repeated on left side of :=|a redeclared"
                println(a)
        }
        println(a)
index 14fc418150f75b0bdad03a4235007a447e93eb6d,2765200ac89fcff5045068fa2cb4f0418c21eaa6..70dc26303e188d9dbbb976adb8b481bd897f5a0f
@@@ -15,7 -15,7 +15,7 @@@ func g() bool { return true 
  func h(int, int) {}
  
  func main() {
--      f(g())        // ERROR "in argument to f|incompatible type"
-       f(true)       // ERROR "in argument to f|cannot convert"
-       h(true, true) // ERROR "in argument to h|cannot convert"
 -      f(true)       // ERROR "in argument to f|incompatible type"
 -      h(true, true) // ERROR "in argument to h|incompatible type"
++      f(g())        // ERROR "in argument to f|incompatible type|cannot convert"
++      f(true)       // ERROR "in argument to f|incompatible type|cannot convert"
++      h(true, true) // ERROR "in argument to h|incompatible type|cannot convert"
  }
index 4bd9de8645fd86728f2f2d1a105c74d863d550e9,7cddf4875eb3ddaeea2104608c29f3a18b30cafd..52eed93756f7c36c37004e7931842bb61bde213e
@@@ -9,9 -9,9 +9,9 @@@
  package main
  
  func main() {
-       _ = [0]int{-1: 50}              // ERROR "index must be non-negative integer constant|must not be negative"
-       _ = [0]int{0: 0}                // ERROR "index 0 out of bounds \[0:0\]"
-       _ = [0]int{5: 25}               // ERROR "index 5 out of bounds \[0:0\]"
-       _ = [10]int{2: 10, 15: 30}      // ERROR "index 15 out of bounds \[0:10\]"
-       _ = [10]int{5: 5, 1: 1, 12: 12} // ERROR "index 12 out of bounds \[0:10\]"
 -      _ = [0]int{-1: 50}              // ERROR "index must be non-negative integer constant|index expression is negative"
++      _ = [0]int{-1: 50}              // ERROR "index must be non-negative integer constant|index expression is negative|must not be negative"
+       _ = [0]int{0: 0}                // ERROR "index 0 out of bounds \[0:0\]|out of range"
+       _ = [0]int{5: 25}               // ERROR "index 5 out of bounds \[0:0\]|out of range"
+       _ = [10]int{2: 10, 15: 30}      // ERROR "index 15 out of bounds \[0:10\]|out of range"
+       _ = [10]int{5: 5, 1: 1, 12: 12} // ERROR "index 12 out of bounds \[0:10\]|out of range"
  }
index 7a85fb8779cdc067fd204f5400b5ed561bc0e929,e8b95d5db827a9a0155481be8a8401036606cd64..12cd62b65334ba3b79d15d7f3e5516a39ee4b6a5
@@@ -8,4 -8,4 +8,4 @@@
  
  package p
  
- var _ = []int{a: true, true} // ERROR "undefined: a" "cannot use true \(type untyped bool\) as type int in slice literal|cannot convert true"
 -var _ = []int{a: true, true} // ERROR "undefined: a" "cannot use true \(type untyped bool\) as type int in slice literal|undefined name .*a|incompatible type"
++var _ = []int{a: true, true} // ERROR "undefined: a" "cannot use true \(type untyped bool\) as type int in slice literal|undefined name .*a|incompatible type|cannot convert"
index ef099ce41ec9de48309a1858b1533cd56f3995c7,ba50e4237b38cd479cd016dc39d42929576cb0e7..4d10e47e64a518651b6ae19e52aa57c792f9a6ec
@@@ -9,7 -9,7 +9,7 @@@
  package main
  
  func main() {
-       _ = copy(nil, []int{}) // ERROR "use of untyped nil|untyped nil"
-       _ = copy([]int{}, nil) // ERROR "use of untyped nil|untyped nil"
-       _ = 1 + true           // ERROR "mismatched types untyped int and untyped bool|untyped int .* untyped bool"
 -      _ = copy(nil, []int{}) // ERROR "use of untyped nil|left argument must be a slice"
 -      _ = copy([]int{}, nil) // ERROR "use of untyped nil|second argument must be slice or string"
 -      _ = 1 + true           // ERROR "mismatched types untyped int and untyped bool|incompatible types"
++      _ = copy(nil, []int{}) // ERROR "use of untyped nil|left argument must be a slice|expects slice arguments"
++      _ = copy([]int{}, nil) // ERROR "use of untyped nil|second argument must be slice or string|expects slice arguments"
++      _ = 1 + true           // ERROR "mismatched types untyped int and untyped bool|incompatible types|cannot convert"
  }
index 01954dd107ea4a75c9bbd536ae77f585707cfafd,caac66734617841f71c371598efbbb6fbc8be205..fe2dff786c4288213c9bcb4f4bfdb1d8b0405892
@@@ -12,12 -12,12 +12,12 @@@ const 
        ok = byte(iota + 253)
        bad
        barn
-       bard // ERROR "constant 256 overflows byte|cannot convert"
 -      bard // ERROR "constant 256 overflows byte|integer constant overflow"
++      bard // ERROR "constant 256 overflows byte|integer constant overflow|cannot convert"
  )
  
  const (
        c = len([1 - iota]int{})
        d
-       e // ERROR "array bound must be non-negative|invalid array length"
-       f // ERROR "array bound must be non-negative|invalid array length"
 -      e // ERROR "array bound must be non-negative|negative array bound"
 -      f // ERROR "array bound must be non-negative|negative array bound"
++      e // ERROR "array bound must be non-negative|negative array bound|invalid array length"
++      f // ERROR "array bound must be non-negative|negative array bound|invalid array length"
  )
index 1a223e701fd061c2f2ae17e54171addb5fe9c1a3,f433e36924a38009690a9f1e77dd3fb96d2571e1..fcbb4f86ec1a71fdfe09476311a431b41e361c1b
@@@ -10,8 -10,8 +10,8 @@@
  package main
  
  func main() {
-       _ = []byte{"foo"}   // ERROR "cannot use|cannot convert"
-       _ = []int{"foo"}    // ERROR "cannot use|cannot convert"
-       _ = []rune{"foo"}   // ERROR "cannot use|cannot convert"
 -      _ = []byte{"foo"}   // ERROR "cannot use|incompatible type"
 -      _ = []int{"foo"}    // ERROR "cannot use|incompatible type"
 -      _ = []rune{"foo"}   // ERROR "cannot use|incompatible type"
++      _ = []byte{"foo"}   // ERROR "cannot use|incompatible type|cannot convert"
++      _ = []int{"foo"}    // ERROR "cannot use|incompatible type|cannot convert"
++      _ = []rune{"foo"}   // ERROR "cannot use|incompatible type|cannot convert"
        _ = []string{"foo"} // OK
  }
index da482b44835b09d04de88549ba513aa06717ff4b,e9c5b54d51d2e1c8b4fd1563f025a75b5cc60678..1d9fa936c4c096c51cb9b03f2191f34bcb227760
@@@ -7,5 -7,5 +7,5 @@@
  package main
  
  func main() {
-       n.foo = 6 // ERROR "undefined: n in n.foo|undefined: n"
 -      n.foo = 6 // ERROR "undefined: n in n.foo|undefined name .*n"
++      n.foo = 6 // ERROR "undefined: n in n.foo|undefined name .*n|undefined: n"
  }
Simple merge
index 4724b6e2d9bae8d7e9ffc729e19d9f9e2de75c4d,6cc8d5b9e5d37418aeeee47de44a2acc7fd67fd9..1a4510316dffaca59838d9546914e1f2274e5a24
@@@ -33,95 -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"
++      _ = e >= c // ERROR "invalid operation.*not defined|invalid comparison|cannot compare"
        _ = c == e
        _ = c != e
-       _ = c >= e // ERROR "invalid operation.*not defined"
 -      _ = c >= e // ERROR "invalid operation.*not defined|invalid comparison"
++      _ = c >= e // ERROR "invalid operation.*not defined|invalid comparison|cannot compare"
  
        _ = i == c
        _ = i != c
-       _ = i >= c // ERROR "invalid operation.*not defined"
 -      _ = i >= c // ERROR "invalid operation.*not defined|invalid comparison"
++      _ = i >= c // ERROR "invalid operation.*not defined|invalid comparison|cannot compare"
        _ = c == i
        _ = c != i
-       _ = c >= i // ERROR "invalid operation.*not defined"
 -      _ = c >= i // ERROR "invalid operation.*not defined|invalid comparison"
++      _ = c >= i // ERROR "invalid operation.*not defined|invalid comparison|cannot compare"
  
        _ = e == n
        _ = e != n
-       _ = e >= n // ERROR "invalid operation.*not defined"
 -      _ = e >= n // ERROR "invalid operation.*not defined|invalid comparison"
++      _ = e >= n // ERROR "invalid operation.*not defined|invalid comparison|cannot compare"
        _ = n == e
        _ = n != e
-       _ = n >= e // ERROR "invalid operation.*not defined"
 -      _ = n >= e // ERROR "invalid operation.*not defined|invalid comparison"
++      _ = n >= e // ERROR "invalid operation.*not defined|invalid comparison|cannot compare"
  
        // 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"
-       _ = i == 1 // ERROR "invalid operation.*mismatched types|cannot convert"
-       _ = i != 1 // ERROR "invalid operation.*mismatched types|cannot convert"
-       _ = i >= 1 // ERROR "invalid operation.*mismatched types|cannot convert"
-       _ = 1 == i // ERROR "invalid operation.*mismatched types|cannot convert"
-       _ = 1 != i // ERROR "invalid operation.*mismatched types|cannot convert"
-       _ = 1 >= i // ERROR "invalid operation.*mismatched types|cannot convert"
-       _ = 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"
-       _ = 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"
-       _ = 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"
-       _ = 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"
-       _ = _ == 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"
-       _ = 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"
+       _ = 1 >= e // ERROR "invalid operation.*not defined|invalid comparison"
 -      _ = 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"
++      _ = i == 1 // ERROR "invalid operation.*mismatched types|incompatible types|cannot convert"
++      _ = i != 1 // ERROR "invalid operation.*mismatched types|incompatible types|cannot convert"
++      _ = i >= 1 // ERROR "invalid operation.*mismatched types|incompatible types|cannot convert"
++      _ = 1 == i // ERROR "invalid operation.*mismatched types|incompatible types|cannot convert"
++      _ = 1 != i // ERROR "invalid operation.*mismatched types|incompatible types|cannot convert"
++      _ = 1 >= i // ERROR "invalid operation.*mismatched types|incompatible types|cannot convert"
+       _ = 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|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|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|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"
+       _ = _ == _ // ERROR "cannot use .*_.* as value"
+       _ = 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
  )
diff --cc test/run.go
index 01e67e8db88eeea6dd243616061c5df8cfd9c276,db3e9f6c2fc18040fc63b81c27375b90c53031d1..5ec33f16f202f401a50029dd63b4b5a3c7c28fca
@@@ -1922,78 -1846,3 +1922,79 @@@ func overlayDir(dstRoot, srcRoot string
                return err
        })
  }
 +
 +// 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.
 +var excluded = map[string]bool{
 +      "complit1.go":     true, // types2 reports extra errors
 +      "const2.go":       true, // types2 not run after syntax errors
 +      "ddd1.go":         true, // issue #42987
 +      "directive.go":    true, // misplaced compiler directive checks
 +      "float_lit3.go":   true, // types2 reports extra errors
 +      "import1.go":      true, // types2 reports extra errors
 +      "import5.go":      true, // issue #42988
 +      "import6.go":      true, // issue #43109
 +      "initializerr.go": true, // types2 reports extra errors
 +      "linkname2.go":    true, // error reported by noder (not running for types2 errorcheck test)
++      "mainsig.go":      true, // issue #43308
 +      "shift1.go":       true, // issue #42989
 +      "switch4.go":      true, // error reported by noder (not running for types2 errorcheck test)
 +      "typecheck.go":    true, // invalid function is not causing errors when called
 +
 +      "fixedbugs/bug176.go":    true, // types2 reports all errors (pref: types2)
 +      "fixedbugs/bug193.go":    true, // types2 bug: shift error not reported (fixed in go/types)
 +      "fixedbugs/bug195.go":    true, // types2 reports slightly different (but correct) bugs
 +      "fixedbugs/bug213.go":    true, // error reported by noder (not running for types2 errorcheck test)
 +      "fixedbugs/bug228.go":    true, // types2 not run after syntax errors
 +      "fixedbugs/bug231.go":    true, // types2 bug? (same error reported twice)
 +      "fixedbugs/bug255.go":    true, // types2 reports extra errors
 +      "fixedbugs/bug351.go":    true, // types2 reports extra errors
 +      "fixedbugs/bug374.go":    true, // types2 reports extra errors
 +      "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/bug388.go":    true, // types2 not run due to syntax errors
 +      "fixedbugs/bug412.go":    true, // types2 produces a follow-on error
 +
 +      "fixedbugs/issue11362.go":  true, // types2 import path handling
 +      "fixedbugs/issue11590.go":  true, // types2 doesn't report a follow-on error (pref: types2)
 +      "fixedbugs/issue11610.go":  true, // types2 not run after syntax errors
 +      "fixedbugs/issue11614.go":  true, // types2 reports an extra error
 +      "fixedbugs/issue13415.go":  true, // declared but not used conflict
 +      "fixedbugs/issue14520.go":  true, // missing import path error by types2
 +      "fixedbugs/issue14540.go":  true, // error reported by noder (not running for types2 errorcheck test)
 +      "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/issue17645.go":  true, // multiple errors on same line
 +      "fixedbugs/issue18393.go":  true, // types2 not run after syntax errors
 +      "fixedbugs/issue19012.go":  true, // multiple errors on same line
 +      "fixedbugs/issue20233.go":  true, // types2 reports two instead of one error (pref: compiler)
 +      "fixedbugs/issue20245.go":  true, // types2 reports two instead of one error (pref: compiler)
 +      "fixedbugs/issue20529.go":  true, // types2 doesn't produce "stack frame too large" error
 +      "fixedbugs/issue20780.go":  true, // types2 doesn't produce "stack frame too large" error
 +      "fixedbugs/issue21979.go":  true, // types2 doesn't report a follow-on error (pref: types2)
 +      "fixedbugs/issue22200.go":  true, // types2 doesn't produce "stack frame too large" error
 +      "fixedbugs/issue22200b.go": true, // types2 doesn't produce "stack frame too large" error
 +      "fixedbugs/issue23732.go":  true, // types2 reports different (but ok) line numbers
 +      "fixedbugs/issue25507.go":  true, // types2 doesn't produce "stack frame too large" error
 +      "fixedbugs/issue25958.go":  true, // types2 doesn't report a follow-on error (pref: types2)
 +      "fixedbugs/issue28079b.go": true, // types2 reports follow-on errors
 +      "fixedbugs/issue28268.go":  true, // types2 reports follow-on errors
 +      "fixedbugs/issue31747.go":  true, // types2 is missing support for -lang flag
 +      "fixedbugs/issue33460.go":  true, // types2 reports alternative positions in separate error
 +      "fixedbugs/issue34329.go":  true, // types2 is missing support for -lang flag
 +      "fixedbugs/issue41575.go":  true, // types2 reports alternative positions in separate error
 +      "fixedbugs/issue42058a.go": true, // types2 doesn't report "channel element type too large"
 +      "fixedbugs/issue42058b.go": true, // types2 doesn't report "channel element type too large"
 +      "fixedbugs/issue4232.go":   true, // types2 reports (correct) extra errors
 +      "fixedbugs/issue4452.go":   true, // types2 reports (correct) extra errors
 +      "fixedbugs/issue5609.go":   true, // types2 needs a better error message
 +      "fixedbugs/issue6500.go":   true, // error reported by noder (not running for types2 errorcheck test)
 +      "fixedbugs/issue6889.go":   true, // types2 can handle this without constant overflow
 +      "fixedbugs/issue7525.go":   true, // types2 reports init cycle error on different line - ok otherwise
 +      "fixedbugs/issue7525b.go":  true, // types2 reports init cycle error on different line - ok otherwise
 +      "fixedbugs/issue7525c.go":  true, // types2 reports init cycle error on different line - ok otherwise
 +      "fixedbugs/issue7525d.go":  true, // types2 reports init cycle error on different line - ok otherwise
 +      "fixedbugs/issue7525e.go":  true, // types2 reports init cycle error on different line - ok otherwise
 +      "fixedbugs/issue7742.go":   true, // types2 type-checking doesn't terminate
 +      "fixedbugs/issue7746.go":   true, // types2 type-checking doesn't terminate
 +}