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

13

我按照官方手册描述,在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访问新的属性类,但是即使我在属性定义中添加了let ASTNode = 1这一行,该属性仍然不会出现在AST中。

是否还有其他需要考虑的问题或者可能出现的问题?

1个回答

11

很遗憾,这是我的错,缺失的步骤在“样板文件”一节中的手册中已经描述了:我只需要通过添加一个新的 case 在 SemaDeclAttr.cpp 中实现该属性的语义处理即可。

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

现在它正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接