@@ -351,24 +351,104 @@ void d() {
351
351
}
352
352
353
353
// 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>
363
453
// 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