| /* PR optimization/13394 */ |
| /* Origin: Carlo Wood <carlo@gcc.gnu.org> */ |
| |
| /* Verify that a bogus "function does return" warning is not issued |
| in presence of tail recursion within a noreturn function. */ |
| |
| /* { dg-do compile } */ |
| /* { dg-options "-O2 -Wreturn-type -Wmissing-noreturn -fno-ipa-icf" } */ |
| |
| |
| void f(void) __attribute__ ((__noreturn__)); |
| void _exit(int status) __attribute__ ((__noreturn__)); |
| |
| int z = 0; |
| |
| void g() /* { dg-warning "might be candidate" } */ |
| { |
| if (++z > 10) |
| _exit(0); |
| g(); |
| } |
| |
| void f() |
| { |
| if (++z > 10) |
| _exit(0); |
| f(); |
| } /* { dg-bogus "does return" } */ |
| |
| int h() /* { dg-warning "might be candidate" } */ |
| { |
| if (++z > 10) |
| _exit(0); |
| return h(); |
| } /* { dg-bogus "end of non-void function" } */ |
| |
| int k() /* { dg-warning "might be candidate" } */ |
| { |
| if (++z > 10) |
| _exit(0); |
| k(); |
| } /* { dg-warning "control reaches" } */ |