@@ -526,3 +526,63 @@ bb0(%0 : @owned $NotTrivial, %1 : @owned $NotTrivial):
526
526
%6 = tuple ()
527
527
return %6 : $()
528
528
}
529
+
530
+ class Klass {
531
+ }
532
+
533
+ struct NonTrivialStruct {
534
+ var x : Klass
535
+ var y : Klass
536
+ var z : Klass
537
+ }
538
+
539
+ sil @get_klasstriple : $@convention(thin) () -> (@owned Klass, @owned Klass, @owned Klass)
540
+
541
+ // CHECK-LABEL: sil [ossa] @test_dynamiclifetime :
542
+ // CHECK: alloc_stack [dynamic_lifetime] $Klass
543
+ // CHECK: alloc_stack [dynamic_lifetime] $Klass
544
+ // CHECK: alloc_stack [dynamic_lifetime] $Klass
545
+ // CHECK-LABEL: } // end sil function 'test_dynamiclifetime'
546
+ sil [ossa] @test_dynamiclifetime : $@convention(thin) () -> () {
547
+ bb0:
548
+ %2 = alloc_stack $Builtin.Int1
549
+ %3 = alloc_stack [dynamic_lifetime] $NonTrivialStruct
550
+ %4 = integer_literal $Builtin.Int1, 0
551
+ store %4 to [trivial] %2 : $*Builtin.Int1
552
+ cond_br undef, bb1, bb2
553
+
554
+ bb1:
555
+ br bb3
556
+
557
+ bb2:
558
+ %func = function_ref @get_klasstriple : $@convention(thin) () -> (@owned Klass, @owned Klass, @owned Klass)
559
+ %r = apply %func() : $@convention(thin) () -> (@owned Klass, @owned Klass, @owned Klass)
560
+ (%v1, %v2, %v3) = destructure_tuple %r : $(Klass, Klass, Klass)
561
+ %27 = integer_literal $Builtin.Int1, -1
562
+ store %27 to [trivial] %2 : $*Builtin.Int1
563
+ %f1 = struct_element_addr %3 : $*NonTrivialStruct, #NonTrivialStruct.x
564
+ store %v1 to [init] %f1 : $*Klass
565
+ %f2 = struct_element_addr %3 : $*NonTrivialStruct, #NonTrivialStruct.y
566
+ store %v2 to [init] %f2 : $*Klass
567
+ %f3 = struct_element_addr %3 : $*NonTrivialStruct, #NonTrivialStruct.z
568
+ store %v3 to [init] %f3 : $*Klass
569
+ br bb3
570
+
571
+ bb3:
572
+ %32 = load [trivial] %2 : $*Builtin.Int1
573
+ cond_br %32, bb4, bb5
574
+
575
+ bb4:
576
+ %34 = load [take] %3 : $*NonTrivialStruct
577
+ destroy_value %34 : $NonTrivialStruct
578
+ br bb6
579
+
580
+ bb5:
581
+ br bb6
582
+
583
+ bb6:
584
+ dealloc_stack %3 : $*NonTrivialStruct
585
+ dealloc_stack %2 : $*Builtin.Int1
586
+ %res = tuple ()
587
+ return %res : $()
588
+ }
0 commit comments