[PATCH] D147905: [clangd] Avoid passing -xobjective-c++-header to the system include extractor
Nathan Ridge via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Thu Apr 13 23:35:57 PDT 2023
nridge added inline comments.
================
Comment at: clang-tools-extra/clangd/SystemIncludeExtractor.cpp:340
+ // is not installed.
+ if (Lang == "objective-c++-header") {
+ Lang = "c++-header";
----------------
kadircet wrote:
> this feels like too much of a layering violation and might (will?) go wrong in cases where language was explicitly set to `objective-c++-header`.
>
> if the user is relying on fallback commands with an overwrite of `Compiler:` in the config && --query-driver globs, would it be too much of a hassle to expect them to have a `CompileFlags: Add: ...` block too?
> this feels like too much of a layering violation and might (will?) go wrong in cases where language was explicitly set to `objective-c++-header`.
This has occurred to me, and my first idea for a fix was to limit this change to cases where the `-xobjective-c++-header` originates from the fallback command.
However, as mentioned [here](https://github.com/clangd/clangd/issues/1568#issuecomment-1493236437), when I tested this I found that `-xobjective-c++-header` did not make any difference (compared to `-xc++-header` or `-xc++`) in the include paths returned by gcc. In other words, in gcc's include directory structure there are no objc-specific directories. This made me think this simpler fix would be appropriate.
> if the user is relying on fallback commands with an overwrite of `Compiler:` in the config && --query-driver globs, would it be too much of a hassle to expect them to have a `CompileFlags: Add: ...` block too?
You're right, adding a section like this to the config does seem to be a viable workaround:
```
---
If:
PathMatch: *\.h
CompileFlags:
Add: [-xc++-header]
```
But I think it would still be nice to fix this in clangd, as being foiled by objective-c support not being installed is a very unexpected failure mode for a user whose project does not involve objective-c at all.
For what it's worth, I don't think this kind of setup is uncommon. A common scenario seems to be a casual user playing around with a small project (hence, doesn't have a build system or compile_commands.json), on a platform where --query-driver is needed to find the standard library headers (most commonly, MinGW on Windows).
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D147905/new/
https://reviews.llvm.org/D147905
More information about the cfe-commits
mailing list