1 /* PR c/64249 */
2 /* { dg-do compile } */
3 /* { dg-options "-Wall" } */
4 /* { dg-skip-if "PR67819" { *-*-* } } */
5 
6 #ifndef __cplusplus
7 # define bool _Bool
8 # define true 1
9 # define false 0
10 #endif
11 
12 extern int foo (void);
13 
14 int
fn1(int n)15 fn1 (int n)
16 {
17   if (n == 1) /* { dg-message "previously used here" } */
18     return -1;
19   else if (n == 2)
20     return 0;
21   else if (n == 1) /* { dg-warning "duplicated .if. condition" } */
22     return 1;
23   return 0;
24 }
25 
26 int
fn2(void)27 fn2 (void)
28 {
29   if (4)
30     return 1;
31   else if (4)
32     return 2;
33 
34 #define N 10
35   if (N)
36     return 3;
37   else if (N)
38     return 4;
39 }
40 
41 int
fn3(int n)42 fn3 (int n)
43 {
44   if (n == 42)
45     return 1;
46   if (n == 42)
47     return 2;
48 
49   if (n)
50     if (n)
51       if (n)
52 	if (n)
53 	  return 42;
54 
55   if (!n)
56     return 10;
57   else
58     return 11;
59 }
60 
61 int
fn4(int n)62 fn4 (int n)
63 {
64   if (n > 0)
65     {
66       if (n == 1) /* { dg-message "previously used here" } */
67 	return 1;
68       else if (n == 1) /* { dg-warning "duplicated .if. condition" } */
69 	return 2;
70     }
71   else if (n < 0)
72     {
73       if (n < -1)
74 	return 6;
75       else if (n < -2)
76 	{
77 	  if (n == -10) /* { dg-message "previously used here" } */
78 	    return 3;
79 	  else if (n == -10) /* { dg-warning "duplicated .if. condition" } */
80 	    return 4;
81 	}
82     }
83   else
84     return 7;
85   return 0;
86 }
87 
88 struct S { long p, q; };
89 
90 int
fn5(struct S * s)91 fn5 (struct S *s)
92 {
93   if (!s->p) /* { dg-message "previously used here" } */
94     return 12345;
95   else if (!s->p) /* { dg-warning "duplicated .if. condition" } */
96     return 1234;
97   return 0;
98 }
99 
100 int
fn6(int n)101 fn6 (int n)
102 {
103   if (n) /* { dg-message "previously used here" } */
104     return n;
105   else if (n) /* { dg-warning "duplicated .if. condition" } */
106     return n;
107   else if (n) /* { dg-warning "duplicated .if. condition" } */
108     return n;
109   else if (n) /* { dg-warning "duplicated .if. condition" } */
110     return n;
111   else if (n) /* { dg-warning "duplicated .if. condition" } */
112     return n;
113   else if (n) /* { dg-warning "duplicated .if. condition" } */
114     return n;
115   else if (n) /* { dg-warning "duplicated .if. condition" } */
116     return n;
117   else if (n) /* { dg-warning "duplicated .if. condition" } */
118     return n;
119   return 0;
120 }
121 
122 int
fn7(int n)123 fn7 (int n)
124 {
125   if (n == 0) /* { dg-message "previously used here" } */
126     return 10;
127   else if (n == 1) /* { dg-message "previously used here" } */
128     return 11;
129   else if (n == 2) /* { dg-message "previously used here" } */
130     return 12;
131   else if (n == 3) /* { dg-message "previously used here" } */
132     return 13;
133   else if (n == 4) /* { dg-message "previously used here" } */
134     return 14;
135   else if (n == 5) /* { dg-message "previously used here" } */
136     return 15;
137   else if (n == 6) /* { dg-message "previously used here" } */
138     return 16;
139   else if (n == 7) /* { dg-message "previously used here" } */
140     return 17;
141   else if (n == 0) /* { dg-warning "duplicated .if. condition" } */
142     return 100;
143   else if (n == 1) /* { dg-warning "duplicated .if. condition" } */
144     return 101;
145   else if (n == 2) /* { dg-warning "duplicated .if. condition" } */
146     return 102;
147   else if (n == 3) /* { dg-warning "duplicated .if. condition" } */
148     return 103;
149   else if (n == 4) /* { dg-warning "duplicated .if. condition" } */
150     return 104;
151   else if (n == 5) /* { dg-warning "duplicated .if. condition" } */
152     return 105;
153   else if (n == 6) /* { dg-warning "duplicated .if. condition" } */
154     return 106;
155   else if (n == 7) /* { dg-warning "duplicated .if. condition" } */
156     return 107;
157   return 0;
158 }
159 
160 int
fn8(bool b)161 fn8 (bool b)
162 {
163   if (!b) /* { dg-message "previously used here" } */
164     return 16;
165   else if (!b) /* { dg-warning "duplicated .if. condition" } */
166     return 27;
167   else
168     return 64;
169 }
170 
171 int
fn9(int i,int j,int k)172 fn9 (int i, int j, int k)
173 {
174   if (i > 0 && j > 0 && k > 0) /* { dg-message "previously used here" } */
175     return -999;
176   else
177   if (i > 0 && j > 0 && k > 0) /* { dg-warning "duplicated .if. condition" } */
178     return 999;
179   else
180     return 0;
181 }
182 
183 int
fn10(void)184 fn10 (void)
185 {
186   if (foo ())
187     return 1732984;
188   else if (foo ())
189     return 18409;
190   return 0;
191 }
192 
193 int
fn11(int n)194 fn11 (int n)
195 {
196   if (++n == 10)
197     return 666;
198   else if (++n == 10)
199     return 9;
200   return 0;
201 }
202