This CL expands the test for #29612 to check that type switches also
work correctly when type hashes collide.
Change-Id: Ia153743e6ea0736c1a33191acfe4d8ba890be527
Reviewed-on: https://go-review.googlesource.com/c/go/+/195782
Run-TryBot: Matthew Dempsky <mdempsky@google.com>
Reviewed-by: Keith Randall <khr@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
package main
import (
+ "fmt"
+
ssa1 "./p1/ssa"
ssa2 "./p2/ssa"
)
v2 := &ssa2.T{}
ssa2.Works(v2)
ssa2.Panics(v2) // This call must not panic
+
+ swt(v1, 1)
+ swt(v2, 2)
+}
+
+//go:noinline
+func swt(i interface{}, want int) {
+ var got int
+ switch i.(type) {
+ case *ssa1.T:
+ got = 1
+ case *ssa2.T:
+ got = 2
+
+ case int8, int16, int32, int64:
+ got = 3
+ case uint8, uint16, uint32, uint64:
+ got = 4
+ }
+
+ if got != want {
+ panic(fmt.Sprintf("switch %v: got %d, want %d", i, got, want))
+ }
}