I have a question regarding restricted pointer assignments. See the comments in code for specific questions. Overall, I’m just wondering what’s legal with restrict (I’ve read the standard, but still have questions 🙁
int* Q = malloc(sizeof(int)*100);
{
int* restrict R = Q;
for(int j = 0; j < rand()%50; j++)
{
R[j] = rand();
}
Q = R; // The standard says assigning restricted child pointers to their parent is illegal.
// If Q was a restricted pointer, is it correct to assume that this would be ILLEGAL?
//
// Since Q is unrestricted, is this a legal assignment?
//
// I guess I'm just wondering:
// What's the appropriate way to carry the value of R out of the block so
// the code can continue where the above loop left off?
}
{
int* S = Q; // unrestricted child pointers, continuing where R left off above
int* T = Q+1; // S and T alias with these assignments
for(int j = 0; j < 50; j++)
{
S[j] = T[j];
}
}
Thanks for your help!
Since the object being modified (the array allocated in first line) isn’t modified through an lvalue expression except involving the restricted pointer,
Rin that block whereRis declared, I think that the code in your example is well-defined.If
Qwere a restricted pointer, the example would be undefined.