[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