forked from OSchip/llvm-project
[ARM] Give an error on invalid -march values
llvm::Triple::getARMCPUForArch now returns nullptr for invalid -march values, instead of silently translating it to arm7tdmi. Use this to give an error message, which is consistent with how gcc behaves. Differential Revision: http://reviews.llvm.org/D9602 llvm-svn: 236846
This commit is contained in:
parent
50ed9470dc
commit
a95c1a8315
|
@ -743,6 +743,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);
|
||||
|
||||
// -march is handled in getARMCPUForMarch by translating it into a CPU name,
|
||||
// but it needs to return an empty string on invalid arguments. We therefore
|
||||
// check and give an error here if the -march is invalid.
|
||||
if (const Arg *A = Args.getLastArg(options::OPT_march_EQ))
|
||||
if (!Triple.getARMCPUForArch(A->getValue()))
|
||||
D.Diag(diag::err_drv_clang_unsupported) << A->getAsString(Args);
|
||||
|
||||
// Setting -msoft-float effectively disables NEON because of the GCC
|
||||
// implementation, although the same isn't true of VFP or VFP3.
|
||||
if (FloatABI == "soft") {
|
||||
|
@ -5619,7 +5626,13 @@ const char *arm::getARMCPUForMArch(const ArgList &Args,
|
|||
}
|
||||
}
|
||||
|
||||
return Triple.getARMCPUForArch(MArch);
|
||||
// We need to return an empty string here on invalid MArch values as the
|
||||
// various places that call this function can't cope with a null result.
|
||||
const char *result = Triple.getARMCPUForArch(MArch);
|
||||
if (result)
|
||||
return result;
|
||||
else
|
||||
return "";
|
||||
}
|
||||
|
||||
/// getARMTargetCPU - Get the (LLVM) name of the ARM cpu we are targeting.
|
||||
|
|
|
@ -166,11 +166,11 @@
|
|||
// RUN: %clang -target arm -march=armebv8a -mbig-endian -mthumb -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BE-V8A-THUMB %s
|
||||
// CHECK-BE-V8A-THUMB: "-cc1"{{.*}} "-triple" "thumbebv8-{{.*}}" "-target-cpu" "cortex-a53"
|
||||
|
||||
// ================== Check default CPU on bogus architecture
|
||||
// ================== Check that a bogus architecture gives an error
|
||||
// RUN: %clang -target arm -march=armbogusv6 -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-BOGUS %s
|
||||
// CHECK-BOGUS: "-cc1"{{.*}} "-triple" "armv4t-{{.*}} "-target-cpu" "arm7tdmi"
|
||||
// CHECK-BOGUS: error: the clang compiler 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: "-cc1"{{.*}} "-triple" "armv6k-{{.*}} "-target-cpu" "arm1176jzf-s"
|
||||
// CHECK-BOGUS-HF: error: the clang compiler does not support '-march=armbogusv7'
|
||||
|
||||
// ================== Check default Architecture on each ARM11 CPU
|
||||
// RUN: %clang -target arm-linux-gnueabi -mcpu=arm1136j-s -### -c %s 2>&1 | FileCheck -check-prefix=CHECK-CPUV6 %s
|
||||
|
|
Loading…
Reference in New Issue