/* PR c/64279 */ /* { dg-do compile } */ /* { dg-options "-Wduplicated-branches -O2" } */ extern void foo (int); extern int g; extern int a[10]; int f (int i, int *p) { const int j = 0; if (j == 0) { if (i > 10) /* { dg-warning "this condition has identical branches" } */ /* Optimizers can figure out that this is 1. */ *p = j * 2 + 1; else *p = 1; } if (i) ; else ; if (i == 0) /* { dg-warning "this condition has identical branches" } */ return 0; else return 0; if (i == 1) /* { dg-warning "this condition has identical branches" } */ { g = 10; } else { g = 10; } const char *s; if (i == 2) /* { dg-warning "this condition has identical branches" } */ s = "foo"; else s = "foo"; if (i == 3) /* { dg-warning "this condition has identical branches" } */ g = a[i]; else g = a[i]; if (i == 4) /* { dg-warning "this condition has identical branches" } */ return i ? 1 : g; else return i ? 1 : g; if (i == 5) /* { dg-warning "this condition has identical branches" } */ { { { { g++; } } } } else { { { { g++; } } } } if (i == 6) /* { dg-warning "this condition has identical branches" } */ g = i * 6; else g = i * 6; /* Don't warn. */ if (i == 7) g = i / 6; else g = 6 / i; if (i == 8) /* { dg-warning "this condition has identical branches" } */ return i * 8 * i * 8; else return i * 8 * i * 8; if (i == 9) /* { dg-warning "this condition has identical branches" } */ { p++; return *p; } else { p++; return *p; } /* Don't warn. */ if (i == 10) return *++p; else return ++*p; if (i == 11) /* { dg-warning "this condition has identical branches" } */ { foo (6); } else { foo (6); } if (i == 12) /* { dg-warning "this condition has identical branches" } */ { foo (6 + i), foo (2); } else { foo (6 + i), foo (2); } if (i == 13) /* { dg-warning "this condition has identical branches" } */ p += (g + 1); else p += (g + 1); if (i == 14) /* { dg-warning "this condition has identical branches" } */ { foo (7); *p = 0; foo (9); } else { foo (7); *p = 0; foo (9); } if (i == 15) /* { dg-warning "this condition has identical branches" } */ p += (g + (1 + 2)); else p += (g + (1 + 1 + 1)); if (i == 16) /* { dg-warning "this condition has identical branches" } */ foo (10 + g); else foo (g + 10); if (i == 17) /* { dg-warning "this condition has identical branches" } */ ({ foo (i); }); else ({ foo (i); }); if (i == 18) { if (i == 19) { if (i == 20) /* { dg-warning "this condition has identical branches" } */ foo (++i); else foo (++i); } } /* Don't warn. */ if (i == 21) { foo (1); foo (2); } else { foo (2); foo (1); } return 0; }