10

我按照官方手册中的描述在 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到属性定义中也是如此。

还有什么我需要考虑的或者可能是什么问题?

4

1 回答 1

9

不幸的是,这是我的错,缺少的步骤在手册“样板”部分中进行了描述:我只需要通过添加一个新案例来实现 SemaDeclAttr.cpp 中属性的语义处理:

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

所以它现在工作正常。

于 2016-07-27T11:10:44.530 回答