Skip to content

Commit 853f50c

Browse files
committed
Sema: Remove usage of replaceCovariantResultType()
1 parent 29fcb5e commit 853f50c

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

lib/Sema/CSApply.cpp

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1964,23 +1964,25 @@ namespace {
19641964
return forceUnwrapIfExpected(result, memberLocator);
19651965
}
19661966

1967+
Type refTySelf = refTy, adjustedRefTySelf = adjustedRefTy;
1968+
19671969
auto *func = dyn_cast<FuncDecl>(member);
19681970
if (func && func->getResultInterfaceType()->hasDynamicSelfType()) {
19691971
ASSERT(refTy->hasDynamicSelfType());
1970-
refTy = refTy->replaceDynamicSelfType(containerTy);
1971-
adjustedRefTy = adjustedRefTy->replaceDynamicSelfType(
1972+
refTySelf = refTy->replaceDynamicSelfType(containerTy);
1973+
adjustedRefTySelf = adjustedRefTy->replaceDynamicSelfType(
19721974
containerTy);
19731975
}
19741976

19751977
// Handle all other references.
19761978
auto declRefExpr = new (ctx) DeclRefExpr(memberRef, memberLoc,
19771979
Implicit, semantics);
19781980
declRefExpr->setFunctionRefInfo(choice.getFunctionRefInfo());
1979-
declRefExpr->setType(refTy);
1980-
cs.setType(declRefExpr, refTy);
1981+
declRefExpr->setType(refTySelf);
1982+
cs.setType(declRefExpr, refTySelf);
19811983
Expr *ref = declRefExpr;
19821984

1983-
ref = adjustTypeForDeclReference(ref, refTy, adjustedRefTy, locator);
1985+
ref = adjustTypeForDeclReference(ref, refTySelf, adjustedRefTySelf, locator);
19841986

19851987
// A partial application thunk consists of two nested closures:
19861988
//
@@ -2087,7 +2089,7 @@ namespace {
20872089
// on 'CovariantReturnConversionExpr'.
20882090
curryThunkTy = adjustedOpenedType->castTo<FunctionType>();
20892091
} else {
2090-
curryThunkTy = adjustedRefTy->castTo<FunctionType>();
2092+
curryThunkTy = adjustedRefTySelf->castTo<FunctionType>();
20912093

20922094
// Check if we need to open an existential stored inside 'self'.
20932095
auto knownOpened = solution.OpenedExistentialTypes.find(
@@ -2123,8 +2125,13 @@ namespace {
21232125
const Type replacementTy = getDynamicSelfReplacementType(
21242126
baseTy, member, memberLocator.getBaseLocator());
21252127
if (!replacementTy->isEqual(containerTy)) {
2128+
if (isa<ConstructorDecl>(member)) {
2129+
adjustedRefTy = adjustedRefTy->withCovariantResultType();
2130+
} else {
2131+
ASSERT(adjustedRefTy->hasDynamicSelfType());
2132+
}
21262133
Type conversionTy =
2127-
adjustedRefTy->replaceCovariantResultType(replacementTy, 2);
2134+
adjustedRefTy->replaceDynamicSelfType(replacementTy);
21282135
if (isSuperPartialApplication) {
21292136
conversionTy =
21302137
conversionTy->castTo<FunctionType>()->getResult();

0 commit comments

Comments
 (0)