@@ -603,3 +603,29 @@ func genericFuncWithConversion<T: C>(list : [T]) {
603
603
print ( item)
604
604
}
605
605
}
606
+
607
+ // FIXME SR-8688: Make sure that branch on result of next() precedes optional injection.
608
+ //
609
+ // CHECK-LABEL: sil hidden [ossa] @$s7foreach32injectForEachElementIntoOptionalyySaySiGF
610
+ // CHECK: [[NEXT_RESULT:%.*]] = load [trivial] {{.*}} : $*Optional<Int>
611
+ // CHECK: [[PACKED_NEXT_RESULT:%.*]] = enum $Optional<Optional<Int>>, #Optional.some!enumelt, [[NEXT_RESULT]] : $Optional<Int>
612
+ // CHECK: switch_enum [[PACKED_NEXT_RESULT]] : $Optional<Optional<Int>>, case #Optional.some!enumelt: [[BB_SOME:bb.*]], case
613
+ // CHECK: [[BB_SOME]]([[X_BINDING:%.*]] : $Optional<Int>):
614
+ // CHECK: debug_value [[X_BINDING]] : $Optional<Int>, let, name "x"
615
+ func injectForEachElementIntoOptional( _ xs: [ Int ] ) {
616
+ for x : Int ? in xs { }
617
+ }
618
+
619
+ // FIXME SR-8688: Make sure that branch on result of next() precedes optional injection.
620
+ // CHECK-LABEL: sil hidden [ossa] @$s7foreach32injectForEachElementIntoOptionalyySayxGlF
621
+ // CHECK: [[PACKED_NEXT_RESULT_ADDR:%.*]] = init_enum_data_addr [[PACKED_NEXT_RESULT:%.*]] : $*Optional<Optional<T>>, #Optional.some!enumelt
622
+ // CHECK: copy_addr [take] [[NEXT_RESULT:%.*]] to [initialization] [[PACKED_NEXT_RESULT_ADDR:%.*]] : $*Optional<T>
623
+ // CHECK: inject_enum_addr [[PACKED_NEXT_RESULT]] : $*Optional<Optional<T>>, #Optional.some!enumelt
624
+ // CHECK: switch_enum_addr [[PACKED_NEXT_RESULT]] : $*Optional<Optional<T>>, case #Optional.some!enumelt: [[BB_SOME:bb.*]], case
625
+ // CHECK: [[BB_SOME]]:
626
+ // CHECK: [[X_BINDING:%.*]] = alloc_stack $Optional<T>, let, name "x"
627
+ // CHECK: [[ADDR:%.*]] = unchecked_take_enum_data_addr [[PACKED_NEXT_RESULT]] : $*Optional<Optional<T>>, #Optional.some!enumelt
628
+ // CHECK: copy_addr [take] [[ADDR]] to [initialization] [[X_BINDING]] : $*Optional<T>
629
+ func injectForEachElementIntoOptional< T> ( _ xs: [ T ] ) {
630
+ for x : T ? in xs { }
631
+ }
0 commit comments