From c47b6e6e4ce29c87d6ce2542e3056a5df9d874a1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Fri, 5 Oct 2018 17:14:27 +0200
Subject: [PATCH] Fix bug with notmpterms option

Commit c6cb9aa1b8db8cf61883097d1c747a3b05eb7e4e was not the right fix.
---
 src/ModelTree.cc | 50 +++++++++++++++++++++++-------------------------
 1 file changed, 24 insertions(+), 26 deletions(-)

diff --git a/src/ModelTree.cc b/src/ModelTree.cc
index 72745c88..d2d35b65 100644
--- a/src/ModelTree.cc
+++ b/src/ModelTree.cc
@@ -1256,36 +1256,34 @@ ModelTree::computeTemporaryTerms(bool is_matlab, bool no_tmp_terms)
       reference_count[v] = { ExprNode::min_cost(is_matlab)+1, NodeTreeReference::residuals };
     }
 
-  /* When option notmpterms is set, we only need to process model local
-     variables (and turn them into temporary terms); no need to go further */
-  if (no_tmp_terms)
-    return;
-
   map<NodeTreeReference, temporary_terms_t> temp_terms_map;
   temp_terms_map[NodeTreeReference::residuals] = temporary_terms_res;
   temp_terms_map[NodeTreeReference::firstDeriv] = temporary_terms_g1;
   temp_terms_map[NodeTreeReference::secondDeriv] = temporary_terms_g2;
   temp_terms_map[NodeTreeReference::thirdDeriv] = temporary_terms_g3;
 
-  for (auto & equation : equations)
-    equation->computeTemporaryTerms(reference_count,
-                                 temp_terms_map,
-                                 is_matlab, NodeTreeReference::residuals);
-
-  for (auto & first_derivative : first_derivatives)
-    first_derivative.second->computeTemporaryTerms(reference_count,
-                                      temp_terms_map,
-                                      is_matlab, NodeTreeReference::firstDeriv);
-
-  for (auto & second_derivative : second_derivatives)
-    second_derivative.second->computeTemporaryTerms(reference_count,
-                                      temp_terms_map,
-                                      is_matlab, NodeTreeReference::secondDeriv);
-
-  for (auto & third_derivative : third_derivatives)
-    third_derivative.second->computeTemporaryTerms(reference_count,
-                                      temp_terms_map,
-                                      is_matlab, NodeTreeReference::thirdDeriv);
+  if (!no_tmp_terms)
+    {
+      for (auto & equation : equations)
+        equation->computeTemporaryTerms(reference_count,
+                                        temp_terms_map,
+                                        is_matlab, NodeTreeReference::residuals);
+
+      for (auto & first_derivative : first_derivatives)
+        first_derivative.second->computeTemporaryTerms(reference_count,
+                                                       temp_terms_map,
+                                                       is_matlab, NodeTreeReference::firstDeriv);
+
+      for (auto & second_derivative : second_derivatives)
+        second_derivative.second->computeTemporaryTerms(reference_count,
+                                                        temp_terms_map,
+                                                        is_matlab, NodeTreeReference::secondDeriv);
+
+      for (auto & third_derivative : third_derivatives)
+        third_derivative.second->computeTemporaryTerms(reference_count,
+                                                       temp_terms_map,
+                                                       is_matlab, NodeTreeReference::thirdDeriv);
+    }
 
   for (map<NodeTreeReference, temporary_terms_t>::const_iterator it = temp_terms_map.begin();
        it != temp_terms_map.end(); it++)
@@ -1301,8 +1299,8 @@ ModelTree::computeTemporaryTerms(bool is_matlab, bool no_tmp_terms)
        it != temporary_terms_mlv.end(); it++)
     temporary_terms_idxs[it->first] = idx++;
 
-  for (auto temporary_terms_re : temporary_terms_res)
-    temporary_terms_idxs[temporary_terms_re] = idx++;
+  for (auto it : temporary_terms_res)
+    temporary_terms_idxs[it] = idx++;
 
   for (auto it : temporary_terms_g1)
     temporary_terms_idxs[it] = idx++;
-- 
GitLab