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 @@ -569,15 +569,9 @@ return Args.MakeArgString(getCompilerRT(Args, Component, Type)); } -ToolChain::path_list ToolChain::getRuntimePaths() const { - path_list Paths; - auto addPathForTriple = [this, &Paths](const llvm::Triple &Triple) { - SmallString<128> P(D.ResourceDir); - llvm::sys::path::append(P, "lib", Triple.str()); - Paths.push_back(std::string(P.str())); - }; - - addPathForTriple(getTriple()); +template +static void fillPaths(const ToolChain &TC, F addPathForTriple) { + addPathForTriple(TC.getTriple()); // When building with per target runtime directories, various ways of naming // the Arm architecture may have been normalised to simply "arm". @@ -594,30 +588,42 @@ // // M profile Arm is bare metal and we know they will not be using the per // target runtime directory layout. - if (getTriple().getArch() == Triple::arm && !getTriple().isArmMClass()) { - llvm::Triple ArmTriple = getTriple(); + if (TC.getTriple().getArch() == Triple::arm && + !TC.getTriple().isArmMClass()) { + llvm::Triple ArmTriple = TC.getTriple(); ArmTriple.setArch(Triple::arm); addPathForTriple(ArmTriple); } // Android targets may include an API level at the end. We still want to fall // back on a path without the API level. - if (getTriple().isAndroid() && - getTriple().getEnvironmentName() != "android") { - llvm::Triple TripleWithoutLevel = getTriple(); + if (TC.getTriple().isAndroid() && + TC.getTriple().getEnvironmentName() != "android") { + llvm::Triple TripleWithoutLevel = TC.getTriple(); TripleWithoutLevel.setEnvironmentName("android"); addPathForTriple(TripleWithoutLevel); } +} +ToolChain::path_list ToolChain::getRuntimePaths() const { + path_list Paths; + auto addPathForTriple = [this, &Paths](const llvm::Triple &Triple) { + SmallString<128> P(D.ResourceDir); + llvm::sys::path::append(P, "lib", Triple.str()); + Paths.push_back(std::string(P.str())); + }; + fillPaths(*this, addPathForTriple); return Paths; } ToolChain::path_list ToolChain::getStdlibPaths() const { path_list Paths; - SmallString<128> P(D.Dir); - llvm::sys::path::append(P, "..", "lib", getTripleString()); - Paths.push_back(std::string(P.str())); - + auto addPathForTriple = [this, &Paths](const llvm::Triple &Triple) { + SmallString<128> P(D.Dir); + llvm::sys::path::append(P, "..", "lib", Triple.str()); + Paths.push_back(std::string(P.str())); + }; + fillPaths(*this, addPathForTriple); return Paths; }