--- /dev/null
+// +build ignore
+
+package main
+
+var unknown bool
+
+type S string
+
+func incr(x int) int { return x + 1 }
+
+func main() {
+ var i interface{}
+ i = 1
+ if unknown {
+ i = S("foo")
+ }
+ if unknown {
+ i = (func(int, int))(nil) // NB type compares equal to that below.
+ }
+ // Look, the test harness can handle equal-but-not-String-equal
+ // types because we parse types and using a typemap.
+ if unknown {
+ i = (func(x int, y int))(nil)
+ }
+ if unknown {
+ i = incr
+ }
+ print(i) // @types int | S | func(int, int) | func(int) int
+
+ // NB, an interface may never directly alias any global
+ // labels, even though it may contain pointers that do.
+ print(i) // @pointsto makeinterface:func(x int) int | makeinterface:func(x int, y int) | makeinterface:func(int, int) | makeinterface:int | makeinterface:main.S
+ print(i.(func(int) int)) // @pointsto main.incr
+
+ print() // regression test for crash
+}