From: Jakub Jelinek Date: Thu, 17 Feb 2005 23:50:02 +0000 (+0100) Subject: re PR tree-optimization/18947 ([non-UAAT] external inline and normal function of... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=582035999026399da5ccc2d10d8e0a7691040251;p=gcc.git re PR tree-optimization/18947 ([non-UAAT] external inline and normal function of the same name) 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4bc79610871..610d47ac393 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2005-02-18 Jakub Jelinek + + 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 * bt-load.c, cfgloop.c, convert.c, dominance.c, global.c, diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 22b33816caa..b9931602e03 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d03c81fa06f..ccfd4ef6929 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2005-02-18 Jakub Jelinek + + 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 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 index 00000000000..e9717797a10 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20050215-1.c @@ -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 index 00000000000..44550d04ce7 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20050215-2.c @@ -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 index 00000000000..7a35eb6d0c1 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20050215-3.c @@ -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 (); }