@@ -263,4 +263,50 @@ void yo3(bool x) {
263
263
// LLVM: call ptr @__cxa_begin_catch
264
264
// LLVM: br label %[[RET]],
265
265
// LLVM: [[RET]]:
266
- // LLVM: ret void
266
+ // LLVM: ret void
267
+
268
+ void yo2 (bool x) {
269
+ int r = 1 ;
270
+ try {
271
+ Vec v1, v2;
272
+ try {
273
+ Vec v3, v4;
274
+ } catch (...) {
275
+ r++;
276
+ }
277
+ } catch (...) {
278
+ r++;
279
+ }
280
+ }
281
+
282
+ // CIR: cir.scope {
283
+ // CIR: %[[V1:.*]] = cir.alloca ![[VecTy]], !cir.ptr<![[VecTy]]>, ["v1"
284
+ // CIR: %[[V2:.*]] = cir.alloca ![[VecTy]], !cir.ptr<![[VecTy]]>, ["v2"
285
+ // CIR: cir.try {
286
+ // CIR: cir.call exception @_ZN3VecC1Ev(%[[V1]]) : (!cir.ptr<![[VecTy]]>) -> ()
287
+ // CIR: cir.call exception @_ZN3VecC1Ev(%[[V2]]) : (!cir.ptr<![[VecTy]]>) -> () cleanup {
288
+ // CIR: cir.call @_ZN3VecD1Ev(%[[V1]]) : (!cir.ptr<![[VecTy]]>) -> ()
289
+ // CIR: cir.yield
290
+ // CIR: }
291
+ // CIR: cir.scope {
292
+ // CIR: %[[V3:.*]] = cir.alloca ![[VecTy]], !cir.ptr<![[VecTy]]>, ["v3"
293
+ // CIR: %[[V4:.*]] = cir.alloca ![[VecTy]], !cir.ptr<![[VecTy]]>, ["v4"
294
+ // CIR: cir.try {
295
+ // CIR: cir.call exception @_ZN3VecC1Ev(%[[V3]]) : (!cir.ptr<![[VecTy]]>) -> ()
296
+ // CIR: cir.call exception @_ZN3VecC1Ev(%[[V4]]) : (!cir.ptr<![[VecTy]]>) -> () cleanup {
297
+ // CIR: cir.call @_ZN3VecD1Ev(%[[V3]]) : (!cir.ptr<![[VecTy]]>) -> ()
298
+ // CIR: cir.yield
299
+ // CIR: }
300
+ // CIR: cir.call @_ZN3VecD1Ev(%[[V4]]) : (!cir.ptr<![[VecTy]]>) -> ()
301
+ // CIR: cir.call @_ZN3VecD1Ev(%[[V3]]) : (!cir.ptr<![[VecTy]]>) -> ()
302
+ // CIR: cir.yield
303
+ // CIR: } catch [type #cir.all {
304
+ // CIR: cir.catch_param -> !cir.ptr<!void>
305
+ // CIR: }]
306
+ // CIR: }
307
+ // CIR: cir.call @_ZN3VecD1Ev(%[[V2]]) : (!cir.ptr<![[VecTy]]>) -> ()
308
+ // CIR: cir.call @_ZN3VecD1Ev(%[[V1]]) : (!cir.ptr<![[VecTy]]>) -> ()
309
+ // CIR: cir.yield
310
+ // CIR: } catch [type #cir.all {
311
+ // CIR: cir.catch_param -> !cir.ptr<!void>
312
+ // CIR: }]
0 commit comments