First off, more warnings for dubious uses of `restrict` seem valuable to me. 
The two warnings you suggest seem like good ideas. Some thoughts:

I don't think cast expressions are the right thing to target here. The same 
issue applies to compound literals, new-expressions, and so on. `restrict` only 
has meaning when used in "a declaration of an ordinary identifier that provides 
a means of designating an object P", so perhaps we should warn on it (at least 
at the top level) in all cases where it's not part of such a declaration (and 
can't be indirectly part of a declaration, such as if it's in a typedef or 
template argument).

Taking the address of a `restrict`-qualified pointer has weird semantics, and 
perhaps deserves a warning. For instance:

  int *restrict a = &...;
  int **p = &a;
  *a = 1;
  int k = **p;

... is fine, even though `a` is accessed through a non-`restrict`-qualified 
pointer, because `*q` is based on `a`.

Similarly, declaring an object of a type that has a non-top-level `restrict` 
qualifier also has weird semantics, and we should perhaps warn on that.

Perhaps we should also warn on copying a `restrict`-qualified pointer to a 
non-`restrict`-qualified pointer, since that also seems like a very common 
error.

http://reviews.llvm.org/D5872



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to