Fixed structure tag tracking for aggregate member declarations
authorRobert Pengelly <robertapengelly@hotmail.com>
Mon, 7 Sep 2026 13:17:37 +0000 (14:17 +0100)
committerRobert Pengelly <robertapengelly@hotmail.com>
Mon, 7 Sep 2026 13:17:37 +0000 (14:17 +0100)
parse.c

diff --git a/parse.c b/parse.c
index 17fdae44c22ba7cec48d52a783550e73ae8658f8..1706e24f6710f931d0dab3684ed87577c009f4ed 100644 (file)
--- a/parse.c
+++ b/parse.c
@@ -3577,6 +3577,18 @@ void parse_type_spec (void) {
             parsed_type_has_tag = has_tag;
             parsed_type_is_packed = aggregate_is_packed;
             
+            /*
+             * Parsing member declarations may replace parsed_type_tag_name
+             * with the type of the last member.  Restore the enclosing
+             * aggregate tag before its typedef/declarator is recorded.
+             */
+            if (has_tag && tag_name) {
+            
+                strncpy (parsed_type_tag_name, tag_name, sizeof (parsed_type_tag_name) - 1);
+                parsed_type_tag_name[sizeof (parsed_type_tag_name) - 1] = '\0';
+            
+            }
+            
             clear_parsed_fields ();
 
             if (is_union) {