@@ -46,6 +46,7 @@ class ReplaceSymbolicVisitor : public PassUtils::PassVisitor<ReplaceSymbolicVisi
4646 }
4747 std::vector<std::string> symbolic_dependencies;
4848 std::set<ASR::symbol_t *> symbolic_vars_to_free;
49+ std::set<ASR::symbol_t *> symbolic_vars_to_omit;
4950 SymEngine_Stack symengine_stack;
5051
5152 void visit_Function (const ASR::Function_t &x) {
@@ -94,6 +95,7 @@ class ReplaceSymbolicVisitor : public PassUtils::PassVisitor<ReplaceSymbolicVisi
9495 func_body.from_pointer_n_copy (al, xx.m_body , xx.n_body );
9596
9697 for (ASR::symbol_t * symbol : symbolic_vars_to_free) {
98+ if (symbolic_vars_to_omit.find (symbol) != symbolic_vars_to_omit.end ()) continue ;
9799 Vec<ASR::call_arg_t > call_args;
98100 call_args.reserve (al, 1 );
99101 ASR::call_arg_t call_arg;
@@ -119,10 +121,10 @@ class ReplaceSymbolicVisitor : public PassUtils::PassVisitor<ReplaceSymbolicVisi
119121
120122 ASR::ttype_t *type1 = ASRUtils::TYPE (ASR::make_CPtr_t (al, xx.base .base .loc ));
121123 xx.m_type = type1;
124+ symbolic_vars_to_free.insert (ASR::down_cast<ASR::symbol_t >((ASR::asr_t *)&xx));
122125 if (xx.m_intent == ASR::intentType::In){
123- return ;
126+ symbolic_vars_to_omit. insert (ASR::down_cast<ASR:: symbol_t >((ASR:: asr_t *)&xx)) ;
124127 }
125- symbolic_vars_to_free.insert (ASR::down_cast<ASR::symbol_t >((ASR::asr_t *)&xx));
126128
127129 if (xx.m_intent == ASR::intentType::Local){
128130 ASR::ttype_t *type2 = ASRUtils::TYPE (ASR::make_Integer_t (al, xx.base .base .loc , 8 ));
0 commit comments