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:
Rémy Oudompheng 2014-01-31 00:30:56 +01:00
parent 1683dab725
commit 502958ffa6
2 changed files with 12 additions and 3 deletions

View file

@ -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)

View file

@ -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"