Skip to content

Commit 7cab6b5

Browse files
committed
C#: Include SSA "phi reads" in DataFlow::Node
1 parent 67b6a82 commit 7cab6b5

File tree

7 files changed

+373
-246
lines changed

7 files changed

+373
-246
lines changed

csharp/ql/lib/semmle/code/cil/internal/SsaImpl.qll

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -47,19 +47,19 @@ private module Cached {
4747
}
4848

4949
cached
50-
ReadAccess getAFirstRead(Definition def) {
50+
ReadAccess getAFirstReadExt(DefinitionExt def) {
5151
exists(BasicBlock bb1, int i1, BasicBlock bb2, int i2 |
52-
def.definesAt(_, bb1, i1) and
53-
adjacentDefRead(def, bb1, i1, bb2, i2) and
52+
def.definesAt(_, bb1, i1, _) and
53+
adjacentDefReadExt(def, _, bb1, i1, bb2, i2) and
5454
result = bb2.getNode(i2)
5555
)
5656
}
5757

5858
cached
59-
predicate hasAdjacentReads(Definition def, ReadAccess first, ReadAccess second) {
59+
predicate hasAdjacentReadsExt(DefinitionExt def, ReadAccess first, ReadAccess second) {
6060
exists(BasicBlock bb1, int i1, BasicBlock bb2, int i2 |
6161
first = bb1.getNode(i1) and
62-
adjacentDefRead(def, bb1, i1, bb2, i2) and
62+
adjacentDefReadExt(def, _, bb1, i1, bb2, i2) and
6363
second = bb2.getNode(i2)
6464
)
6565
}
@@ -68,9 +68,35 @@ private module Cached {
6868
Definition getAPhiInput(PhiNode phi) { phiHasInputFromBlock(phi, result, _) }
6969

7070
cached
71-
predicate lastRefBeforeRedef(Definition def, BasicBlock bb, int i, Definition next) {
72-
lastRefRedef(def, bb, i, next)
71+
predicate lastRefBeforeRedefExt(DefinitionExt def, BasicBlock bb, int i, DefinitionExt next) {
72+
lastRefRedefExt(def, _, bb, i, next)
7373
}
7474
}
7575

7676
import Cached
77+
78+
private module Deprecated {
79+
private import CIL
80+
81+
deprecated ReadAccess getAFirstRead(Definition def) {
82+
exists(BasicBlock bb1, int i1, BasicBlock bb2, int i2 |
83+
def.definesAt(_, bb1, i1) and
84+
adjacentDefRead(def, bb1, i1, bb2, i2) and
85+
result = bb2.getNode(i2)
86+
)
87+
}
88+
89+
deprecated predicate hasAdjacentReads(Definition def, ReadAccess first, ReadAccess second) {
90+
exists(BasicBlock bb1, int i1, BasicBlock bb2, int i2 |
91+
first = bb1.getNode(i1) and
92+
adjacentDefRead(def, bb1, i1, bb2, i2) and
93+
second = bb2.getNode(i2)
94+
)
95+
}
96+
97+
deprecated predicate lastRefBeforeRedef(Definition def, BasicBlock bb, int i, Definition next) {
98+
lastRefRedef(def, bb, i, next)
99+
}
100+
}
101+
102+
import Deprecated

0 commit comments

Comments
 (0)