Skip to content

Commit 44d7d06

Browse files
committed
Don't lie about the intermediate result type when synthesizing a call to a
function that returns UnsafeMutablePointer.
1 parent 5d55621 commit 44d7d06

File tree

1 file changed

+4
-5
lines changed

1 file changed

+4
-5
lines changed

lib/ClangImporter/ClangImporter.cpp

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5388,19 +5388,18 @@ synthesizeBaseClassFieldGetterOrAddressGetterBody(AbstractFunctionDecl *afd,
53885388
auto *baseMemberCallExpr =
53895389
CallExpr::createImplicit(ctx, baseMemberDotCallExpr, argumentList);
53905390
Type resultType = baseGetterMethod->getResultInterfaceType();
5391-
if (kind == AccessorKind::Address && resultType->isUnsafeMutablePointer()) {
5392-
resultType = getterDecl->getResultInterfaceType();
5393-
}
53945391
baseMemberCallExpr->setType(resultType);
53955392
baseMemberCallExpr->setThrows(nullptr);
53965393

53975394
Expr *returnExpr = baseMemberCallExpr;
53985395
// Cast an 'address' result from a mutable pointer if needed.
53995396
if (kind == AccessorKind::Address &&
5400-
baseGetterMethod->getResultInterfaceType()->isUnsafeMutablePointer())
5397+
baseGetterMethod->getResultInterfaceType()->isUnsafeMutablePointer()) {
5398+
auto finalResultType = getterDecl->getResultInterfaceType();
54015399
returnExpr = SwiftDeclSynthesizer::synthesizeReturnReinterpretCast(
5402-
ctx, baseGetterMethod->getResultInterfaceType(), resultType,
5400+
ctx, baseGetterMethod->getResultInterfaceType(), finalResultType,
54035401
returnExpr);
5402+
}
54045403

54055404
auto *returnStmt = ReturnStmt::createImplicit(ctx, returnExpr);
54065405

0 commit comments

Comments
 (0)