https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105651
--- Comment #15 from Richard Biener <rguenth at gcc dot gnu.org> --- Note on trunk we get things way less optimized and end up with <bb 32> [local count: 695302893]: __x.38_144 = (long unsigned int) " "; __y.39_145 = (long unsigned int) _137; if (__x.38_144 < __y.39_145) goto <bb 34>; [50.00%] else goto <bb 33>; [50.00%] <bb 33> [local count: 347651447]: _146 = _137 + _128; __x.38_147 = (long unsigned int) _146; if (__x.38_147 < __x.38_144) goto <bb 34>; [50.00%] else goto <bb 39>; [50.00%] and ptr_derefs_may_alias_p doesn't work there because to relate _137 and " " points-to info would need to track STRING_CSTs but it doesn't do that (we simply drop knowledge here, see find_what_var_points_to string_id handling).