https://gcc.gnu.org/bugzilla/show_bug.cgi?id=125501
--- Comment #11 from Richard Biener <rguenth at gcc dot gnu.org> ---
So we somehow have recorded a non-null global range for a5_16:
void f11 (int64_t a0, void * a4, void * a5)
{
# PT = nonlocal null
void * a4_14(D) = a4;
# PT = nonlocal
void * a5_16(D) = a5;
which DOM2 records. The pass before (thread1) still has
void f11 (int64_t a0, void * a4, void * a5)
{
# PT = nonlocal null
void * a4_14(D) = a4;
# PT = nonlocal null
void * a5_16(D) = a5;
disabling only DOM2 is enough to fix things. So the logic is likely
that a4 != 0 (in the outer loop header) and the inner loop exit
is if (!(a4 == a5)) __builtin_unreachable (); and thus a5 is not NULL,
but only when a4 != 0, so not sure why we think we can set that
as global range?