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_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) 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() 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)); }