1 /* PR optimization/13394 */
2 /* Origin: Carlo Wood <carlo@gcc.gnu.org> */
3 
4 /* Verify that a bogus "function does return" warning is not issued
5    in presence of tail recursion within a noreturn function.  */
6 
7 /* { dg-do compile } */
8 /* { dg-options "-O2 -Wreturn-type -Wmissing-noreturn" } */
9 
10 
11 void f(void) __attribute__ ((__noreturn__));
12 void _exit(int status) __attribute__ ((__noreturn__));
13 
14 int z = 0;
15 
g()16 void g() /* { dg-warning "might be candidate" } */
17 {
18   if (++z > 10)
19     _exit(0);
20   g();
21 }
22 
f()23 void f()
24 {
25   if (++z > 10)
26     _exit(0);
27   f();
28 }             /* { dg-bogus "does return" } */
29 
h()30 int h() /* { dg-warning "might be candidate" } */
31 {
32   if (++z > 10)
33     _exit(0);
34   return h();
35 }             /* { dg-bogus "end of non-void function" } */
36 
k()37 int k() /* { dg-warning "might be candidate" } */
38 {
39   if (++z > 10)
40     _exit(0);
41   k();
42 }             /* { dg-warning "control reaches" } */
43