Skip to content

Commit 0a68a9d

Browse files
authored
[clang][AIX] Fix -print-runtime-dir fallback on AIX (llvm#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.
1 parent 31c022a commit 0a68a9d

File tree

2 files changed

+10
-22
lines changed

2 files changed

+10
-22
lines changed

clang/lib/Driver/ToolChain.cpp

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -933,11 +933,16 @@ ToolChain::getTargetSubDirPath(StringRef BaseDir) const {
933933
if (auto Path = getPathForTriple(T))
934934
return *Path;
935935

936-
if (T.isOSAIX() && T.getEnvironment() == Triple::UnknownEnvironment) {
937-
// Strip unknown environment from the triple.
938-
const llvm::Triple AIXTriple(
939-
llvm::Triple(T.getArchName(), T.getVendorName(),
940-
llvm::Triple::getOSTypeName(T.getOS())));
936+
if (T.isOSAIX()) {
937+
llvm::Triple AIXTriple;
938+
if (T.getEnvironment() == Triple::UnknownEnvironment) {
939+
// Strip unknown environment and the OS version from the triple.
940+
AIXTriple = llvm::Triple(T.getArchName(), T.getVendorName(),
941+
llvm::Triple::getOSTypeName(T.getOS()));
942+
} else {
943+
// Strip the OS version from the triple.
944+
AIXTriple = getTripleWithoutOSVersion();
945+
}
941946
if (auto Path = getPathForTriple(AIXTriple))
942947
return *Path;
943948
}
@@ -987,14 +992,6 @@ std::optional<std::string> ToolChain::getRuntimePath() const {
987992
if (Triple.isOSDarwin())
988993
return {};
989994

990-
// For AIX, get the triple without the OS version.
991-
if (Triple.isOSAIX()) {
992-
const llvm::Triple &TripleWithoutVersion = getTripleWithoutOSVersion();
993-
llvm::sys::path::append(P, TripleWithoutVersion.str());
994-
if (getVFS().exists(P))
995-
return std::string(P);
996-
return {};
997-
}
998995
llvm::sys::path::append(P, Triple.str());
999996
return std::string(P);
1000997
}

clang/test/Driver/aix-print-runtime-dir.c

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
11
// Test output of -print-runtime-dir on AIX
22

3-
// RUN: %clang -print-runtime-dir --target=powerpc-ibm-aix \
4-
// RUN: -resource-dir=%S/Inputs/resource_dir \
5-
// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR %s
6-
7-
// RUN: %clang -print-runtime-dir --target=powerpc64-ibm-aix \
8-
// RUN: -resource-dir=%S/Inputs/resource_dir \
9-
// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR %s
10-
113
// RUN: %clang -print-runtime-dir --target=powerpc-ibm-aix \
124
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir\
135
// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR32-PER-TARGET %s
@@ -24,7 +16,6 @@
2416
// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \
2517
// RUN: | FileCheck --check-prefix=PRINT-RUNTIME-DIR64-UNKNOWN-ENV %s
2618

27-
// PRINT-RUNTIME-DIR: lib{{/|\\}}aix{{$}}
2819
// PRINT-RUNTIME-DIR32-PER-TARGET: lib{{/|\\}}powerpc-ibm-aix{{$}}
2920
// PRINT-RUNTIME-DIR64-PER-TARGET: lib{{/|\\}}powerpc64-ibm-aix{{$}}
3021
// PRINT-RUNTIME-DIR32-UNKNOWN-ENV: lib{{/|\\}}powerpc-ibm-aix

0 commit comments

Comments
 (0)