Clang/Clang-CL on Windows fails to detect VC toolchain when SSMS is also installed
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
This appears to be a problem with how clang is detecting VS installs. If I install SSMS (SQL Server Management Studio) : https://learn.microsoft.com/en-us/ssms/install/install
... clang appears to detect SSMS as a VS installation. At v22, it appears to assume it's the most recent VS installation (ignoring others), and misconfigures, then tries to fall back (?) to legacy paths:
```
"C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\Llvm\x64\bin\clang-cl.exe" /clang:-v /clang:-E /clang:-dM nul
...
clang -cc1 version 22.1.3 based upon LLVM 22.1.3 default target x86_64-pc-windows-msvc
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 10.0/VC/include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 9.0/VC/include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 9.0/VC/PlatformSDK/Include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 8/VC/include"
ignoring nonexistent directory "C:/Program Files/Microsoft Visual Studio 8/VC/PlatformSDK/Include"
#include "..." search starts here:
#include <...> search starts here:
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\Llvm\x64\lib\clang\22\include
End of search list.
```
Uninstalling SSMS fixes the issue:
```
clang -cc1 version 22.1.3 based upon LLVM 22.1.3 default target x86_64-pc-windows-msvc
#include "..." search starts here:
#include <...> search starts here:
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\Llvm\x64\lib\clang\22\include
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.51.36231\include
C:\Program Files\Microsoft Visual Studio\18\Insiders\VC\Tools\MSVC\14.51.36231\atlmfc\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\winrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\cppwinrt
End of search list.
```
This issue impacts language services for users of VS Code who have SSMS installed, as the C/C++ Extension for VS Code will attempt to query clang (using args like above), to solicit its system include paths.
Contributor guide
Research direction
Start by tracing Clang/Clang-CL's Visual Studio installation detection when SSMS is installed. Reproduce the issue with the shown -v/-E/-dM invocation and compare the include-path output with SSMS installed and removed. Done means the correct VC toolchain and its MSVC, Windows SDK, and related include paths are detected without uninstalling SSMS.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, vscode
- Domain
- compilers, developer-experience
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 50/100