[PATCH] D85923: [clangd] Fix crash-bug in preamble indexing when using modules.

Adam Czachorowski via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 13 12:11:53 PDT 2020


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

When preamble contains #undef, indexing code finds the matching #define
and uses that during indexing. However, it would only look for local
definitions. If the macro was defined in a module, MacroInfo
would be nullptr and clangd would crash.

This change makes clangd ignore any #undef without a matching #define
inside the same TU.

The indexing of macros happens for preamble only, so then #undef must be
in the preamble, which is why we need two .h files in a test.

Note that clangd is currently not ready for module support, but this
brings us one step closer.

This was previously attempted in
4061d9e42cff621462931ac7df9666806c77a237 <https://reviews.llvm.org/rG4061d9e42cff621462931ac7df9666806c77a237>, but had to be reverted due to
broken test. This version fixes that test-only bug by setting a custom module
cache path to avoid re-use of modules across test invocations.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D85923

Files:
  clang-tools-extra/clangd/unittests/SymbolCollectorTests.cpp
  clang-tools-extra/clangd/unittests/TestFS.h
  clang-tools-extra/clangd/unittests/TestTU.cpp
  clang-tools-extra/clangd/unittests/TestTU.h
  clang/lib/Index/IndexingAction.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D85923.285459.patch
Type: text/x-patch
Size: 7139 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200813/0b47502d/attachment-0001.bin>


More information about the cfe-commits mailing list