[ConstraintSystem] Turn 'omit ' into a contextual mismatch it is

This commit is contained in:
Pavel Yaskevich
2020-06-10 11:25:20 -07:00
parent 13b4fcc5e7
commit e2e57ada1b
3 changed files with 12 additions and 7 deletions

View File

@@ -894,14 +894,19 @@ RemoveAddressOf *RemoveAddressOf::create(ConstraintSystem &cs, Type lhs, Type rh
return new (cs.getAllocator()) RemoveAddressOf(cs, lhs, rhs, locator);
}
RemoveReturn::RemoveReturn(ConstraintSystem &cs, Type resultTy,
ConstraintLocator *locator)
: ContextualMismatch(cs, FixKind::RemoveReturn, resultTy,
cs.getASTContext().TheEmptyTupleType, locator) {}
bool RemoveReturn::diagnose(const Solution &solution, bool asNote) const {
ExtraneousReturnFailure failure(solution, getLocator());
return failure.diagnose(asNote);
}
RemoveReturn *RemoveReturn::create(ConstraintSystem &cs,
RemoveReturn *RemoveReturn::create(ConstraintSystem &cs, Type resultTy,
ConstraintLocator *locator) {
return new (cs.getAllocator()) RemoveReturn(cs, locator);
return new (cs.getAllocator()) RemoveReturn(cs, resultTy, locator);
}
bool CollectionElementContextualMismatch::diagnose(const Solution &solution,

View File

@@ -1405,16 +1405,16 @@ private:
ConstraintLocator *locator);
};
class RemoveReturn final : public ConstraintFix {
RemoveReturn(ConstraintSystem &cs, ConstraintLocator *locator)
: ConstraintFix(cs, FixKind::RemoveReturn, locator) {}
class RemoveReturn final : public ContextualMismatch {
RemoveReturn(ConstraintSystem &cs, Type resultTy, ConstraintLocator *locator);
public:
std::string getName() const override { return "remove or omit return type"; }
bool diagnose(const Solution &solution, bool asNote = false) const override;
static RemoveReturn *create(ConstraintSystem &cs, ConstraintLocator *locator);
static RemoveReturn *create(ConstraintSystem &cs, Type resultTy,
ConstraintLocator *locator);
};
class CollectionElementContextualMismatch final : public ContextualMismatch {

View File

@@ -3881,7 +3881,7 @@ bool ConstraintSystem::repairFailures(
if (rhs->isVoid() &&
(purpose == CTP_ReturnStmt || purpose == CTP_ReturnSingleExpr)) {
conversionsOrFixes.push_back(
RemoveReturn::create(*this, getConstraintLocator(locator)));
RemoveReturn::create(*this, lhs, getConstraintLocator(locator)));
return true;
}