https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93848
--- Comment #10 from Martin Sebor <msebor at gcc dot gnu.org> --- An array is implicitly converted to a pointer; it's not an lvalue. But I think we're splitting hairs. I agree we want a warning for passing past-the-end pointers to functions that might inadvertently dereference it; I plan to implement it for GCC 11. The reference in int a[1][4]; printf("%p\n", (void *)&a[1][1]); is of course undefined, but when the warning sees the address-of operator it allows off-by-one indices. That's necessary only for the rightmost index but not otherwise. The missing warning here is the subject of pr84079. I have a simple fix that handles this case.