[ Redirected to gcc-help ] quick@xxxxxxxxx wrote: > > I have two questions regarding the use on __restrict__ qualifiers for function > arguments in C++: > > 1) How does it interact with volatile? > > Example, given: > > void foo(volatile int* __restrict__ p1, > volatile int* __restrict__ p2) > { > *p1 = 3; > if (*p1 == 5) ...; > *p2 = 4; > } > > The most desireable for me would be that restrict would indicate that *p1 and > *p2 were disjoint and allow reordering statement 3 to execute before either > preceeding statement, but that volatile would indicate that the if expression > would need to re-fetch *p1 and not assume the results of the first statement. It doesn't matter. According to the definition of restrict in C99 [1], During each execution of [Block] B, let L be any lvalue that has &L based on P. If L is used to access the value of the object X that it designates, and X is also modified (by any means), then the following requirements apply: T shall not be const-qualified. Every other lvalue used to access the value of X shall also have its address based on P. Every access that modifies X shall be considered also to modify P, for the purposes of this subclause." So, if you access L other than via an address based on P, your program is undefined, volatile notwithstanding. [1] ISO/IEC 9899:1999 6.7.3.1 Formal definition of restrict Andrew.