Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Code Generation Errors for C / C++ source code #2221

@jusevitch

Description

@jusevitch

The following code works when compiling to LLVM, but throws errors when I attempt to show the C and C++ source code.

I'm using LPython v0.19.0 on Ubuntu Linux 20.04.

Python code:

from lpython import i32, f32

def add_list(x: list[f32]) -> f32:
    sum: f32 = f32(0.0)
    i: i32

    for i in range(len(x)):
        sum = sum + f32(x[i])
    return sum

def create_list(n: i32) -> list[f32]:
    x: list[f32]
    i: i32

    x = [f32(0.0)] * n
    for i in range(n):
        x[i] = f32(i)
    return x

def main0():
    x: list[f32] = create_list(i32(10))
    # x = [f32(1.0), f32(2.0), f32(3.0)]
    print(add_list(x))

if __name__ == "__main__":
    main0()

Output of ./src/bin/lpython --show-c examples/jamestest.py:

BFD: DWARF error: section .debug_info is larger than its filesize! (0x93ef57 vs 0x530ea0)
Traceback (most recent call last):
  Binary file "/home/james/code/lpython_dir/lpython/src/bin/lpython", in _start()
  Binary file "/lib/x86_64-linux-gnu/libc.so.6", in __libc_start_main()
  File "/home/james/code/lpython_dir/lpython/src/bin/lpython.cpp", line 1804, in ??
    return emit_c(arg_file, runtime_library_dir, lpython_pass_manager,
  File "/home/james/code/lpython_dir/lpython/src/bin/lpython.cpp", line 361, in ??
    auto res = LCompilers::asr_to_c(al, *asr, diagnostics, compiler_options, 0);
  File "/home/james/code/lpython_dir/lpython/src/libasr/codegen/asr_to_c.cpp", line 1418, 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/james/code/lpython_dir/lpython/src/libasr/../libasr/asr.h", line 4979, in LCompilers::ASR::BaseVisitor<LCompilers::ASRToCVisitor>::visit_asr(LCompilers::ASR::asr_t const&)
    void visit_asr(const asr_t &b) { visit_asr_t(b, self()); }
  File "/home/james/code/lpython_dir/lpython/src/libasr/../libasr/asr.h", line 4955, in ??
    case asrType::unit: { v.visit_unit((const unit_t &)x); return; }
  File "/home/james/code/lpython_dir/lpython/src/libasr/../libasr/asr.h", line 4980, in LCompilers::ASR::BaseVisitor<LCompilers::ASRToCVisitor>::visit_unit(LCompilers::ASR::unit_t const&)
    void visit_unit(const unit_t &b) { visit_unit_t(b, self()); }
  File "/home/james/code/lpython_dir/lpython/src/libasr/../libasr/asr.h", line 4692, in ??
    case unitType::TranslationUnit: { v.visit_TranslationUnit((const TranslationUnit_t &)x); return; }
  File "/home/james/code/lpython_dir/lpython/src/libasr/codegen/asr_to_c.cpp", line 693, in LCompilers::ASRToCVisitor::visit_TranslationUnit(LCompilers::ASR::TranslationUnit_t const&)
    visit_symbol(*mod);
  File "/home/james/code/lpython_dir/lpython/src/libasr/../libasr/asr.h", line 4982, in LCompilers::ASR::BaseVisitor<LCompilers::ASRToCVisitor>::visit_symbol(LCompilers::ASR::symbol_t const&)
    void visit_symbol(const symbol_t &b) { visit_symbol_t(b, self()); }
  File "/home/james/code/lpython_dir/lpython/src/libasr/../libasr/asr.h", line 4701, in ??
    case symbolType::Module: { v.visit_Module((const Module_t &)x); return; }
  File "/home/james/code/lpython_dir/lpython/src/libasr/codegen/asr_to_c.cpp", line 815, in LCompilers::ASRToCVisitor::visit_Module(LCompilers::ASR::Module_t const&)
    visit_Function(*s);
  File "/home/james/code/lpython_dir/lpython/src/libasr/../libasr/codegen/asr_to_c_cpp.h", line 814, in LCompilers::BaseCCPPVisitor<LCompilers::ASRToCVisitor>::visit_Function(LCompilers::ASR::Function_t const&)
    self().visit_stmt(*x.m_body[i]);
  File "/home/james/code/lpython_dir/lpython/src/libasr/../libasr/asr.h", line 4999, in LCompilers::ASR::BaseVisitor<LCompilers::ASRToCVisitor>::visit_stmt(LCompilers::ASR::stmt_t const&)
    void visit_stmt(const stmt_t &b) { visit_stmt_t(b, self()); }
  File "/home/james/code/lpython_dir/lpython/src/libasr/../libasr/asr.h", line 4725, in ??
    case stmtType::Assignment: { v.visit_Assignment((const Assignment_t &)x); return; }
  File "/home/james/code/lpython_dir/lpython/src/libasr/../libasr/codegen/asr_to_c_cpp.h", line 1272, in LCompilers::BaseCCPPVisitor<LCompilers::ASRToCVisitor>::visit_Assignment(LCompilers::ASR::Assignment_t const&)
    self().visit_expr(*x.m_value);
  File "/home/james/code/lpython_dir/lpython/src/libasr/../libasr/asr.h", line 5043, in LCompilers::ASR::BaseVisitor<LCompilers::ASRToCVisitor>::visit_expr(LCompilers::ASR::expr_t const&)
    void visit_expr(const expr_t &b) { visit_expr_t(b, self()); }
  File "/home/james/code/lpython_dir/lpython/src/libasr/../libasr/asr.h", line 4865, in ??
    case exprType::ListRepeat: { v.visit_ListRepeat((const ListRepeat_t &)x); return; }
LCompilersException: visit_ListRepeat() not implemented

Output of ./src/bin/lpython --show-cpp examples/jamestest.py

code generation error: Type number '7' not supported
 --> examples/jamestest.py:3:14
  |
3 | def add_list(x: list[f32]) -> f32:
  |              ^^^^^^^^^^^^ 


Note: if any of the above error or warning messages are not clear or are lacking
context please report it to us (we consider that a bug that must be fixed).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions