From 25e4e292131cfe6d9bf25f9e5e88ce44f8c9d5b6 Mon Sep 17 00:00:00 2001 From: Regis Blanc <regwblanc@gmail.com> Date: Mon, 25 Jan 2016 17:22:55 +0100 Subject: [PATCH] disallow array equality --- .../scala/leon/frontends/scalac/CodeExtraction.scala | 6 ++++++ .../frontends/error/simple/ArrayEquals1.scala | 10 ++++++++++ .../frontends/error/simple/ArrayEquals2.scala | 10 ++++++++++ 3 files changed, 26 insertions(+) create mode 100644 src/test/resources/regression/frontends/error/simple/ArrayEquals1.scala create mode 100644 src/test/resources/regression/frontends/error/simple/ArrayEquals2.scala diff --git a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala index 544947130..aa1e07e3c 100644 --- a/src/main/scala/leon/frontends/scalac/CodeExtraction.scala +++ b/src/main/scala/leon/frontends/scalac/CodeExtraction.scala @@ -1387,6 +1387,9 @@ trait CodeExtraction extends ASTExtractors { val rr = extractTree(r) (rl, rr) match { + case (IsTyped(_, ArrayType(_)), IsTyped(_, ArrayType(_))) => + outOfSubsetError(tr, "Leon does not support array comparison") + case (IsTyped(_, rt), IsTyped(_, lt)) if typesCompatible(lt, rt) => Not(Equals(rl, rr)) @@ -1405,6 +1408,9 @@ trait CodeExtraction extends ASTExtractors { val rr = extractTree(r) (rl, rr) match { + case (IsTyped(_, ArrayType(_)), IsTyped(_, ArrayType(_))) => + outOfSubsetError(tr, "Leon does not support array comparison") + case (IsTyped(_, rt), IsTyped(_, lt)) if typesCompatible(lt, rt) => Equals(rl, rr) diff --git a/src/test/resources/regression/frontends/error/simple/ArrayEquals1.scala b/src/test/resources/regression/frontends/error/simple/ArrayEquals1.scala new file mode 100644 index 000000000..39a9c4b2b --- /dev/null +++ b/src/test/resources/regression/frontends/error/simple/ArrayEquals1.scala @@ -0,0 +1,10 @@ +package leon.lang._ + +object ArrayEqual1 { + + def f: Boolean = { + Array(1,2,3) == Array(1,2,3) + } ensuring(res => res) + +} + diff --git a/src/test/resources/regression/frontends/error/simple/ArrayEquals2.scala b/src/test/resources/regression/frontends/error/simple/ArrayEquals2.scala new file mode 100644 index 000000000..2035e0d45 --- /dev/null +++ b/src/test/resources/regression/frontends/error/simple/ArrayEquals2.scala @@ -0,0 +1,10 @@ +package leon.lang._ + +object ArrayEqual2 { + + def f: Boolean = { + Array(1,2,3) != Array(1,2,3) + } ensuring(res => !res) + +} + -- GitLab