Skip to content

Commit d731c7a

Browse files
authored
Merge pull request #1835 from certik/abs_fix
RTL: fix an issue with abs()
2 parents 9ea4f58 + c3c52db commit d731c7a

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

src/libasr/runtime/lfortran_intrinsics.c

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -794,32 +794,44 @@ LFORTRAN_API char* _lfortran_int_to_str8(int64_t num)
794794
LFORTRAN_API int32_t _lpython_bit_length1(int8_t num)
795795
{
796796
int32_t res = 0;
797-
num = abs(num);
798-
for(; num; num >>= 1, res++);
797+
num = abs((int)num);
798+
while (num > 0) {
799+
num = num >> 1;
800+
res++;
801+
}
799802
return res;
800803
}
801804

802805
LFORTRAN_API int32_t _lpython_bit_length2(int16_t num)
803806
{
804807
int32_t res = 0;
805-
num = abs(num);
806-
for(; num; num >>= 1, res++);
808+
num = abs((int)num);
809+
while (num > 0) {
810+
num = num >> 1;
811+
res++;
812+
}
807813
return res;
808814
}
809815

810816
LFORTRAN_API int32_t _lpython_bit_length4(int32_t num)
811817
{
812818
int32_t res = 0;
813-
num = abs(num);
814-
for(; num; num >>= 1, res++);
819+
num = abs((int)num);
820+
while (num > 0) {
821+
num = num >> 1;
822+
res++;
823+
}
815824
return res;
816825
}
817826

818827
LFORTRAN_API int32_t _lpython_bit_length8(int64_t num)
819828
{
820829
int32_t res = 0;
821830
num = llabs(num);
822-
for(; num; num >>= 1, res++);
831+
while (num > 0) {
832+
num = num >> 1;
833+
res++;
834+
}
823835
return res;
824836
}
825837

@@ -1114,7 +1126,7 @@ LFORTRAN_API int32_t _lfortran_ishft32(int32_t i, int32_t shift) {
11141126
if(shift > 0) {
11151127
return i << shift;
11161128
} else if(shift < 0) {
1117-
return i >> abs(shift);
1129+
return i >> abs((int)shift);
11181130
} else {
11191131
return i;
11201132
}

0 commit comments

Comments
 (0)