]> Cypherpunks.ru repositories - gostls13.git/blobdiff - test/cmp6.go
cmd/compile/internal/inline: score call sites exposed by inlines
[gostls13.git] / test / cmp6.go
index 1e286750ab5c58b9956c0a023625031aceaba357..704ead2caa89ffb6d8160be69fbce6a2c95ef538 100644 (file)
@@ -4,6 +4,9 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
+// Verify that incorrect comparisons are detected.
+// Does not compile.
+
 package main
 
 func use(bool) {}
@@ -15,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
 
@@ -48,17 +54,25 @@ 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) // ok; the []int is a blank field
+       use(t3 == t3) // ERROR "struct|expected|cannot compare"
+       use(t4 == t4) // ERROR "cannot be compared|non-comparable|cannot compare"
 
        // Slices, functions, and maps too.
        var x []int
        var f func()
        var m map[int]int
-       use(x == x) // ERROR "slice can only be compared to nil"
-       use(f == f) // ERROR "func can only be compared to nil"
-       use(m == m) // ERROR "map can only be compared to nil"
+       use(x == x) // ERROR "slice can only be compared to nil|cannot compare"
+       use(f == f) // ERROR "func can only be compared to nil|cannot compare"
+       use(m == m) // ERROR "map can only be compared to nil|cannot compare"
 
        // Comparison with interface that cannot return true
        // (would panic).