[PATCH] D112447: [clangd] IncludeCleaner: Support macros
Kirill Bobyrev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Oct 26 01:36:18 PDT 2021
kbobyrev added inline comments.
================
Comment at: clang-tools-extra/clangd/IncludeCleaner.cpp:140
+// locations for the found macros.
+void findReferencedMacros(ParsedAST &AST, ReferencedLocations &Result) {
+ auto Tokens =
----------------
sammccall wrote:
> sammccall wrote:
> > can you add a trace for this and verify that it's not a signficant amount of time on a macro-heavy file (e.g. unittests?)
> >
> > locateMacroAt wasn't designed to be called in a loop like this, but it seems plausible it'll be fine
> >
> iterating over all the tokens and examining them individually seems like we're doing too much work.
>
> ParsedAST.MainFileMacros.Names already knows the names of all macros referenced from the main file.
> PP.getLocalMacroDirectiveHistory() will give you the last seen definition for a given macro name. If we want, we can also get the previous definitions.
>
> This seems like it should be close enough, and wade through many fewer tokens?
Hmm, this doesn't really work for "unmaterialized" macros, i.e. `ParsedAST::getMacros().Names` doesn't have `FOO` in this case:
```
// foo.h
#define FOO
// foo.cpp
#define BAR FOO
```
Is that a bug in `CollectMainFileMacros` we want to fix or is this intended behavior and we'd need to iterate through the tokens?
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D112447/new/
https://reviews.llvm.org/D112447
More information about the cfe-commits
mailing list