From 4649261dbe2f9ce3ff5818f0dcdab563d8623193 Mon Sep 17 00:00:00 2001 From: Smit-create Date: Tue, 18 Jul 2023 13:31:12 +0530 Subject: [PATCH 1/3] Fix unsigned int to int cast --- src/libasr/codegen/asr_to_llvm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/libasr/codegen/asr_to_llvm.cpp b/src/libasr/codegen/asr_to_llvm.cpp index 8648ecb027..f451d55eb0 100644 --- a/src/libasr/codegen/asr_to_llvm.cpp +++ b/src/libasr/codegen/asr_to_llvm.cpp @@ -6329,7 +6329,7 @@ class ASRToLLVMVisitor : public ASR::BaseVisitor arg_kind != dest_kind ) { if (dest_kind > arg_kind) { - tmp = builder->CreateSExt(tmp, llvm_utils->getIntType(dest_kind)); + tmp = builder->CreateZExt(tmp, llvm_utils->getIntType(dest_kind)); } else { tmp = builder->CreateTrunc(tmp, llvm_utils->getIntType(dest_kind)); } From c7b8de2a4ff2aff0fef62a0889249b2d3c895fd0 Mon Sep 17 00:00:00 2001 From: Smit-create Date: Tue, 18 Jul 2023 13:37:04 +0530 Subject: [PATCH 2/3] Add tests --- integration_tests/CMakeLists.txt | 1 + integration_tests/test_unsigned_03.py | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) create mode 100644 integration_tests/test_unsigned_03.py diff --git a/integration_tests/CMakeLists.txt b/integration_tests/CMakeLists.txt index b854115b4b..87c12177bc 100644 --- a/integration_tests/CMakeLists.txt +++ b/integration_tests/CMakeLists.txt @@ -574,6 +574,7 @@ RUN(NAME test_unary_op_05 LABELS cpython llvm c) # unsigned unary minus, plus RUN(NAME test_unary_op_06 LABELS cpython llvm c) # unsigned unary bitnot RUN(NAME test_unsigned_01 LABELS cpython llvm c) # unsigned bitshift left, right RUN(NAME test_unsigned_02 LABELS cpython llvm c) +RUN(NAME test_unsigned_03 LABELS cpython llvm c) RUN(NAME test_bool_binop LABELS cpython llvm c) RUN(NAME test_issue_518 LABELS cpython llvm c NOFAST) RUN(NAME structs_01 LABELS cpython llvm c) diff --git a/integration_tests/test_unsigned_03.py b/integration_tests/test_unsigned_03.py new file mode 100644 index 0000000000..2bc0eaeac2 --- /dev/null +++ b/integration_tests/test_unsigned_03.py @@ -0,0 +1,19 @@ +from lpython import u16, i32, u8, u16, u64, i64, u32, i8 + +# test issue 2174 + +def f(): + u: u16 = u16(32768) + assert i32(u) == 32768 + u1: u8 = u8(23) + assert i8(u1) == i8(23) + assert u16(u1) == u16(23) + assert u32(u1) == u32(23) + assert u64(u1) == u64(23) + print(i8(u1), u16(u1), u32(u1), u64(u1)) + assert i64(u1) == i64(23) + assert i64(u) == i64(32768) + assert i32(u1) == 23 + print(i64(u), i32(u)) + +f() From 6dc605a3d5cd5b934c9d2ddd03663c2dd51707d5 Mon Sep 17 00:00:00 2001 From: Smit-create Date: Tue, 18 Jul 2023 15:39:06 +0530 Subject: [PATCH 3/3] Add test with asserts --- integration_tests/test_unsigned_02.py | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/integration_tests/test_unsigned_02.py b/integration_tests/test_unsigned_02.py index d880ff9193..ad7f938249 100644 --- a/integration_tests/test_unsigned_02.py +++ b/integration_tests/test_unsigned_02.py @@ -1,10 +1,15 @@ -from lpython import u16, i32 +from lpython import u16, i32, u8, u32, u64 # test issue 2170 -i : i32 -u : u16 = u16(32768) -x : i32 +u_1 : u16 = u16(32768) +u_2 : u8 = u8(24) +u_3 : u32 = u32(32768) +u_4 : u64 = u64(32768) -for i in range(i32(u)): - x = i * 2 +assert u_1 == u16(32768) +assert u_2 == u8(24) +assert u_3 == u32(32768) +assert u_4 == u64(32768) + +print(u_1, u_2, u_3, u_4)