diff --git a/src/main/scala/analysis/data_structure_analysis/IntervalDSA.scala b/src/main/scala/analysis/data_structure_analysis/IntervalDSA.scala index 4a854d486..b03893459 100644 --- a/src/main/scala/analysis/data_structure_analysis/IntervalDSA.scala +++ b/src/main/scala/analysis/data_structure_analysis/IntervalDSA.scala @@ -188,7 +188,9 @@ class IntervalGraph( callTransfer(phase, dcc, source, target) case dcc: DirectCallConstraint if dcc.target.name == "indirect_call_launchpad" => resolveIndirectCall(dcc) - .filterNot(proc => proc.isExternal.getOrElse(false) || proc.name.startsWith("_")) + .filterNot(proc => + dcc.call.parent.parent == proc || proc.isExternal.getOrElse(false) || proc.name.startsWith("_") + ) .foreach(proc => val (source, target) = if phase == TD then (this, graphs(proc)) else (graphs(proc), this) @@ -238,6 +240,7 @@ class IntervalGraph( .exprToCells(sourceExpr) .map(source.find) .map(cell => + assert(cell.node.isUptoDate) val (node, offset) = target.findNode(cell.node.clone(target, true, oldToNew)) if offset == 0 then node.get(cell.interval) diff --git a/src/test/scala/IntervalDSATest.scala b/src/test/scala/IntervalDSATest.scala index a2c5c1e93..67032afa4 100644 --- a/src/test/scala/IntervalDSATest.scala +++ b/src/test/scala/IntervalDSATest.scala @@ -40,7 +40,7 @@ class IntervalDSATest extends AnyFunSuite { staticAnalysis = None, boogieTranslation = BoogieGeneratorConfig(), outputPrefix = "boogie_out", - dsaConfig = Some(DSAConfig(Set.empty)) + dsaConfig = Some(DSAConfig(Set(Norm))) ) ) }