From 4196ae72a92b44f99f77ac2296d901ddfe1ece04 Mon Sep 17 00:00:00 2001 From: Alexander Romanov Date: Sun, 15 Dec 2024 12:12:35 +0300 Subject: [PATCH] fix: indirect subscript --- src/llvm_codegen/codegen.cpp | 2 +- src/pclc.cc | 1 + test/array/subscript-var.ans | 1 + test/array/subscript-var.pcl | 6 ++++++ test/array/subscript.ans | 3 +++ test/array/subscript.pcl | 7 +++++++ 6 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 test/array/subscript-var.ans create mode 100644 test/array/subscript-var.pcl create mode 100644 test/array/subscript.ans create mode 100644 test/array/subscript.pcl diff --git a/src/llvm_codegen/codegen.cpp b/src/llvm_codegen/codegen.cpp index 942c158..d07381c 100644 --- a/src/llvm_codegen/codegen.cpp +++ b/src/llvm_codegen/codegen.cpp @@ -160,7 +160,7 @@ class codegen_visitor final ); builder.CreateMemSet( arr, Constant::getIntegerValue(Type::getInt8Ty(get_ctx()), APInt(8, 0)), - array_type.size, MaybeAlign() + array_type.size * 4, MaybeAlign() ); return arr; } else diff --git a/src/pclc.cc b/src/pclc.cc index 3fade32..510b75c 100644 --- a/src/pclc.cc +++ b/src/pclc.cc @@ -140,6 +140,7 @@ int main(int argc, char *argv[]) try { }); exec->finalizeObject(); + exec->setVerifyModules(true); exec->runFunction(module_ref.getFunction("main"), {}); auto &Err = exec->getErrorMessage(); diff --git a/test/array/subscript-var.ans b/test/array/subscript-var.ans new file mode 100644 index 0000000..d00491f --- /dev/null +++ b/test/array/subscript-var.ans @@ -0,0 +1 @@ +1 diff --git a/test/array/subscript-var.pcl b/test/array/subscript-var.pcl new file mode 100644 index 0000000..9441ee8 --- /dev/null +++ b/test/array/subscript-var.pcl @@ -0,0 +1,6 @@ +{ + int[5] arr = 0; + arr[1] = 1; + b = (arr[1] + arr[1]) / 2; + print arr[b]; +} diff --git a/test/array/subscript.ans b/test/array/subscript.ans new file mode 100644 index 0000000..4ff96e6 --- /dev/null +++ b/test/array/subscript.ans @@ -0,0 +1,3 @@ +0 +2 +0 diff --git a/test/array/subscript.pcl b/test/array/subscript.pcl new file mode 100644 index 0000000..4567642 --- /dev/null +++ b/test/array/subscript.pcl @@ -0,0 +1,7 @@ +{ + int[2] arr = 0; + print arr[1]; + arr[1] = 2; + print arr[1]; + print arr[0]; +}