Fix member access through function call results
authorRobert Pengelly <robertapengelly@hotmail.com>
Thu, 17 Sep 2026 07:02:00 +0000 (08:02 +0100)
committerRobert Pengelly <robertapengelly@hotmail.com>
Thu, 17 Sep 2026 07:02:00 +0000 (08:02 +0100)
amd64.c
i386.c

diff --git a/amd64.c b/amd64.c
index 233a0272a895e4ec8467afefee5138eb764bce9d..e2f07d813ea98f1f4fda07bdaf6e28e58234dcdd 100644 (file)
--- a/amd64.c
+++ b/amd64.c
@@ -22067,6 +22067,14 @@ static void emit_load_assignment_rhs_to_reg (const char *reg) {
             
             emit_call_identifier_to_reg_now (name, reg, name_start, name_caret, name_line);
             
+            /*
+             * A postfix member chain after a function call starts from the
+             * function's pointed-to type.  Do not leave the member walker
+             * using stale metadata from an earlier expression.
+             */
+            postfix_copy_lvalue_size = get_global_symbol_pointed_size (name);
+            postfix_copy_lvalue_tag_name = get_global_symbol_tag_name (name);
+            
             if (tok.kind == TOK_LBRACK) {
             
                 int subscript_pointer_depth = get_global_symbol_pointer_depth (name);
diff --git a/i386.c b/i386.c
index 07cdc534404fce8482d7224327d65c806a803882..f9e93341378c2a33cc383d756612f60e51f7263b 100644 (file)
--- a/i386.c
+++ b/i386.c
@@ -20742,6 +20742,14 @@ static void emit_load_assignment_rhs_to_reg (const char *reg) {
             
             emit_call_identifier_to_reg_now (name, reg, name_start, name_caret, name_line);
             
+            /*
+             * A postfix member chain after a function call starts from the
+             * function's pointed-to type.  Do not leave the member walker
+             * using stale metadata from an earlier expression.
+             */
+            postfix_copy_lvalue_size = get_global_symbol_pointed_size (name);
+            postfix_copy_lvalue_tag_name = get_global_symbol_tag_name (name);
+            
             if (tok.kind == TOK_LBRACK) {
             
                 int subscript_pointer_depth = get_global_symbol_pointer_depth (name);