Skip to content

Commit 732078b

Browse files
authored
Merge pull request #59973 from DougGregor/existential-erasure-coercion-configurable
Make the error for missing existential erasure coercions configurable.
2 parents 2bcad91 + 3368dd4 commit 732078b

File tree

3 files changed

+10
-6
lines changed

3 files changed

+10
-6
lines changed

include/swift/Sema/CSFix.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3025,8 +3025,10 @@ class AddExplicitExistentialCoercion final : public ConstraintFix {
30253025
Type ErasedResultType;
30263026

30273027
AddExplicitExistentialCoercion(ConstraintSystem &cs, Type erasedResultTy,
3028-
ConstraintLocator *locator)
3029-
: ConstraintFix(cs, FixKind::AddExplicitExistentialCoercion, locator),
3028+
ConstraintLocator *locator,
3029+
FixBehavior fixBehavior)
3030+
: ConstraintFix(cs, FixKind::AddExplicitExistentialCoercion, locator,
3031+
fixBehavior),
30303032
ErasedResultType(erasedResultTy) {}
30313033

30323034
public:

lib/Sema/CSDiagnostics.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2749,8 +2749,9 @@ class MissingExplicitExistentialCoercion final : public FailureDiagnostic {
27492749
public:
27502750
MissingExplicitExistentialCoercion(const Solution &solution,
27512751
Type erasedResultTy,
2752-
ConstraintLocator *locator)
2753-
: FailureDiagnostic(solution, locator),
2752+
ConstraintLocator *locator,
2753+
FixBehavior fixBehavior)
2754+
: FailureDiagnostic(solution, locator, fixBehavior),
27542755
ErasedResultType(resolveType(erasedResultTy)) {}
27552756

27562757
SourceRange getSourceRange() const override {

lib/Sema/CSFix.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2233,7 +2233,7 @@ IgnoreDefaultExprTypeMismatch::create(ConstraintSystem &cs, Type argType,
22332233
bool AddExplicitExistentialCoercion::diagnose(const Solution &solution,
22342234
bool asNote) const {
22352235
MissingExplicitExistentialCoercion failure(solution, ErasedResultType,
2236-
getLocator());
2236+
getLocator(), diagfixBehavior());
22372237
return failure.diagnose(asNote);
22382238
}
22392239

@@ -2465,8 +2465,9 @@ bool AddExplicitExistentialCoercion::isRequired(
24652465
AddExplicitExistentialCoercion *
24662466
AddExplicitExistentialCoercion::create(ConstraintSystem &cs, Type resultTy,
24672467
ConstraintLocator *locator) {
2468+
FixBehavior fixBehavior = FixBehavior::Error;
24682469
return new (cs.getAllocator())
2469-
AddExplicitExistentialCoercion(cs, resultTy, locator);
2470+
AddExplicitExistentialCoercion(cs, resultTy, locator, fixBehavior);
24702471
}
24712472

24722473
bool RenameConflictingPatternVariables::diagnose(const Solution &solution,

0 commit comments

Comments
 (0)