| /* 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; |
| } |