How to access an AnnotateAttr inside a CXXRecordDecl?

Hi,

how can I access an AnnotateAttr inside a CXXRecordDecl?

Example:

CXXRecordDecl 0x327da78 ... struct struct_s 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 0x327db98 <line:3:35, col:62> "SOME ANNOTATION"

   ^^^^^^^^^^^^

-CXXRecordDecl 0x32a0780 <line:6:1, col:19> col:19 implicit struct struct_s
-FieldDecl 0x32a08e8 <line:8:3, col:25> col:25 i 'uint32_t':'unsigned int'
>-AnnotateAttr 0x32a0938 <line:4:34, col:60> "SOME ANNOTATION"
`-FullComment 0x32a0d70 <line:8:45, line:10:56>

...

Thanks

Marcel

Hi,

how can I access an AnnotateAttr inside a CXXRecordDecl?

Example:

CXXRecordDecl 0x327da78 ... struct struct_s 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 0x327db98 <line:3:35, col:62> "SOME ANNOTATION"
   ^^^^^^^^^^^^
>-CXXRecordDecl 0x32a0780 <line:6:1, col:19> col:19 implicit struct struct_s
>-FieldDecl 0x32a08e8 <line:8:3, col:25> col:25 i 'uint32_t':'unsigned int'
> >-AnnotateAttr 0x32a0938 <line:4:34, col:60> "SOME ANNOTATION"
> `-FullComment 0x32a0d70 <line:8:45, line:10:56>

Once you have a CXXRecordDecl * (or any Decl *), you can use
Obj->getAttr<AnnotateAttr>() to get a pointer to the AnnotateAttr to
inspect it, or if you only care about the presence of the attribute,
you can use Obj->hasAttr<AnnotateAttr>(). Finally, if you may have to
handle multiple annotation attributes, you can use
Obj->specific_attrs<AnnotateAttr>() or
Obj->specific_attr_begin<AnnotateAttr>()/Obj->specific_attr_end<AnnotateAttr>()
to loop over all of them. HTH!

~Aaron