From ac90a9e0943b306329a9e39aee304b9446391aa6 Mon Sep 17 00:00:00 2001 From: Regis Blanc <regwblanc@gmail.com> Date: Fri, 15 Jan 2016 16:11:42 +0100 Subject: [PATCH] assert should be injected after xlang --- .../scala/leon/utils/PreprocessingPhase.scala | 2 +- .../scala/leon/verification/InjectAsserts.scala | 2 -- .../verification/xlang/valid/Array6.scala | 17 +++++++++++++++++ 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 src/test/resources/regression/verification/xlang/valid/Array6.scala diff --git a/src/main/scala/leon/utils/PreprocessingPhase.scala b/src/main/scala/leon/utils/PreprocessingPhase.scala index 7bfeece2f..4a395912a 100644 --- a/src/main/scala/leon/utils/PreprocessingPhase.scala +++ b/src/main/scala/leon/utils/PreprocessingPhase.scala @@ -37,7 +37,6 @@ class PreprocessingPhase(desugarXLang: Boolean = false) extends LeonPhase[Progra TypingPhase andThen synthesis.ConversionPhase andThen CheckADTFieldsTypes andThen - InjectAsserts andThen InliningPhase val pipeX = if(desugarXLang) { @@ -50,6 +49,7 @@ class PreprocessingPhase(desugarXLang: Boolean = false) extends LeonPhase[Progra val phases = pipeBegin andThen pipeX andThen + InjectAsserts andThen FunctionClosure andThen AdaptationPhase andThen debugTrees("Program after pre-processing") diff --git a/src/main/scala/leon/verification/InjectAsserts.scala b/src/main/scala/leon/verification/InjectAsserts.scala index a2ba463a6..4e126827b 100644 --- a/src/main/scala/leon/verification/InjectAsserts.scala +++ b/src/main/scala/leon/verification/InjectAsserts.scala @@ -30,8 +30,6 @@ object InjectAsserts extends SimpleLeonPhase[Program, Program] { Assert(indexUpTo(i, ArrayLength(a)), Some("Array index out of range"), i).setPos(i), v ).setPos(e)) - case e @ ArrayUpdate(a, i, _) => - Some(Assert(indexUpTo(i, ArrayLength(a)), Some("Array index out of range"), e).setPos(e)) case e @ MapApply(m,k) => Some(Assert(MapIsDefinedAt(m, k), Some("Map undefined at this index"), e).setPos(e)) diff --git a/src/test/resources/regression/verification/xlang/valid/Array6.scala b/src/test/resources/regression/verification/xlang/valid/Array6.scala new file mode 100644 index 000000000..ffcc9e362 --- /dev/null +++ b/src/test/resources/regression/verification/xlang/valid/Array6.scala @@ -0,0 +1,17 @@ +/* Copyright 2009-2015 EPFL, Lausanne */ + +import leon.lang._ + +object Array6 { + + def test(): Int = { + var c = 1 + val a = Array(0,1,2,3) + a({ + if(a(0) == 0) { c = c+1; 1} + else { c = c+2; 2} + }) = { c = c*2; -1} + c + } ensuring(res => res == 4) + +} -- GitLab