restrict
gcc 5 も clang 3.6も、 で呼び出された場合でも、修飾子の制約に違反している場合に警告を発しません-Wall
。次のコード フラグメントを検討してください。
extern void f(char *restrict p, char *restrict q);
void g(char *p)
{
f(p, p);
}
-Wall
単純に、違反は静的に判断できると予想し、警告が表示されることを期待していました。どこかでフラグを見逃したのでしょうか、それとも表示されていない警告を出すことに何か問題がありますか?