From 603f0fbb3d9f1b80af559b74c63a7358a6360def Mon Sep 17 00:00:00 2001 From: Etienne Kneuss <colder@php.net> Date: Mon, 18 Aug 2014 16:40:52 +0200 Subject: [PATCH] Fix IfSplit --- .../scala/leon/synthesis/rules/IfSplit.scala | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/scala/leon/synthesis/rules/IfSplit.scala b/src/main/scala/leon/synthesis/rules/IfSplit.scala index 45d502ecb..c29ae5ccf 100644 --- a/src/main/scala/leon/synthesis/rules/IfSplit.scala +++ b/src/main/scala/leon/synthesis/rules/IfSplit.scala @@ -15,18 +15,22 @@ case object IfSplit extends Rule("If-Split") { case _ => Set[IfExpr]() }(p.phi) - ifs.toList match { - case i :: _ => - List(split(i, p, "Split top-level If")) - case _ => - Nil + val xsSet = p.xs.toSet + + ifs.flatMap { + case i @ IfExpr(cond, _, _) => + if ((variablesOf(cond) & xsSet).isEmpty) { + List(split(i, p, "Split If("+cond+")")) + } else { + Nil + } } } def split(i: IfExpr, p: Problem, description: String): RuleInstantiation = { val subs = List( - Problem(p.as, And(p.pc, i.cond), replace(Map(i -> i.thenn), p.pc), p.xs), - Problem(p.as, And(p.pc, Not(i.cond)), replace(Map(i -> i.elze), p.pc), p.xs) + Problem(p.as, And(p.pc, i.cond), replace(Map(i -> i.thenn), p.phi), p.xs), + Problem(p.as, And(p.pc, Not(i.cond)), replace(Map(i -> i.elze), p.phi), p.xs) ) val onSuccess: List[Solution] => Option[Solution] = { -- GitLab