diff --git a/src/ExprNode.cc b/src/ExprNode.cc index edbae186537650b29e770c3008b3546200441e2a..8b7f5760dfd73c4f5372f3ea12737411af40840e 100644 --- a/src/ExprNode.cc +++ b/src/ExprNode.cc @@ -5096,10 +5096,18 @@ BinaryOpNode::getPacOptimizingPartHelper(const expr_t arg1, const expr_t arg2, { auto *testarg2 = dynamic_cast<BinaryOpNode *>(arg2); if (testarg2 != nullptr && testarg2->get_op_code() == BinaryOpcode::minus) - if (dynamic_cast<VariableNode *>(testarg2->get_arg1()) != nullptr - && dynamic_cast<VariableNode *>(testarg2->get_arg2()) != nullptr) - for (auto it : endogs) - ec_params_and_vars.emplace(*(params.begin()), it); + { + auto *test_arg1 = dynamic_cast<VariableNode *>(testarg2->get_arg1()); + auto *test_arg2 = dynamic_cast<VariableNode *>(testarg2->get_arg2()); + if (test_arg1 != nullptr && test_arg2 != nullptr) + { + test_arg1->collectDynamicVariables(SymbolType::endogenous, endogs); + ec_params_and_vars.emplace(*(params.begin()), *(endogs.begin())); + endogs.clear(); + test_arg2->collectDynamicVariables(SymbolType::endogenous, endogs); + ec_params_and_vars.emplace(*(params.begin()), *(endogs.begin())); + } + } } }