]> granicus.if.org Git - clang/commitdiff
Driver: Improve -Xarch argument diagnostics a bit.
authorDaniel Dunbar <daniel@zuster.org>
Thu, 21 Apr 2011 17:32:21 +0000 (17:32 +0000)
committerDaniel Dunbar <daniel@zuster.org>
Thu, 21 Apr 2011 17:32:21 +0000 (17:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@129918 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/DiagnosticDriverKinds.td
lib/Driver/ToolChains.cpp

index ef1c9e7d8b9af178eb41f08259ee68cdbbe99c6b..6397e774f4a7e549c74d85557c38640502b63729 100644 (file)
@@ -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<
index 02105ac1847cfb302f786b23d9a426fd23aaa487..75cb9353aa00aff933ad250d00c2f4b1fec6cb5b 100644 (file)
@@ -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;
       }