]> Cypherpunks repositories - gostls13.git/commitdiff
test: add test coverage for type-switch hash collisions
authorMatthew Dempsky <mdempsky@google.com>
Mon, 16 Sep 2019 21:59:32 +0000 (14:59 -0700)
committerMatthew Dempsky <mdempsky@google.com>
Mon, 16 Sep 2019 22:14:49 +0000 (22:14 +0000)
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>

test/fixedbugs/issue29612.dir/main.go

index 9dbc4c4cd9d20cefd9fc7db7abdd1622fa538f54..d860eaac7e93fa1bfbe3fb926f6d9b4508dee60a 100644 (file)
@@ -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))
+       }
 }