File tree Expand file tree Collapse file tree 2 files changed +40
-2
lines changed
lib/SILOptimizer/Transforms Expand file tree Collapse file tree 2 files changed +40
-2
lines changed Original file line number Diff line number Diff line change @@ -433,9 +433,12 @@ void RetainCodeMotionContext::initializeCodeMotionDataFlow() {
433
433
continue ;
434
434
if (!parentTransform->continueWithNextSubpassRun (&II))
435
435
continue ;
436
+ SILValue Root = getRCRoot (&II);
437
+ if (Root->getType ().isMoveOnly ()) {
438
+ continue ;
439
+ }
436
440
retainInstructions.insert (&II);
437
441
RCInstructions.insert (&II);
438
- SILValue Root = getRCRoot (&II);
439
442
if (RCRootIndex.find (Root) != RCRootIndex.end ())
440
443
continue ;
441
444
RCRootIndex[Root] = RCRootVault.size ();
@@ -818,8 +821,11 @@ void ReleaseCodeMotionContext::initializeCodeMotionDataFlow() {
818
821
continue ;
819
822
if (!parentTransform->continueWithNextSubpassRun (&II))
820
823
continue ;
821
- releaseInstructions.insert (&II);
822
824
SILValue Root = getRCRoot (&II);
825
+ if (Root->getType ().isMoveOnly ()) {
826
+ continue ;
827
+ }
828
+ releaseInstructions.insert (&II);
823
829
RCInstructions.insert (&II);
824
830
if (RCRootIndex.find (Root) != RCRootIndex.end ())
825
831
continue ;
Original file line number Diff line number Diff line change @@ -1138,3 +1138,35 @@ bb0(%0 : $B, %1: $B):
1138
1138
return %5 : $()
1139
1139
}
1140
1140
1141
+ enum NCEnum : ~Copyable {
1142
+ case some([Int])
1143
+ case none
1144
+ }
1145
+
1146
+ sil @use_ncenum : $@convention(thin) (@guaranteed Array<Int>) -> ()
1147
+
1148
+ // CHECK-LABEL: sil hidden @testNoncopyable : $@convention(thin) (@guaranteed NCEnum) -> () {
1149
+ // CHECK-NOT: retain_value %0
1150
+ // CHECK: retain_value
1151
+ // CHECK-LABEL: } // end sil function 'testNoncopyable'
1152
+ sil hidden @testNoncopyable : $@convention(thin) (@guaranteed NCEnum) -> () {
1153
+ bb0(%0 : $NCEnum):
1154
+ switch_enum %0, case #NCEnum.none!enumelt: bb1, case #NCEnum.some!enumelt: bb2
1155
+
1156
+ bb1:
1157
+ br bb3
1158
+
1159
+ bb2(%4 : $Array<Int>):
1160
+ %5 = alloc_stack [var_decl] $Array<Int>, var, name "array"
1161
+ retain_value %4
1162
+ store %4 to %5
1163
+ %11 = function_ref @use_ncenum : $@convention(thin) (@guaranteed Array<Int>) -> ()
1164
+ %12 = apply %11(%4) : $@convention(thin) (@guaranteed Array<Int>) -> ()
1165
+ destroy_addr %5
1166
+ dealloc_stack %5
1167
+ br bb3
1168
+ bb3:
1169
+ %16 = tuple ()
1170
+ return %16
1171
+ }
1172
+
You can’t perform that action at this time.
0 commit comments