Skip to content

Commit 10dd321

Browse files
committed
Bailout on address apply result while computng argument escaping effects
1 parent 20b23d6 commit 10dd321

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

SwiftCompilerSources/Sources/Optimizer/Utilities/EscapeUtils.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,7 @@ fileprivate struct EscapeWalker<V: EscapeVisitor> : ValueDefUseWalker,
725725
}
726726
case .escapingToReturn(let toPath, let exclusive):
727727
if effect.matches(calleeArgIdx, argPath.projectionPath) {
728-
guard let fas = apply as? FullApplySite, let result = fas.singleDirectResult else {
728+
guard let fas = apply as? FullApplySite, let result = fas.singleDirectResult, result.type.isObject else {
729729
return isEscaping
730730
}
731731

test/SILOptimizer/escape_effects.sil

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -414,3 +414,12 @@ bb0(%0 : $*Wrapper):
414414
%2 = struct_element_addr %0, #Wrapper._k
415415
return %2
416416
}
417+
418+
sil [ossa] @call_mutate_accessor : $@convention(thin) (@inout Wrapper, @owned Klass) -> () {
419+
bb0(%0 : $*Wrapper, %1 : @owned $Klass):
420+
%func = function_ref @mutate_accessor : $@convention(thin) (@inout Wrapper) -> @inout Klass
421+
%addr = apply %func(%0) : $@convention(thin) (@inout Wrapper) -> @inout Klass
422+
store %1 to [assign] %addr
423+
%r = tuple ()
424+
return %r
425+
}

0 commit comments

Comments
 (0)