<div dir="ltr">On Wed, Aug 14, 2013 at 11:38 AM, Benjamin Kramer <span dir="ltr"><<a href="mailto:benny.kra@googlemail.com" target="_blank">benny.kra@googlemail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: d0k<br>
Date: Wed Aug 14 13:38:51 2013<br>
New Revision: 188400<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=188400&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=188400&view=rev</a><br>
Log:<br>
Enhance the clang -v gcc debug printing to skip obviously bad and duplicate paths.<br>
<br>
Otherwise it lists all files (e.g. shared libraries) that happen to be in the<br>
same paths the GCC installations usually reside in.<br>
<br>
On a x86_64 Debian 7 system with i386 multilibs.<br>
before: clang -v 2>&1|wc -l<br>
        3059<br>
after:  clang -v 2>&1|wc -l<br>
        10<br></blockquote><div><br></div><div>Testcase?</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Modified:<br>
    cfe/trunk/lib/Driver/ToolChains.cpp<br>
    cfe/trunk/lib/Driver/ToolChains.h<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=188400&r1=188399&r2=188400&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.cpp?rev=188400&r1=188399&r2=188400&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains.cpp (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains.cpp Wed Aug 14 13:38:51 2013<br>
@@ -1052,7 +1052,7 @@ Generic_GCC::GCCInstallationDetector::GC<br>
 }<br>
<br>
 void Generic_GCC::GCCInstallationDetector::print(raw_ostream &OS) const {<br>
-  for (SmallVectorImpl<std::string>::const_iterator<br>
+  for (std::set<std::string>::const_iterator<br>
            I = CandidateGCCInstallPaths.begin(),<br>
            E = CandidateGCCInstallPaths.end();<br>
        I != E; ++I)<br>
@@ -1395,9 +1395,11 @@ void Generic_GCC::GCCInstallationDetecto<br>
     llvm::error_code EC;<br>
     for (llvm::sys::fs::directory_iterator LI(LibDir + LibSuffix, EC), LE;<br>
          !EC && LI != LE; LI = LI.increment(EC)) {<br>
-      CandidateGCCInstallPaths.push_back(LI->path());<br>
       StringRef VersionText = llvm::sys::path::filename(LI->path());<br>
       GCCVersion CandidateVersion = GCCVersion::Parse(VersionText);<br>
+      if (CandidateVersion.Major != -1) // Filter obviously bad entries.<br>
+        if (!CandidateGCCInstallPaths.insert(LI->path()).second)<br>
+          continue; // Saw this path before; no need to look at it again.<br>
       if (CandidateVersion.isOlderThan(4, 1, 1))<br>
         continue;<br>
       if (CandidateVersion <= Version)<br>
<br>
Modified: cfe/trunk/lib/Driver/ToolChains.h<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=188400&r1=188399&r2=188400&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains.h?rev=188400&r1=188399&r2=188400&view=diff</a><br>

==============================================================================<br>
--- cfe/trunk/lib/Driver/ToolChains.h (original)<br>
+++ cfe/trunk/lib/Driver/ToolChains.h Wed Aug 14 13:38:51 2013<br>
@@ -16,8 +16,8 @@<br>
 #include "clang/Driver/ToolChain.h"<br>
 #include "llvm/ADT/DenseMap.h"<br>
 #include "llvm/Support/Compiler.h"<br>
-<br>
 #include <vector><br>
+#include <set><br>
<br>
 namespace clang {<br>
 namespace driver {<br>
@@ -84,7 +84,7 @@ protected:<br>
<br>
     // We retain the list of install paths that were considered and rejected in<br>
     // order to print out detailed information in verbose mode.<br>
-    SmallVector<std::string, 4> CandidateGCCInstallPaths;<br>
+    std::set<std::string> CandidateGCCInstallPaths;<br><br></blockquote><div><br></div><div>Maybe consider using StringSet?</div><div><br></div><div>-Eli</div></div></div></div>