Skip to content

Commit 1a756d1

Browse files
authored
Merge pull request #39079 from xedin/pb-application-improvements
[ConstraintSystem] Improvements to pattern binding checking
2 parents af9b5b9 + de1dc0e commit 1a756d1

File tree

2 files changed

+11
-11
lines changed

2 files changed

+11
-11
lines changed

lib/Sema/CSApply.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8810,6 +8810,7 @@ ExprWalker::rewriteTarget(SolutionApplicationTarget target) {
88108810

88118811
if (patternBinding->getInit(index)) {
88128812
patternBinding->setInit(index, resultTarget->getAsExpr());
8813+
patternBinding->setInitializerChecked(index);
88138814
}
88148815
}
88158816

@@ -8829,11 +8830,9 @@ ExprWalker::rewriteTarget(SolutionApplicationTarget target) {
88298830
auto contextualPattern = target.getContextualPattern();
88308831
auto patternType = target.getTypeOfUninitializedVar();
88318832

8832-
TypeResolutionOptions options = TypeResolverContext::PatternBindingDecl;
8833-
options |= TypeResolutionFlags::OverrideType;
8834-
88358833
if (auto coercedPattern = TypeChecker::coercePatternToType(
8836-
contextualPattern, patternType, options)) {
8834+
contextualPattern, patternType,
8835+
TypeResolverContext::PatternBindingDecl)) {
88378836
auto resultTarget = target;
88388837
resultTarget.setPattern(coercedPattern);
88398838
return resultTarget;

lib/Sema/TypeCheckStorage.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2873,16 +2873,17 @@ PropertyWrapperInitializerInfoRequest::evaluate(Evaluator &evaluator,
28732873
&& parentPBD->isDefaultInitializable(patternNumber)
28742874
&& !wrapperInfo.defaultInit) {
28752875
auto ty = parentPBD->getPattern(patternNumber)->getType();
2876-
if (auto defaultInit = TypeChecker::buildDefaultInitializer(ty))
2877-
parentPBD->setInit(patternNumber, defaultInit);
2878-
}
2879-
2880-
if (parentPBD->isInitialized(patternNumber) &&
2881-
!parentPBD->isInitializerChecked(patternNumber)) {
2882-
TypeChecker::typeCheckPatternBinding(parentPBD, patternNumber);
2876+
if (auto defaultInit = TypeChecker::buildDefaultInitializer(ty)) {
2877+
typeCheckSynthesizedWrapperInitializer(var, defaultInit);
2878+
parentPBD->setInit(0, defaultInit);
2879+
parentPBD->setInitializerChecked(0);
2880+
}
28832881
}
28842882

28852883
if ((initializer = parentPBD->getInit(patternNumber))) {
2884+
assert(parentPBD->isInitializerChecked(0) &&
2885+
"Initializer should to be type-checked");
2886+
28862887
pbd->setInit(0, initializer);
28872888
pbd->setInitializerChecked(0);
28882889
wrappedValue = findWrappedValuePlaceholder(initializer);

0 commit comments

Comments
 (0)