[PATCH] D97351: [clangd] Use flags from open files when opening headers they include

Sam McCall via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Feb 23 18:26:31 PST 2021


sammccall created this revision.
sammccall added a reviewer: hokein.
Herald added subscribers: usaxena95, kadircet, arphaman, javed.absar.
sammccall requested review of this revision.
Herald added subscribers: cfe-commits, MaskRay, ilya-biryukov.
Herald added a project: clang.

Currently our strategy for getting header compile flags is something like:

A) look for flags for the header in compile_commands.json

  This basically never works, build systems don't generate this info.

B) try to match to an impl file in compile_commands.json and use its flags

  This only (mostly) works if the headers are in the same project.

C) give up and use fallback flags

  This kind of works for stdlib in the default configuration, and
  otherwise doesn't.

Obviously there are big gaps here.

This patch inserts a new attempt between A and B: if the header is
transitively included by any open file (whether same project or not),
then we use its compile command.

This doesn't make any attempt to solve some related problems:

- parsing non-self-contained header files in context (importing PP state)
- using the compile flags of non-opened candidate files found in the index

Fixes https://github.com/clangd/clangd/issues/123
Fixes https://github.com/clangd/clangd/issues/695
See https://github.com/clangd/clangd/issues/519


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D97351

Files:
  clang-tools-extra/clangd/Headers.h
  clang-tools-extra/clangd/TUScheduler.cpp
  clang-tools-extra/clangd/TUScheduler.h
  clang-tools-extra/clangd/unittests/TUSchedulerTests.cpp
  clang/include/clang/Tooling/CompilationDatabase.h
  clang/lib/Tooling/InterpolatingCompilationDatabase.cpp
  clang/unittests/Tooling/CompilationDatabaseTest.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D97351.325952.patch
Type: text/x-patch
Size: 23815 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20210224/15275864/attachment-0001.bin>


More information about the cfe-commits mailing list