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. However, an alternative (less useful) interpretation is that volatile completely overrides restrict: where restrict would allow the compiler to cache *p1 in a local register and therefore volatile would prevent this. [A completely non-useful interpretation would be that restrict would override volatile and that *p1 would be register cached even though that memory might be changed by HW or another thread...] I haven't been able to deduce which of the above applies from general documentation and thought I'd ask people with more expertise in this area. 2) I would expect the compiler to generate a warning for the second foo() call below, but it's completely silent even with -Wall. Is there a reason no warning is generated other than this just hasn't been implemented yet? int foo(unsigned int& __restrict__ v1, unsigned int& __restrict__ v2) { ... } int a,b,c; foo(a,b); foo(c,c); Thanks in advance for any enlightenment here. -KQ ------------------------------------------------- This mail sent through IMP: http://horde.org/imp/