| /* PR middle-end/pr42363, extended from the test for PR middle-end/37913. */ |
| /* { dg-do compile } */ |
| /* { dg-options "-g" } */ |
| |
| void foo (void) __attribute__ ((noreturn)); |
| |
| static int __attribute__ ((noreturn)) |
| bar (void) |
| { |
| foo (); |
| } |
| |
| int |
| baz (void) |
| { |
| int i = bar (); |
| return i + 1; |
| } |
| |
| int fooz (void) __attribute__ ((noreturn)); |
| |
| static int __attribute__ ((noreturn)) |
| bart (void) |
| { |
| return fooz (); /* { dg-warning "noreturn" } */ |
| } |
| |
| int bazr (void) |
| { |
| int i = bart (); |
| return i + 1; |
| } |
| |
| static inline int |
| bard (void) |
| { |
| return fooz (); |
| } |
| |
| int bizr (void) |
| { |
| int i, j; |
| |
| i = j = bard (); |
| |
| return i + 1; |
| } |
| |
| /* This might be regarded as pure and folded, rather than inlined. |
| It's pure evil. */ |
| static int __attribute__ ((pure, const, noreturn)) |
| barf (void) |
| { |
| } /* { dg-warning "does return" } */ |
| |
| static int __attribute__ ((pure, const)) |
| bark (void) |
| { |
| barf (); |
| } |
| |
| int buzr (void) |
| { |
| int i, j; |
| |
| i = j = bark () + bark (); |
| |
| return i + 1; |
| } |
| |
| int buzt (void) |
| { |
| int i, j; |
| |
| i = j = barf () + barf (); |
| |
| return i + 1; |
| } |
| |
| void bust (void) |
| { |
| while (barf ()) |
| ; |
| } |