如何从Clang中的Expr对象获取Stmt类对象

时间:2013-09-18 09:49:35

标签: c clang llvm instrumentation

我正在编写一个用于在C代码中插入断言的clang插件。我已经实现了一个访问每个一元运算符的类,并检查它是否是一个指针解引用。如果是,我想为它插入一个NULL指针断言检查。但我陷入困境,因为我无法弄清楚如何在Clang中获取包含Expr对象的Stmt对象。

这是我的代码,用于检测断言,但是在完全错误的位置(即指针取消引用之后)。我想在包含取消引用的语句之前执行此操作。

bool MyRecursiveASTVisitor::VisitUnaryOperator(UnaryOperator *E){
    if (E->getOpcode() == UO_Deref ){
        Expr *e1 = E->getSubExpr();
        SourceLocation SL = E->getLocEnd();
        Rewrite.InsertText(SL, "assert(", true, true);
        Rewrite.InsertText(SL, Rewrite.ConvertToString(e1), true, true);
        Rewrite.InsertText(SL, " != NULL);", true, true);
    }
    return true;
}

1 个答案:

答案 0 :(得分:2)

ASTContext::getParents怎么样?

您还可以使用ParentMap类构建部分父地图。

相关问题