Yes. In my hypothetical world where the C compiler makes use of the VLA declaration in the function arguments, it would certainly be possible for the compiler to insert automatic bounds checking in this case:
double f(xs, n)
double xs[n];
size_t n;
{
size_t _tmp0 = g(); /* temporary var created by compiler */
assert(_tmp0 < n); /* bounds check inserted by compiler */
return xs[_tmp0];
}
The key to making this possible is telling the compiler about the relationship between
double* xs and
size_t n; once the compiler has the knowledge that the type of
xs is
double [n] (array of
double with first dimension
n) it would be able to automatically insert dynamic bounds checks.