[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