lfortran / lfortran

Official main repository for LFortran
https://lfortran.org/
Other
940 stars 151 forks source link

Throw error when incorrect type parameter is passed in function #4815

Open HarshitaKalani opened 1 week ago

HarshitaKalani commented 1 week ago
PROGRAM test_present
  print *, f(42.9)
CONTAINS
  LOGICAL FUNCTION f(x)
    INTEGER, INTENT(IN), OPTIONAL :: x
    f = PRESENT(x)
  END FUNCTION
END PROGRAM
$ lfortran a.f90
LCOMPILERS_ASSERT failed: /home/harshita/Desktop/lfortran/src/libasr/asr_utils.h
function Call_t_body(), line number 5576 at 
ASRUtils::check_equal_type(arg_type, orig_arg_type)
ERROR MESSAGE:
ASRUtils::check_equal_type(r32, i32)
Traceback (most recent call last):
  Binary file "/home/harshita/Desktop/lfortran/src/bin/lfortran", in _start
  File "./csu/../csu/libc-start.c", line 392, in __libc_start_main
  File "./csu/../sysdeps/nptl/libc_start_call_main.h", line 58, in __libc_start_call_main
  File "/home/harshita/Desktop/lfortran/src/bin/lfortran.cpp", line 2624, in main
    return main_app(argc, argv);
  File "/home/harshita/Desktop/lfortran/src/bin/lfortran.cpp", line 2567, in main_app(int, char**)
    err = compile_src_to_object_file(arg_file, tmp_o, false,
  File "/home/harshita/Desktop/lfortran/src/bin/lfortran.cpp", line 988, in (anonymous namespace)::compile_src_to_object_file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, LCompilers::CompilerOptions&, LCompilers::PassManager&)
    result = fe.get_asr2(input, lm, diagnostics);
  File "/home/harshita/Desktop/lfortran/src/lfortran/fortran_evaluator.cpp", line 259, in LCompilers::FortranEvaluator::get_asr2(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, LCompilers::LocationManager&, LCompilers::diag::Diagnostics&)
    Result<ASR::TranslationUnit_t*> res2 = get_asr3(*ast, diagnostics);
  File "/home/harshita/Desktop/lfortran/src/lfortran/fortran_evaluator.cpp", line 281, in LCompilers::FortranEvaluator::get_asr3(LCompilers::LFortran::AST::TranslationUnit_t&, LCompilers::diag::Diagnostics&)
    compiler_options.symtab_only, compiler_options);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_to_asr.cpp", line 106, in LCompilers::LFortran::ast_to_asr(Allocator&, LCompilers::LFortran::AST::TranslationUnit_t&, LCompilers::diag::Diagnostics&, LCompilers::SymbolTable*, bool, LCompilers::CompilerOptions&)
    instantiate_types, instantiate_symbols, entry_functions, entry_function_arguments_mapping, data_structure);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 3842, in LCompilers::LFortran::body_visitor(Allocator&, LCompilers::LFortran::AST::TranslationUnit_t&, LCompilers::diag::Diagnostics&, LCompilers::ASR::asr_t*, LCompilers::CompilerOptions&, std::map<unsigned long, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::ttype_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::ttype_t*> > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::ttype_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::ttype_t*> > > > > >&, std::map<unsigned long, LCompilers::ASR::symbol_t*, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, LCompilers::ASR::symbol_t*> > >&, std::map<unsigned long, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >&, std::map<unsigned int, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::ttype_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::ttype_t*> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::ttype_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::ttype_t*> > > > > >&, std::map<unsigned int, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::symbol_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::symbol_t*> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::symbol_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::symbol_t*> > > > > >&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<LCompilers::LFortran::AST::stmt_t*, std::allocator<LCompilers::LFortran::AST::stmt_t*> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<LCompilers::LFortran::AST::stmt_t*, std::allocator<LCompilers::LFortran::AST::stmt_t*> > > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<LCompilers::LFortran::AST::stmt_t*, std::allocator<LCompilers::LFortran::AST::stmt_t*> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<LCompilers::LFortran::AST::stmt_t*, std::allocator<LCompilers::LFortran::AST::stmt_t*> > > > > > > >&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&, std::vector<LCompilers::ASR::stmt_t*, std::allocator<LCompilers::ASR::stmt_t*> >&)
    b.visit_TranslationUnit(ast);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 146, in LCompilers::LFortran::BodyVisitor::visit_TranslationUnit(LCompilers::LFortran::AST::TranslationUnit_t const&)
    visit_ast(*x.m_items[i]);
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4884, in LCompilers::LFortran::AST::BaseVisitor<LCompilers::LFortran::BodyVisitor>::visit_ast(LCompilers::LFortran::AST::ast_t const&)
    void visit_ast(const ast_t &b) { visit_ast_t(b, self()); }
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4841, in void LCompilers::LFortran::AST::visit_ast_t<LCompilers::LFortran::BodyVisitor>(LCompilers::LFortran::AST::ast_t const&, LCompilers::LFortran::BodyVisitor&)
    case astType::mod: { v.visit_mod((const mod_t &)x); return; }
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4887, in LCompilers::LFortran::AST::BaseVisitor<LCompilers::LFortran::BodyVisitor>::visit_mod(LCompilers::LFortran::AST::mod_t const&)
    void visit_mod(const mod_t &b) { visit_mod_t(b, self()); }
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4474, in void LCompilers::LFortran::AST::visit_mod_t<LCompilers::LFortran::BodyVisitor>(LCompilers::LFortran::AST::mod_t const&, LCompilers::LFortran::BodyVisitor&)
    case modType::Program: { v.visit_Program((const Program_t &)x); return; }
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 1588, in LCompilers::LFortran::BodyVisitor::visit_Program(LCompilers::LFortran::AST::Program_t const&)
    transform_stmts(body, x.n_body, x.m_body);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 117, in LCompilers::LFortran::BodyVisitor::transform_stmts(LCompilers::Vec<LCompilers::ASR::stmt_t*>&, unsigned long, LCompilers::LFortran::AST::stmt_t**)
    this->visit_stmt(*m_body[i]);
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4930, in LCompilers::LFortran::AST::BaseVisitor<LCompilers::LFortran::BodyVisitor>::visit_stmt(LCompilers::LFortran::AST::stmt_t const&)
    void visit_stmt(const stmt_t &b) { visit_stmt_t(b, self()); }
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4601, in void LCompilers::LFortran::AST::visit_stmt_t<LCompilers::LFortran::BodyVisitor>(LCompilers::LFortran::AST::stmt_t const&, LCompilers::LFortran::BodyVisitor&)
    case stmtType::Print: { v.visit_Print((const Print_t &)x); return; }
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 3124, in LCompilers::LFortran::BodyVisitor::visit_Print(LCompilers::LFortran::AST::Print_t const&)
    visit_expr(*x.m_values[i]);
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4982, in LCompilers::LFortran::AST::BaseVisitor<LCompilers::LFortran::BodyVisitor>::visit_expr(LCompilers::LFortran::AST::expr_t const&)
    void visit_expr(const expr_t &b) { visit_expr_t(b, self()); }
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4639, in void LCompilers::LFortran::AST::visit_expr_t<LCompilers::LFortran::BodyVisitor>(LCompilers::LFortran::AST::expr_t const&, LCompilers::LFortran::BodyVisitor&)
    case exprType::FuncCallOrArray: { v.visit_FuncCallOrArray((const FuncCallOrArray_t &)x); return; }
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_common_visitor.h", line 6968, in LCompilers::LFortran::CommonVisitor<LCompilers::LFortran::BodyVisitor>::visit_FuncCallOrArray(LCompilers::LFortran::AST::FuncCallOrArray_t const&)
    tmp = create_FunctionCallWithASTNode(x, v, args);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_common_visitor.h", line 4748, in LCompilers::LFortran::CommonVisitor<LCompilers::LFortran::BodyVisitor>::create_FunctionCallWithASTNode(LCompilers::LFortran::AST::FuncCallOrArray_t const&, LCompilers::ASR::symbol_t*, LCompilers::Vec<LCompilers::ASR::call_arg_t>&, bool)
    return create_Function(x.base.base.loc, args, v);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_common_visitor.h", line 4699, in LCompilers::LFortran::CommonVisitor<LCompilers::LFortran::BodyVisitor>::create_Function(LCompilers::Location const&, LCompilers::Vec<LCompilers::ASR::call_arg_t>&, LCompilers::ASR::symbol_t*)
    return ASRUtils::make_FunctionCall_t_util(al, loc, v, nullptr,
  File "/home/harshita/Desktop/lfortran/src/libasr/asr_utils.h", line 5620, in LCompilers::ASRUtils::make_FunctionCall_t_util(Allocator&, LCompilers::Location const&, LCompilers::ASR::symbol_t*, LCompilers::ASR::symbol_t*, LCompilers::ASR::call_arg_t*, unsigned long, LCompilers::ASR::ttype_t*, LCompilers::ASR::expr_t*, LCompilers::ASR::expr_t*, bool)
    Call_t_body(al, a_name, a_args, n_args, a_dt, nullptr, false, nopass);
  File "/home/harshita/Desktop/lfortran/src/libasr/asr_utils.h", line 5576, in LCompilers::ASRUtils::Call_t_body(Allocator&, LCompilers::ASR::symbol_t*, LCompilers::ASR::call_arg_t*, unsigned long, LCompilers::ASR::expr_t*, LCompilers::ASR::stmt_t**, bool, bool)
    LCOMPILERS_ASSERT_MSG( ASRUtils::check_equal_type(arg_type, orig_arg_type),
  File "./stdlib/./stdlib/abort.c", line 79, in abort
  File "./signal/../sysdeps/posix/raise.c", line 26, in raise
  File "./nptl/./nptl/pthread_kill.c", line 43, in pthread_kill
  Binary file "/lib/x86_64-linux-gnu/libc.so.6", in <invalid>
Abort: Signal SIGABRT (abort) received

Aborted (core dumped)
$ gfortran a.f90 && ./a.out
a.f90:2:10:

    2 |   print *, f(42.9)
      |          1
Error: Type mismatch in argument ‘x’ at (1); passed REAL(4) to INTEGER(4)
anutosh491 commented 1 week ago

Is a semantic error expected here ?

certik commented 1 week ago

Yes, when integer is passed to a real argument or vice versa we need to give a semantic error.

anutosh491 commented 1 week ago

Working on it

HarshitaKalani commented 4 days ago
PROGRAM main
    print *, abc(42.9)
    CONTAINS
    logical function abc(x)
        integer, intent(in) :: x
        abc = x
    end function abc
END PROGRAM
$ lfortran a.f90
LCOMPILERS_ASSERT failed: /home/harshita/Desktop/lfortran/src/libasr/asr_utils.h
function Call_t_body(), line number 5607 at 
ASRUtils::check_equal_type(arg_type, orig_arg_type)
ERROR MESSAGE:
ASRUtils::check_equal_type(r32, i32)
Traceback (most recent call last):
  Binary file "/home/harshita/Desktop/lfortran/src/bin/lfortran", in _start
  File "./csu/../csu/libc-start.c", line 392, in __libc_start_main
  File "./csu/../sysdeps/nptl/libc_start_call_main.h", line 58, in __libc_start_call_main
  File "/home/harshita/Desktop/lfortran/src/bin/lfortran.cpp", line 2919, in main
    return main_app(argc, argv);
  File "/home/harshita/Desktop/lfortran/src/bin/lfortran.cpp", line 2862, in main_app(int, char**)
    err = compile_src_to_object_file(arg_file, tmp_o, false,
  File "/home/harshita/Desktop/lfortran/src/bin/lfortran.cpp", line 1251, in (anonymous namespace)::compile_src_to_object_file(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool, LCompilers::CompilerOptions&, LCompilers::PassManager&)
    result = fe.get_asr2(input, lm, diagnostics);
  File "/home/harshita/Desktop/lfortran/src/lfortran/fortran_evaluator.cpp", line 304, in LCompilers::FortranEvaluator::get_asr2(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, LCompilers::LocationManager&, LCompilers::diag::Diagnostics&)
    Result<ASR::TranslationUnit_t*> res2 = get_asr3(*ast, diagnostics);
  File "/home/harshita/Desktop/lfortran/src/lfortran/fortran_evaluator.cpp", line 350, in LCompilers::FortranEvaluator::get_asr3(LCompilers::LFortran::AST::TranslationUnit_t&, LCompilers::diag::Diagnostics&)
    compiler_options.symtab_only, compiler_options);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_to_asr.cpp", line 107, in LCompilers::LFortran::ast_to_asr(Allocator&, LCompilers::LFortran::AST::TranslationUnit_t&, LCompilers::diag::Diagnostics&, LCompilers::SymbolTable*, bool, LCompilers::CompilerOptions&)
    instantiate_types, instantiate_symbols, entry_functions, entry_function_arguments_mapping, data_structure);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 3884, in LCompilers::LFortran::body_visitor(Allocator&, LCompilers::LFortran::AST::TranslationUnit_t&, LCompilers::diag::Diagnostics&, LCompilers::ASR::asr_t*, LCompilers::CompilerOptions&, std::map<unsigned long, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::ttype_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::ttype_t*> > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::ttype_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::ttype_t*> > > > > >&, std::map<unsigned long, LCompilers::ASR::symbol_t*, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, LCompilers::ASR::symbol_t*> > >&, std::map<unsigned long, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<unsigned long>, std::allocator<std::pair<unsigned long const, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > > >&, std::map<unsigned int, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::ttype_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::ttype_t*> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::ttype_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::ttype_t*> > > > > >&, std::map<unsigned int, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::symbol_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::symbol_t*> > >, std::less<unsigned int>, std::allocator<std::pair<unsigned int const, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, LCompilers::ASR::symbol_t*, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, LCompilers::ASR::symbol_t*> > > > > >&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<LCompilers::LFortran::AST::stmt_t*, std::allocator<LCompilers::LFortran::AST::stmt_t*> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<LCompilers::LFortran::AST::stmt_t*, std::allocator<LCompilers::LFortran::AST::stmt_t*> > > > >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<LCompilers::LFortran::AST::stmt_t*, std::allocator<LCompilers::LFortran::AST::stmt_t*> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<LCompilers::LFortran::AST::stmt_t*, std::allocator<LCompilers::LFortran::AST::stmt_t*> > > > > > > >&, std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::vector<int, std::allocator<int> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::vector<int, std::allocator<int> > > > >&, std::vector<LCompilers::ASR::stmt_t*, std::allocator<LCompilers::ASR::stmt_t*> >&)
    b.visit_TranslationUnit(ast);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 146, in LCompilers::LFortran::BodyVisitor::visit_TranslationUnit(LCompilers::LFortran::AST::TranslationUnit_t const&)
    visit_ast(*x.m_items[i]);
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4884, in LCompilers::LFortran::AST::BaseVisitor<LCompilers::LFortran::BodyVisitor>::visit_ast(LCompilers::LFortran::AST::ast_t const&)
    void visit_ast(const ast_t &b) { visit_ast_t(b, self()); }
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4841, in void LCompilers::LFortran::AST::visit_ast_t<LCompilers::LFortran::BodyVisitor>(LCompilers::LFortran::AST::ast_t const&, LCompilers::LFortran::BodyVisitor&)
    case astType::mod: { v.visit_mod((const mod_t &)x); return; }
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4887, in LCompilers::LFortran::AST::BaseVisitor<LCompilers::LFortran::BodyVisitor>::visit_mod(LCompilers::LFortran::AST::mod_t const&)
    void visit_mod(const mod_t &b) { visit_mod_t(b, self()); }
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4474, in void LCompilers::LFortran::AST::visit_mod_t<LCompilers::LFortran::BodyVisitor>(LCompilers::LFortran::AST::mod_t const&, LCompilers::LFortran::BodyVisitor&)
    case modType::Program: { v.visit_Program((const Program_t &)x); return; }
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 1598, in LCompilers::LFortran::BodyVisitor::visit_Program(LCompilers::LFortran::AST::Program_t const&)
    transform_stmts(body, x.n_body, x.m_body);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 117, in LCompilers::LFortran::BodyVisitor::transform_stmts(LCompilers::Vec<LCompilers::ASR::stmt_t*>&, unsigned long, LCompilers::LFortran::AST::stmt_t**)
    this->visit_stmt(*m_body[i]);
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4930, in LCompilers::LFortran::AST::BaseVisitor<LCompilers::LFortran::BodyVisitor>::visit_stmt(LCompilers::LFortran::AST::stmt_t const&)
    void visit_stmt(const stmt_t &b) { visit_stmt_t(b, self()); }
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4601, in void LCompilers::LFortran::AST::visit_stmt_t<LCompilers::LFortran::BodyVisitor>(LCompilers::LFortran::AST::stmt_t const&, LCompilers::LFortran::BodyVisitor&)
    case stmtType::Print: { v.visit_Print((const Print_t &)x); return; }
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_body_visitor.cpp", line 3169, in LCompilers::LFortran::BodyVisitor::visit_Print(LCompilers::LFortran::AST::Print_t const&)
    visit_expr(*x.m_values[i]);
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4982, in LCompilers::LFortran::AST::BaseVisitor<LCompilers::LFortran::BodyVisitor>::visit_expr(LCompilers::LFortran::AST::expr_t const&)
    void visit_expr(const expr_t &b) { visit_expr_t(b, self()); }
  File "/home/harshita/Desktop/lfortran/src/lfortran/ast.h", line 4639, in void LCompilers::LFortran::AST::visit_expr_t<LCompilers::LFortran::BodyVisitor>(LCompilers::LFortran::AST::expr_t const&, LCompilers::LFortran::BodyVisitor&)
    case exprType::FuncCallOrArray: { v.visit_FuncCallOrArray((const FuncCallOrArray_t &)x); return; }
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_common_visitor.h", line 7136, in LCompilers::LFortran::CommonVisitor<LCompilers::LFortran::BodyVisitor>::visit_FuncCallOrArray(LCompilers::LFortran::AST::FuncCallOrArray_t const&)
    tmp = create_FunctionCallWithASTNode(x, v, args);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_common_visitor.h", line 4916, in LCompilers::LFortran::CommonVisitor<LCompilers::LFortran::BodyVisitor>::create_FunctionCallWithASTNode(LCompilers::LFortran::AST::FuncCallOrArray_t const&, LCompilers::ASR::symbol_t*, LCompilers::Vec<LCompilers::ASR::call_arg_t>&, bool)
    return create_Function(x.base.base.loc, args, v);
  File "/home/harshita/Desktop/lfortran/src/lfortran/semantics/ast_common_visitor.h", line 4867, in LCompilers::LFortran::CommonVisitor<LCompilers::LFortran::BodyVisitor>::create_Function(LCompilers::Location const&, LCompilers::Vec<LCompilers::ASR::call_arg_t>&, LCompilers::ASR::symbol_t*)
    return ASRUtils::make_FunctionCall_t_util(al, loc, v, nullptr,
  File "/home/harshita/Desktop/lfortran/src/libasr/asr_utils.h", line 5651, in LCompilers::ASRUtils::make_FunctionCall_t_util(Allocator&, LCompilers::Location const&, LCompilers::ASR::symbol_t*, LCompilers::ASR::symbol_t*, LCompilers::ASR::call_arg_t*, unsigned long, LCompilers::ASR::ttype_t*, LCompilers::ASR::expr_t*, LCompilers::ASR::expr_t*, bool)
    Call_t_body(al, a_name, a_args, n_args, a_dt, nullptr, false, nopass);
  File "/home/harshita/Desktop/lfortran/src/libasr/asr_utils.h", line 5607, in LCompilers::ASRUtils::Call_t_body(Allocator&, LCompilers::ASR::symbol_t*, LCompilers::ASR::call_arg_t*, unsigned long, LCompilers::ASR::expr_t*, LCompilers::ASR::stmt_t**, bool, bool)
    LCOMPILERS_ASSERT_MSG( ASRUtils::check_equal_type(arg_type, orig_arg_type),
  File "./stdlib/./stdlib/abort.c", line 79, in abort
  File "./signal/../sysdeps/posix/raise.c", line 26, in raise
  File "./nptl/./nptl/pthread_kill.c", line 43, in pthread_kill
  Binary file "/lib/x86_64-linux-gnu/libc.so.6", in <invalid>
Abort: Signal SIGABRT (abort) received

Aborted (core dumped)
Pranavchiku commented 4 days ago
diff --git a/src/runtime/builtin/lfortran_intrinsic_builtin.f90 b/src/runtime/builtin/lfortran_intrinsic_builtin.f90
index e39cf4725..9291bbbd2 100644
--- a/src/runtime/builtin/lfortran_intrinsic_builtin.f90
+++ b/src/runtime/builtin/lfortran_intrinsic_builtin.f90
@@ -1,6 +1,11 @@
 module lfortran_intrinsic_builtin
 implicit none

+interface present
+procedure :: present_i
+procedure :: present_r
+end interface
+
 interface

     integer function int(x, kind)
@@ -13,10 +18,14 @@ interface
     integer, optional, intent(in) :: kind
     end function

-    logical function present(x)
+    logical function present_i(x)
     integer, optional, intent(in) :: x
     end function

+    logical function present_r(x)
+    real, optional, intent(in) :: x
+    end function
+
     logical function is_iostat_eor(i) result(r)
     integer, intent(in) :: i
     end function
@@ -39,4 +48,5 @@ interface

 end interface

+
 end module