https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105705
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Summary|std::equal triggers |[12/13 Regression] |incorrect -Wnonnull warning |std::equal triggers | |incorrect -Wnonnull warning Target Milestone|--- |12.2 --- Comment #1 from Andrew Pinski <pinskia at gcc dot gnu.org> --- if (_14 != _15) goto <bb 19>; [50.00%] else goto <bb 16>; [50.00%] ... <bb 16> [local count: 507317172]: _50 = _15 - _14; if (_50 != 0) goto <bb 17>; [50.00%] else goto <bb 18>; [50.00%] <bb 17> [local count: 253658586]: _51 = (long unsigned int) _50; _52 = __builtin_memcmp (_14, 0B, _51); _53 = _52 == 0; <bb 18> [local count: 507317172]: # _54 = PHI <1(16), _53(17)> The function call is in an unreachable basic block. Since _15 == _14 holds true in bb16, _50 == 0 will hold true. so bb 17 is never entered. Looks like a pass ordering issue ...