Fix i386 narrowing casts of 64-bit struct members
authorRobert Pengelly <robertapengelly@hotmail.com>
Mon, 28 Sep 2026 04:37:36 +0000 (05:37 +0100)
committerRobert Pengelly <robertapengelly@hotmail.com>
Mon, 28 Sep 2026 04:37:36 +0000 (05:37 +0100)
i386.c

diff --git a/i386.c b/i386.c
index bcdc45e88bd169da504d56179defd7b0cca28a27..49d11c45546fd751a23d966c7e4145234052c6e9 100644 (file)
--- a/i386.c
+++ b/i386.c
@@ -18581,6 +18581,14 @@ static void emit_load_assignment_rhs_to_reg (const char *reg) {
             
             } else {
             
+                if (postfix_member_seen && postfix_member_pointer_depth == 0 && postfix_member_size == (DATA_LLONG & 0x1f) &&
+                    cast_base_size <= (DATA_PTR & 0x1f) && !postfix_member_is_floating) {
+                
+                    emit_load_deref_reg_now (reg, DATA_INT & 0x1f);
+                    postfix_member_size = DATA_INT & 0x1f;
+                
+                }
+                
                 emit_apply_integer_cast_to_reg_now (reg, cast_base_size, cast_is_unsigned);
                 clear_rhs_last_pointer_info ();