On Thu, Mar 06, 2025 at 09:50:33AM +0100, Richard Biener wrote:
> The following testcase runs into a re-gimplification issue during
> inlining when processing
>
> MEM[(struct e *)this_2(D)].a = {};
>
> where re-gimplification does not handle assignments in the same
> way than the gimplifier but instead relies on rhs_predicate_for
> and gimplifying the RHS standalone. This fails to handle
> special-casing of CTORs. The is_gimple_mem_rhs_or_call predicate
> already handles clobbers but not empty CTORs so we end up in
> the fallback code trying to force the CTOR into a separate stmt
> using a temporary - but as we have a non-copyable type here that ICEs.
>
> The following generalizes empty CTORs in is_gimple_mem_rhs_or_call
> since those need no additional re-gimplification.
>
> Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.
>
> Richard.
>
> PR middle-end/119119
> * gimplify.cc (is_gimple_mem_rhs_or_call): All empty CTORs
> are OK when not a register type.
>
> * g++.dg/torture/pr11911.C: New testcase.
LGTM.
Jakub