[cfe-dev] Determining macros used in a function or SourceRange (using clang plugin)

Eric Bayer via cfe-dev cfe-dev at lists.llvm.org
Fri Sep 23 14:20:36 PDT 2016


Hi,

I have a project that I've been working on to determine dependencies in 
code and mock/stub them.  Mostly I'm using a recursive visitor to 
datamine these things.  I would really like to be able to figure out 
what macros are used in a function as well (or SourceRange would be even 
more helpful.)   Just to be clear I'm doing this as a clang frontend 
plugin (currently stopping at syntax check).  I know that I can capture 
these PPCallbacks and store away their SourceLocations etc during 
preprocessing, but based on what is done in error messages I would 
imagine that the information is there somewhere already... I'd rather 
not reinvent the wheel if something else will work already.

For example:

#define BAR "%s"
#define FOO(x) printf( BAR, x )
#define DOY 3
void func1() {
     const char *lvar="func1";
     FOO(lvar);
}
void func2() {
     printf("%d", DOY);
}

What I want to be able to do is isolate func1() and determine that FOO 
and BAR were both used and what macro they were pointing to at the time 
they were used.  What I'm hoping is that there is way to iterate the 
SourceRange to find where the text pieces came from (with enough info to 
know what the macro name/definition was).  I didn't see an obvious way 
to do this.  Then again, maybe I'm going down the wrong path and there's 
an entirely easier direction?

Anyhow, even some hints in the right direction would be greatly appreciated.

Thanks in advance,

    -Eric






More information about the cfe-dev mailing list