Clang静态分析器Liveness Analysis未达预期结果咨询
Clang存活分析(Liveness Analysis)结果不符合预期的问题
void foo(double* b){ int a = 100; a = 101; b[1] += b[a]; }
我实现了一个包含VisitArraySubscriptExpr(ASE)的AST访问器,核心逻辑简化为:
- 检查数组下标表达式(ASE)的索引是否为
DeclRefExpr——比如示例中b[a]的a就属于该类型; - 若是,则获取对应的
VarDecl并提取其初始值(此处为100); - 对该初始值进行特定形式的校验。
现在遇到的问题是,变量a在初始化后被重赋值为101,我需要检测这种初始化后的重赋值操作。原本认为Clang的存活分析(Liveness Analysis)可以解决这个问题——只需判断初始值100在int a = 100;语句之后是否还存活即可。
但实际运行时,我在runOnBlock中打印每个语句的liveExprs内容,得到的结果始终是:
STATEMENT: DeclStmt 0x138b775d0 `-VarDecl 0x138b77548 used a 'int' cinit `-IntegerLiteral 0x138b775b0 'int' 100 LIVE INFO: IntegerLiteral 0x138b775b0 'int' 100
这显示100在初始化语句之后仍处于存活状态,显然和实际代码逻辑不符。我使用的是clang-18版本,想请教是否在存活分析的理解或操作上存在误区?可提供更多上下文信息。
内容的提问来源于stack exchange,提问作者tapochki
相关产品推荐
相关产品推荐

