5 var unknown bool // defeat dead-code elimination
10 sliceA := make([]*int, 10) // @line a1make
14 sliceB = append(sliceB, &b) // @line a1append
16 print(sliceA) // @pointsto makeslice@a1make:16
17 print(sliceA[0]) // @pointsto main.a
19 print(sliceB) // @pointsto append@a1append:17
20 print(sliceB[100]) // @pointsto main.b
24 sliceA := make([]*int, 10) // @line a2make
29 print(sliceA) // @pointsto makeslice@a2make:16
30 print(sliceA[0]) // @pointsto main.a
32 print(sliceB) // @pointsto makeslice@a2make:16
33 print(sliceB[0]) // @pointsto main.a
37 a := []interface{}{"", 1}
38 b := []interface{}{true, func() {}}
39 print(a[0]) // @types string | int
40 print(b[0]) // @types bool | func()
43 // Test of append, copy, slice.
45 var s2 struct { // @line a4L0
49 var sl1 = make([]*int, 10) // @line a4make
50 var someint int // @line a4L1
52 sl2 := append(sl1, &s2.a[1]) // @line a4append1
53 print(sl1) // @pointsto makeslice@a4make:16
54 print(sl2) // @pointsto append@a4append1:15 | makeslice@a4make:16
55 print(sl1[0]) // @pointsto someint@a4L1:6 | s2.a[*]@a4L0:6
56 print(sl2[0]) // @pointsto someint@a4L1:6 | s2.a[*]@a4L0:6
58 // In z=append(x,y) we should observe flow from y[*] to x[*].
59 var sl3 = make([]*int, 10) // @line a4L2
60 _ = append(sl3, &s2.a[1])
61 print(sl3) // @pointsto makeslice@a4L2:16
62 print(sl3[0]) // @pointsto s2.a[*]@a4L0:6
64 var sl4 = []*int{&a} // @line a4L3
65 sl4a := append(sl4) // @line a4L4
66 print(sl4a) // @pointsto slicelit@a4L3:18 | append@a4L4:16
67 print(&sl4a[0]) // @pointsto slicelit[*]@a4L3:18 | append[*]@a4L4:16
68 print(sl4a[0]) // @pointsto main.a
70 var sl5 = []*int{&b} // @line a4L5
72 print(sl5) // @pointsto slicelit@a4L5:18
73 print(&sl5[0]) // @pointsto slicelit[*]@a4L5:18
74 print(sl5[0]) // @pointsto main.b | main.a
77 print(sl6) // @pointsto slicelit@a4L5:18
78 print(&sl6[0]) // @pointsto slicelit[*]@a4L5:18
79 print(sl6[0]) // @pointsto main.b | main.a
88 print(arr[n]) // @pointsto main.a | main.b