Detect overflow in the path count computation. rdar://12277446.
[oota-llvm.git] / test / Transforms / ObjCARC / path-overflow.ll
1 ; RUN: opt -objc-arc -S < %s
2 ; rdar://12277446
3
4 ; The total number of paths grows exponentially with the number of branches, and a
5 ; computation of this number can overflow any reasonable fixed-sized integer.
6
7 target datalayout = "e-p:32:32:32-i1:8:32-i8:8:32-i16:16:32-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:32:64-v128:32:128-a0:0:32-n32-S32"
8 target triple = "thumbv7-apple-ios5.0.0"
9
10 %struct.NSConstantString.11.33.55.77.99.121.143.332.1130.1340.2768 = type { i32*, i32, i8*, i32 }
11
12 @_unnamed_cfstring_591 = external constant %struct.NSConstantString.11.33.55.77.99.121.143.332.1130.1340.2768, section "__DATA,__cfstring"
13
14 declare i8* @objc_retain(i8*) nonlazybind
15
16 declare void @objc_release(i8*) nonlazybind
17
18 define hidden void @foo() {
19 entry:
20   br i1 undef, label %msgSend.nullinit, label %msgSend.call
21
22 msgSend.call:                                     ; preds = %entry
23   br label %msgSend.cont
24
25 msgSend.nullinit:                                 ; preds = %entry
26   br label %msgSend.cont
27
28 msgSend.cont:                                     ; preds = %msgSend.nullinit, %msgSend.call
29   %0 = bitcast %struct.NSConstantString.11.33.55.77.99.121.143.332.1130.1340.2768* @_unnamed_cfstring_591 to i8*
30   %1 = call i8* @objc_retain(i8* %0) nounwind
31   br i1 undef, label %msgSend.nullinit33, label %msgSend.call32
32
33 msgSend.call32:                                   ; preds = %if.end10
34   br label %msgSend.cont34
35
36 msgSend.nullinit33:                               ; preds = %if.end10
37   br label %msgSend.cont34
38
39 msgSend.cont34:                                   ; preds = %msgSend.nullinit33, %msgSend.call32
40   br i1 undef, label %msgSend.nullinit38, label %msgSend.call37
41
42 msgSend.call37:                                   ; preds = %msgSend.cont34
43   br label %msgSend.cont39
44
45 msgSend.nullinit38:                               ; preds = %msgSend.cont34
46   br label %msgSend.cont39
47
48 msgSend.cont39:                                   ; preds = %msgSend.nullinit38, %msgSend.call37
49   br i1 undef, label %msgSend.nullinit49, label %msgSend.call48
50
51 msgSend.call48:                                   ; preds = %msgSend.cont39
52   br label %msgSend.cont50
53
54 msgSend.nullinit49:                               ; preds = %msgSend.cont39
55   br label %msgSend.cont50
56
57 msgSend.cont50:                                   ; preds = %msgSend.nullinit49, %msgSend.call48
58   br i1 undef, label %msgSend.nullinit61, label %msgSend.call60
59
60 msgSend.call60:                                   ; preds = %msgSend.cont50
61   br label %msgSend.cont62
62
63 msgSend.nullinit61:                               ; preds = %msgSend.cont50
64   br label %msgSend.cont62
65
66 msgSend.cont62:                                   ; preds = %msgSend.nullinit61, %msgSend.call60
67   br i1 undef, label %msgSend.nullinit67, label %msgSend.call66
68
69 msgSend.call66:                                   ; preds = %msgSend.cont62
70   br label %msgSend.cont68
71
72 msgSend.nullinit67:                               ; preds = %msgSend.cont62
73   br label %msgSend.cont68
74
75 msgSend.cont68:                                   ; preds = %msgSend.nullinit67, %msgSend.call66
76   br i1 undef, label %msgSend.nullinit84, label %msgSend.call83
77
78 msgSend.call83:                                   ; preds = %msgSend.cont68
79   br label %msgSend.cont85
80
81 msgSend.nullinit84:                               ; preds = %msgSend.cont68
82   br label %msgSend.cont85
83
84 msgSend.cont85:                                   ; preds = %msgSend.nullinit84, %msgSend.call83
85   br i1 undef, label %msgSend.nullinit90, label %msgSend.call89
86
87 msgSend.call89:                                   ; preds = %msgSend.cont85
88   br label %msgSend.cont91
89
90 msgSend.nullinit90:                               ; preds = %msgSend.cont85
91   br label %msgSend.cont91
92
93 msgSend.cont91:                                   ; preds = %msgSend.nullinit90, %msgSend.call89
94   br i1 undef, label %msgSend.nullinit104, label %msgSend.call103
95
96 msgSend.call103:                                  ; preds = %msgSend.cont91
97   br label %msgSend.cont105
98
99 msgSend.nullinit104:                              ; preds = %msgSend.cont91
100   br label %msgSend.cont105
101
102 msgSend.cont105:                                  ; preds = %msgSend.nullinit104, %msgSend.call103
103   br i1 undef, label %land.lhs.true, label %if.end123
104
105 land.lhs.true:                                    ; preds = %msgSend.cont105
106   br i1 undef, label %if.then117, label %if.end123
107
108 if.then117:                                       ; preds = %land.lhs.true
109   br label %if.end123
110
111 if.end123:                                        ; preds = %if.then117, %land.lhs.true, %msgSend.cont105
112   br i1 undef, label %msgSend.nullinit132, label %msgSend.call131
113
114 msgSend.call131:                                  ; preds = %if.end123
115   br label %msgSend.cont133
116
117 msgSend.nullinit132:                              ; preds = %if.end123
118   br label %msgSend.cont133
119
120 msgSend.cont133:                                  ; preds = %msgSend.nullinit132, %msgSend.call131
121   br i1 undef, label %msgSend.nullinit139, label %msgSend.call138
122
123 msgSend.call138:                                  ; preds = %msgSend.cont133
124   br label %msgSend.cont140
125
126 msgSend.nullinit139:                              ; preds = %msgSend.cont133
127   br label %msgSend.cont140
128
129 msgSend.cont140:                                  ; preds = %msgSend.nullinit139, %msgSend.call138
130   br i1 undef, label %if.then151, label %if.end157
131
132 if.then151:                                       ; preds = %msgSend.cont140
133   br label %if.end157
134
135 if.end157:                                        ; preds = %if.then151, %msgSend.cont140
136   br i1 undef, label %msgSend.nullinit164, label %msgSend.call163
137
138 msgSend.call163:                                  ; preds = %if.end157
139   br label %msgSend.cont165
140
141 msgSend.nullinit164:                              ; preds = %if.end157
142   br label %msgSend.cont165
143
144 msgSend.cont165:                                  ; preds = %msgSend.nullinit164, %msgSend.call163
145   br i1 undef, label %msgSend.nullinit176, label %msgSend.call175
146
147 msgSend.call175:                                  ; preds = %msgSend.cont165
148   br label %msgSend.cont177
149
150 msgSend.nullinit176:                              ; preds = %msgSend.cont165
151   br label %msgSend.cont177
152
153 msgSend.cont177:                                  ; preds = %msgSend.nullinit176, %msgSend.call175
154   br i1 undef, label %land.lhs.true181, label %if.end202
155
156 land.lhs.true181:                                 ; preds = %msgSend.cont177
157   br i1 undef, label %if.then187, label %if.end202
158
159 if.then187:                                       ; preds = %land.lhs.true181
160   br i1 undef, label %msgSend.nullinit199, label %msgSend.call198
161
162 msgSend.call198:                                  ; preds = %if.then187
163   br label %msgSend.cont200
164
165 msgSend.nullinit199:                              ; preds = %if.then187
166   br label %msgSend.cont200
167
168 msgSend.cont200:                                  ; preds = %msgSend.nullinit199, %msgSend.call198
169   br label %if.end202
170
171 if.end202:                                        ; preds = %msgSend.cont200, %land.lhs.true181, %msgSend.cont177
172   br i1 undef, label %msgSend.nullinit236, label %msgSend.call235
173
174 msgSend.call235:                                  ; preds = %if.end202
175   br label %msgSend.cont237
176
177 msgSend.nullinit236:                              ; preds = %if.end202
178   br label %msgSend.cont237
179
180 msgSend.cont237:                                  ; preds = %msgSend.nullinit236, %msgSend.call235
181   br i1 undef, label %msgSend.nullinit254, label %msgSend.call253
182
183 msgSend.call253:                                  ; preds = %msgSend.cont237
184   br label %msgSend.cont255
185
186 msgSend.nullinit254:                              ; preds = %msgSend.cont237
187   br label %msgSend.cont255
188
189 msgSend.cont255:                                  ; preds = %msgSend.nullinit254, %msgSend.call253
190   br i1 undef, label %msgSend.nullinit269, label %msgSend.call268
191
192 msgSend.call268:                                  ; preds = %msgSend.cont255
193   br label %msgSend.cont270
194
195 msgSend.nullinit269:                              ; preds = %msgSend.cont255
196   br label %msgSend.cont270
197
198 msgSend.cont270:                                  ; preds = %msgSend.nullinit269, %msgSend.call268
199   br i1 undef, label %msgSend.nullinit281, label %msgSend.call280
200
201 msgSend.call280:                                  ; preds = %msgSend.cont270
202   br label %msgSend.cont282
203
204 msgSend.nullinit281:                              ; preds = %msgSend.cont270
205   br label %msgSend.cont282
206
207 msgSend.cont282:                                  ; preds = %msgSend.nullinit281, %msgSend.call280
208   br i1 undef, label %msgSend.nullinit287, label %msgSend.call286
209
210 msgSend.call286:                                  ; preds = %msgSend.cont282
211   br label %msgSend.cont288
212
213 msgSend.nullinit287:                              ; preds = %msgSend.cont282
214   br label %msgSend.cont288
215
216 msgSend.cont288:                                  ; preds = %msgSend.nullinit287, %msgSend.call286
217   br i1 undef, label %msgSend.nullinit303, label %msgSend.call302
218
219 msgSend.call302:                                  ; preds = %msgSend.cont288
220   br label %msgSend.cont304
221
222 msgSend.nullinit303:                              ; preds = %msgSend.cont288
223   br label %msgSend.cont304
224
225 msgSend.cont304:                                  ; preds = %msgSend.nullinit303, %msgSend.call302
226   br i1 undef, label %msgSend.nullinit344, label %msgSend.call343
227
228 msgSend.call343:                                  ; preds = %msgSend.cont304
229   br label %msgSend.cont345
230
231 msgSend.nullinit344:                              ; preds = %msgSend.cont304
232   br label %msgSend.cont345
233
234 msgSend.cont345:                                  ; preds = %msgSend.nullinit344, %msgSend.call343
235   br i1 undef, label %msgSend.nullinit350, label %msgSend.call349
236
237 msgSend.call349:                                  ; preds = %msgSend.cont345
238   br label %msgSend.cont351
239
240 msgSend.nullinit350:                              ; preds = %msgSend.cont345
241   br label %msgSend.cont351
242
243 msgSend.cont351:                                  ; preds = %msgSend.nullinit350, %msgSend.call349
244   br i1 undef, label %msgSend.nullinit366, label %msgSend.call365
245
246 msgSend.call365:                                  ; preds = %msgSend.cont351
247   br label %msgSend.cont367
248
249 msgSend.nullinit366:                              ; preds = %msgSend.cont351
250   br label %msgSend.cont367
251
252 msgSend.cont367:                                  ; preds = %msgSend.nullinit366, %msgSend.call365
253   br i1 undef, label %msgSend.nullinit376, label %msgSend.call375
254
255 msgSend.call375:                                  ; preds = %msgSend.cont367
256   br label %msgSend.cont377
257
258 msgSend.nullinit376:                              ; preds = %msgSend.cont367
259   br label %msgSend.cont377
260
261 msgSend.cont377:                                  ; preds = %msgSend.nullinit376, %msgSend.call375
262   br i1 undef, label %if.then384, label %if.else401
263
264 if.then384:                                       ; preds = %msgSend.cont377
265   br i1 undef, label %msgSend.nullinit392, label %msgSend.call391
266
267 msgSend.call391:                                  ; preds = %if.then384
268   br label %msgSend.cont393
269
270 msgSend.nullinit392:                              ; preds = %if.then384
271   br label %msgSend.cont393
272
273 msgSend.cont393:                                  ; preds = %msgSend.nullinit392, %msgSend.call391
274   br label %if.end418
275
276 if.else401:                                       ; preds = %msgSend.cont377
277   br i1 undef, label %msgSend.nullinit409, label %msgSend.call408
278
279 msgSend.call408:                                  ; preds = %if.else401
280   br label %msgSend.cont410
281
282 msgSend.nullinit409:                              ; preds = %if.else401
283   br label %msgSend.cont410
284
285 msgSend.cont410:                                  ; preds = %msgSend.nullinit409, %msgSend.call408
286   br label %if.end418
287
288 if.end418:                                        ; preds = %msgSend.cont410, %msgSend.cont393
289   br i1 undef, label %msgSend.nullinit470, label %msgSend.call469
290
291 msgSend.call469:                                  ; preds = %if.end418
292   br label %msgSend.cont471
293
294 msgSend.nullinit470:                              ; preds = %if.end418
295   br label %msgSend.cont471
296
297 msgSend.cont471:                                  ; preds = %msgSend.nullinit470, %msgSend.call469
298   br i1 undef, label %msgSend.nullinit484, label %msgSend.call483
299
300 msgSend.call483:                                  ; preds = %msgSend.cont471
301   br label %msgSend.cont485
302
303 msgSend.nullinit484:                              ; preds = %msgSend.cont471
304   br label %msgSend.cont485
305
306 msgSend.cont485:                                  ; preds = %msgSend.nullinit484, %msgSend.call483
307   br i1 undef, label %msgSend.nullinit500, label %msgSend.call499
308
309 msgSend.call499:                                  ; preds = %msgSend.cont485
310   br label %msgSend.cont501
311
312 msgSend.nullinit500:                              ; preds = %msgSend.cont485
313   br label %msgSend.cont501
314
315 msgSend.cont501:                                  ; preds = %msgSend.nullinit500, %msgSend.call499
316   br i1 undef, label %msgSend.nullinit506, label %msgSend.call505
317
318 msgSend.call505:                                  ; preds = %msgSend.cont501
319   br label %msgSend.cont507
320
321 msgSend.nullinit506:                              ; preds = %msgSend.cont501
322   br label %msgSend.cont507
323
324 msgSend.cont507:                                  ; preds = %msgSend.nullinit506, %msgSend.call505
325   call void @objc_release(i8* %0) nounwind, !clang.imprecise_release !0
326   ret void
327 }
328
329 !0 = metadata !{}