https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83660
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- I think the issue is that gimplify_cleanup_point_expr when walking the body_sequence to look for WCE stmts doesn't traverse GIMPLE_BIND sub-stmts. Or it is not supposed to do that and the GENERIC is at fault, mis-matching cleanup_points somehow: <<cleanup_point return <retval> = { const unsigned int _B1 = 32; <<cleanup_point const unsigned int _B1 = 32;>>; *((unsigned int *) &TARGET_EXPR <D.3230, NON_LVALUE_EXPR <v>> + 8); }>>; here the outer cleanup_point is relevant, and the stmt expression generating the GIMPLE_BIND. Is there a cleanup_point missing in that scope? Other than that I don't know very much of this logic.