Source file
test/escape_iface_data.go
1
2
3
4
5
6
7
8
9
10 package dataword
11
12 var sink interface{}
13
14 func string1() {
15 sink = "abc"
16 }
17
18 func string2() {
19 v := "abc"
20 sink = v
21 }
22
23 func string3() {
24 sink = ""
25 }
26
27 func string4() {
28 v := ""
29 sink = v
30 }
31
32 func string5() {
33 var a any = "abc"
34 _ = a
35 }
36
37 func string6() {
38 var a any
39 v := "abc"
40 a = v
41 _ = a
42 }
43
44
45 func string7(v string) {
46 sink = v
47 }
48
49 func string8() {
50 v0 := "abc"
51 v := v0
52 string7(v)
53 }
54
55 func string9() {
56 v0 := "abc"
57 v := v0
58 f := func() {
59 string7(v)
60 }
61 f()
62 }
63
64 func string10() {
65 v0 := "abc"
66 v := v0
67 f := func() {
68 f2 := func() {
69 string7(v)
70 }
71 f2()
72 }
73 f()
74 }
75
76 func string11() {
77 v0 := "abc"
78 v := v0
79 defer func() {
80 string7(v)
81 }()
82 }
83
84 func integer1() {
85 sink = 42
86 }
87
88 func integer2() {
89 v := 42
90 sink = v
91 }
92
93 func integer3() {
94 sink = 0
95 }
96
97 func integer4a() {
98 v := 0
99 sink = v
100 }
101
102 func integer4b() {
103 v := uint8(0)
104 sink = v
105 }
106
107 func integer5() {
108 var a any = 42
109 _ = a
110 }
111
112 func integer6() {
113 var a any
114 v := 42
115 a = v
116 _ = a
117 }
118
119 func integer7(v int) {
120 sink = v
121 }
122
123 type M interface{ M() }
124
125 type MyInt int
126
127 func (m MyInt) M() {}
128
129 func escapes(m M) {
130 sink = m
131 }
132
133 func named1a() {
134 sink = MyInt(42)
135 }
136
137 func named1b() {
138 escapes(MyInt(42))
139 }
140
141 func named2a() {
142 v := MyInt(0)
143 sink = v
144 }
145
146 func named2b() {
147 v := MyInt(42)
148 escapes(v)
149 }
150
151 func named2c() {
152 v := 42
153 sink = MyInt(v)
154 }
155
156 func named2d() {
157 v := 42
158 escapes(MyInt(v))
159 }
160 func named3a() {
161 sink = MyInt(42)
162 }
163
164 func named3b() {
165 escapes(MyInt(0))
166 }
167
168 func named4a() {
169 v := MyInt(0)
170 sink = v
171 }
172
173 func named4b() {
174 v := MyInt(0)
175 escapes(v)
176 }
177
178 func named4c() {
179 v := 0
180 sink = MyInt(v)
181 }
182
183 func named4d() {
184 v := 0
185 escapes(MyInt(v))
186 }
187
188 func named5() {
189 var a any = MyInt(42)
190 _ = a
191 }
192
193 func named6() {
194 var a any
195 v := MyInt(42)
196 a = v
197 _ = a
198 }
199
200 func named7a(v MyInt) {
201 sink = v
202 }
203
204 func named7b(v MyInt) {
205 escapes(v)
206 }
207
208 type S struct{ a, b int64 }
209
210 func struct1() {
211 sink = S{1, 1}
212 }
213
214 func struct2() {
215 v := S{1, 1}
216 sink = v
217 }
218
219 func struct3() {
220 sink = S{}
221 }
222
223 func struct4() {
224 v := S{}
225 sink = v
226 }
227
228 func struct5() {
229 var a any = S{1, 1}
230 _ = a
231 }
232
233 func struct6() {
234 var a any
235 v := S{1, 1}
236 a = v
237 _ = a
238 }
239
240 func struct7(v S) {
241 sink = v
242 }
243
244 func emptyStruct1() {
245 sink = struct{}{}
246 }
247
248 func emptyStruct2() {
249 v := struct{}{}
250 sink = v
251 }
252
253 func emptyStruct3(v struct{}) {
254 sink = v
255 }
256
257
258
259 func Printf(format string, args ...any) {
260 for _, arg := range args {
261 sink = arg
262 }
263 }
264
265 var enabled = true
266
267 func debugf(format string, args ...interface{}) {
268 if enabled {
269 Printf(format, args...)
270 }
271 }
272
273
274 func debugf2(format string, args ...interface{}) {
275 if enabled {
276 Printf(format, args...)
277 }
278 }
279
280 func f1() {
281 v := 1000
282 debugf("hello %d", v)
283 }
284
285 func f2() {
286 v := 1000
287 debugf2("hello %d", v)
288 }
289
290
291 func f3(i int) {
292 debugf("hello %d", i)
293 }
294
295 func f4() {
296 f3(1000)
297 }
298
View as plain text