re PR middle-end/15345 ([non-unit-at-a-time] unreferenced nested inline functions...
authorJakub Jelinek <jakub@redhat.com>
Wed, 21 Jul 2004 07:39:09 +0000 (09:39 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 21 Jul 2004 07:39:09 +0000 (09:39 +0200)
PR middle-end/15345
PR c/16450
* gcc.dg/torture/nested-fn-1.c: New test.

From-SVN: r84999

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/nested-fn-1.c [new file with mode: 0644]

index 424bfd810317924f73bf1a7ea44aec5dbd489027..5f1915d6875b427738ed92b5c7cf1f7fa55df408 100644 (file)
@@ -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 (file)
index 0000000..a396def
--- /dev/null
@@ -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" } } */