In a proper VS install, the path to cl.exe looks like: ...\VC\Tools\MSVC\14.11.25503\bin\HostX64\x64\cl.exe In our automation, the path is just: ...\VC\bin\HostX64\x64\cl.exe Clang tries to do some sanity-checking to make sure that the cl.exe it finds is the Microsoft compiler and not some other program. But the checks are a little too strict for us, so just look for "bin\Host*\*\cl.exe". diff --git a/clang/lib/Driver/ToolChains/MSVC.cpp b/clang/lib/Driver/ToolChains/MSVC.cpp index 7978a6941cb..0159e89fa27 100644 --- a/clang/lib/Driver/ToolChains/MSVC.cpp +++ b/clang/lib/Driver/ToolChains/MSVC.cpp @@ -152,8 +152,7 @@ static bool findVCToolChainViaEnvironment(std::string &Path, // path components with these prefixes when walking backwards through // the path. // Note: empty strings match anything. - llvm::StringRef ExpectedPrefixes[] = {"", "Host", "bin", "", - "MSVC", "Tools", "VC"}; + llvm::StringRef ExpectedPrefixes[] = {"", "Host", "bin"}; auto It = llvm::sys::path::rbegin(PathEntry); auto End = llvm::sys::path::rend(PathEntry);