[Swift version] Note all supported versions when -swift-version is misused.

This commit is contained in:
Michael Ilseman
2016-10-18 13:57:24 -07:00
parent 12efcc9db6
commit 5d540ababd
5 changed files with 36 additions and 22 deletions

View File

@@ -761,6 +761,26 @@ static bool ParseFrontendArgs(FrontendOptions &Opts, ArgList &Args,
return false;
}
static void diagnoseSwiftVersion(Optional<version::Version> &vers, Arg *verArg,
ArgList &Args, DiagnosticEngine &diags) {
// General invalid version error
diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,
verArg->getAsString(Args), verArg->getValue());
// Check for an unneeded minor version, otherwise just list valid verions
if (vers.hasValue() && !vers.getValue().empty() &&
vers.getValue().asMajorVersion().isValidEffectiveLanguageVersion()) {
diags.diagnose(SourceLoc(), diag::note_swift_version_major,
vers.getValue()[0]);
} else {
// Note valid versions instead
auto validVers = version::Version::getValidEffectiveVersions();
auto versStr =
"'" + llvm::join(validVers.begin(), validVers.end(), "', '") + "'";
diags.diagnose(SourceLoc(), diag::note_valid_swift_versions, versStr);
}
}
static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
DiagnosticEngine &Diags,
const FrontendOptions &FrontendOpts) {
@@ -773,16 +793,7 @@ static bool ParseLangArgs(LangOptions &Opts, ArgList &Args,
vers.getValue().isValidEffectiveLanguageVersion()) {
Opts.EffectiveLanguageVersion = vers.getValue();
} else {
// General invalid version error
Diags.diagnose(SourceLoc(), diag::error_invalid_arg_value,
A->getAsString(Args), A->getValue());
// Check for an unneeded minor version
if (vers.hasValue() && !vers.getValue().empty() &&
vers.getValue().asMajorVersion().isValidEffectiveLanguageVersion()) {
Diags.diagnose(SourceLoc(), diag::note_swift_version_major,
vers.getValue()[0]);
}
diagnoseSwiftVersion(vers, A, Args, Diags);
}
}