/* PR c/64249 */ /* { dg-do compile } */ /* { dg-options "-Wall" } */ /* { dg-skip-if "PR67819" { *-*-* } } */ #ifndef __cplusplus # define bool _Bool # define true 1 # define false 0 #endif extern int foo (void); int fn1 (int n) { if (n == 1) /* { dg-message "previously used here" } */ return -1; else if (n == 2) return 0; else if (n == 1) /* { dg-warning "duplicated .if. condition" } */ return 1; return 0; } int fn2 (void) { if (4) return 1; else if (4) return 2; #define N 10 if (N) return 3; else if (N) return 4; } int fn3 (int n) { if (n == 42) return 1; if (n == 42) return 2; if (n) if (n) if (n) if (n) return 42; if (!n) return 10; else return 11; } int fn4 (int n) { if (n > 0) { if (n == 1) /* { dg-message "previously used here" } */ return 1; else if (n == 1) /* { dg-warning "duplicated .if. condition" } */ return 2; } else if (n < 0) { if (n < -1) return 6; else if (n < -2) { if (n == -10) /* { dg-message "previously used here" } */ return 3; else if (n == -10) /* { dg-warning "duplicated .if. condition" } */ return 4; } } else return 7; return 0; } struct S { long p, q; }; int fn5 (struct S *s) { if (!s->p) /* { dg-message "previously used here" } */ return 12345; else if (!s->p) /* { dg-warning "duplicated .if. condition" } */ return 1234; return 0; } int fn6 (int n) { if (n) /* { dg-message "previously used here" } */ return n; else if (n) /* { dg-warning "duplicated .if. condition" } */ return n; else if (n) /* { dg-warning "duplicated .if. condition" } */ return n; else if (n) /* { dg-warning "duplicated .if. condition" } */ return n; else if (n) /* { dg-warning "duplicated .if. condition" } */ return n; else if (n) /* { dg-warning "duplicated .if. condition" } */ return n; else if (n) /* { dg-warning "duplicated .if. condition" } */ return n; else if (n) /* { dg-warning "duplicated .if. condition" } */ return n; return 0; } int fn7 (int n) { if (n == 0) /* { dg-message "previously used here" } */ return 10; else if (n == 1) /* { dg-message "previously used here" } */ return 11; else if (n == 2) /* { dg-message "previously used here" } */ return 12; else if (n == 3) /* { dg-message "previously used here" } */ return 13; else if (n == 4) /* { dg-message "previously used here" } */ return 14; else if (n == 5) /* { dg-message "previously used here" } */ return 15; else if (n == 6) /* { dg-message "previously used here" } */ return 16; else if (n == 7) /* { dg-message "previously used here" } */ return 17; else if (n == 0) /* { dg-warning "duplicated .if. condition" } */ return 100; else if (n == 1) /* { dg-warning "duplicated .if. condition" } */ return 101; else if (n == 2) /* { dg-warning "duplicated .if. condition" } */ return 102; else if (n == 3) /* { dg-warning "duplicated .if. condition" } */ return 103; else if (n == 4) /* { dg-warning "duplicated .if. condition" } */ return 104; else if (n == 5) /* { dg-warning "duplicated .if. condition" } */ return 105; else if (n == 6) /* { dg-warning "duplicated .if. condition" } */ return 106; else if (n == 7) /* { dg-warning "duplicated .if. condition" } */ return 107; return 0; } int fn8 (bool b) { if (!b) /* { dg-message "previously used here" } */ return 16; else if (!b) /* { dg-warning "duplicated .if. condition" } */ return 27; else return 64; } int fn9 (int i, int j, int k) { if (i > 0 && j > 0 && k > 0) /* { dg-message "previously used here" } */ return -999; else if (i > 0 && j > 0 && k > 0) /* { dg-warning "duplicated .if. condition" } */ return 999; else return 0; } int fn10 (void) { if (foo ()) return 1732984; else if (foo ()) return 18409; return 0; } int fn11 (int n) { if (++n == 10) return 666; else if (++n == 10) return 9; return 0; }