diff options
author | Craig Topper <craig.topper@sifive.com> | 2022-09-27 10:04:30 -0700 |
---|---|---|
committer | Craig Topper <craig.topper@sifive.com> | 2022-09-27 10:07:20 -0700 |
commit | d1ad006a8f64bdc17f618deffa9e7c91d82c444d (patch) | |
tree | 35f7bda201f119deb7428bd39615fde6ab16ee4b /clang/lib/Driver/Driver.cpp | |
parent | ffe2dda29f34c221ab84c574406d7e0c062c0ab4 (diff) | |
download | llvm-d1ad006a8f64bdc17f618deffa9e7c91d82c444d.zip llvm-d1ad006a8f64bdc17f618deffa9e7c91d82c444d.tar.gz llvm-d1ad006a8f64bdc17f618deffa9e7c91d82c444d.tar.bz2 |
[Driver] Prevent Mips specific code from claiming -mabi argument on other targets.
Fixes PR57976.
Reviewed By: erichkeane, arichardson, MaskRay
Differential Revision: https://reviews.llvm.org/D134671
Diffstat (limited to 'clang/lib/Driver/Driver.cpp')
-rw-r--r-- | clang/lib/Driver/Driver.cpp | 52 |
1 files changed, 27 insertions, 25 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index c16797f..73ee0b9 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -634,36 +634,38 @@ static llvm::Triple computeTargetTriple(const Driver &D, // If target is MIPS adjust the target triple // accordingly to provided ABI name. - A = Args.getLastArg(options::OPT_mabi_EQ); - if (A && Target.isMIPS()) { - StringRef ABIName = A->getValue(); - if (ABIName == "32") { - Target = Target.get32BitArchVariant(); - if (Target.getEnvironment() == llvm::Triple::GNUABI64 || - Target.getEnvironment() == llvm::Triple::GNUABIN32) - Target.setEnvironment(llvm::Triple::GNU); - } else if (ABIName == "n32") { - Target = Target.get64BitArchVariant(); - if (Target.getEnvironment() == llvm::Triple::GNU || - Target.getEnvironment() == llvm::Triple::GNUABI64) - Target.setEnvironment(llvm::Triple::GNUABIN32); - } else if (ABIName == "64") { - Target = Target.get64BitArchVariant(); - if (Target.getEnvironment() == llvm::Triple::GNU || - Target.getEnvironment() == llvm::Triple::GNUABIN32) - Target.setEnvironment(llvm::Triple::GNUABI64); + if (Target.isMIPS()) { + if (A = Args.getLastArg(options::OPT_mabi_EQ)) { + StringRef ABIName = A->getValue(); + if (ABIName == "32") { + Target = Target.get32BitArchVariant(); + if (Target.getEnvironment() == llvm::Triple::GNUABI64 || + Target.getEnvironment() == llvm::Triple::GNUABIN32) + Target.setEnvironment(llvm::Triple::GNU); + } else if (ABIName == "n32") { + Target = Target.get64BitArchVariant(); + if (Target.getEnvironment() == llvm::Triple::GNU || + Target.getEnvironment() == llvm::Triple::GNUABI64) + Target.setEnvironment(llvm::Triple::GNUABIN32); + } else if (ABIName == "64") { + Target = Target.get64BitArchVariant(); + if (Target.getEnvironment() == llvm::Triple::GNU || + Target.getEnvironment() == llvm::Triple::GNUABIN32) + Target.setEnvironment(llvm::Triple::GNUABI64); + } } } // If target is RISC-V adjust the target triple according to // provided architecture name - A = Args.getLastArg(options::OPT_march_EQ); - if (A && Target.isRISCV()) { - StringRef ArchName = A->getValue(); - if (ArchName.startswith_insensitive("rv32")) - Target.setArch(llvm::Triple::riscv32); - else if (ArchName.startswith_insensitive("rv64")) - Target.setArch(llvm::Triple::riscv64); + if (Target.isRISCV()) { + if (A = Args.getLastArg(options::OPT_march_EQ)) { + StringRef ArchName = A->getValue(); + if (ArchName.startswith_insensitive("rv32")) + Target.setArch(llvm::Triple::riscv32); + else if (ArchName.startswith_insensitive("rv64")) + Target.setArch(llvm::Triple::riscv64); + } } return Target; |