Checked C seems to allow the bounds of a variable p local to a function f to depend on a global variable x. If f calls a function that changes x, then p is not consistent with the new value of x, which can lead to a spatial safety violation. Example:
#pragma CHECKED_SCOPE on
#include <stdlib.h>
size_t global_len;
void change_global_len(void) {
global_len = 100000000;
}
int main(void) {
global_len = 100;
_Array_ptr<char> local_ptr : count(global_len) = malloc<char>(global_len);
// Doing this directly would cause a compile error.
//global_len = 100000000;
// No error, and local_ptr no longer meets its declared bound.
change_global_len();
for (size_t i = 0; i < global_len; i++)
local_ptr[i]++; // SIGSEGV
return 0;
}