
int TestData[10];

int g;
void global() {
    g = 1000;
    TestData[g] = 0; // BUG
}

int garr[10];
void global_array() {
    garr[3] = 1000;
    TestData[garr[3]] = 0; // BUG
}

int *gp;
void global_pointer() {
    *gp = 1000;
    TestData[*gp] = 0; // BUG
}


void local() {
    int x;
    x = 1000;
    TestData[x] = 0; // BUG
}

void local_array() {
    int arr[10];
    arr[3] = 1000;
    TestData[arr[3]] = 0; // BUG
}

void local_alias_1() {
    int x;
    int *p = &x;
    *p = 1000;
    TestData[*p] = 0; // BUG
}

void local_alias_2() {
    int x;
    int *p = &x;
    x = 1000;
    TestData[*p] = 0; // BUG
}

struct ABC {
    int a;
    int b[10];
    int c;
};

void struct_member_init() {
    struct ABC abc = {1000,{0},3};
    TestData[abc.a] = 0; // BUG
}

void struct_member_assign(struct ABC *abc) {
    abc->a = 1000;
    TestData[abc->a] = 0; // BUG
}

void struct_arraymember(struct ABC *abc) {
    abc->b[3] = 1000;
    TestData[abc->b[3]] = 0; // BUG
}
