]> granicus.if.org Git - clang/commitdiff
clang-cl: Fix path-based MSVC version detection
authorHans Wennborg <hans@hanshq.net>
Wed, 17 May 2017 15:27:44 +0000 (15:27 +0000)
committerHans Wennborg <hans@hanshq.net>
Wed, 17 May 2017 15:27:44 +0000 (15:27 +0000)
The code wasn't taking the architecture-specific subdirectory into
account.

Differential Revision: https://reviews.llvm.org/D33258

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@303267 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/ToolChains/MSVC.cpp

index a09304814ca695b2b84c633478dc1ae9d2aa84f8..6f5f54165b3b243fc6b260c1bc0901be1000e6e1 100644 (file)
@@ -125,8 +125,15 @@ static bool findVCToolChainViaEnvironment(std::string &Path,
         continue;
 
       // whatever/VC/bin --> old toolchain, VC dir is toolchain dir.
-      if (llvm::sys::path::filename(PathEntry) == "bin") {
-        llvm::StringRef ParentPath = llvm::sys::path::parent_path(PathEntry);
+      llvm::StringRef TestPath = PathEntry;
+      bool IsBin = llvm::sys::path::filename(TestPath).equals_lower("bin");
+      if (!IsBin) {
+        // Strip any architecture subdir like "amd64".
+        TestPath = llvm::sys::path::parent_path(TestPath);
+        IsBin = llvm::sys::path::filename(TestPath).equals_lower("bin");
+      }
+      if (IsBin) {
+        llvm::StringRef ParentPath = llvm::sys::path::parent_path(TestPath);
         if (llvm::sys::path::filename(ParentPath) == "VC") {
           Path = ParentPath;
           IsVS2017OrNewer = false;