https://gcc.gnu.org/g:bd773888eafe34fb990041462df6d3a3c8a4217d

commit r16-1087-gbd773888eafe34fb990041462df6d3a3c8a4217d
Author: Martin Uecker <uec...@tugraz.at>
Date:   Sun Jun 1 22:30:42 2025 +0200

    c: fix ICE with enum completed with packed attribute after forward decl 
[PR116892]
    
    After forward declaration of an enum and when completing it with the
    attribute packed, we need to propagate TYPE_PACKED to all main variants.
    
            PR c/116892
    
    gcc/c/ChangeLog:
            * c-decl.cc (finish_enum): Propagate TYPE_PACKED.
    
    gcc/testsuite/ChangeLog:
            * gcc.dg/pr116892.c: New test.

Diff:
---
 gcc/c/c-decl.cc                 |  1 +
 gcc/testsuite/gcc.dg/pr116892.c | 11 +++++++++++
 2 files changed, 12 insertions(+)

diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc
index 1008bcaebdc9..2b0bd663ba91 100644
--- a/gcc/c/c-decl.cc
+++ b/gcc/c/c-decl.cc
@@ -10293,6 +10293,7 @@ finish_enum (tree enumtype, tree values, tree 
attributes)
       TYPE_UNSIGNED (tem) = TYPE_UNSIGNED (enumtype);
       TYPE_LANG_SPECIFIC (tem) = TYPE_LANG_SPECIFIC (enumtype);
       ENUM_UNDERLYING_TYPE (tem) = ENUM_UNDERLYING_TYPE (enumtype);
+      TYPE_PACKED (tem) = TYPE_PACKED (enumtype);
     }
 
   /* Finish debugging output for this type.  */
diff --git a/gcc/testsuite/gcc.dg/pr116892.c b/gcc/testsuite/gcc.dg/pr116892.c
new file mode 100644
index 000000000000..7eb431b9573f
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/pr116892.c
@@ -0,0 +1,11 @@
+/* { dg-do compile } */
+/* { dg-options "-g -std=gnu23" } */
+
+enum fmt_type;
+
+void foo(const enum fmt_type a);
+
+enum [[gnu::packed]] fmt_type {
+  A
+} const a;
+

Reply via email to