diff --git a/src/runtime/interface.go b/src/runtime/interface.go index 440bc652..97ab5439 100644 --- a/src/runtime/interface.go +++ b/src/runtime/interface.go @@ -74,6 +74,8 @@ func reflectValueEqual(x, y reflect.Value) bool { } } return true + case reflect.Interface: + return reflectValueEqual(x.Elem(), y.Elem()) default: runtimePanic("comparing un-comparable type") return false // unreachable diff --git a/testdata/binop.go b/testdata/binop.go index 9f85976a..67ae147c 100644 --- a/testdata/binop.go +++ b/testdata/binop.go @@ -86,6 +86,18 @@ func main() { // check for signed integer overflow println("-2147483648 / -1:", sdiv32(-2147483648, -1)) println("-2147483648 % -1:", srem32(-2147483648, -1)) + + type foo struct { + n int + itf interface{} + } + + var a interface{} = foo{3, float32(5)} + var b interface{} = foo{3, float32(3)} + var b2 interface{} = foo{3, float32(3)} + println("interface equality") + println("a==b", a == b) + println("b==b2", b == b2) } var x = true diff --git a/testdata/binop.txt b/testdata/binop.txt index 1599ff0f..f6ce3812 100644 --- a/testdata/binop.txt +++ b/testdata/binop.txt @@ -71,3 +71,6 @@ constant number 0 -2147483648 / -1: -2147483648 -2147483648 % -1: 0 +interface equality +a==b false +b==b2 true