Commit 46deaa29 authored by Russ Cox's avatar Russ Cox

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
parent e4e4cdb3
......@@ -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()")
}
......
// $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()
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment