From e0482187a814ca25210cb2cca29fdf791c71c46f Mon Sep 17 00:00:00 2001 From: Etienne Kneuss <ekneuss@gmail.com> Date: Wed, 1 Apr 2015 13:13:25 +0200 Subject: [PATCH] Extract ensuring(expr: Boolean) as ensuring(res => expr) --- .../scala/leon/frontends/scalac/CodeExtraction.scala | 9 ++++++++- .../purescala/invalid/EnsuringBoolean.scala | 10 ++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 src/test/resources/regression/verification/purescala/invalid/EnsuringBoolean.scala diff --git a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala index 8d6c9cef9..9a80528f3 100644 --- a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala +++ b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala @@ -1064,7 +1064,14 @@ trait CodeExtraction extends ASTExtractors { NoTree(toPureScalaType(current.tpe)(dctx, current.pos)) } - Ensuring(b, post) + val closure = post.getType match { + case BooleanType => + val resId = FreshIdentifier("res", BooleanType).setPos(post).setOwner(currentFunDef) + Lambda(Seq(LeonValDef(resId)), post).setPos(post) + case _ => post + } + + Ensuring(b, closure) case t @ ExHoldsExpression(body) => val resId = FreshIdentifier("holds", BooleanType).setPos(current.pos).setOwner(currentFunDef) diff --git a/src/test/resources/regression/verification/purescala/invalid/EnsuringBoolean.scala b/src/test/resources/regression/verification/purescala/invalid/EnsuringBoolean.scala new file mode 100644 index 000000000..8d9c793b5 --- /dev/null +++ b/src/test/resources/regression/verification/purescala/invalid/EnsuringBoolean.scala @@ -0,0 +1,10 @@ +import leon._ +import leon.lang._ +import leon.annotation._ +import scala.language.postfixOps +object EnsuringBoolean { + def congR(x: BigInt)(implicit mod: BigInt): Unit = { + require(mod >= 1); + () + } ensuring(false) +} -- GitLab