• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1--- a/llvm-3.1/tools/clang/lib/Driver/Driver.cpp	2012-09-12 14:26:52.000000000 -0700
2+++ b/llvm-3.1/tools/clang/lib/Driver/Driver.cpp	2012-09-18 01:07:22.957409591 -0700
3@@ -1534,8 +1534,16 @@
4
5 std::string Driver::GetProgramPath(const char *Name, const ToolChain &TC,
6                                    bool WantFile) const {
7+  std::string N(Name);
8+#ifdef __MINGW32__
9+  // We expect callers never pass Name ends with uppercase ".EXE"
10+  std::string Suffix(".exe");
11+  if (N.length() < Suffix.length() ||
12+      (N.compare(N.length() - Suffix.length(), Suffix.length(), Suffix)) != 0)
13+    N += ".exe";
14+#endif
15   // FIXME: Needs a better variable than DefaultTargetTriple
16-  std::string TargetSpecificExecutable(DefaultTargetTriple + "-" + Name);
17+  std::string TargetSpecificExecutable(DefaultTargetTriple + "-" + N);
18   // Respect a limited subset of the '-Bprefix' functionality in GCC by
19   // attempting to use this prefix when lokup up program paths.
20   for (Driver::prefix_list::const_iterator it = PrefixDirs.begin(),
21@@ -1544,7 +1552,7 @@
22     P.appendComponent(TargetSpecificExecutable);
23     if (isPathExecutable(P, WantFile)) return P.str();
24     P.eraseComponent();
25-    P.appendComponent(Name);
26+    P.appendComponent(N);
27     if (isPathExecutable(P, WantFile)) return P.str();
28   }
29
30@@ -1555,7 +1563,7 @@
31     P.appendComponent(TargetSpecificExecutable);
32     if (isPathExecutable(P, WantFile)) return P.str();
33     P.eraseComponent();
34-    P.appendComponent(Name);
35+    P.appendComponent(N);
36     if (isPathExecutable(P, WantFile)) return P.str();
37   }
38
39@@ -1565,10 +1573,11 @@
40   if (!P.empty())
41     return P.str();
42
43-  P = llvm::sys::Path(llvm::sys::Program::FindProgramByName(Name));
44+  P = llvm::sys::Path(llvm::sys::Program::FindProgramByName(N));
45   if (!P.empty())
46     return P.str();
47
48+  // Return the original Name, not N
49   return Name;
50 }
51
52