https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89497
--- Comment #18 from Richard Biener <rguenth at gcc dot gnu.org> --- GIMPLE testcase that doesn't fail, possibly because of NOPs or because of missing range info or whatever... typedef struct { char array[81]; } container; container *get(); int guard = 0; container c; void __GIMPLE (startwith("vrp1")) d () { long unsigned int len2; container * a; char * _1; int _18; int i_19; bb_2: a_6 = get (); if (a_6 != _Literal (struct container *) 0) goto bb_3; else goto bb_8; bb_3: _18 = guard; if (_18 != 0) goto bb_5; else goto bb_4; bb_4: ; bb_5: i_19 = __PHI (bb_3: 0, bb_4: 1); _1 = &a_6->array[0]; len2_15 = __builtin_strlen (&c.array); if (len2_15 > 81ul) goto bb_6; else goto bb_7; bb_6: ; bb_7: len2_17 = __PHI (bb_5: len2_15, bb_6: 81ul); __builtin_memmove (_1, &c.array, len2_17); bb_8: return; }