mirror of
https://github.com/golang/go
synced 2024-10-02 22:25:08 +00:00
cmd/gc: do not consider length zero arrays as comparable.
Array values are comparable if values of the array element type are comparable. Fixes #6526. LGTM=khr R=rsc, bradfitz, khr CC=golang-codereviews https://golang.org/cl/58580043
This commit is contained in:
parent
1683dab725
commit
502958ffa6
|
@ -590,8 +590,6 @@ algtype1(Type *t, Type **bad)
|
|||
*bad = t;
|
||||
return ANOEQ;
|
||||
}
|
||||
if(t->bound == 0)
|
||||
return AMEM;
|
||||
a = algtype1(t->type, bad);
|
||||
if(a == ANOEQ || a == AMEM) {
|
||||
if(a == ANOEQ && bad)
|
||||
|
|
13
test/cmp6.go
13
test/cmp6.go
|
@ -18,7 +18,10 @@ type T3 struct{ z []int }
|
|||
|
||||
var t3 T3
|
||||
|
||||
type T4 struct { _ []int; a float64 }
|
||||
type T4 struct {
|
||||
_ []int
|
||||
a float64
|
||||
}
|
||||
|
||||
var t4 T4
|
||||
|
||||
|
@ -51,6 +54,14 @@ func main() {
|
|||
use(p3 == p1)
|
||||
use(p3 == p2)
|
||||
|
||||
// Arrays are comparable if and only if their element type is comparable.
|
||||
var a1 [1]int
|
||||
var a2 [1]func()
|
||||
var a3 [0]func()
|
||||
use(a1 == a1)
|
||||
use(a2 == a2) // ERROR "invalid operation|invalid comparison"
|
||||
use(a3 == a3) // ERROR "invalid operation|invalid comparison"
|
||||
|
||||
// Comparison of structs should have a good message
|
||||
use(t3 == t3) // ERROR "struct|expected"
|
||||
use(t4 == t4) // ERROR "cannot be compared|non-comparable"
|
||||
|
|
Loading…
Reference in a new issue