https://gcc.gnu.org/bugzilla/show_bug.cgi?id=48885
--- Comment #23 from vries at gcc dot gnu.org --- (In reply to jos...@codesourcery.com from comment #22) > On Fri, 25 Sep 2015, vries at gcc dot gnu.org wrote: > > > Standard: "Let D be a declaration of an ordinary identifier that provides a > > means of designating an object P as a restrict-qualified pointer to type T." > > > > Say D is "int *__restrict__ *__restrict__ fpp" > > > > Does this designate as a restrict-qualified pointer": > > 1. both objects fpp and *fpp, or > > Both objects. And also objects fpp[1], fpp[-1], etc., if they exist. Ok, understood. Then indeed this bit of the analysis was missing: Restrict declaration D: "int *__restrict__ *__restrict__ fpp" Type T: int Object P: *fpp (in other words, gp) Block B: f function block Lvalues: *fp and *fp2 Object designated by lvalues: ha Object ha modified during execution of B: yes Object *fpp considered modified during execution of B: yes &Lvalues: pointer expression fp and fp2 &Lvalues based on object P: fp yes, fp2 no. Modifying the value of *fpp during B has no effect on the value of fp2. Conclusion: Invalid example.