tinygo-org / tinygo

Go compiler for small places. Microcontrollers, WebAssembly (WASM/WASI), and command-line tools. Based on LLVM.
https://tinygo.org
Other
15.25k stars 900 forks source link

reflect.DeepEqual() panics for interface keys #4373

Open ldemailly opened 2 months ago

ldemailly commented 2 months ago
type deepEqualInterface interface {
    Foo()
}
type deepEqualConcrete struct {
    int
}

func (deepEqualConcrete) Foo() {}

var (
    deepEqualConcrete1 = deepEqualConcrete{1}
    deepEqualConcrete2 = deepEqualConcrete{2}
)
...
// should be true, panics
reflect.DeepEqual(map[deepEqualInterface]string{deepEqualConcrete1: "a"}, map[deepEqualInterface]string{deepEqualConcrete1: "a"}) 
// should be false, panics
reflect.DeepEqual(map[deepEqualInterface]string{deepEqualConcrete1: "a"}, map[deepEqualInterface]string{deepEqualConcrete2: "a"})

This was fixed in #4360 and reverted