Skip to content

Commit 40d9ea5

Browse files
authored
Merge pull request #72514 from rjmccall/isolated-any-optional-conversion
Correctly apply `@isolated(any)` even when converting to an optional type
2 parents 70bc1b0 + 15b5dcb commit 40d9ea5

14 files changed

+877
-403
lines changed

lib/ClangImporter/ClangImporter.cpp

+4-5
Original file line numberDiff line numberDiff line change
@@ -5391,19 +5391,18 @@ synthesizeBaseClassFieldGetterOrAddressGetterBody(AbstractFunctionDecl *afd,
53915391
auto *baseMemberCallExpr =
53925392
CallExpr::createImplicit(ctx, baseMemberDotCallExpr, argumentList);
53935393
Type resultType = baseGetterMethod->getResultInterfaceType();
5394-
if (kind == AccessorKind::Address && resultType->isUnsafeMutablePointer()) {
5395-
resultType = getterDecl->getResultInterfaceType();
5396-
}
53975394
baseMemberCallExpr->setType(resultType);
53985395
baseMemberCallExpr->setThrows(nullptr);
53995396

54005397
Expr *returnExpr = baseMemberCallExpr;
54015398
// Cast an 'address' result from a mutable pointer if needed.
54025399
if (kind == AccessorKind::Address &&
5403-
baseGetterMethod->getResultInterfaceType()->isUnsafeMutablePointer())
5400+
baseGetterMethod->getResultInterfaceType()->isUnsafeMutablePointer()) {
5401+
auto finalResultType = getterDecl->getResultInterfaceType();
54045402
returnExpr = SwiftDeclSynthesizer::synthesizeReturnReinterpretCast(
5405-
ctx, baseGetterMethod->getResultInterfaceType(), resultType,
5403+
ctx, baseGetterMethod->getResultInterfaceType(), finalResultType,
54065404
returnExpr);
5405+
}
54075406

54085407
auto *returnStmt = ReturnStmt::createImplicit(ctx, returnExpr);
54095408

lib/SILGen/ArgumentSource.cpp

+3-1
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)