@@ -264,3 +264,49 @@ void yo3(bool x) {
264264// LLVM: br label %[[RET]],
265265// LLVM: [[RET]]:
266266// 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