From: Iain Buclaw Date: Sun, 23 Mar 2025 11:57:27 +0000 (+0100) Subject: d: Fix ICE type variant differs by TYPE_PACKED [PR117621] X-Git-Tag: releases/gcc-14.3.0~360 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e4e7d446ec3efba0c70bebfa9ba6385c233ef083;p=thirdparty%2Fgcc.git 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 --git a/gcc/d/types.cc b/gcc/d/types.cc index 9fa2f888cb2..02f69af166d 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); +}