I do not have the original C99 (that is, ISO9899:1999) text; I only have a copy of ISO9899:2007:TC3. I expect this text, taken from page 111 of that document, is very similar to the text in the C99 standard.
6.7.3.1 Formal definition of restrict
...
10. EXAMPLE 3
The function parameter declarations
void h(int n, int * restrict p, int * restrict q, int * restrict r)
{
int i;
for (i = 0; i < n; i++)
p[i] = q[i] + r[i];
}
illustrate how an unmodified object can be aliased through two restricted
pointers. In particular, if a and b are disjoint arrays, a call of the form
h(100, a, b, b) has defined behavior, because array b is not modified within
function h.
This seems to clearly call out functions of the form you asked about as having defined behavior, provided the aliased pointers are used for read-only access. Writing through either of the aliased pointers would invoke undefined behavior.
const
ness will impact that. – Wendtdot_product
is the usual definition of a dot product then I don't think it will matter. That is, violatingrestrict
should not matter if you only perform read operations on the pointer. It is only when you write that I would expect issues to occur. – Wendtdot_product
seems a very specific example function, is this question about read-only usage of aliasedrestrict
pointers? I assume it is, since read-write usage is clearly undefined. – Wendt