Skip to content

Commit d1ad006

Browse files
committed
[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
1 parent ffe2dda commit d1ad006

File tree

2 files changed

+33
-25
lines changed

2 files changed

+33
-25
lines changed

clang/lib/Driver/Driver.cpp

Lines changed: 27 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -634,36 +634,38 @@ static llvm::Triple computeTargetTriple(const Driver &D,
634634

635635
// If target is MIPS adjust the target triple
636636
// accordingly to provided ABI name.
637-
A = Args.getLastArg(options::OPT_mabi_EQ);
638-
if (A && Target.isMIPS()) {
639-
StringRef ABIName = A->getValue();
640-
if (ABIName == "32") {
641-
Target = Target.get32BitArchVariant();
642-
if (Target.getEnvironment() == llvm::Triple::GNUABI64 ||
643-
Target.getEnvironment() == llvm::Triple::GNUABIN32)
644-
Target.setEnvironment(llvm::Triple::GNU);
645-
} else if (ABIName == "n32") {
646-
Target = Target.get64BitArchVariant();
647-
if (Target.getEnvironment() == llvm::Triple::GNU ||
648-
Target.getEnvironment() == llvm::Triple::GNUABI64)
649-
Target.setEnvironment(llvm::Triple::GNUABIN32);
650-
} else if (ABIName == "64") {
651-
Target = Target.get64BitArchVariant();
652-
if (Target.getEnvironment() == llvm::Triple::GNU ||
653-
Target.getEnvironment() == llvm::Triple::GNUABIN32)
654-
Target.setEnvironment(llvm::Triple::GNUABI64);
637+
if (Target.isMIPS()) {
638+
if (A = Args.getLastArg(options::OPT_mabi_EQ)) {
639+
StringRef ABIName = A->getValue();
640+
if (ABIName == "32") {
641+
Target = Target.get32BitArchVariant();
642+
if (Target.getEnvironment() == llvm::Triple::GNUABI64 ||
643+
Target.getEnvironment() == llvm::Triple::GNUABIN32)
644+
Target.setEnvironment(llvm::Triple::GNU);
645+
} else if (ABIName == "n32") {
646+
Target = Target.get64BitArchVariant();
647+
if (Target.getEnvironment() == llvm::Triple::GNU ||
648+
Target.getEnvironment() == llvm::Triple::GNUABI64)
649+
Target.setEnvironment(llvm::Triple::GNUABIN32);
650+
} else if (ABIName == "64") {
651+
Target = Target.get64BitArchVariant();
652+
if (Target.getEnvironment() == llvm::Triple::GNU ||
653+
Target.getEnvironment() == llvm::Triple::GNUABIN32)
654+
Target.setEnvironment(llvm::Triple::GNUABI64);
655+
}
655656
}
656657
}
657658

658659
// If target is RISC-V adjust the target triple according to
659660
// provided architecture name
660-
A = Args.getLastArg(options::OPT_march_EQ);
661-
if (A && Target.isRISCV()) {
662-
StringRef ArchName = A->getValue();
663-
if (ArchName.startswith_insensitive("rv32"))
664-
Target.setArch(llvm::Triple::riscv32);
665-
else if (ArchName.startswith_insensitive("rv64"))
666-
Target.setArch(llvm::Triple::riscv64);
661+
if (Target.isRISCV()) {
662+
if (A = Args.getLastArg(options::OPT_march_EQ)) {
663+
StringRef ArchName = A->getValue();
664+
if (ArchName.startswith_insensitive("rv32"))
665+
Target.setArch(llvm::Triple::riscv32);
666+
else if (ArchName.startswith_insensitive("rv64"))
667+
Target.setArch(llvm::Triple::riscv64);
668+
}
667669
}
668670

669671
return Target;

clang/test/Driver/mabi.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// RUN: %clang --target=i386-unknown-linux -mabi=ms -S %s -### 2>&1 | FileCheck --check-prefix=CHECK %s
2+
3+
int f() {
4+
// CHECK: warning: argument unused during compilation: '-mabi=ms'
5+
return 0;
6+
}

0 commit comments

Comments
 (0)