/* More sequence point warning tests */ /* { dg-do compile } */ /* { dg-options "-Wsequence-point" } */ struct s { struct s *nxt; int v; } q; int x[10]; int foo(int *p) { int i = 0; /* Test general-lvalue sequence point warnings */ (*p) = (*p)++; /* { dg-warning "undefined" "sequence point warning" } */ p[3] = p[3]++; /* { dg-warning "undefined" "sequence point warning" } */ p[i] = p[i]++; /* { dg-warning "undefined" "sequence point warning" } */ x[3] = x[3]++; /* { dg-warning "undefined" "sequence point warning" } */ q.nxt->nxt->v = q.nxt->nxt->v++; /* { dg-warning "undefined" "sequence point warning" } */ /* test expressions that appear elsewhere in the C grammar */ { int a = i-i++; (void)a;} /* { dg-warning "undefined" "sequence point warning" } */ if ((i-i++) != 0) /* { dg-warning "undefined" "sequence point warning" } */ return i-i++; /* { dg-warning "undefined" "sequence point warning" } */ for (i-i++;;) /* { dg-warning "undefined" "sequence point warning" } */ ; for (; (i-i++) != 0; ) /* { dg-warning "undefined" "sequence point warning" } */ ; for (;;i-i++) /* { dg-warning "undefined" "sequence point warning" } */ ; while ((i-i++) != 0) /* { dg-warning "undefined" "sequence point warning" } */ ; do {} while ((i-i++) != 0); /* { dg-warning "undefined" "sequence point warning" } */ switch (i-i++) { /* { dg-warning "undefined" "sequence point warning" } */ case 0: return 1; } return 0; }