diff options
Diffstat (limited to 'gcc/testsuite')
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/torture/nested-fn-1.c | 73 |
2 files changed, 79 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 424bfd8..5f1915d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2004-07-21 Jakub Jelinek <jakub@redhat.com> + + PR middle-end/15345 + PR c/16450 + * gcc.dg/torture/nested-fn-1.c: New test. + 2004-07-20 H.J. Lu <hongjiu.lu@intel.com> PR target/16559 diff --git a/gcc/testsuite/gcc.dg/torture/nested-fn-1.c b/gcc/testsuite/gcc.dg/torture/nested-fn-1.c new file mode 100644 index 0000000..a396def --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/nested-fn-1.c @@ -0,0 +1,73 @@ +/* PR middle-end/15345, c/16450 */ +/* Test whether unused nested functions aren't emitted into the assembly. */ +/* { dg-do compile } */ +/* { dg-options "-g0" } */ + +int +fn1 (int x) +{ + int i = x; + inline __attribute__((always_inline)) int + should_not_appear1 (void) + { + return i; + } + return should_not_appear1 (); +} + +int +fn2 (int x) +{ + int i = x; + inline __attribute__((always_inline)) int + should_not_appear2 (void) + { + return i; + } + return x; +} + +extern void check (void *p); + +int +fn3 (int x) +{ + int i = x; + inline int + should_appear1 (void) + { + char *p = __builtin_alloca (i); + check (p); + return i; + } + return should_appear1 (); +} + +int +fn4 (int x) +{ + int i = x; + inline int + should_not_appear3 (void) + { + char *p = __builtin_alloca (i); + check (p); + return i; + } + return 0 ? should_not_appear3 () : 1; +} + +int +fn5 (int x) +{ + int i = x; + inline int + should_appear2 (void) + { + return i; + } + check (should_appear2); + return i; +} + +/* { dg-final { scan-assembler-not "should_not_appear" } } */ |