http://gcc.gnu.org/bugzilla/show_bug.cgi?id=49367
Summary: missed optimization with __restrict field Product: gcc Version: 4.7.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: trivial Priority: P3 Component: tree-optimization AssignedTo: unassig...@gcc.gnu.org ReportedBy: ja...@gcc.gnu.org GCC fails to optimize away the call to g() in this C testcase. It should recognize that since we've established that a1 is different from a2, their pointer fields must also be disjoint. This is necessary to be able to improve optimization of C++ container classes, which currently have worse performance than raw restricted pointers. typedef struct A { int *__restrict p; } A; void g(); void f (A* a1, A* a2) { if (a1 == a2) return; *a1->p = 0; *a2->p = 1; if (*a1->p != 0) g(); } int main() { A a,b; f (&a,&b); }