sema: diagnose passing a non-constant value into a constant parameter

This commit is contained in:
Xi Ge
2021-11-21 21:58:15 -08:00
parent 06e63896cd
commit 03c76bd32d
14 changed files with 119 additions and 2 deletions

View File

@@ -1504,6 +1504,12 @@ ConstraintSystem::TypeMatchResult constraints::matchCallArguments(
}
}
}
if (!argument.isCompileTimeConst() && param.isCompileTimeConst()) {
if (cs.shouldAttemptFixes()) {
cs.recordFix(NotCompileTimeConst::create(cs, paramTy,
cs.getConstraintLocator(loc)));
}
}
cs.addConstraint(
subKind, argTy, paramTy,
@@ -11837,7 +11843,8 @@ ConstraintSystem::SolutionKind ConstraintSystem::simplifyFixConstraint(
case FixKind::RemoveExtraneousArguments:
case FixKind::SpecifyTypeForPlaceholder:
case FixKind::AllowAutoClosurePointerConversion:
case FixKind::IgnoreKeyPathContextualMismatch: {
case FixKind::IgnoreKeyPathContextualMismatch:
case FixKind::NotCompileTimeConst: {
return recordFix(fix) ? SolutionKind::Error : SolutionKind::Solved;
}