https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91501
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- The problem is here: /* Also strip a TARGET_EXPR that would force an extra copy. */ if (TREE_CODE (*arg_p) == TARGET_EXPR) { tree init = TARGET_EXPR_INITIAL (*arg_p); if (init && !VOID_TYPE_P (TREE_TYPE (init))) *arg_p = init; } --- CUT --- We don't do what gimplify_target_expr does: /* Add a clobber for the temporary going out of scope, like gimplify_bind_expr. */