diff options
| author | Daniel Dunbar <daniel@zuster.org> | 2009-09-08 23:37:30 +0000 |
|---|---|---|
| committer | Daniel Dunbar <daniel@zuster.org> | 2009-09-08 23:37:30 +0000 |
| commit | 9c3f7c4a4bb115b8e1614726583b56e323a95ad8 (patch) | |
| tree | f25ae292bb5ba64d58d6254aefd7abe4deeca3d2 | |
| parent | 1ef3f2aa3ac0c68f8ac7d91544bf76ab919557b6 (diff) | |
| download | bcm5719-llvm-9c3f7c4a4bb115b8e1614726583b56e323a95ad8.tar.gz bcm5719-llvm-9c3f7c4a4bb115b8e1614726583b56e323a95ad8.zip | |
Validate arguments to -arch.
llvm-svn: 81281
| -rw-r--r-- | clang/include/clang/Basic/DiagnosticDriverKinds.td | 2 | ||||
| -rw-r--r-- | clang/lib/Driver/Driver.cpp | 10 |
2 files changed, 12 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 486bfb3c7e6..a33fa0843ed 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -14,6 +14,8 @@ def err_drv_unsupported_opt : Error<"unsupported option '%0'">; def err_drv_unknown_stdin_type : Error< "-E or -x required when input is from standard input">; def err_drv_unknown_language : Error<"language not recognized: '%0'">; +def err_drv_invalid_arch_name : Error< + "invalid arch name '%0'">; def err_drv_invalid_opt_with_multiple_archs : Error< "option '%0' cannot be used with multiple -arch options">; def err_drv_invalid_output_with_multiple_archs : Error< diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index f58c8829ebb..59099a33e6f 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -601,6 +601,16 @@ void Driver::BuildUniversalActions(const ArgList &Args, Arg *A = *it; if (A->getOption().getId() == options::OPT_arch) { + // Validate the option here; we don't save the type here because its + // particular spelling may participate in other driver choices. + llvm::Triple::ArchType Arch = + llvm::Triple::getArchTypeForDarwinArchName(A->getValue(Args)); + if (Arch == llvm::Triple::UnknownArch) { + Diag(clang::diag::err_drv_invalid_arch_name) + << A->getAsString(Args); + continue; + } + A->claim(); if (ArchNames.insert(A->getValue(Args))) Archs.push_back(A->getValue(Args)); |

