Hi,
I am using in my tool annotation to mark specific structure and structure elements.
If I pass into the annotate a string directly everything works like expected witrh the proposed solution:
clang::AttrVec attrs = Declaration->getAttrs();
for ( auto attr : attrs) {
llvm::outs() << "Found attribute " << attr->getSpelling()
<< " at "
<< FullLocation.getSpellingLineNumber() << ":"
<< FullLocation.getSpellingColumnNumber() << "\n";
...
}
But if I use for preprocessor macros attr->getSpelling contains just the string "annotate".
The interesting observation is that the dump of CXXRecordDecl contains
prints the AnnotateAttr with the correct resolve string (see below).
How can I access this string? Any idea is appreciated.
Thanks
Marcel
------- Example input source code:
#include <stdint.h>
#define _STRINGIFY(x) #x
#define STRINGIFY(x) _STRINGIFY(x)
#define XR(GROUP) __attribute__((annotate(STRINGIFY(IFX_ROOT_##GROUP))))
struct XR(RUBY) struct
{
...
};
-------- Output of CXXRecordDecl dump:
CXXRecordDecl 0x2e14780 <test2.cpp:9:1, line:12:1> line:9:17 struct i_s1 definition
-DefinitionData pass_in_registers aggregate standard_layout
trivially_copyable pod trivial literal
>-DefaultConstructor exists trivial needs_implicit
>-CopyConstructor simple trivial has_const_param needs_implicit
implicit_has_const_param
>-MoveConstructor exists simple trivial needs_implicit
>-CopyAssignment trivial has_const_param needs_implicit
implicit_has_const_param
>-MoveAssignment exists simple trivial needs_implicit
`-Destructor simple irrelevant trivial needs_implicit
-AnnotateAttr 0x2e14898 <line:6:35, col:71> "MY_ROOT_RUBY" <------???
-CXXRecordDecl 0x2e37490 <line:9:1, col:17> col:17 implicit struct i_s1
`-FieldDecl 0x2e375f8 <line:11:3, col:25> col:25 s 'uint32_t':'unsigned int'
`-AnnotateAttr 0x2e37648 <line:7:34, col:69> "MY_TYPE_c_uint32"
Found attribute annotate at 9:1