diff --git a/src/DynamicModel.cc b/src/DynamicModel.cc index 435448888fe4429f91e228d2491f0b4f6fd228cb..b44bc6ba34e108c5f1346ecd369b77ae241ff280 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);