1263320SdimThis patch eliminates the unnecessary search for various gcc installation 2263320Sdimdirectories during each startup of clang. 3263320Sdim 4263320SdimIntroduced here: http://svn.freebsd.org/changeset/base/259053 5263320Sdim 6263320SdimIndex: tools/clang/lib/Driver/ToolChains.cpp 7263320Sdim=================================================================== 8263320Sdim--- tools/clang/lib/Driver/ToolChains.cpp 9263320Sdim+++ tools/clang/lib/Driver/ToolChains.cpp 10263320Sdim@@ -1014,7 +1014,7 @@ static StringRef getGCCToolchainDir(const ArgList 11263320Sdim return GCC_INSTALL_PREFIX; 12263320Sdim } 13263320Sdim 14263320Sdim-/// \brief Construct a GCCInstallationDetector from the driver. 15263320Sdim+/// \brief Initialize a GCCInstallationDetector from the driver. 16263320Sdim /// 17263320Sdim /// This performs all of the autodetection and sets up the various paths. 18263320Sdim /// Once constructed, a GCCInstallationDetector is essentially immutable. 19263320Sdim@@ -1023,9 +1023,9 @@ static StringRef getGCCToolchainDir(const ArgList 20263320Sdim /// should instead pull the target out of the driver. This is currently 21263320Sdim /// necessary because the driver doesn't store the final version of the target 22263320Sdim /// triple. 23263320Sdim-Generic_GCC::GCCInstallationDetector::GCCInstallationDetector( 24263320Sdim- const Driver &D, const llvm::Triple &TargetTriple, const ArgList &Args) 25263320Sdim- : IsValid(false), D(D) { 26263320Sdim+void 27263320Sdim+Generic_GCC::GCCInstallationDetector::init( 28263320Sdim+ const llvm::Triple &TargetTriple, const ArgList &Args) { 29263320Sdim llvm::Triple BiarchVariantTriple = 30263320Sdim TargetTriple.isArch32Bit() ? TargetTriple.get64BitArchVariant() 31263320Sdim : TargetTriple.get32BitArchVariant(); 32263320Sdim@@ -1565,7 +1565,7 @@ void Generic_GCC::GCCInstallationDetector::ScanLib 33263320Sdim 34263320Sdim Generic_GCC::Generic_GCC(const Driver &D, const llvm::Triple& Triple, 35263320Sdim const ArgList &Args) 36263320Sdim- : ToolChain(D, Triple, Args), GCCInstallation(getDriver(), Triple, Args) { 37263320Sdim+ : ToolChain(D, Triple, Args), GCCInstallation(getDriver()) { 38263320Sdim getProgramPaths().push_back(getDriver().getInstalledDir()); 39263320Sdim if (getDriver().getInstalledDir() != getDriver().Dir) 40263320Sdim getProgramPaths().push_back(getDriver().Dir); 41263320Sdim@@ -2361,6 +2361,7 @@ static StringRef getMultilibDir(const llvm::Triple 42263320Sdim 43263320Sdim Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args) 44263320Sdim : Generic_ELF(D, Triple, Args) { 45263320Sdim+ GCCInstallation.init(Triple, Args); 46263320Sdim llvm::Triple::ArchType Arch = Triple.getArch(); 47263320Sdim std::string SysRoot = computeSysRoot(); 48263320Sdim 49263320SdimIndex: tools/clang/lib/Driver/ToolChains.h 50263320Sdim=================================================================== 51263320Sdim--- tools/clang/lib/Driver/ToolChains.h 52263320Sdim+++ tools/clang/lib/Driver/ToolChains.h 53263320Sdim@@ -92,8 +92,8 @@ class LLVM_LIBRARY_VISIBILITY Generic_GCC : public 54263320Sdim std::set<std::string> CandidateGCCInstallPaths; 55263320Sdim 56263320Sdim public: 57263320Sdim- GCCInstallationDetector(const Driver &D, const llvm::Triple &TargetTriple, 58263320Sdim- const llvm::opt::ArgList &Args); 59263320Sdim+ GCCInstallationDetector(const Driver &D) : IsValid(false), D(D) {} 60263320Sdim+ void init(const llvm::Triple &TargetTriple, const llvm::opt::ArgList &Args); 61263320Sdim 62263320Sdim /// \brief Check whether we detected a valid GCC install. 63263320Sdim bool isValid() const { return IsValid; } 64