aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2011-04-21 17:32:21 +0000
committerDaniel Dunbar <daniel@zuster.org>2011-04-21 17:32:21 +0000
commit7e9293b8be1716149f2150f96e76876719f14e45 (patch)
treec1a2bbb54ace4e37dfdf930f0cb6eb2c899af68c
parentb8a9d3b8016c0b8cc58e8523de0f4766cf3fa6bf (diff)
Driver: Improve -Xarch argument diagnostics a bit.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129918 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Basic/DiagnosticDriverKinds.td8
-rw-r--r--lib/Driver/ToolChains.cpp13
2 files changed, 16 insertions, 5 deletions
diff --git a/include/clang/Basic/DiagnosticDriverKinds.td b/include/clang/Basic/DiagnosticDriverKinds.td
index ef1c9e7d8b..6397e774f4 100644
--- a/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/include/clang/Basic/DiagnosticDriverKinds.td
@@ -39,8 +39,12 @@ def err_drv_invalid_darwin_version : Error<
"invalid Darwin version number: %0">;
def err_drv_missing_argument : Error<
"argument to '%0' is missing (expected %1 %plural{1:value|:values}1)">;
-def err_drv_invalid_Xarch_argument : Error<
- "invalid Xarch argument: '%0'">;
+def err_drv_invalid_Xarch_argument_unknown : Error<
+ "invalid Xarch argument: '%0', option is unrecognized">;
+def err_drv_invalid_Xarch_argument_with_args : Error<
+ "invalid Xarch argument: '%0', options requiring arguments are unsupported">;
+def err_drv_invalid_Xarch_argument_isdriver : Error<
+ "invalid Xarch argument: '%0', cannot change driver behavior inside Xarch argument">;
def err_drv_argument_only_allowed_with : Error<
"invalid argument '%0' only allowed with '%1'">;
def err_drv_argument_not_allowed_with : Error<
diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp
index 02105ac184..75cb9353aa 100644
--- a/lib/Driver/ToolChains.cpp
+++ b/lib/Driver/ToolChains.cpp
@@ -555,9 +555,16 @@ DerivedArgList *Darwin::TranslateArgs(const DerivedArgList &Args,
// driver behavior; that isn't going to work in our model. We
// use isDriverOption() as an approximation, although things
// like -O4 are going to slip through.
- if (!XarchArg || Index > Prev + 1 ||
- XarchArg->getOption().isDriverOption()) {
- getDriver().Diag(clang::diag::err_drv_invalid_Xarch_argument)
+ if (!XarchArg) {
+ getDriver().Diag(clang::diag::err_drv_invalid_Xarch_argument_unknown)
+ << A->getAsString(Args);
+ continue;
+ } else if (Index > Prev + 1) {
+ getDriver().Diag(clang::diag::err_drv_invalid_Xarch_argument_with_args)
+ << A->getAsString(Args);
+ continue;
+ } else if (XarchArg->getOption().isDriverOption()) {
+ getDriver().Diag(clang::diag::err_drv_invalid_Xarch_argument_isdriver)
<< A->getAsString(Args);
continue;
}