PS: Lift automatic variables to the cfg and dataflow layers.

This commit is contained in:
Mathias Vorreiter Pedersen
2025-04-03 20:30:15 +01:00
parent 50c57c2cb2
commit 4b14e5e7ec
2 changed files with 23 additions and 0 deletions

View File

@@ -1061,6 +1061,20 @@ module ExprNodes {
ExprCfgNode getAnOperand() { e.hasCfgChild(e.getAnOperand(), this, result) }
}
private class AutomaticVariableChildMapping extends ExprChildMapping, AutomaticVariable {
override predicate relevantChild(Ast child) { none() }
}
class AutomaticVariableCfgNode extends ExprCfgNode {
override string getAPrimaryQlClass() { result = "AutomaticVariableCfgNode" }
override AutomaticVariableChildMapping e;
override AutomaticVariable getExpr() { result = e }
string getName() { result = e.getName() }
}
}
module StmtNodes {

View File

@@ -555,3 +555,12 @@ class QualifiedTypeNameNode extends TypeNameNode {
final override CfgNodes::ExprNodes::QualifiedTypeNameExprCfgNode getExprNode() { result = n }
}
/** A use of an automatic variable, viewed as a node in a data flow graph. */
class AutomaticVariableNode extends ExprNode {
override CfgNodes::ExprNodes::AutomaticVariableCfgNode n;
final override CfgNodes::ExprNodes::AutomaticVariableCfgNode getExprNode() { result = n }
string getName() { result = n.getName() }
}