https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108520
--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Slightly cleaned up testcase: static void foo () {} struct S { void (*f) (); }; [[gnu::nonnull (1)]] void bar (void *x) { struct S a[3] = { { foo }, { foo }, { foo } }; for (struct S *i = a, *e = a + 3; i != e; i++) { [[assume (i->f)]]; i->f (); } }