From afd9b26e41018e6bd22956ca2cb372efc34807f2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Mika=C3=ABl=20Mayer?= <mikael.mayer@epfl.ch>
Date: Tue, 1 Mar 2016 11:07:34 +0100
Subject: [PATCH] Cold fix: Added missed lambda case during
 DefOps.replaceClassDef. More accurate comparison between CaseClassTypes.

---
 src/main/scala/leon/purescala/DefOps.scala | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/main/scala/leon/purescala/DefOps.scala b/src/main/scala/leon/purescala/DefOps.scala
index 2a20a478b..e8f8af4bb 100644
--- a/src/main/scala/leon/purescala/DefOps.scala
+++ b/src/main/scala/leon/purescala/DefOps.scala
@@ -589,12 +589,14 @@ object DefOps {
     def replaceClassDefsUse(e: Expr): Expr = {
       ExprOps.postMap {
         case Let(id, expr, body) => Some(Let(idMap(id), expr, body))
+        case Lambda(vd, body) => Some(Lambda(vd.map(vd => ValDef(idMap(vd.id))), body))
         case Variable(id) => Some(Variable(idMap(id)))
         case ci @ CaseClass(ct, args) =>
           ciMapF(ci, tpMap(ct)).map(_.setPos(ci))
         case CaseClassSelector(cct, expr, identifier) =>
           val new_cct = tpMap(cct)
-          Some(CaseClassSelector(new_cct, expr, (if(new_cct != cct) idMap(identifier) else identifier)))
+          val selection = (if(new_cct != cct || new_cct.classDef.fieldsIds != cct.classDef.fieldsIds) idMap(identifier) else identifier)
+          Some(CaseClassSelector(new_cct, expr, selection))
         case IsInstanceOf(e, ct) => Some(IsInstanceOf(e, tpMap(ct)))
         case AsInstanceOf(e, ct) => Some(AsInstanceOf(e, tpMap(ct)))
         case MatchExpr(scrut, cases) => 
-- 
GitLab