Skip to content

Commit edc5e5f

Browse files
committed
C++: Simplify defDependsOnDef for AssignOperation
These cases were unnecessarily transitive. There is no need for `defDependsOnDef` to be transitive since that's handled in `defDependsOnDefTransitively`. The dependency information from the LHS of an `AssignmentOperation` is now deduced the say way as the information from the RHS: by calling `exprDependsOnDef`. This should effectively give us the same information and recursion structure as if the operation (`x += e`) were desugared (`x = x + e`).
1 parent fe72b55 commit edc5e5f

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

cpp/ql/src/semmle/code/cpp/rangeanalysis/SimpleRangeAnalysis.qll

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -239,33 +239,27 @@ private predicate defDependsOnDef(
239239
// Definitions with a defining value.
240240
exists(Expr expr | assignmentDef(def, v, expr) | exprDependsOnDef(expr, srcDef, srcVar))
241241
or
242-
exists(AssignAddExpr assignAdd, RangeSsaDefinition nextDef |
242+
exists(AssignAddExpr assignAdd |
243243
def = assignAdd and
244-
assignAdd.getLValue() = nextDef.getAUse(v)
245-
|
246-
defDependsOnDef(nextDef, v, srcDef, srcVar) or
247-
exprDependsOnDef(assignAdd.getRValue(), srcDef, srcVar)
244+
def.getAVariable() = v and
245+
exprDependsOnDef(assignAdd.getAnOperand(), srcDef, srcVar)
248246
)
249247
or
250-
exists(AssignSubExpr assignSub, RangeSsaDefinition nextDef |
248+
exists(AssignSubExpr assignSub |
251249
def = assignSub and
252-
assignSub.getLValue() = nextDef.getAUse(v)
253-
|
254-
defDependsOnDef(nextDef, v, srcDef, srcVar) or
255-
exprDependsOnDef(assignSub.getRValue(), srcDef, srcVar)
250+
def.getAVariable() = v and
251+
exprDependsOnDef(assignSub.getAnOperand(), srcDef, srcVar)
256252
)
257253
or
258-
exists(UnsignedAssignMulExpr assignMul, RangeSsaDefinition nextDef |
254+
exists(UnsignedAssignMulExpr assignMul |
259255
def = assignMul and
260-
assignMul.getLValue() = nextDef.getAUse(v)
261-
|
262-
defDependsOnDef(nextDef, v, srcDef, srcVar) or
263-
exprDependsOnDef(assignMul.getRValue(), srcDef, srcVar)
256+
def.getAVariable() = v and
257+
exprDependsOnDef(assignMul.getAnOperand(), srcDef, srcVar)
264258
)
265259
or
266260
exists(CrementOperation crem |
267261
def = crem and
268-
crem.getOperand() = v.getAnAccess() and
262+
def.getAVariable() = v and
269263
exprDependsOnDef(crem.getOperand(), srcDef, srcVar)
270264
)
271265
or

0 commit comments

Comments
 (0)