[frontend] Check for unknown arguments before attempting to handle other arguments.

Moved the check for unknown arguments ahead of any other attempts to handle arguments.
Added test/Frontend/unknown-arguments.swift, which tests the unknown argument handling of "swift_driver -frontend".

Swift SVN r11157
This commit is contained in:
Connor Wakamo
2013-12-12 00:23:35 +00:00
parent a8887d0ff4
commit 295b438d23
2 changed files with 15 additions and 9 deletions

View File

@@ -80,11 +80,18 @@ bool CompilerInvocation::parseArgs(ArrayRef<const char *> Args,
return true;
}
if (ParseFrontendArgs(FrontendOpts, *ParsedArgs, Diags)) {
if (ParsedArgs->hasArg(OPT_UNKNOWN)) {
for (const Arg *A : make_range(ParsedArgs->filtered_begin(OPT_UNKNOWN),
ParsedArgs->filtered_end())) {
Diags.diagnose(SourceLoc(), diag::error_unknown_arg,
A->getAsString(*ParsedArgs));
}
return true;
}
bool HasUnknownArgument = false;
if (ParseFrontendArgs(FrontendOpts, *ParsedArgs, Diags)) {
return true;
}
for (auto InputArg : *ParsedArgs) {
switch (InputArg->getOption().getID()) {
@@ -135,14 +142,8 @@ bool CompilerInvocation::parseArgs(ArrayRef<const char *> Args,
case OPT_module_source_list:
setModuleSourceListPath(InputArg->getValue());
break;
case OPT_UNKNOWN:
HasUnknownArgument = true;
Diags.diagnose(SourceLoc(), diag::error_unknown_arg,
InputArg->getAsString(*ParsedArgs));
break;
}
}
return HasUnknownArgument;
return false;
}