aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2004-07-21 09:39:09 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2004-07-21 09:39:09 +0200
commit1ff69cbed5f1d85cb488c915d448d7e17aa581e4 (patch)
tree157995175a8dd4c0fad8c438d8f46f05554e2f79
parent7448a4d2a2320ef30c5bb16771719dae87982b5b (diff)
downloadgcc-1ff69cbed5f1d85cb488c915d448d7e17aa581e4.zip
gcc-1ff69cbed5f1d85cb488c915d448d7e17aa581e4.tar.gz
gcc-1ff69cbed5f1d85cb488c915d448d7e17aa581e4.tar.bz2
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
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.dg/torture/nested-fn-1.c73
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" } } */