[clang] 6a9dac2 - [AIX][Clang][Driver] Fix OBJECT_MODE bug on AIX (#193550)
via cfe-commits
cfe-commits at lists.llvm.org
Wed May 6 06:48:26 PDT 2026
Author: Mark Danial
Date: 2026-05-06T09:48:21-04:00
New Revision: 6a9dac29a1aa4f3702c93a2a6d7172219438c59f
URL: https://github.com/llvm/llvm-project/commit/6a9dac29a1aa4f3702c93a2a6d7172219438c59f
DIFF: https://github.com/llvm/llvm-project/commit/6a9dac29a1aa4f3702c93a2a6d7172219438c59f.diff
LOG: [AIX][Clang][Driver] Fix OBJECT_MODE bug on AIX (#193550)
If `--target` is specified it should take precedence over `OBJECT_MODE`.
This is important, for example, for lit tests which want to specify an
explicitly 32-bit or 64-bit triple on AIX, or they may get the wrong bit
mode depending on the environment they run in.
Added:
Modified:
clang/lib/Driver/Driver.cpp
clang/test/Driver/aix-object-mode.c
Removed:
################################################################################
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index d2c6b46f1aa06..bf1cb91aa055d 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -666,7 +666,9 @@ static llvm::Triple computeTargetTriple(const Driver &D,
return Target;
// On AIX, the env OBJECT_MODE may affect the resulting arch variant.
- if (Target.isOSAIX()) {
+ // However, if --target was explicitly specified, it takes precedence.
+#ifdef _AIX
+ if (!Args.hasArg(options::OPT_target)) {
if (std::optional<std::string> ObjectModeValue =
llvm::sys::Process::GetEnv("OBJECT_MODE")) {
StringRef ObjectMode = *ObjectModeValue;
@@ -684,6 +686,7 @@ static llvm::Triple computeTargetTriple(const Driver &D,
Target.setArch(AT);
}
}
+#endif
// Currently the only architecture supported by *-uefi triples are x86_64.
if (Target.isUEFI() && Target.getArch() != llvm::Triple::x86_64)
diff --git a/clang/test/Driver/aix-object-mode.c b/clang/test/Driver/aix-object-mode.c
index b5e914717f061..7d79b5e900f67 100644
--- a/clang/test/Driver/aix-object-mode.c
+++ b/clang/test/Driver/aix-object-mode.c
@@ -1,9 +1,16 @@
+// REQUIRES: system-aix
// Check that setting an OBJECT_MODE converts the AIX triple to the right variant.
// RUN: env OBJECT_MODE=64 \
-// RUN: %clang --target=powerpc-ibm-aix -print-target-triple | FileCheck -check-prefix=CHECK64 %s
+// RUN: %clang --target=powerpc-ibm-aix -print-target-triple | FileCheck -check-prefix=CHECK32 %s
+
+// RUN: env OBJECT_MODE=64 \
+// RUN: %clang -print-target-triple | FileCheck -check-prefix=CHECK64 %s
+
+// RUN: env OBJECT_MODE=32 \
+// RUN: %clang --target=powerpc64-ibm-aix -print-target-triple | FileCheck -check-prefix=CHECK64 %s
// RUN: env OBJECT_MODE=32 \
-// RUN: %clang --target=powerpc64-ibm-aix -print-target-triple | FileCheck -check-prefix=CHECK32 %s
+// RUN: %clang -print-target-triple | FileCheck -check-prefix=CHECK32 %s
// Command-line options win.
// RUN: env OBJECT_MODE=64 \
@@ -17,6 +24,6 @@
// Emit a diagnostic if there is an invalid mode.
// RUN: env OBJECT_MODE=31 \
-// RUN: not %clang --target=powerpc-ibm-aix 2>&1 | FileCheck -check-prefix=DIAG %s
+// RUN: not %clang 2>&1 | FileCheck -check-prefix=DIAG %s
// DIAG: error: OBJECT_MODE setting 31 is not recognized and is not a valid setting
More information about the cfe-commits
mailing list