clang_getCursorExtent of macro instantiation

I’m using libclang 2.9. It appears that when you call clang_getCursorExtent on a cursor that ends on a macro instantiation, the returned extent’s end location is wrong. It points to the end of the macro definition. For example:

#define FOO foo
int FOO;

The range end I get for the VarDecl cursor points to the first character after “foo”, so the end location actually precedes the start location. I assume this is a bug. Is there a way to work around this and get a meaningful extent?


Have you taken a look at clang_getExpansionLocation ?


That doesn’t exist in the version I’m using (2.9), but I’m using clang_getInstantiationLocation which, from the documentation and observed behavior, appears to be identical. I’m guessing it was just renamed to clang_getExpansionLocation for clarity.