https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111276
--- Comment #6 from Andrew Pinski <pinskia at gcc dot gnu.org> --- So the reason why the patch for PR111422 used to work is because before we had: _43 = _42 + 18446744073709551615; _44 = &g + _43; *_44 = 8; But with the change here we get: _9 = (unsigned long) &g; _84 = _9 + 18446744073709551615; _11 = _42 + _84; _44 = (signed char *) _11; Before we walked to _44 but not back further so in the new case we don't look at _9. I wonder if we could get a case which failed before; though maybe we don't since we canonicalize `(a ptr+ b) ptr+ c` into `a ptr+ (b + c)`.