Hi, r13-1104-gf4c3ce32fa54c1 introduced a regression, which had an accidental self assignment of TYPE_PACKED when it should have been assigned to the type's variants. This patch fixes that.
Bootstrapped and regression tested on x86_64-linux-gnu/-m32, committed to mainline, and backported to releases/gcc-14 and releases/gcc-13. Regards, Iain. --- PR d/117621 gcc/d/ChangeLog: * types.cc (finish_aggregate_type): Propagate TYPE_PACKED to variants. gcc/testsuite/ChangeLog: * gdc.dg/pr117621.d: New test. --- gcc/d/types.cc | 2 +- gcc/testsuite/gdc.dg/pr117621.d | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gdc.dg/pr117621.d diff --git a/gcc/d/types.cc b/gcc/d/types.cc index 47ef66c2580..98074f1fb68 100644 --- a/gcc/d/types.cc +++ b/gcc/d/types.cc @@ -704,7 +704,7 @@ finish_aggregate_type (unsigned structsize, unsigned alignsize, tree type) TYPE_LANG_SPECIFIC (t) = TYPE_LANG_SPECIFIC (type); TYPE_SIZE (t) = TYPE_SIZE (type); TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (type); - TYPE_PACKED (type) = TYPE_PACKED (type); + TYPE_PACKED (t) = TYPE_PACKED (type); SET_TYPE_ALIGN (t, TYPE_ALIGN (type)); TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (type); } diff --git a/gcc/testsuite/gdc.dg/pr117621.d b/gcc/testsuite/gdc.dg/pr117621.d new file mode 100644 index 00000000000..f0b96cbff2c --- /dev/null +++ b/gcc/testsuite/gdc.dg/pr117621.d @@ -0,0 +1,11 @@ +// { dg-do "compile" } +// { dg-options "-g" } +void pr117621() +{ + auto fun()(inout int) + { + struct S {} + return inout(S)(); + } + auto s = fun(0); +} -- 2.43.0