From 115e4c9c14779f2561de4299b5748b98d7dd8cf0 Mon Sep 17 00:00:00 2001 From: Matthew Dempsky Date: Mon, 16 Sep 2019 14:59:32 -0700 Subject: [PATCH] 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 Reviewed-by: Keith Randall TryBot-Result: Gobot Gobot --- test/fixedbugs/issue29612.dir/main.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/test/fixedbugs/issue29612.dir/main.go b/test/fixedbugs/issue29612.dir/main.go index 9dbc4c4cd9..d860eaac7e 100644 --- a/test/fixedbugs/issue29612.dir/main.go +++ b/test/fixedbugs/issue29612.dir/main.go @@ -10,6 +10,8 @@ package main import ( + "fmt" + ssa1 "./p1/ssa" ssa2 "./p2/ssa" ) @@ -21,4 +23,27 @@ func main() { 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)) + } } -- 2.50.0