@@ -351,24 +351,104 @@ void d() {
351351}
352352
353353// CIR: %[[V0:.*]] = cir.alloca !rec_C, !cir.ptr<!rec_C>, ["a"] {alignment = 1 : i64}
354- // CIR: %[[V1:.*]] = cir.alloca !rec_C, !cir.ptr<!rec_C>, ["b"] {alignment = 1 : i64}
355- // CIR: cir.scope {
356- // CIR: %[[V2:.*]] = cir.alloca !rec_C, !cir.ptr<!rec_C>, ["agg.tmp0"] {alignment = 1 : i64}
357- // CIR: cir.copy %[[V1]] to %[[V2]] : !cir.ptr<!rec_C>
358- // CIR: %[[V3:.*]] = cir.load{{.*}} %[[V2]] : !cir.ptr<!rec_C>, !rec_C
359- // CIR: cir.try synthetic cleanup {
360- // CIR: cir.call exception @_ZN1CaSES_(%[[V0]], %[[V3]]) : (!cir.ptr<!rec_C>, !rec_C) -> () cleanup {
361- // CIR: cir.call @_ZN1CD1Ev(%[[V2]]) : (!cir.ptr<!rec_C>) -> () extra(#fn_attr)
362- // CIR: cir.call @_ZN1CD1Ev(%[[V1]]) : (!cir.ptr<!rec_C>) -> () extra(#fn_attr)
354+ // CIR-NEXT: %[[V1:.*]] = cir.alloca !rec_C, !cir.ptr<!rec_C>, ["b"] {alignment = 1 : i64}
355+ // CIR-NEXT: cir.scope {
356+ // CIR-NEXT: %[[V2:.*]] = cir.alloca !rec_C, !cir.ptr<!rec_C>, ["agg.tmp0"] {alignment = 1 : i64}
357+ // CIR-NEXT: cir.copy %[[V1]] to %[[V2]] : !cir.ptr<!rec_C>
358+ // CIR-NEXT: %[[V3:.*]] = cir.load{{.*}} %[[V2]] : !cir.ptr<!rec_C>, !rec_C
359+ // CIR-NEXT: cir.try synthetic cleanup {
360+ // CIR-NEXT: cir.call exception @_ZN1CaSES_(%[[V0]], %[[V3]]) : (!cir.ptr<!rec_C>, !rec_C) -> () cleanup {
361+ // CIR-NEXT: cir.call @_ZN1CD1Ev(%[[V2]]) : (!cir.ptr<!rec_C>) -> () extra(#fn_attr)
362+ // CIR-NEXT: cir.call @_ZN1CD1Ev(%[[V1]]) : (!cir.ptr<!rec_C>) -> () extra(#fn_attr)
363+ // CIR-NEXT: cir.yield
364+ // CIR-NEXT: }
365+ // CIR-NEXT: cir.yield
366+ // CIR-NEXT: } catch [#cir.unwind {
367+ // CIR-NEXT: cir.resume
368+ // CIR-NEXT: }]
369+ // CIR-NEXT: cir.call @_ZN1CD1Ev(%[[V2]]) : (!cir.ptr<!rec_C>) -> () extra(#fn_attr)
370+ // CIR-NEXT: }
371+ // CIR-NEXT: cir.call @_ZN1CD1Ev(%[[V1]]) : (!cir.ptr<!rec_C>) -> () extra(#fn_attr)
372+ // CIR-NEXT: cir.call @_ZN1CD1Ev(%[[V0]]) : (!cir.ptr<!rec_C>) -> () extra(#fn_attr)
373+ // CIR-NEXT: cir.return
374+
375+ template <typename > class a ;
376+
377+ template <> class a <void > {
378+ public:
379+ struct b {
380+ typedef a<int > c;
381+ };
382+ };
383+
384+ template <typename > class a {
385+ public:
386+ template <typename d> a (d) noexcept ;
387+ ~a ();
388+ };
389+
390+ struct e {
391+ using f = a<void >::b::c;
392+ };
393+
394+ template <typename , typename > using g = e::f;
395+
396+ template <typename h> void i (h);
397+
398+ class j {
399+
400+ public:
401+ using k = g<int , j>;
402+ };
403+
404+ class l {
405+ public:
406+ template <typename m, typename n> l (m p1, n) : l(p1, 0 , a<void >()) {}
407+ template <typename m, typename n, typename h> l (m, n, h o) {
408+ try {
409+ j::k p (o);
410+ i (p);
411+ } catch (...) {
412+ }
413+ }
414+ };
415+
416+ class G {
417+ public:
418+ template <typename q, typename n> G (q p1, n) : r(p1, 0 ) {}
419+ l r;
420+ };
421+
422+ class s : G {
423+ public:
424+ int t;
425+ s () : G(t, 0 ) {}
426+ };
427+
428+ void fn3 () { s (); }
429+
430+ // CIR: cir.func linkonce_odr @_ZN1lC2Iii1aIvEEET_T0_T1_
431+ // CIR: cir.scope
432+ // CIR: %[[V5:.*]] = cir.alloca !rec_a3Cint3E, !cir.ptr<!rec_a3Cint3E>
433+ // CIR: %[[V6:.*]] = cir.alloca !rec_a3Cvoid3E, !cir.ptr<!rec_a3Cvoid3E>
434+ // CIR: cir.try {
435+ // CIR: cir.copy {{.*}} to %[[V6]] : !cir.ptr<!rec_a3Cvoid3E>
436+ // CIR: %[[V7:.*]] = cir.load align(1) %[[V6]] : !cir.ptr<!rec_a3Cvoid3E>, !rec_a3Cvoid3E
437+ // CIR: cir.call @_ZN1aIiEC1IS_IvEEET_(%[[V5]], %[[V7]]) : (!cir.ptr<!rec_a3Cint3E>, !rec_a3Cvoid3E) -> ()
438+ // CIR: cir.scope {
439+ // CIR: %[[V8:.*]] = cir.alloca !rec_a3Cint3E, !cir.ptr<!rec_a3Cint3E>
440+ // CIR: cir.copy %[[V5]] to %[[V8]] : !cir.ptr<!rec_a3Cint3E>
441+ // CIR: %[[V9:.*]] = cir.load align(1) %[[V8]] : !cir.ptr<!rec_a3Cint3E>, !rec_a3Cint3E
442+ // CIR-NEXT: cir.call exception @_Z1iI1aIiEEvT_(%[[V9]]) : (!rec_a3Cint3E) -> () cleanup {
443+ // CIR-NEXT: cir.call @_ZN1aIiED1Ev(%[[V8]]) : (!cir.ptr<!rec_a3Cint3E>) -> ()
444+ // CIR-NEXT: cir.call @_ZN1aIiED1Ev(%[[V5]]) : (!cir.ptr<!rec_a3Cint3E>) -> ()
445+ // CIR-NEXT: cir.yield
446+ // CIR-NEXT: }
447+ // CIR-NEXT: cir.call @_ZN1aIiED1Ev(%[[V8]]) : (!cir.ptr<!rec_a3Cint3E>) -> ()
448+ // CIR-NEXT: }
449+ // CIR-NEXT: cir.call @_ZN1aIiED1Ev(%[[V5]]) : (!cir.ptr<!rec_a3Cint3E>) -> ()
450+ // CIR-NEXT: cir.yield
451+ // CIR: } catch [type #cir.all {
452+ // CIR: %[[V7:.*]] = cir.catch_param -> !cir.ptr<!void>
363453// CIR: cir.yield
364- // CIR: }
365- // CIR: cir.yield
366- // CIR: } catch [#cir.unwind {
367- // CIR: cir.resume
368- // CIR: }]
369- // CIR: cir.call @_ZN1CD1Ev(%[[V2]]) : (!cir.ptr<!rec_C>) -> () extra(#fn_attr)
370- // CIR: cir.call @_ZN1CD1Ev(%[[V1]]) : (!cir.ptr<!rec_C>) -> () extra(#fn_attr)
371- // CIR: }
372- // CIR: cir.call @_ZN1CD1Ev(%[[V1]]) : (!cir.ptr<!rec_C>) -> () extra(#fn_attr)
373- // CIR: cir.call @_ZN1CD1Ev(%[[V0]]) : (!cir.ptr<!rec_C>) -> () extra(#fn_attr)
374- // CIR: cir.return
454+ // CIR: }]
0 commit comments