go/test/fixedbugs/issue9370.go
Robert Griesemer 53c4c17b09 [dev.typeparams] all: merge dev.regabi into dev.typeparams
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
2020-12-22 17:50:13 +00:00

128 lines
5 KiB
Go

// errorcheck
// 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.
// Verify that concrete/interface comparisons are
// typechecked correctly by the compiler.
package main
type I interface {
Method()
}
type C int
func (C) Method() {}
type G func()
func (G) Method() {}
var (
e interface{}
i I
c C
n int
f func()
g G
)
var (
_ = e == c
_ = e != c
_ = e >= c // ERROR "invalid operation.*not defined|invalid comparison|cannot compare"
_ = c == e
_ = c != e
_ = c >= e // ERROR "invalid operation.*not defined|invalid comparison|cannot compare"
_ = i == c
_ = i != c
_ = i >= c // ERROR "invalid operation.*not defined|invalid comparison|cannot compare"
_ = c == i
_ = c != i
_ = c >= i // ERROR "invalid operation.*not defined|invalid comparison|cannot compare"
_ = e == n
_ = e != n
_ = e >= n // ERROR "invalid operation.*not defined|invalid comparison|cannot compare"
_ = n == e
_ = n != e
_ = 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|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|invalid comparison"
_ = 1 == e
_ = 1 != e
_ = 1 >= e // ERROR "invalid operation.*not defined|invalid comparison"
_ = 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
)