mirror of
https://github.com/golang/go
synced 2024-11-23 21:10:05 -07:00
gc: disallow map/func equality via interface comparison
Missed when I removed direct map/func equality. R=ken2 CC=golang-dev https://golang.org/cl/5452052
This commit is contained in:
parent
e4e4cdb39a
commit
46deaa297b
@ -499,8 +499,7 @@ algtype(Type *t)
|
||||
{
|
||||
int a;
|
||||
|
||||
if(issimple[t->etype] || isptr[t->etype] ||
|
||||
t->etype == TCHAN || t->etype == TFUNC || t->etype == TMAP) {
|
||||
if(issimple[t->etype] || isptr[t->etype] || t->etype == TCHAN) {
|
||||
if(t->width == 1)
|
||||
a = AMEM8;
|
||||
else if(t->width == 2)
|
||||
|
@ -468,8 +468,8 @@ func TestInterfaceValue(t *testing.T) {
|
||||
func TestFunctionValue(t *testing.T) {
|
||||
var x interface{} = func() {}
|
||||
v := ValueOf(x)
|
||||
if v.Interface() != v.Interface() || v.Interface() != x {
|
||||
t.Fatalf("TestFunction != itself")
|
||||
if fmt.Sprint(v.Interface()) != fmt.Sprint(x) {
|
||||
t.Fatalf("TestFunction returned wrong pointer")
|
||||
}
|
||||
assert(t, v.Type().String(), "func()")
|
||||
}
|
||||
|
39
test/interface/noeq.go
Normal file
39
test/interface/noeq.go
Normal file
@ -0,0 +1,39 @@
|
||||
// $G $D/$F.go && $L $F.$A && ./$A.out || echo BUG: interface/noeq
|
||||
|
||||
// Copyright 2011 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
// Interface values containing types that cannot be compared for equality.
|
||||
|
||||
package main
|
||||
|
||||
func main() {
|
||||
cmp(1)
|
||||
|
||||
var (
|
||||
m map[int]int
|
||||
s struct{}
|
||||
f func()
|
||||
)
|
||||
noCmp(m)
|
||||
noCmp(s)
|
||||
noCmp(f)
|
||||
}
|
||||
|
||||
func cmp(x interface{}) bool {
|
||||
return x == x
|
||||
}
|
||||
|
||||
func noCmp(x interface{}) {
|
||||
shouldPanic(func() { cmp(x) })
|
||||
}
|
||||
|
||||
func shouldPanic(f func()) {
|
||||
defer func() {
|
||||
if recover() == nil {
|
||||
panic("function should panic")
|
||||
}
|
||||
}()
|
||||
f()
|
||||
}
|
Loading…
Reference in New Issue
Block a user