From 942a721406dbc28a13b9322a9083e73190d1b28d Mon Sep 17 00:00:00 2001 From: Vipul Cariappa Date: Fri, 14 Jun 2024 18:16:12 +0530 Subject: [PATCH 1/3] fix array symbol duplication in interactive mode --- src/libasr/codegen/asr_to_llvm.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/libasr/codegen/asr_to_llvm.cpp b/src/libasr/codegen/asr_to_llvm.cpp index fc00b0b142..0d92f7377b 100644 --- a/src/libasr/codegen/asr_to_llvm.cpp +++ b/src/libasr/codegen/asr_to_llvm.cpp @@ -2776,9 +2776,11 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor llvm::StructType* array_type = static_cast( llvm_utils->get_type_from_ttype_t_util(x.m_type, module.get())); llvm::Constant *ptr = module->getOrInsertGlobal(x.m_name, array_type); - module->getNamedGlobal(x.m_name)->setInitializer( - llvm::ConstantStruct::get(array_type, - llvm::Constant::getNullValue(array_type))); + if (!external) { + module->getNamedGlobal(x.m_name)->setInitializer( + llvm::ConstantStruct::get(array_type, + llvm::Constant::getNullValue(array_type))); + } llvm_symtab[h] = ptr; } else if (x.m_type->type == ASR::ttypeType::Logical) { llvm::Constant *ptr = module->getOrInsertGlobal(x.m_name, From 8f1e9fea62f26bb8fca7089f6df0dc86036bf874 Mon Sep 17 00:00:00 2001 From: Vipul Cariappa Date: Sat, 15 Jun 2024 18:36:09 +0530 Subject: [PATCH 2/3] add test --- src/lpython/tests/test_llvm.cpp | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/lpython/tests/test_llvm.cpp b/src/lpython/tests/test_llvm.cpp index 055e052dd9..1d5dbf12d5 100644 --- a/src/lpython/tests/test_llvm.cpp +++ b/src/lpython/tests/test_llvm.cpp @@ -1450,6 +1450,23 @@ def my_concat(x: str, y: str) -> str: CHECK(std::strcmp(r.result.str, "Python REPL") == 0); } +TEST_CASE("PythonCompiler Array 1") { + CompilerOptions cu; + cu.po.disable_main = true; + cu.emit_debug_line_column = false; + cu.generate_object_code = false; + cu.interactive = true; + cu.po.runtime_library_dir = LCompilers::LPython::get_runtime_library_dir(); + PythonCompiler e(cu); + LCompilers::Result + r = e.evaluate2("i: i32[10]"); + CHECK(r.ok); + CHECK(r.result.type == PythonCompiler::EvalResult::none); + r = e.evaluate2("print(i)"); + CHECK(r.ok); + CHECK(r.result.type == PythonCompiler::EvalResult::statement); +} + TEST_CASE("PythonCompiler asr verify 1") { CompilerOptions cu; cu.po.disable_main = true; From e41bd29954f08bc209b2292f47adc7fee347997c Mon Sep 17 00:00:00 2001 From: Vipul Cariappa Date: Tue, 2 Jul 2024 19:26:19 +0530 Subject: [PATCH 3/3] update according to code review --- src/lpython/tests/test_llvm.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/lpython/tests/test_llvm.cpp b/src/lpython/tests/test_llvm.cpp index 1d5dbf12d5..945f77c72e 100644 --- a/src/lpython/tests/test_llvm.cpp +++ b/src/lpython/tests/test_llvm.cpp @@ -1459,9 +1459,9 @@ TEST_CASE("PythonCompiler Array 1") { cu.po.runtime_library_dir = LCompilers::LPython::get_runtime_library_dir(); PythonCompiler e(cu); LCompilers::Result - r = e.evaluate2("i: i32[10]"); + r = e.evaluate2("i: i32[10] = empty(10, dtype=int32)"); CHECK(r.ok); - CHECK(r.result.type == PythonCompiler::EvalResult::none); + CHECK(r.result.type == PythonCompiler::EvalResult::statement); r = e.evaluate2("print(i)"); CHECK(r.ok); CHECK(r.result.type == PythonCompiler::EvalResult::statement);