131
|
1 // PR sanitizer/81875
|
|
2 // { dg-do compile }
|
|
3 // { dg-options "-Wreturn-type" }
|
|
4
|
|
5 struct C { C (); ~C (); };
|
|
6
|
|
7 int
|
|
8 f1 (int a, int b)
|
|
9 {
|
|
10 C f;
|
|
11 switch (a)
|
|
12 {
|
|
13 case 0:
|
|
14 switch (b)
|
|
15 {
|
|
16 case 13:
|
|
17 return 7;
|
|
18 case 24:
|
|
19 return 19;
|
|
20 default:
|
|
21 return 0;
|
|
22 }
|
|
23 break;
|
|
24 default:
|
|
25 return 0;
|
|
26 case 9:
|
|
27 return 17;
|
|
28 }
|
|
29 } // { dg-bogus "control reaches end of non-void function" }
|
|
30
|
|
31 int
|
|
32 f2 (int a, int b, int c, int d)
|
|
33 {
|
|
34 C f;
|
|
35 switch (a)
|
|
36 {
|
|
37 case 0:
|
|
38 switch (b)
|
|
39 {
|
|
40 case 13:
|
|
41 while (c >= 10)
|
|
42 {
|
|
43 if (c == d)
|
|
44 break;
|
|
45 c--;
|
|
46 }
|
|
47 return 7;
|
|
48 case 29:
|
|
49 switch (d)
|
|
50 {
|
|
51 case 35:
|
|
52 break;
|
|
53 default:
|
|
54 return 9;
|
|
55 }
|
|
56 return 8;
|
|
57 case 24:
|
|
58 do
|
|
59 {
|
|
60 if (c == d)
|
|
61 break;
|
|
62 c--;
|
|
63 }
|
|
64 while (c >= 10);
|
|
65 return 19;
|
|
66 default:
|
|
67 for (int e = 0; e < c; ++e)
|
|
68 if (e == d)
|
|
69 break;
|
|
70 return 0;
|
|
71 }
|
|
72 break;
|
|
73 default:
|
|
74 return 0;
|
|
75 case 9:
|
|
76 return 17;
|
|
77 }
|
|
78 } // { dg-bogus "control reaches end of non-void function" }
|
|
79
|
|
80 template <int N>
|
|
81 int
|
|
82 f3 (int a, int b)
|
|
83 {
|
|
84 C f;
|
|
85 switch (a)
|
|
86 {
|
|
87 case 0:
|
|
88 switch (b)
|
|
89 {
|
|
90 case 13:
|
|
91 return 7;
|
|
92 case 24:
|
|
93 return 19;
|
|
94 default:
|
|
95 return 0;
|
|
96 }
|
|
97 break;
|
|
98 default:
|
|
99 return 0;
|
|
100 case 9:
|
|
101 return 17;
|
|
102 }
|
|
103 } // { dg-bogus "control reaches end of non-void function" }
|
|
104
|
|
105 template <int N>
|
|
106 int
|
|
107 f4 (int a, int b, int c, int d)
|
|
108 {
|
|
109 C f;
|
|
110 switch (a)
|
|
111 {
|
|
112 case 0:
|
|
113 switch (b)
|
|
114 {
|
|
115 case 13:
|
|
116 while (c >= 10)
|
|
117 {
|
|
118 if (c == d)
|
|
119 break;
|
|
120 c--;
|
|
121 }
|
|
122 return 7;
|
|
123 case 29:
|
|
124 switch (d)
|
|
125 {
|
|
126 case 35:
|
|
127 break;
|
|
128 default:
|
|
129 return 9;
|
|
130 }
|
|
131 return 8;
|
|
132 case 24:
|
|
133 do
|
|
134 {
|
|
135 if (c == d)
|
|
136 break;
|
|
137 c--;
|
|
138 }
|
|
139 while (c >= 10);
|
|
140 return 19;
|
|
141 default:
|
|
142 for (int e = 0; e < c; ++e)
|
|
143 if (e == d)
|
|
144 break;
|
|
145 return 0;
|
|
146 }
|
|
147 break;
|
|
148 default:
|
|
149 return 0;
|
|
150 case 9:
|
|
151 return 17;
|
|
152 }
|
|
153 } // { dg-bogus "control reaches end of non-void function" }
|
|
154
|
|
155 int
|
|
156 f5 (int a, int b)
|
|
157 {
|
|
158 return f3 <0> (a, b);
|
|
159 }
|
|
160
|
|
161 int
|
|
162 f6 (int a, int b, int c, int d)
|
|
163 {
|
|
164 return f4 <2> (a, b, c, d);
|
|
165 }
|