From 45cd8e6853c6fa661ada8dd03e79b4e859d58bbc Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Mon, 30 Jul 2018 12:53:23 +0200
Subject: [PATCH] Fix regression in nested diffs introduced in 90d8b579

See McModelTeam/McModelProject/issues/97.
---
 src/DynamicModel.cc | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc
index 43544888..b44bc6ba 100644
--- a/src/DynamicModel.cc
+++ b/src/DynamicModel.cc
@@ -5391,7 +5391,10 @@ DynamicModel::substituteDiff(StaticModel &static_model, ExprNode::subst_table_t
       auto iterator_arg_max_lag = it.second.rbegin();
       int arg_max_lag = iterator_arg_max_lag->first;
       expr_t arg_max_expr = iterator_arg_max_lag->second;
-      while (arg_max_lag < 0)
+
+      /* We compare arg_max_lag with the result of countDiffs(), in order to
+         properly handle nested diffs. See McModelTeam/McModelProject/issues/97 */
+      while (arg_max_lag < 1 - it.first->countDiffs())
         {
           arg_max_lag++;
           arg_max_expr = arg_max_expr->decreaseLeadsLags(-1);
-- 
GitLab