llvm / llvm/llvm-project

Clang/Clang-CL on Windows fails to detect VC toolchain when SSMS is also installed

Open
#209,333 0 comments 0 reactions 0 assignees View on GitHub
clang-cl platform:windows
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.