summaryrefslogtreecommitdiffstats
path: root/test/fixedbugs/issue29612.dir/main.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--test/fixedbugs/issue29612.dir/main.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/test/fixedbugs/issue29612.dir/main.go b/test/fixedbugs/issue29612.dir/main.go
new file mode 100644
index 0000000..97415c4
--- /dev/null
+++ b/test/fixedbugs/issue29612.dir/main.go
@@ -0,0 +1,49 @@
+// run
+
+// Copyright 2019 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Do not panic on conversion to anonymous interface, which
+// is similar-looking interface types in different packages.
+
+package main
+
+import (
+ "fmt"
+
+ ssa1 "issue29612.dir/p1/ssa"
+ ssa2 "issue29612.dir/p2/ssa"
+)
+
+func main() {
+ v1 := &ssa1.T{}
+ _ = v1
+
+ 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))
+ }
+}