diff options
author | John Brawn <john.brawn@arm.com> | 2015-05-29 13:10:44 +0000 |
---|---|---|
committer | John Brawn <john.brawn@arm.com> | 2015-05-29 13:10:44 +0000 |
commit | a8f8234f91b64faebc354dbd46b0edcd86234df0 (patch) | |
tree | b83e9df9e5f503f6482652c7a69509910610cae2 /clang | |
parent | 1196ca2113d22c0cd03c189a13f34d17fb441a2f (diff) | |
download | bcm5719-llvm-a8f8234f91b64faebc354dbd46b0edcd86234df0.tar.gz bcm5719-llvm-a8f8234f91b64faebc354dbd46b0edcd86234df0.zip |
[ARM] Adjust -march checking
getCanonicalArchName can return an empty string for an architecture
that is well-formed but meaningless. Use parseArch to determine if
it's actually valid or not.
Differential Revision: http://reviews.llvm.org/D10120
llvm-svn: 238553
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Driver/Tools.cpp | 9 | ||||
-rw-r--r-- | clang/test/Driver/arm-cortex-cpus.c | 4 |
2 files changed, 9 insertions, 4 deletions
diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 84fa0b3f1b8..9433a7efcf2 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -753,12 +753,13 @@ static void getARMTargetFeatures(const Driver &D, const llvm::Triple &Triple, if (const Arg *A = Args.getLastArg(options::OPT_mhwdiv_EQ)) getARMHWDivFeatures(D, A, Args, Features); - // Check if -march is valid by checking if it can be canonicalised. getARMArch - // is used here instead of just checking the -march value in order to handle - // -march=native correctly. + // Check if -march is valid by checking if it can be canonicalised and parsed. + // getARMArch is used here instead of just checking the -march value in order + // to handle -march=native correctly. if (const Arg *A = Args.getLastArg(options::OPT_march_EQ)) { StringRef Arch = arm::getARMArch(Args, Triple); - if (llvm::ARMTargetParser::getCanonicalArchName(Arch).empty()) + Arch = llvm::ARMTargetParser::getCanonicalArchName(Arch); + if (llvm::ARMTargetParser::parseArch(Arch) == llvm::ARM::AK_INVALID) D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args); } diff --git a/clang/test/Driver/arm-cortex-cpus.c b/clang/test/Driver/arm-cortex-cpus.c index 50323720629..7ffad034f3e 100644 --- a/clang/test/Driver/arm-cortex-cpus.c +++ b/clang/test/Driver/arm-cortex-cpus.c @@ -204,6 +204,10 @@ // CHECK-BOGUS: error: {{.*}} does not support '-march=armbogusv6' // RUN: %clang -target arm---eabihf -march=armbogusv7 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BOGUS-HF %s // CHECK-BOGUS-HF: error: {{.*}} does not support '-march=armbogusv7' +// RUN: %clang -target arm -march=armv6bogus -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BOGUS2 %s +// CHECK-BOGUS2: error: {{.*}} does not support '-march=armv6bogus' +// RUN: %clang -target arm -march=bogus -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BOGUS3 %s +// CHECK-BOGUS3: error: {{.*}} does not support '-march=bogus' // ================== Check that a bogus CPU gives an error // RUN: %clang -target arm -mcpu=bogus -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BOGUS-CPU %s |