【发布时间】:2016-04-27 04:50:51
【问题描述】:
我正在尝试使用 clang StatementMatcher 在嵌套循环中查找变量
for(i=0;i<10;i++)
for(j=0;j<10;j++)
//I have i and j
我不确定它是否可以使用单个匹配器处理任何级别的嵌套循环,但如果可以的话,那就太好了。
现在我可以找到下面带有匹配器的循环,它不能处理多个嵌套循环和变量(从 llvm 示例中获得)。如果有人可以提供帮助,我将不胜感激。
StatementMatcher LoopMatcher =
forStmt(hasLoopInit(declStmt(
hasSingleDecl(varDecl(hasInitializer(integerLiteral(equals(0))))
.bind("initVarName")))),
hasIncrement(unaryOperator(
hasOperatorName("++"),
hasUnaryOperand(declRefExpr(
to(varDecl(hasType(isInteger())).bind("incVarName")))))),
hasCondition(binaryOperator(
hasOperatorName("<"),
hasLHS(ignoringParenImpCasts(declRefExpr(
to(varDecl(hasType(isInteger())).bind("condVarName"))))),
hasRHS(expr(hasType(isInteger())))))).bind("forLoop");
ps:如果它更容易,我正在寻找完美的嵌套循环,如上,内部循环周围没有 {}。
【问题讨论】:
标签: clang llvm abstract-syntax-tree llvm-clang clang-static-analyzer