public Abstraction deriveConditionalAbstractionEnter(UnitContainer postdom, Stmt conditionalUnit) { assert this.isAbstractionActive(); if (postdominators != null && postdominators.contains(postdom)) return this; Abstraction abs = deriveNewAbstractionMutable(AccessPath.getEmptyAccessPath(), conditionalUnit); if (abs == null) return null; if (abs.postdominators == null) abs.postdominators = Collections.singletonList(postdom); else abs.postdominators.add(0, postdom); return abs; }
public Abstraction deriveConditionalAbstractionCall(Unit conditionalCallSite) { assert this.isAbstractionActive(); assert conditionalCallSite != null; Abstraction abs = deriveNewAbstractionMutable(AccessPath.getEmptyAccessPath(), (Stmt) conditionalCallSite); if (abs == null) return null; // Postdominators are only kept intraprocedurally in order to not // mess up the summary functions with caller-side information abs.postdominators = null; return abs; }