what kind of psychopath even came up with int a[ROWS][COLS] = { 0, 1, 2, 3, 4, 5, 6, 7 };
it's even obviously caught by -Wall (-Wmissing-braces) for both clang and gcc
(oh, actually, g++ fails to recognize it even though gcc and clang do recognize it)
sometimes the latter part is also caught by -fsanitize=undefined, though that goes away if you wrap the array access like so:
printf("%d\n", ((int*)a[0])[i]);
(which I'm unsure if that's still undefined behavior, not that it's any more sane even if it isn't)