https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113314
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Note a volatile memory location change even without this being multi-threaded; an async signal (USR1..USR4, or ALRM, etc.) could come in and change the value. Or the memory could be shared memory between 2 different processes; though I suspect in that case you want to use atomics.