Skip to content

Commit dc9ca46

Browse files
committed
Convert post-update logic to IR (part 1)
1 parent 2970494 commit dc9ca46

File tree

1 file changed

+11
-5
lines changed

1 file changed

+11
-5
lines changed

go/ql/lib/semmle/go/dataflow/internal/DataFlowNodes.qll

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -807,12 +807,18 @@ module Public {
807807
abstract Node getPreUpdateNode();
808808
}
809809

810+
predicate insnHasPostUpdateNode(IR::Instruction insn) {
811+
exists(Expr e | insn.(IR::EvalInstruction).getExpr() = e |
812+
e instanceof AddressExpr or
813+
e = any(AddressExpr ae).getOperand() or
814+
e = any(StarExpr ae).getBase() or
815+
e = any(DerefExpr ae).getOperand() or
816+
e = any(IR::EvalImplicitDerefInstruction eidi).getOperand()
817+
)
818+
}
819+
810820
predicate hasPostUpdateNode(Node preupd) {
811-
preupd instanceof AddressOperationNode
812-
or
813-
preupd = any(AddressOperationNode addr).getOperand()
814-
or
815-
preupd = any(PointerDereferenceNode deref).getOperand()
821+
insnHasPostUpdateNode(preupd.asInstruction())
816822
or
817823
preupd = getAWrittenNode()
818824
or

0 commit comments

Comments
 (0)