https://gcc.gnu.org/g:72d85f2163306c8ba234d228d8071ed368cbd2f2
commit r13-9445-g72d85f2163306c8ba234d228d8071ed368cbd2f2 Author: Iain Buclaw <ibuc...@gdcproject.org> Date: Sun Mar 23 12:57:27 2025 +0100 d: Fix ICE type variant differs by TYPE_PACKED [PR117621] Introduced by r13-1104-gf4c3ce32fa54c1, which had an accidental self assignment of TYPE_PACKED when it should have been assigned to the type's variants. 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. (cherry picked from commit a12dd79ff4e469652be6d8ef501e1d70178b44cd) Diff: --- gcc/d/types.cc | 2 +- gcc/testsuite/gdc.dg/pr117621.d | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/gcc/d/types.cc b/gcc/d/types.cc index 05050f9edd02..32b322c87190 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 000000000000..f0b96cbff2cd --- /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); +}