re PR tree-optimization/18947 ([non-UAAT] external inline and normal function of...
authorJakub Jelinek <jakub@redhat.com>
Thu, 17 Feb 2005 23:50:02 +0000 (00:50 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Thu, 17 Feb 2005 23:50:02 +0000 (00:50 +0100)
PR tree-optimization/18947
* cgraphunit.c (cgraph_finalize_function): When redefining an extern
inline, remove all nodes that are inlined into the extern inline
being redefined.

* gcc.c-torture/compile/20050215-1.c: New test.
* gcc.c-torture/compile/20050215-2.c: New test.
* gcc.c-torture/compile/20050215-3.c: New test.

From-SVN: r95207

gcc/ChangeLog
gcc/cgraphunit.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/20050215-1.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/20050215-2.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/compile/20050215-3.c [new file with mode: 0644]

index 4bc796108713508b5b56bfb1ed8924fb4bef95ce..610d47ac393f5aa49fe1318ee13e74e8dfa370db 100644 (file)
@@ -1,3 +1,10 @@
+2005-02-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/18947
+       * cgraphunit.c (cgraph_finalize_function): When redefining an extern
+       inline, remove all nodes that are inlined into the extern inline
+       being redefined.
+
 2005-02-17  Kazu Hirata  <kazu@cs.umass.edu>
 
        * bt-load.c, cfgloop.c, convert.c, dominance.c, global.c,
index 22b33816caa70cceb7cf863e9642c04d3e25b170..b9931602e0386cee9233aab6b07369bd9afad837 100644 (file)
@@ -346,6 +346,16 @@ cgraph_finalize_function (tree decl, bool nested)
       memset (&node->rtl, 0, sizeof (node->rtl));
       node->analyzed = false;
       node->local.redefined_extern_inline = true;
+
+      if (!flag_unit_at_a_time)
+       {
+         struct cgraph_node *n;
+
+         for (n = cgraph_nodes; n; n = n->next)
+           if (n->global.inlined_to == node)
+             cgraph_remove_node (n);
+       }
+
       while (node->callees)
        cgraph_remove_edge (node->callees);
 
index d03c81fa06f84a6d24a691886b67b2264ba6a114..ccfd4ef6929469d9653371cf6c4e548e2a3b9122 100644 (file)
@@ -1,3 +1,10 @@
+2005-02-18  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/18947
+       * gcc.c-torture/compile/20050215-1.c: New test.
+       * gcc.c-torture/compile/20050215-2.c: New test.
+       * gcc.c-torture/compile/20050215-3.c: New test.
+
 2005-02-17  Alexandre Oliva  <aoliva@redhat.com>
 
        PR c++/20028
diff --git a/gcc/testsuite/gcc.c-torture/compile/20050215-1.c b/gcc/testsuite/gcc.c-torture/compile/20050215-1.c
new file mode 100644 (file)
index 0000000..e971779
--- /dev/null
@@ -0,0 +1,4 @@
+/* PR tree-optimization/18947 */
+extern __inline void f1 (void) { }
+extern __inline void f2 (void) { f1 (); }
+void f2 (void) {}
diff --git a/gcc/testsuite/gcc.c-torture/compile/20050215-2.c b/gcc/testsuite/gcc.c-torture/compile/20050215-2.c
new file mode 100644 (file)
index 0000000..44550d0
--- /dev/null
@@ -0,0 +1,7 @@
+/* PR tree-optimization/18947 */
+int v;
+extern __inline void f1 (void) { v++; }
+void f4 (void) { f1 (); }
+extern __inline void f2 (void) { f1 (); }
+void f3 (void) { f2 (); }
+void f2 (void) { f1 (); }
diff --git a/gcc/testsuite/gcc.c-torture/compile/20050215-3.c b/gcc/testsuite/gcc.c-torture/compile/20050215-3.c
new file mode 100644 (file)
index 0000000..7a35eb6
--- /dev/null
@@ -0,0 +1,8 @@
+/* PR tree-optimization/18947 */
+int v;
+extern __inline void f0 (void) { v++; }
+extern __inline void f1 (void) { f0 (); }
+void f4 (void) { f1 (); }
+extern __inline void f2 (void) { f1 (); }
+void f3 (void) { f2 (); }
+void f2 (void) { f1 (); }