Open rebcabin opened 1 year ago
works in both CP and LP:
from lpython import (i8, i32, i64, f32, f64, u8, u32, TypeVar, Const, dataclass ) from numpy import (empty, sqrt, float32, float64, int8, int32, array, # ndarray ) @dataclass class LpBhvSmall: dim : i32 = 4 a : i8[4] = empty(4, dtype=int8) def g() -> None: #################### ATTENTION: IMPLICIT INIT ####################### l1 : LpBhvSmall = LpBhvSmall() # 4, empty(4, dtype=int8)) l1.a[0] = i8(-96) l1.a[1] = i8(-17) l1.a[2] = i8(80) l1.a[3] = i8(107) assert l1.a[0] == i8(-96) assert l1.a[1] == i8(-17) assert l1.a[2] == i8(80) assert l1.a[3] == i8(107) #################### ATTENTION: IMPLICIT INIT ####################### l2 : LpBhvSmall = LpBhvSmall() # 4, empty(4, dtype=int8)) l2.a[0] = i8(-42) l2.a[1] = i8(-99) l2.a[2] = i8(3) l2.a[3] = i8(-110) assert l2.a[0] == i8(-42) assert l2.a[1] == i8(-99) assert l2.a[2] == i8(3) assert l2.a[3] == i8(-110) if __name__ == "__main__": print("Module HDC") print('') g()
(lp) ┌─(~/CLionProjects/lpython/lasr/LP-pycharm)─────────────────────────────────────────────────────────────────────────────────────────────────────────(brian@Golf37:s000)─┐ └─(21:16:20 on brian-lasr ✹)──> PYTHONPATH='../../src/runtime/lpython' python issue2101.py ──(Tue,Jul04)─┘ Module HDC (lp) ┌─(~/CLionProjects/lpython/lasr/LP-pycharm)─────────────────────────────────────────────────────────────────────────────────────────────────────────(brian@Golf37:s000)─┐ └─(21:18:39 on brian-lasr ✹)──> ~/CLionProjects/lpython/src/bin/lpython -I. issue2101.py ──(Tue,Jul04)─┘ Module HDC
Fails in LP but works in CP
from lpython import (i8, i32, i64, f32, f64, u8, u32, TypeVar, Const, dataclass ) from numpy import (empty, sqrt, float32, float64, int8, int32, array, # ndarray ) @dataclass class LpBhvSmall: dim : i32 = 4 a : i8[4] = empty(4, dtype=int8) def g() -> None: ##################### ATTENTION: EXPLICIT INIT ####################### l1 : LpBhvSmall = LpBhvSmall(4, empty(4, dtype=int8)) l1.a[0] = i8(-96) l1.a[1] = i8(-17) l1.a[2] = i8(80) l1.a[3] = i8(107) assert l1.a[0] == i8(-96) assert l1.a[1] == i8(-17) assert l1.a[2] == i8(80) assert l1.a[3] == i8(107) ##################### ATTENTION: EXPLICIT INIT ####################### l2 : LpBhvSmall = LpBhvSmall(4, empty(4, dtype=int8)) l2.a[0] = i8(-42) l2.a[1] = i8(-99) l2.a[2] = i8(3) l2.a[3] = i8(-110) assert l2.a[0] == i8(-42) assert l2.a[1] == i8(-99) assert l2.a[2] == i8(3) assert l2.a[3] == i8(-110) if __name__ == "__main__": print("Module HDC") print('') g()
(lp) ┌─(~/CLionProjects/lpython/lasr/LP-pycharm)─────────────────────────────────────────────────────────────────────────────────────────────────────────(brian@Golf37:s000)─┐ └─(21:18:45 on brian-lasr ✹)──> PYTHONPATH='../../src/runtime/lpython' python issue2101.py ──(Tue,Jul04)─┘ Module HDC (lp) ┌─(~/CLionProjects/lpython/lasr/LP-pycharm)─────────────────────────────────────────────────────────────────────────────────────────────────────────(brian@Golf37:s000)─┐ └─(21:19:44 on brian-lasr ✹)──> ~/CLionProjects/lpython/src/bin/lpython -I. issue2101.py ──(Tue,Jul04)─┘ Internal Compiler Error: Unhandled exception Traceback (most recent call last): File "/Users/brian/CLionProjects/lpython/src/bin/lpython.cpp", line 1844 err = compile_python_to_object_file(arg_file, tmp_o, runtime_library_dir, File "/Users/brian/CLionProjects/lpython/src/bin/lpython.cpp", line 783 r1 = LCompilers::LPython::python_ast_to_asr(al, lm, nullptr, *ast, diagnostics, compiler_options, File "/Users/brian/CLionProjects/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 7572 auto res2 = body_visitor(al, lm, *ast_m, diagnostics, unit, main_module, module_name, File "/Users/brian/CLionProjects/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 7523 BodyVisitor b(al, lm, unit, diagnostics, main_module, module_name, ast_overload, allow_implicit_casting); File "/Users/brian/CLionProjects/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 4655 visit_stmt(*x.m_body[i]); File "/Users/brian/CLionProjects/lpython/src/lpython/python_ast.h", line 1883 void visit_stmt(const stmt_t &b) { visit_stmt_t(b, self()); } File "/Users/brian/CLionProjects/lpython/src/lpython/python_ast.h", line 1751 case stmtType::FunctionDef: { v.visit_FunctionDef((const FunctionDef_t &)x); return; } File "/Users/brian/CLionProjects/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 4762 handle_fn(x, *f); File "/Users/brian/CLionProjects/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 4744 transform_stmts(body, x.n_body, x.m_body); File "/Users/brian/CLionProjects/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 4615 this->visit_stmt(*m_body[i]); File "/Users/brian/CLionProjects/lpython/src/lpython/python_ast.h", line 1883 void visit_stmt(const stmt_t &b) { visit_stmt_t(b, self()); } File "/Users/brian/CLionProjects/lpython/src/lpython/python_ast.h", line 1757 case stmtType::AugAssign: { v.visit_AugAssign((const AugAssign_t &)x); return; } File "/Users/brian/CLionProjects/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 4888 visit_AnnAssignUtil(x, var_name, init_expr); File "/Users/brian/CLionProjects/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 2787 this->visit_expr(*x.m_value); File "/Users/brian/CLionProjects/lpython/src/lpython/python_ast.h", line 1910 void visit_expr(const expr_t &b) { visit_expr_t(b, self()); } File "/Users/brian/CLionProjects/lpython/src/lpython/python_ast.h", line 1799 case exprType::Compare: { v.visit_Compare((const Compare_t &)x); return; } File "/Users/brian/CLionProjects/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 7508 tmp = make_call_helper(al, s, current_scope, args, call_name, x.base.base.loc, File "/Users/brian/CLionProjects/lpython/src/lpython/semantics/python_ast_to_asr.cpp", line 1301 ASR::ttype_t* left_type = member_var->m_type; File "/Users/brian/CLionProjects/lpython/src/libasr/asr_utils.h", line 143 return ASR::expr_type0(f); File "/Users/brian/CLionProjects/lpython/src/libasr/asr.h", line 47902 LCOMPILERS_ASSERT(f != nullptr); AssertFailed: f != nullptr
It fails in LPython because empty is ignored. This is a blocker for many issues now. There are several ways to handle this, and I'll discuss this with @certik today.
empty
works in both CP and LP:
Fails in LP but works in CP