Skip to content

Commit 2545f06

Browse files
committed
C#: Deprecate member predicate Definition.getAReadAtNode.
1 parent 83c7a33 commit 2545f06

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::ParameterDefinition def, MaybeNullExpr arg) {
134132
exists(AssignableDefinitions::ImplicitParameterDefinition pdef, Parameter p |
@@ -214,7 +212,7 @@ private predicate defMaybeNull(Ssa::Definition def, ControlFlowNode node, string
214212
)
215213
or
216214
// A variable of nullable type may be null
217-
exists(Dereference d | dereferenceAt(_, def, d) |
215+
exists(Dereference d | dereferenceAt(def, d) |
218216
node = def.getControlFlowNode() and
219217
d.hasNullableType() and
220218
not def instanceof Ssa::PhiNode and
@@ -254,7 +252,8 @@ private module NullnessConfig implements ControlFlowReachability::ConfigSig {
254252

255253
predicate sink(ControlFlowNode node, SsaDefinition def) {
256254
exists(Dereference d |
257-
dereferenceAt(node, def, d) and
255+
dereferenceAt(def, d) and
256+
node = d.getControlFlowNode() and
258257
not d instanceof NonNullExpr
259258
)
260259
}
@@ -271,7 +270,8 @@ predicate maybeNullDeref(Dereference d, Ssa::SourceVariable v, string msg, Eleme
271270
defMaybeNull(origin, src, msg, reason) and
272271
NullnessFlow::flow(src, origin, sink, ssa) and
273272
ssa.getSourceVariable() = v and
274-
dereferenceAt(sink, ssa, d) and
273+
dereferenceAt(ssa, d) and
274+
sink = d.getControlFlowNode() and
275275
not d.isAlwaysNull(v)
276276
)
277277
}

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

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

241241
/**
242+
* DEPRECATED: Use `getARead()` instead.
243+
*
242244
* Gets a read of the source variable underlying this SSA definition at
243245
* control flow node `cfn` that can be reached from this SSA definition
244246
* without passing through any other SSA definitions. Example:
@@ -265,7 +267,7 @@ module Ssa {
265267
* - The reads of `this.Field` on lines 10 and 11 can be reached from the phi
266268
* node between lines 9 and 10.
267269
*/
268-
final AssignableRead getAReadAtNode(ControlFlowNode cfn) {
270+
deprecated final AssignableRead getAReadAtNode(ControlFlowNode cfn) {
269271
result = SsaImpl::getAReadAtNode(this, cfn)
270272
}
271273

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ module VariableCapture {
273273
exists(Ssa::Definition def, AssignableDefinition adef |
274274
LocalFlow::defAssigns(adef, _, _, e1) and
275275
def.getAnUltimateDefinition().(Ssa::ExplicitDefinition).getADefinition() = adef and
276-
exists(def.getAReadAtNode(e2))
276+
def.getARead().getControlFlowNode() = e2
277277
)
278278
}
279279

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)