From 520b16bb42ddc3c02e664fe0bbde8cc177eddcba Mon Sep 17 00:00:00 2001
From: Regis Blanc <regwblanc@gmail.com>
Date: Mon, 18 Jan 2016 15:07:06 +0100
Subject: [PATCH] detect multiple passing same argument

---
 .../scala/leon/xlang/AntiAliasingPhase.scala   |  5 ++++-
 .../xlang/error/ArrayAliasing5.scala           | 18 ++++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)
 create mode 100644 src/test/resources/regression/xlang/error/ArrayAliasing5.scala

diff --git a/src/main/scala/leon/xlang/AntiAliasingPhase.scala b/src/main/scala/leon/xlang/AntiAliasingPhase.scala
index 066319377..8a5f627a7 100644
--- a/src/main/scala/leon/xlang/AntiAliasingPhase.scala
+++ b/src/main/scala/leon/xlang/AntiAliasingPhase.scala
@@ -1,5 +1,4 @@
 /* Copyright 2009-2015 EPFL, Lausanne */
-
 package leon.xlang
 
 import leon.TransformationPhase
@@ -177,6 +176,10 @@ object AntiAliasingPhase extends TransformationPhase {
                 args.zipWithIndex.filter{ case (arg, i) => fiEffects.contains(i) }
                     .map(_._1.asInstanceOf[Variable])
 
+              val duplicatedParams = modifiedArgs.diff(modifiedArgs.distinct).distinct
+              if(duplicatedParams.nonEmpty) 
+                ctx.reporter.fatalError(fi.getPos, "Illegal passing of aliased parameter: " + duplicatedParams.head)
+
               val freshRes = FreshIdentifier("res", nfd.returnType)
 
               val extractResults = Block(
diff --git a/src/test/resources/regression/xlang/error/ArrayAliasing5.scala b/src/test/resources/regression/xlang/error/ArrayAliasing5.scala
new file mode 100644
index 000000000..b9363d1ab
--- /dev/null
+++ b/src/test/resources/regression/xlang/error/ArrayAliasing5.scala
@@ -0,0 +1,18 @@
+import leon.lang._
+
+object ArrayAliasing5 {
+
+
+  def f1(a: Array[BigInt], b: Array[BigInt]): Unit = {
+    require(a.length > 0 && b.length > 0)
+    a(0) = 10
+    b(0) = 20
+  } ensuring(_ => a(0) == 10 && b(0) == 20)
+
+
+  def callWithAliases(): Unit = {
+    val a = Array[BigInt](0,0,0,0)
+    f1(a, a)
+  }
+
+}
-- 
GitLab