You could pass a pointer to the array instead of letting it decay:
int get(int n, char (*buffer)[n]) { return buffer[10]; }
int main() { char buffer[10]; get(10, &buffer); }
Then a run-time bounds checker or a model checker can find the bug: https://godbolt.org/z/a4ExKMn1s