Author: Fangrui Song Date: 2023-12-05T18:10:39-08:00 New Revision: 8a686716e360157ad5726560cc5ea61be647893c
URL: https://github.com/llvm/llvm-project/commit/8a686716e360157ad5726560cc5ea61be647893c DIFF: https://github.com/llvm/llvm-project/commit/8a686716e360157ad5726560cc5ea61be647893c.diff LOG: [Driver,AArch64] Ensure -arch logic is Darwin-specific `-arch` is a Darwin-specific option that is ignored for other targets and not known by GCC. It leads to an error for non-Darwin OSes for non-AArch64 architectures. Ensure that it leads to an error for AArch64 non-Darwin OSes as well. Added: Modified: clang/lib/Driver/ToolChains/Arch/AArch64.cpp clang/test/Driver/arm-arch-darwin.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp index 1f77c98705174..097258b169244 100644 --- a/clang/lib/Driver/ToolChains/Arch/AArch64.cpp +++ b/clang/lib/Driver/ToolChains/Arch/AArch64.cpp @@ -57,9 +57,8 @@ std::string aarch64::getAArch64TargetCPU(const ArgList &Args, if (Triple.isArm64e()) return "apple-a12"; - // Make sure we pick the appropriate Apple CPU if -arch is used or when - // targetting a Darwin OS. - if (Args.getLastArg(options::OPT_arch) || Triple.isOSDarwin()) + // Make sure we pick the appropriate Apple CPU when targetting a Darwin OS. + if (Triple.isOSDarwin()) return Triple.getArch() == llvm::Triple::aarch64_32 ? "apple-s4" : "apple-a7"; @@ -274,7 +273,7 @@ void aarch64::getAArch64TargetFeatures(const Driver &D, success = getAArch64ArchFeaturesFromMarch(D, A->getValue(), Args, Features); else if ((A = Args.getLastArg(options::OPT_mcpu_EQ))) success = getAArch64ArchFeaturesFromMcpu(D, A->getValue(), Args, Features); - else if (Args.hasArg(options::OPT_arch) || isCPUDeterminedByTriple(Triple)) + else if (isCPUDeterminedByTriple(Triple)) success = getAArch64ArchFeaturesFromMcpu( D, getAArch64TargetCPU(Args, Triple, A), Args, Features); else @@ -287,8 +286,7 @@ void aarch64::getAArch64TargetFeatures(const Driver &D, else if (success && (A = Args.getLastArg(options::OPT_mcpu_EQ))) success = getAArch64MicroArchFeaturesFromMcpu(D, A->getValue(), Args, Features); - else if (success && - (Args.hasArg(options::OPT_arch) || isCPUDeterminedByTriple(Triple))) + else if (success && isCPUDeterminedByTriple(Triple)) success = getAArch64MicroArchFeaturesFromMcpu( D, getAArch64TargetCPU(Args, Triple, A), Args, Features); diff --git a/clang/test/Driver/arm-arch-darwin.c b/clang/test/Driver/arm-arch-darwin.c index c523622964738..f6d3f88a3f8d1 100644 --- a/clang/test/Driver/arm-arch-darwin.c +++ b/clang/test/Driver/arm-arch-darwin.c @@ -5,3 +5,6 @@ /// -arch is unsupported for non-Darwin targets. // RUN: not %clang --target=armv7m -arch armv7m -mcpu=cortex-m4 -### -c %s 2>&1 | FileCheck -check-prefix=ERR %s // ERR: unsupported option '-arch' for target 'armv7m' + +// RUN: not %clang --target=aarch64-linux-gnu -arch arm64 -### -c %s 2>&1 | FileCheck -check-prefix=ERR2 %s +// ERR2: unsupported option '-arch' for target 'aarch64-linux-gnu' _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits