Author: Jake Egan Date: 2025-06-02T13:26:13-04:00 New Revision: 0a68a9d6c5f37f63a821948a43315ba4dcd69acc
URL: https://github.com/llvm/llvm-project/commit/0a68a9d6c5f37f63a821948a43315ba4dcd69acc DIFF: https://github.com/llvm/llvm-project/commit/0a68a9d6c5f37f63a821948a43315ba4dcd69acc.diff LOG: [clang][AIX] Fix -print-runtime-dir fallback on AIX (#141439) If the runtime path is not found (by getTargetSubDirPath()), since per target runtime directory is enabled on AIX, we should fall back to the target subdirectory rather than the OS subdirectory. Added: Modified: clang/lib/Driver/ToolChain.cpp clang/test/Driver/aix-print-runtime-dir.c Removed: ################################################################################ diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index ce302b308fd19..f2911713668ae 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -933,11 +933,16 @@ ToolChain::getTargetSubDirPath(StringRef BaseDir) const { if (auto Path = getPathForTriple(T)) return *Path; - if (T.isOSAIX() && T.getEnvironment() == Triple::UnknownEnvironment) { - // Strip unknown environment from the triple. - const llvm::Triple AIXTriple( - llvm::Triple(T.getArchName(), T.getVendorName(), - llvm::Triple::getOSTypeName(T.getOS()))); + if (T.isOSAIX()) { + llvm::Triple AIXTriple; + if (T.getEnvironment() == Triple::UnknownEnvironment) { + // Strip unknown environment and the OS version from the triple. + AIXTriple = llvm::Triple(T.getArchName(), T.getVendorName(), + llvm::Triple::getOSTypeName(T.getOS())); + } else { + // Strip the OS version from the triple. + AIXTriple = getTripleWithoutOSVersion(); + } if (auto Path = getPathForTriple(AIXTriple)) return *Path; } @@ -987,14 +992,6 @@ std::optional<std::string> ToolChain::getRuntimePath() const { if (Triple.isOSDarwin()) return {}; - // For AIX, get the triple without the OS version. - if (Triple.isOSAIX()) { - const llvm::Triple &TripleWithoutVersion = getTripleWithoutOSVersion(); - llvm::sys::path::append(P, TripleWithoutVersion.str()); - if (getVFS().exists(P)) - return std::string(P); - return {}; - } llvm::sys::path::append(P, Triple.str()); return std::string(P); } diff --git a/clang/test/Driver/aix-print-runtime-dir.c b/clang/test/Driver/aix-print-runtime-dir.c index ef133728d731f..4740129442540 100644 --- a/clang/test/Driver/aix-print-runtime-dir.c +++ b/clang/test/Driver/aix-print-runtime-dir.c @@ -1,13 +1,5 @@ // Test output of -print-runtime-dir on AIX -// RUN: %clang -print-runtime-dir --target=powerpc-ibm-aix \ -// RUN: -resource-dir=%S/Inputs/resource_dir \ -// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR %s - -// RUN: %clang -print-runtime-dir --target=powerpc64-ibm-aix \ -// RUN: -resource-dir=%S/Inputs/resource_dir \ -// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR %s - // RUN: %clang -print-runtime-dir --target=powerpc-ibm-aix \ // RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir\ // RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR32-PER-TARGET %s @@ -24,7 +16,6 @@ // RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \ // RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR64-UNKNOWN-ENV %s -// PRINT-RUNTIME-DIR: lib{{/|\\}}aix{{$}} // PRINT-RUNTIME-DIR32-PER-TARGET: lib{{/|\\}}powerpc-ibm-aix{{$}} // PRINT-RUNTIME-DIR64-PER-TARGET: lib{{/|\\}}powerpc64-ibm-aix{{$}} // PRINT-RUNTIME-DIR32-UNKNOWN-ENV: lib{{/|\\}}powerpc-ibm-aix _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits