diff options
Diffstat (limited to 'gcc/testsuite/gcc.dg/torture/pr42363.c')
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/pr42363.c | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/torture/pr42363.c b/gcc/testsuite/gcc.dg/torture/pr42363.c new file mode 100644 index 000000000..9c9da1373 --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr42363.c @@ -0,0 +1,84 @@ +/* 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 ()) + ; +} |