Clang, Macros and Locations

Hi all,

We are working on a Clang plugin, and we wan to have a way to uniquely identify every declaration in a C++ program. We tried using the following.
(presumed location start, presumed location end, spelling location start, spelling location end, declaration kind)

But we still have a problem.

For example, in /usr/include/x86_64-linux-gnu/bits/cmathcalls.h, line 101 a macro called _MATHCALL is used. If you look at /usr/include/complex.h, line 65 where the macro is defined, you will see that the macro uses other macros inside and create two functions (e.g. cpowf and __cpowf)

I tried using spelling locations, presumed locations, SourceManager::getExpansionLoc on the spelling location. All give the same locations for cpowf and __cpowf.

Is there any way to achieve what I try to do here?

Thanks for your time

Hi George,

I was having a similar problem with source locations and macros, but I was doing source-to-source transformations. I don’t know if it will help you, but I first expanded all the macros using a RewriteMacrosAction, and that gave me valid SourceLocations to rewrite to.

Regards,
Sam

Hey Sam. Thanks for the suggestion.

We finally found a way to handle Declarations by getting the complete expansion stack (all the locations of macros that are part of the final result) as well as the include locations.