Skip to content

Commit d635529

Browse files
authored
Merge pull request swiftlang#73919 from rjmccall/isolated-any-optional-conversion-6.0
[6.0] Correctly apply @isolated(any) even when converting to an optional type
2 parents fde2f5c + e59936e commit d635529

14 files changed

+877
-403
lines changed

lib/ClangImporter/ClangImporter.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5494,19 +5494,18 @@ synthesizeBaseClassFieldGetterOrAddressGetterBody(AbstractFunctionDecl *afd,
54945494
auto *baseMemberCallExpr =
54955495
CallExpr::createImplicit(ctx, baseMemberDotCallExpr, argumentList);
54965496
Type resultType = baseGetterMethod->getResultInterfaceType();
5497-
if (kind == AccessorKind::Address && resultType->isUnsafeMutablePointer()) {
5498-
resultType = getterDecl->getResultInterfaceType();
5499-
}
55005497
baseMemberCallExpr->setType(resultType);
55015498
baseMemberCallExpr->setThrows(nullptr);
55025499

55035500
Expr *returnExpr = baseMemberCallExpr;
55045501
// Cast an 'address' result from a mutable pointer if needed.
55055502
if (kind == AccessorKind::Address &&
5506-
baseGetterMethod->getResultInterfaceType()->isUnsafeMutablePointer())
5503+
baseGetterMethod->getResultInterfaceType()->isUnsafeMutablePointer()) {
5504+
auto finalResultType = getterDecl->getResultInterfaceType();
55075505
returnExpr = SwiftDeclSynthesizer::synthesizeReturnReinterpretCast(
5508-
ctx, baseGetterMethod->getResultInterfaceType(), resultType,
5506+
ctx, baseGetterMethod->getResultInterfaceType(), finalResultType,
55095507
returnExpr);
5508+
}
55105509

55115510
auto *returnStmt = ReturnStmt::createImplicit(ctx, returnExpr);
55125511

lib/SILGen/ArgumentSource.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,10 @@ ManagedValue ArgumentSource::getAsSingleValue(SILGenFunction &SGF,
8181
SILType loweredTy,
8282
SGFContext C) && {
8383
auto substFormalType = getSubstRValueType();
84+
auto loweredFormalTy = SGF.getLoweredType(substFormalType);
8485
auto conversion =
85-
Conversion::getSubstToOrig(origFormalType, substFormalType, loweredTy);
86+
Conversion::getSubstToOrig(origFormalType, substFormalType,
87+
loweredFormalTy, loweredTy);
8688
return std::move(*this).getConverted(SGF, conversion, C);
8789
}
8890

0 commit comments

Comments
 (0)