http://gcc.gnu.org/bugzilla/show_bug.cgi?id=60649
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> --- Code wise, one has rtx y; ((void) (!(((enum machine_mode) (x)->mode) == VOIDmode) ? fancy_abort ("../../gcc/explow.c", 87, __FUNCTION__), 0 : 0)); restart: code = ((enum rtx_code) (x)->code); y = x; And in test.ii.004t.gimple: struct rtx_def * y; ... D.2460 = x->mode; if (D.2460 != 0) goto <D.2461>; else goto <D.2462>; <D.2461>: fancy_abort ("../../gcc/explow.c", 87, &__FUNCTION__); <D.2462>: restart: D.2463 = x->code; code = (rtx_code) D.2463; y = x; But in test.ii.169t.optimized: struct rtx_def * y_lsm.5; struct rtx_def * y; ... _6 = x_5(D)->mode; if (_6 != 0) goto <bb 5>; else goto <bb 6>; <bb 5>: __builtin___asan_handle_no_return (); fancy_abort ("../../gcc/explow.c", 87, &__FUNCTION__); <bb 6>: y_lsm.5_80 = y; // <<<<<<<<<<<<<< # x_1 = PHI <x_5(D)(6), x_10(12)> # y_lsm.5_8 = PHI <y_lsm.5_80(6), x_1(12)> restart: ... if (_39 != 0) goto <bb 8>; else goto <bb 9>; <bb 8>: # y_lsm.5_87 = PHI <y_lsm.5_8(7)> # _88 = PHI <_29(7)> y = y_lsm.5_87; __builtin___asan_report_load2 (_88);