diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -490,7 +490,18 @@ std::string ToolChain::getRuntimePath() const { SmallString<128> P(D.ResourceDir); llvm::sys::path::append(P, "lib", getTripleString()); - return std::string(P.str()); + std::string Ret(P); + // When LLVM_DEFAULT_TARGET_TRIPLE uses Debian multiarch style + // "x86_64-linux-gnu" (no vendor part), use the unnormalized + // D.getTargetTriple() instead of the normalized getTripleString() + // ("x86_64-unknown-linux-gnu"). + if (!getVFS().exists(Ret)) { + P.clear(); + llvm::sys::path::append(P, D.ResourceDir, "lib", D.getTargetTriple()); + if (getVFS().exists(P)) + Ret = std::string(P); + } + return Ret; } std::string ToolChain::getStdlibPath() const { diff --git a/clang/test/Driver/linux-per-target-runtime-dir.c b/clang/test/Driver/linux-per-target-runtime-dir.c --- a/clang/test/Driver/linux-per-target-runtime-dir.c +++ b/clang/test/Driver/linux-per-target-runtime-dir.c @@ -25,3 +25,10 @@ // RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir \ // RUN: | FileCheck --check-prefix=CHECK-FILE-NAME-X8664 %s // CHECK-FILE-NAME-X8664: lib{{/|\\}}x86_64-unknown-linux-gnu{{/|\\}}libclang_rt.builtins.a + +/// On Debian, LLVM_DEFAULT_TARGET_TRIPLE may use Debian multiarch style "x86_64-linux-gnu". +// RUN: %clangxx -### %s --target=x86_64-linux-gnu --sysroot=%S/Inputs/basic_linux_libcxx_tree \ +// RUN: -ccc-install-dir %S/Inputs/basic_linux_libcxx_tree/usr/bin \ +// RUN: -resource-dir=%S/Inputs/resource_dir_with_per_target_subdir_debian \ +// RUN: --rtlib=compiler-rt 2>&1 | FileCheck --check-prefix=CHECK-DEBIAN-X8664 %s +// CHECK-DEBIAN-X8664: lib{{/|\\}}x86_64-linux-gnu{{/|\\}}libclang_rt.builtins.a