1
0
mirror of https://github.com/golang/go synced 2024-11-17 05:44:52 -07:00

test: add test coverage for type-switch hash collisions

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>
This commit is contained in:
Matthew Dempsky 2019-09-16 14:59:32 -07:00
parent c1000c500c
commit 115e4c9c14

View File

@ -10,6 +10,8 @@
package main package main
import ( import (
"fmt"
ssa1 "./p1/ssa" ssa1 "./p1/ssa"
ssa2 "./p2/ssa" ssa2 "./p2/ssa"
) )
@ -21,4 +23,27 @@ func main() {
v2 := &ssa2.T{} v2 := &ssa2.T{}
ssa2.Works(v2) ssa2.Works(v2)
ssa2.Panics(v2) // This call must not panic 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))
}
} }