clang:自定义属性在AST中不可见

时间:2016-07-15 08:23:55

标签: c++ attributes clang abstract-syntax-tree libtooling

我在官方手册中描述了在clang中实现了一个自定义属性: http://clang.llvm.org/docs/InternalsManual.html#how-to-add-an-attribute

所以我将以下代码添加到Attr.td:

def MyAttr: InheritableAttr {

let Spellings = [GNU<"my_attr">, CXX11<"me", "my_attr">, GCC<"my_attr">, Declspec<"my_attr">];
  let Subjects = SubjectList<[Var, Function, CXXRecord]>;

  let Documentation = [MyAttrDocs];

}

以及 AttrDocs.td 的文档。在重建clang之后,它显然知道该属性,因为我在使用它时没有得到未知属性警告。我甚至可以使用 libtooling 访问新属性类,但该属性不会显示在AST中,即使我将行let ASTNode = 1添加到属性定义中。

我还需要考虑其他问题或可能出现的问题吗?

1 个答案:

答案 0 :(得分:4)

不幸的是,这是我的错,在#34; Boilerplate&#34;部分的手册中描述了缺失的步骤:我只需要通过添加新案例来实现SemaDeclAttr.cpp中属性的语义处理:< / p>

case AttributeList::AT_MyAttr:
handleSimpleAttribute<MyAttrAttr>(S, D, Attr);
break;

所以现在工作正常。