Skip to content
This repository has been archived by the owner on May 2, 2018. It is now read-only.

Commit

Permalink
cmd/gc: do not consider length zero arrays as comparable.
Browse files Browse the repository at this point in the history
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
  • Loading branch information
remyoudompheng committed Jan 30, 2014
1 parent 1683dab commit 502958f
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 3 deletions.
2 changes: 0 additions & 2 deletions src/cmd/gc/subr.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
13 changes: 12 additions & 1 deletion test/cmp6.go
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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"
Expand Down

0 comments on commit 502958f

Please sign in to comment.