存储在clang ast中的声明节点

Storing Decl nodes in Clang AST

本文关键字:声明 节点 ast clang 存储      更新时间:2023-10-16

我正在尝试将所有函数decl节点存储在向量中,以便将来可以访问它们。用例将用于逐步介入函数(例如函数A调用功能B,我希望能够在函数B节点上调用visitDecl)

所有这些节点的存储都在astconsumer中的handletopleveldecl中完成:

std::vector<Decl> vec;
virtual bool HandleTopLevelDecl (DeclGroupRef DG) {
  for (DeclGroupRef::iterator i = DG.begin(), e = DG.end(); i != e; ++i) {
    Decl *D = *i;
    vec.push_back(*D);
  }
} 

但是,在汇编期间,有一个错误'〜eclect'是" clang :: exly'

的受保护成员

任何人都可以阐明吗?

问题是您将Decl实例的副本放入数组中。这些对象的创建和删除是其他类的责任,因此您只能参考一个实例。

这是您问题的适当解决方案:

std::vector<Decl *> vec;
virtual bool HandleTopLevelDecl (DeclGroupRef DG) {
  for (DeclGroupRef::iterator i = DG.begin(), e = DG.end(); i != e; ++i) {
    Decl *D = *i;
    vec.push_back(D);
  }
}