mirror of
https://github.com/github/codeql.git
synced 2025-12-17 01:03:14 +01:00
Convert post-update logic to IR (part 1)
This commit is contained in:
@@ -807,12 +807,18 @@ module Public {
|
|||||||
abstract Node getPreUpdateNode();
|
abstract Node getPreUpdateNode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
predicate insnHasPostUpdateNode(IR::Instruction insn) {
|
||||||
|
exists(Expr e | insn.(IR::EvalInstruction).getExpr() = e |
|
||||||
|
e instanceof AddressExpr or
|
||||||
|
e = any(AddressExpr ae).getOperand() or
|
||||||
|
e = any(StarExpr ae).getBase() or
|
||||||
|
e = any(DerefExpr ae).getOperand() or
|
||||||
|
e = any(IR::EvalImplicitDerefInstruction eidi).getOperand()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
predicate hasPostUpdateNode(Node preupd) {
|
predicate hasPostUpdateNode(Node preupd) {
|
||||||
preupd instanceof AddressOperationNode
|
insnHasPostUpdateNode(preupd.asInstruction())
|
||||||
or
|
|
||||||
preupd = any(AddressOperationNode addr).getOperand()
|
|
||||||
or
|
|
||||||
preupd = any(PointerDereferenceNode deref).getOperand()
|
|
||||||
or
|
or
|
||||||
preupd = getAWrittenNode()
|
preupd = getAWrittenNode()
|
||||||
or
|
or
|
||||||
|
|||||||
Reference in New Issue
Block a user