Skip to content

Commit 0e30741

Browse files
committed
C#: Deprecate member predicate Definition.getAReadAtNode.
1 parent 5b97db9 commit 0e30741

6 files changed

Lines changed: 17 additions & 15 deletions

File tree

csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,7 @@ private Ssa::Definition getAnSsaQualifier(Expr e, ControlFlowNode cfn) {
586586
}
587587

588588
private AssignableAccess getATrackedAccess(Ssa::Definition def, ControlFlowNode cfn) {
589-
result = def.getAReadAtNode(cfn)
589+
result = def.getARead() and cfn = result.getControlFlowNode()
590590
or
591591
result = def.(Ssa::ExplicitDefinition).getADefinition().getTargetAccess() and
592592
cfn = def.getControlFlowNode()

csharp/ql/lib/semmle/code/csharp/dataflow/Nullness.qll

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -124,11 +124,9 @@ private predicate nonNullDef(Ssa::ExplicitDefinition def) {
124124
}
125125

126126
/**
127-
* Holds if `node` is a dereference `d` of SSA definition `def`.
127+
* Holds if `d` is a dereference of SSA definition `def`.
128128
*/
129-
private predicate dereferenceAt(ControlFlowNode node, Ssa::Definition def, Dereference d) {
130-
d = def.getAReadAtNode(node)
131-
}
129+
private predicate dereferenceAt(Ssa::Definition def, Dereference d) { d = def.getARead() }
132130

133131
private predicate isMaybeNullArgument(Ssa::ImplicitParameterDefinition def, MaybeNullExpr arg) {
134132
exists(AssignableDefinitions::ImplicitParameterDefinition pdef, Parameter p |
@@ -228,7 +226,7 @@ private predicate defMaybeNull(Ssa::Definition def, ControlFlowNode node, string
228226
)
229227
or
230228
// A variable of nullable type may be null
231-
exists(Dereference d | dereferenceAt(_, def, d) |
229+
exists(Dereference d | dereferenceAt(def, d) |
232230
node = def.getControlFlowNode() and
233231
d.hasNullableType() and
234232
not def instanceof Ssa::PhiNode and
@@ -268,7 +266,8 @@ private module NullnessConfig implements ControlFlowReachability::ConfigSig {
268266

269267
predicate sink(ControlFlowNode node, SsaDefinition def) {
270268
exists(Dereference d |
271-
dereferenceAt(node, def, d) and
269+
dereferenceAt(def, d) and
270+
node = d.getControlFlowNode() and
272271
not d instanceof NonNullExpr
273272
)
274273
}
@@ -285,7 +284,8 @@ predicate maybeNullDeref(Dereference d, Ssa::SourceVariable v, string msg, Eleme
285284
defMaybeNull(origin, src, msg, reason) and
286285
NullnessFlow::flow(src, origin, sink, ssa) and
287286
ssa.getSourceVariable() = v and
288-
dereferenceAt(sink, ssa, d) and
287+
dereferenceAt(ssa, d) and
288+
sink = d.getControlFlowNode() and
289289
not d.isAlwaysNull(v)
290290
)
291291
}

csharp/ql/lib/semmle/code/csharp/dataflow/SSA.qll

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -246,9 +246,11 @@ module Ssa {
246246
* - The reads of `this.Field` on lines 10 and 11 can be reached from the phi
247247
* node between lines 9 and 10.
248248
*/
249-
final AssignableRead getARead() { result = this.getAReadAtNode(_) }
249+
final AssignableRead getARead() { result = SsaImpl::getAReadAtNode(this, _) }
250250

251251
/**
252+
* DEPRECATED: Use `getARead()` instead.
253+
*
252254
* Gets a read of the source variable underlying this SSA definition at
253255
* control flow node `cfn` that can be reached from this SSA definition
254256
* without passing through any other SSA definitions. Example:
@@ -275,7 +277,7 @@ module Ssa {
275277
* - The reads of `this.Field` on lines 10 and 11 can be reached from the phi
276278
* node between lines 9 and 10.
277279
*/
278-
final AssignableRead getAReadAtNode(ControlFlowNode cfn) {
280+
deprecated final AssignableRead getAReadAtNode(ControlFlowNode cfn) {
279281
result = SsaImpl::getAReadAtNode(this, cfn)
280282
}
281283

csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,7 @@ module VariableCapture {
253253
exists(Ssa::Definition def, AssignableDefinition adef |
254254
LocalFlow::defAssigns(adef, _, _, e1) and
255255
def.getAnUltimateDefinition().(Ssa::ExplicitDefinition).getADefinition() = adef and
256-
exists(def.getAReadAtNode(e2))
256+
def.getARead().getControlFlowNode() = e2
257257
)
258258
}
259259

csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SignAnalysisSpecific.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ private module Impl {
245245
)
246246
}
247247

248-
ExprNode getARead(Ssa::Definition v) { exists(v.getAReadAtNode(result)) }
248+
ExprNode getARead(Ssa::Definition v) { v.getARead().getControlFlowNode() = result }
249249

250250
Field getField(ExprNode fa) { result = fa.getExpr().(FieldAccess).getTarget() }
251251

csharp/ql/lib/semmle/code/csharp/dataflow/internal/rangeanalysis/SsaUtils.qll

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ private class ExprNode = ControlFlowNodes::ExprNode;
1212
/** An SSA variable. */
1313
class SsaVariable extends Definition {
1414
/** Gets a read of this SSA variable. */
15-
ExprNode getAUse() { exists(this.getAReadAtNode(result)) }
15+
ExprNode getAUse() { this.getARead().getControlFlowNode() = result }
1616
}
1717

1818
/** Gets a node that reads `src` via an SSA explicit definition. */
1919
ExprNode getAnExplicitDefinitionRead(ExprNode src) {
2020
exists(ExplicitDefinition def |
21-
exists(def.getAReadAtNode(result)) and
21+
def.getARead().getControlFlowNode() = result and
2222
hasChild(def.getElement(), def.getADefinition().getSource(), def.getControlFlowNode(), src)
2323
)
2424
}
@@ -27,7 +27,7 @@ ExprNode getAnExplicitDefinitionRead(ExprNode src) {
2727
* Gets an expression that equals `v - delta`.
2828
*/
2929
ExprNode ssaRead(Definition v, int delta) {
30-
exists(v.getAReadAtNode(result)) and delta = 0
30+
v.getARead().getControlFlowNode() = result and delta = 0
3131
or
3232
exists(ExprNode::AddOperation add, int d1, ConstantIntegerExpr c |
3333
result = add and

0 commit comments

Comments
 (0)