From 1ff69cbed5f1d85cb488c915d448d7e17aa581e4 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 21 Jul 2004 09:39:09 +0200 Subject: [PATCH] re PR middle-end/15345 ([non-unit-at-a-time] unreferenced nested inline functions not optimized away) PR middle-end/15345 PR c/16450 * gcc.dg/torture/nested-fn-1.c: New test. From-SVN: r84999 --- gcc/testsuite/ChangeLog | 6 ++ gcc/testsuite/gcc.dg/torture/nested-fn-1.c | 73 ++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 gcc/testsuite/gcc.dg/torture/nested-fn-1.c diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 424bfd81031..5f1915d6875 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2004-07-21 Jakub Jelinek + + PR middle-end/15345 + PR c/16450 + * gcc.dg/torture/nested-fn-1.c: New test. + 2004-07-20 H.J. Lu 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 00000000000..a396def7eaa --- /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" } } */ -- 2.30.2