https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104274
--- Comment #3 from David Malcolm <dmalcolm at gcc dot gnu.org> ---
In theory,
3978 gimplify_assign (local, parm, &stmts);
ought to be generating a "pl.0 = pl;" assignment, but we're hitting this case
in gimplify_modify_expr:
VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV
5927 /* For empty types only gimplify the left hand side and right hand
5928 side as statements and throw away the assignment. Do this after
5929 gimplify_modify_expr_rhs so we handle TARGET_EXPRs of addressable
5930 types properly. */
5931 if (is_empty_type (TREE_TYPE (*from_p))
5932 && !want_value
5933 /* Don't do this for calls that return addressable types,
expand_call
5934 relies on those having a lhs. */
5935 && !(TREE_ADDRESSABLE (TREE_TYPE (*from_p))
5936 && TREE_CODE (*from_p) == CALL_EXPR))
(gdb)
5937 {
5938 gimplify_stmt (from_p, pre_p);
5939 gimplify_stmt (to_p, pre_p);
5940 *expr_p = NULL_TREE;
5941 return GS_ALL_DONE;
5942 }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^