diff --git a/cpp/ql/src/semmle/code/cpp/dataflow/internal/FlowVar.qll b/cpp/ql/src/semmle/code/cpp/dataflow/internal/FlowVar.qll index 1e22c1b1997e..75d5d300bae5 100644 --- a/cpp/ql/src/semmle/code/cpp/dataflow/internal/FlowVar.qll +++ b/cpp/ql/src/semmle/code/cpp/dataflow/internal/FlowVar.qll @@ -292,10 +292,7 @@ module FlowVar_internal { * Gets a variable that is assigned in this loop and read outside the loop. */ private Variable getARelevantVariable() { - exists(BasicBlock bbAssign | - assignmentLikeOperation(bbAssign.getANode(), result, _) and - this.bbInLoop(bbAssign) - ) and + result = this.getAVariableAssignedInLoop() and exists(VariableAccess va | va.getTarget() = result and readAccess(va) and @@ -303,6 +300,15 @@ module FlowVar_internal { ) } + /** Gets a variable that is assigned in this loop. */ + pragma[noinline] + private Variable getAVariableAssignedInLoop() { + exists(BasicBlock bbAssign | + assignmentLikeOperation(bbAssign.getANode(), result, _) and + this.bbInLoop(bbAssign) + ) + } + private predicate bbInLoopCondition(BasicBlock bb) { getCFNParent*(bb.getANode()) = this.(Loop).getCondition() }