Description
On master branch, commit 71d654a:
The following code, func_ptr_bug.py:
from lpython import ccallback, i32, Callable
def foo(x : i32) -> i32:
print(x)
return x
def bar(func : Callable[[i32], i32], arg : i32) -> i32:
return func(arg)
@ccallback
def entry_point() -> None:
bar(foo, 3)
The compiler crashes when passing the --show-c option:
lpython func_ptr_bug.py --show-c
Internal Compiler Error: Unhandled exception
BFD: DWARF error: section .debug_info is larger than its filesize! (0x93ef57 vs 0x530ea0)
Traceback (most recent call last):
Binary file "/home/emoise/lpython/src/bin/lpython", in _start()
Binary file "/lib/x86_64-linux-gnu/libc.so.6", in __libc_start_main()
File "/home/emoise/lpython/src/bin/lpython.cpp", line 1788, in ??
return emit_c(arg_file, runtime_library_dir, lpython_pass_manager,
File "/home/emoise/lpython/src/bin/lpython.cpp", line 361, in ??
auto res = LCompilers::asr_to_c(al, *asr, diagnostics, compiler_options, 0);
File "/home/emoise/lpython/src/libasr/codegen/asr_to_c.cpp", line 1411, in LCompilers::asr_to_c[abi:cxx11](Allocator&, LCompilers::ASR::TranslationUnit_t&, LCompilers::diag::Diagnostics&, LCompilers::CompilerOptions&, long)
v.visit_asr((ASR::asr_t &)asr);
File "/home/emoise/lpython/src/libasr/../libasr/asr.h", line 4982, in LCompilers::ASR::BaseVisitorLCompilers::ASRToCVisitor::visit_asr(LCompilers::ASR::asr_t const&)
void visit_asr(const asr_t &b) { visit_asr_t(b, self()); }
File "/home/emoise/lpython/src/libasr/../libasr/asr.h", line 4958, in ??
case asrType::unit: { v.visit_unit((const unit_t &)x); return; }
File "/home/emoise/lpython/src/libasr/../libasr/asr.h", line 4983, in LCompilers::ASR::BaseVisitorLCompilers::ASRToCVisitor::visit_unit(LCompilers::ASR::unit_t const&)
void visit_unit(const unit_t &b) { visit_unit_t(b, self()); }
File "/home/emoise/lpython/src/libasr/../libasr/asr.h", line 4695, in ??
case unitType::TranslationUnit: { v.visit_TranslationUnit((const TranslationUnit_t &)x); return; }
File "/home/emoise/lpython/src/libasr/codegen/asr_to_c.cpp", line 691, in LCompilers::ASRToCVisitor::visit_TranslationUnit(LCompilers::ASR::TranslationUnit_t const&)
visit_symbol(*mod);
File "/home/emoise/lpython/src/libasr/../libasr/asr.h", line 4985, in LCompilers::ASR::BaseVisitorLCompilers::ASRToCVisitor::visit_symbol(LCompilers::ASR::symbol_t const&)
void visit_symbol(const symbol_t &b) { visit_symbol_t(b, self()); }
File "/home/emoise/lpython/src/libasr/../libasr/asr.h", line 4704, in ??
case symbolType::Module: { v.visit_Module((const Module_t &)x); return; }
File "/home/emoise/lpython/src/libasr/codegen/asr_to_c.cpp", line 811, in LCompilers::ASRToCVisitor::visit_Module(LCompilers::ASR::Module_t const&)
visit_Function(*s);
File "/home/emoise/lpython/src/libasr/../libasr/codegen/asr_to_c_cpp.h", line 733, in LCompilers::BaseCCPPVisitorLCompilers::ASRToCVisitor::visit_Function(LCompilers::ASR::Function_t const&)
std::string sub = get_function_declaration(x, has_typevar);
File "/home/emoise/lpython/src/libasr/../libasr/codegen/asr_to_c_cpp.h", line 532, in LCompilers::BaseCCPPVisitorLCompilers::ASRToCVisitor::get_function_declaration[abi:cxx11](LCompilers::ASR::Function_t const&, bool&)
ASR::Variable_t *arg = ASRUtils::EXPR2VAR(x.m_args[i]);
File "/home/emoise/lpython/src/libasr/../libasr/asr_utils.h", line 172, in ??
return ASR::down_castASR::Variable_t(symbol_get_past_external(
AssertFailed: is_a(*f)
Note that there is no crash if I do not pass the --show-c flag.