Hi, On Thu, 13 Oct 2011, Jakub Jelinek wrote:
> On Thu, Oct 13, 2011 at 02:57:56PM +0200, Michael Matz wrote: > > struct S {int * restrict p;}; > > void foo (struct S *s, struct S *t) { > > s->p[0] = 0; > > t->p[0] = 1; // undefined if s->p == t->p; the caller was responsible > > // to not do that > > This is undefined only if s->p == t->p && &s->p != &t->p. If both > s->p and t->p designate the same restricted pointer object, > it is fine. Yeah. But I continue to think that this reading is against the intent (or should be). All the examples in the standard and rationale never say anything about pointers to restricted objects and the problematic cases one can construct with them, i.e. that one restricted pointer object might have different names. That leads me to think that this aspect simply was overlooked or thought to be irrelevant. I'm leaning towards (for C) to ignore restrict qualifications on all indirectly accessed or address-taken objects. Or better not to ignore the restrict but make them conflict with all other pointers, restrict or non-restrict (normally non-restrict and restrict don't conflict in theory, although for GCC they do). Ciao, Michael.