I have been writing a code generator/parser for one of my projects with libclang+libtooling for the past couple of days. (https://github.com/inexor-game/code/tree/karo/tree-gen/inexor/rpc/gluegen)
In it I am using annotations like `__attribute__((annotate("Key=Value"))`.
Now since that syntax is a bit unpleasant, I am using macros to generate it:
#if defined(__GNUC__) && !defined(COMPILER_ICC) #define INEXOR_ANNOT(...) __attribute__((annotate(#__VA_ARGS__))) #else #define INEXOR_ANNOT(...) #endif #define INEXOR_SHARED_TREE(...) INEXOR_ANNOT(SharedTree=__VA_ARGS__)
INEXOR_SHARED_TREE(/my/path/in/tree) int x = 42;
When I run this trough my application, the preprocessor does not expand the INEXOR_ANNOT macro correctly:
./gluegen ../../fpsgame/weapon.cpp -- -I../../../ -I/usr/include/SDL2 --std=c++14 -I/usr/lib/clang/3.7.0/include/ -I/usr/include/linux
I've added some debug output to my application; I am manually parsing the annotation to extract the key value pair; the code below is the attribute's SourceRange:
The macro invocation being expanded here looks like
When I run this through gcc -E, cpp or clang -E the code expands quite fine:
I've also tried running my tool against the already preprocessed file and then the annotation is parsed fine, so I think it might be a problem with the preprocesson invocation.
Any thoughts would be much appreciated!