]> Cypherpunks.ru repositories - gostls13.git/commitdiff
cmd/gc: do not consider length zero arrays as comparable.
authorRémy Oudompheng <oudomphe@phare.normalesup.org>
Thu, 30 Jan 2014 23:30:56 +0000 (00:30 +0100)
committerRémy Oudompheng <oudomphe@phare.normalesup.org>
Thu, 30 Jan 2014 23:30:56 +0000 (00:30 +0100)
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

src/cmd/gc/subr.c
test/cmp6.go

index 779580295f19714e549a707f038edc7a7f8b34c1..f71165d45623b260c0140c75e0f5882509b4ecc1 100644 (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)
index 839c274bccae225a424aa5eac66873efaa25988f..7cf76044ef9b8ebc97baefeb00ccfa31a14fb9ef 100644 (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"