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

标签 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 添加到属性中也是如此定义。

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

最佳答案

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

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

所以它现在工作正常。

关于c++ - clang:自定义属性在 AST 中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38391314/

相关文章:

python - hasattr() 与 try-except block 处理不存在的属性

C++ 共享库不允许静态数据成员访问

iOS SDK(xcodebuild): Clang error cannot specify -o when generating multiple output files

c++ - 合并两个 LinkedList 而不创建一个新的 LinkedList

parsing - 我可以从我的船长解析器收集属性吗?

javascript - 在纯 JavaScript 中自动计算数据属性的总和

c++ - 为什么处理未排序数组与使用现代 x86-64 clang 处理排序数组的速度相同?

c++ - 存储数据类型信息

c++ - 从中创建 shared_ptr 后删除原始指针

c# - C++ 字符串与 C# 字符串,不同的运行时间。为什么?