[m-rev.] for review: Don't cast int32/uint32 to MR_Word in foreign code input assignments.
Peter Wang
novalazy at gmail.com
Thu Oct 1 14:13:29 AEST 2026
This fixes gcc warnings on 64-bit platforms of the form:
warning: overflow in conversion from ‘long long unsigned int’ to
‘int32_t’ {aka ‘int’} changes value from ‘18446744071562067968’ to
‘-2147483648’ [-Woverflow]
for the generated code:
I32 = ((MR_Word) INT32_MIN);
compiler/llds_out_instr.m:
In output_foreign_proc_inputs, output int32/uint32 input values
without a cast to MR_Word.
diff --git a/compiler/llds_out_instr.m b/compiler/llds_out_instr.m
index 9eb99e26af..d2b69bacb9 100644
--- a/compiler/llds_out_instr.m
+++ b/compiler/llds_out_instr.m
@@ -2010,13 +2010,20 @@ output_foreign_proc_input(Info, Stream, Input, !IO) :-
BuiltinType = builtin_type_float,
output_rval_as_type(Info, Rval, lt_float, Stream, !IO)
;
- BuiltinType = builtin_type_int(int_type_int64),
- output_rval_as_type(Info, Rval,
- lt_int(int_type_int64), Stream, !IO)
- ;
- BuiltinType = builtin_type_int(int_type_uint64),
- output_rval_as_type(Info, Rval,
- lt_int(int_type_uint64), Stream, !IO)
+ (
+ BuiltinType = builtin_type_int(int_type_int32),
+ DesiredType = lt_int(int_type_int32)
+ ;
+ BuiltinType = builtin_type_int(int_type_uint32),
+ DesiredType = lt_int(int_type_uint32)
+ ;
+ BuiltinType = builtin_type_int(int_type_int64),
+ DesiredType = lt_int(int_type_int64)
+ ;
+ BuiltinType = builtin_type_int(int_type_uint64),
+ DesiredType = lt_int(int_type_uint64)
+ ),
+ output_rval_as_type(Info, Rval, DesiredType, Stream, !IO)
;
( BuiltinType = builtin_type_char
; BuiltinType = builtin_type_int(int_type_int)
@@ -2025,8 +2032,6 @@ output_foreign_proc_input(Info, Stream, Input, !IO) :-
; BuiltinType = builtin_type_int(int_type_uint8)
; BuiltinType = builtin_type_int(int_type_int16)
; BuiltinType = builtin_type_int(int_type_uint16)
- ; BuiltinType = builtin_type_int(int_type_int32)
- ; BuiltinType = builtin_type_int(int_type_uint32)
),
output_rval_as_type(Info, Rval, lt_word, Stream, !IO)
)
--
2.54.0
More information about the reviews
mailing list