Summary:
DeclrationAndMacrosFinder will find some declarations (not macro!) that are
referened inside the macro somehow, isSearchedLocation() is not sufficient, we
don't know whether the searched source location is macro or not.
Reviewers: ilya-biryukov
Subscribers: klimek, jkorous-apple, ioeric, cfe-commits
Differential Revision: https://reviews.llvm.org/D44293
llvm-svn: 327387
MacroInfo *MacroInf = MacroDef.getMacroInfo();
if (MacroInf) {
MacroInfos.push_back(MacroDecl{IdentifierInfo->getName(), MacroInf});
+ // Clear all collected delcarations if this is a macro search.
+ //
+ // In theory, there should be no declarataions being collected when we
+ // search a source location that refers to a macro.
+ // The occurrence location returned by `handleDeclOccurence` is
+ // limited (FID, Offset are from expansion location), we will collect
+ // all declarations inside the macro.
+ //
+ // FIXME: Avoid adding decls from inside macros in handlDeclOccurence.
+ Decls.clear();
}
}
}
#undef macro
)cpp",
+ R"cpp(// Macro
+ class TTT { public: int a; };
+ #define [[FF(S) if (int b = S.a) {}]]
+ void f() {
+ TTT t;
+ F^F(t);
+ }
+ )cpp",
+
R"cpp(// Forward class declaration
class Foo;
class [[Foo]] {};