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 } ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^