Skip to content

Commit 6038d2c

Browse files
committed
Added symbolic_vars_to_omit to handle corner cases
1 parent 076b5a0 commit 6038d2c

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

src/libasr/pass/replace_symbolic.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)