From b093ae97d99d4686109e4f6e3edd1951c2ff3e15 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 10 Feb 2025 13:09:31 +0100 Subject: [PATCH] Apply suggestions from code review Co-authored-by: Anders Schack-Mulligen --- java/ql/lib/semmle/code/java/dataflow/SSA.qll | 3 ++- .../ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/SSA.qll b/java/ql/lib/semmle/code/java/dataflow/SSA.qll index 3576b710487f..680088b7c554 100644 --- a/java/ql/lib/semmle/code/java/dataflow/SSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/SSA.qll @@ -144,13 +144,14 @@ class SsaVariable extends Definition { SsaSourceVariable getSourceVariable() { result = super.getSourceVariable() } /** Gets the `ControlFlowNode` at which this SSA variable is defined. */ + pragma[nomagic] ControlFlowNode getCfgNode() { exists(BasicBlock bb, int i, int j | this.definesAt(_, bb, i) and // untracked definitions are inserted just before reads (if this instanceof UntrackedDef then j = i + 1 else j = i) and // phi nodes are inserted at position `-1` - result = bb.getNode(max([j, 0])) + result = bb.getNode(0.maximum(j)) ) } diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 2e93b2c5811d..2913d7770021 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -465,10 +465,16 @@ private module Cached { ) } + bindingset[call, f] + pragma[inline_late] + private predicate updatesNamedField0(Call call, TrackedField f, Callable setter) { + updatesNamedField(call, f, setter) + } + cached predicate defUpdatesNamedField(SsaImplicitUpdate def, TrackedField f, Callable setter) { f = def.getSourceVariable() and - updatesNamedField(def.getCfgNode().asCall(), f, setter) + updatesNamedField0(def.getCfgNode().asCall(), f, setter) } cached