Skip to content

Commit 4ddc5c9

Browse files
committed
Ruby: Switch use-use predicates to new implementation.
1 parent b0a5e62 commit 4ddc5c9

File tree

1 file changed

+4
-42
lines changed

1 file changed

+4
-42
lines changed

ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll

Lines changed: 4 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -222,15 +222,6 @@ private predicate hasVariableReadWithCapturedWrite(
222222
variableReadActualInOuterScope(bb, i, v, scope)
223223
}
224224

225-
pragma[noinline]
226-
private predicate adjacentDefRead(
227-
Definition def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2,
228-
SsaInput::SourceVariable v
229-
) {
230-
Impl::adjacentDefRead(def, bb1, i1, bb2, i2) and
231-
v = def.getSourceVariable()
232-
}
233-
234225
pragma[noinline]
235226
deprecated private predicate adjacentDefReadExt(
236227
DefinitionExt def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2,
@@ -240,22 +231,6 @@ deprecated private predicate adjacentDefReadExt(
240231
v = def.getSourceVariable()
241232
}
242233

243-
private predicate adjacentDefReachesRead(
244-
Definition def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2
245-
) {
246-
exists(SsaInput::SourceVariable v | adjacentDefRead(def, bb1, i1, bb2, i2, v) |
247-
def.definesAt(v, bb1, i1)
248-
or
249-
SsaInput::variableRead(bb1, i1, v, true)
250-
)
251-
or
252-
exists(SsaInput::BasicBlock bb3, int i3 |
253-
adjacentDefReachesRead(def, bb1, i1, bb3, i3) and
254-
SsaInput::variableRead(bb3, i3, _, false) and
255-
Impl::adjacentDefRead(def, bb3, i3, bb2, i2)
256-
)
257-
}
258-
259234
deprecated private predicate adjacentDefReachesReadExt(
260235
DefinitionExt def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2
261236
) {
@@ -272,15 +247,6 @@ deprecated private predicate adjacentDefReachesReadExt(
272247
)
273248
}
274249

275-
/** Same as `adjacentDefRead`, but skips uncertain reads. */
276-
pragma[nomagic]
277-
private predicate adjacentDefSkipUncertainReads(
278-
Definition def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2
279-
) {
280-
adjacentDefReachesRead(def, bb1, i1, bb2, i2) and
281-
SsaInput::variableRead(bb2, i2, _, true)
282-
}
283-
284250
deprecated private predicate adjacentDefReachesUncertainReadExt(
285251
DefinitionExt def, SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2
286252
) {
@@ -391,11 +357,7 @@ private module Cached {
391357
*/
392358
cached
393359
predicate firstRead(Definition def, VariableReadAccessCfgNode read) {
394-
exists(Cfg::BasicBlock bb1, int i1, Cfg::BasicBlock bb2, int i2 |
395-
def.definesAt(_, bb1, i1) and
396-
adjacentDefSkipUncertainReads(def, bb1, i1, bb2, i2) and
397-
read = bb2.getNode(i2)
398-
)
360+
exists(Cfg::BasicBlock bb, int i | Impl::firstUse(def, bb, i, true) and read = bb.getNode(i))
399361
}
400362

401363
/**
@@ -407,10 +369,10 @@ private module Cached {
407369
predicate adjacentReadPair(
408370
Definition def, VariableReadAccessCfgNode read1, VariableReadAccessCfgNode read2
409371
) {
410-
exists(Cfg::BasicBlock bb1, int i1, Cfg::BasicBlock bb2, int i2 |
372+
exists(Cfg::BasicBlock bb1, int i1, Cfg::BasicBlock bb2, int i2, LocalVariable v |
373+
Impl::ssaDefReachesRead(v, def, bb1, i1) and
374+
Impl::adjacentUseUse(bb1, i1, bb2, i2, v, true) and
411375
read1 = bb1.getNode(i1) and
412-
variableReadActual(bb1, i1, def.getSourceVariable()) and
413-
adjacentDefSkipUncertainReads(def, bb1, i1, bb2, i2) and
414376
read2 = bb2.getNode(i2)
415377
)
416378
}

0 commit comments

Comments
 (0)