summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/patches/patch-r259053-gcc-installation-detector.diff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm/patches/patch-r259053-gcc-installation-detector.diff')
-rw-r--r--contrib/llvm/patches/patch-r259053-gcc-installation-detector.diff63
1 files changed, 63 insertions, 0 deletions
diff --git a/contrib/llvm/patches/patch-r259053-gcc-installation-detector.diff b/contrib/llvm/patches/patch-r259053-gcc-installation-detector.diff
new file mode 100644
index 0000000..1d04e7e
--- /dev/null
+++ b/contrib/llvm/patches/patch-r259053-gcc-installation-detector.diff
@@ -0,0 +1,63 @@
+This patch eliminates the unnecessary search for various gcc installation
+directories during each startup of clang.
+
+Introduced here: http://svn.freebsd.org/changeset/base/259053
+
+Index: tools/clang/lib/Driver/ToolChains.cpp
+===================================================================
+--- tools/clang/lib/Driver/ToolChains.cpp
++++ tools/clang/lib/Driver/ToolChains.cpp
+@@ -1014,7 +1014,7 @@ static StringRef getGCCToolchainDir(const ArgList
+ return GCC_INSTALL_PREFIX;
+ }
+
+-/// \brief Construct a GCCInstallationDetector from the driver.
++/// \brief Initialize a GCCInstallationDetector from the driver.
+ ///
+ /// This performs all of the autodetection and sets up the various paths.
+ /// Once constructed, a GCCInstallationDetector is essentially immutable.
+@@ -1023,9 +1023,9 @@ static StringRef getGCCToolchainDir(const ArgList
+ /// should instead pull the target out of the driver. This is currently
+ /// necessary because the driver doesn't store the final version of the target
+ /// triple.
+-Generic_GCC::GCCInstallationDetector::GCCInstallationDetector(
+- const Driver &D, const llvm::Triple &TargetTriple, const ArgList &Args)
+- : IsValid(false), D(D) {
++void
++Generic_GCC::GCCInstallationDetector::init(
++ const llvm::Triple &TargetTriple, const ArgList &Args) {
+ llvm::Triple BiarchVariantTriple =
+ TargetTriple.isArch32Bit() ? TargetTriple.get64BitArchVariant()
+ : TargetTriple.get32BitArchVariant();
+@@ -1565,7 +1565,7 @@ void Generic_GCC::GCCInstallationDetector::ScanLib
+
+ Generic_GCC::Generic_GCC(const Driver &D, const llvm::Triple& Triple,
+ const ArgList &Args)
+- : ToolChain(D, Triple, Args), GCCInstallation(getDriver(), Triple, Args) {
++ : ToolChain(D, Triple, Args), GCCInstallation(getDriver()) {
+ getProgramPaths().push_back(getDriver().getInstalledDir());
+ if (getDriver().getInstalledDir() != getDriver().Dir)
+ getProgramPaths().push_back(getDriver().Dir);
+@@ -2361,6 +2361,7 @@ static StringRef getMultilibDir(const llvm::Triple
+
+ Linux::Linux(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
+ : Generic_ELF(D, Triple, Args) {
++ GCCInstallation.init(Triple, Args);
+ llvm::Triple::ArchType Arch = Triple.getArch();
+ std::string SysRoot = computeSysRoot();
+
+Index: tools/clang/lib/Driver/ToolChains.h
+===================================================================
+--- tools/clang/lib/Driver/ToolChains.h
++++ tools/clang/lib/Driver/ToolChains.h
+@@ -92,8 +92,8 @@ class LLVM_LIBRARY_VISIBILITY Generic_GCC : public
+ std::set<std::string> CandidateGCCInstallPaths;
+
+ public:
+- GCCInstallationDetector(const Driver &D, const llvm::Triple &TargetTriple,
+- const llvm::opt::ArgList &Args);
++ GCCInstallationDetector(const Driver &D) : IsValid(false), D(D) {}
++ void init(const llvm::Triple &TargetTriple, const llvm::opt::ArgList &Args);
+
+ /// \brief Check whether we detected a valid GCC install.
+ bool isValid() const { return IsValid; }
OpenPOWER on IntegriCloud