Just use array properly and you get run-time bounds checking:
https://godbolt.org/z/4a45xq5hr
(yes, a bit more compiler support is necessary to make this safe. I posted a patch to GCC, let's see)
(yes, a bit more compiler support is necessary to make this safe. I posted a patch to GCC, let's see)
I never knew that you got runtime bounds-checking with VLAs.
Do you have a link that explains this snippet in more detail? Why/how does it work?
It doesn't appear to work with non-VLAs though.
If you replace the sizes with constants it also works: https://godbolt.org/z/sKPW6zT87
The safety story is not complete though: If you pass the wrong size to 'foo' this is not detected (this is easy to add to compilers and I submitted a patch to GCC which would do this): https://godbolt.org/z/T8844e1z8
(ASAN still catches the problem in this case, but ASAN does not work consistently and has a high run-time overhead.)