From e907e77f77e7d68d8c73f6f5b18a8a3eba52c4fc Mon Sep 17 00:00:00 2001 From: hubicka Date: Mon, 28 Mar 2005 14:10:05 +0000 Subject: [PATCH] PR middle-end/20635 * varasm.c (mark_decl_referenced): Do not mark extern inline functions as needed. * compile/gcc.c-torture/compile/20050328-1.c: New testcase made by Jakub Jelinek. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@97133 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 4 ++++ gcc/testsuite/ChangeLog | 6 ++++++ gcc/testsuite/gcc.c-torture/compile/20050328-1.c | 24 ++++++++++++++++++++++++ gcc/varasm.c | 6 +++++- 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/20050328-1.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 33a60b1..c07d3c4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2005-03-28 Jan Hubicka + PR middle-end/20635 + * varasm.c (mark_decl_referenced): Do not mark extern inline functions + as needed. + * tree-inline.c (estimate_num_insns_1): Use declaration to discover argument types where possible. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 447cf20..9e7efa7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2005-03-28 Jan Hubicka + + PR middle-end/20635 + * compile/gcc.c-torture/compile/20050328-1.c: New testcase made + by Jakub Jelinek. + 2005-03-27 Dorit Naishlos PR tree-optimization/20626 diff --git a/gcc/testsuite/gcc.c-torture/compile/20050328-1.c b/gcc/testsuite/gcc.c-torture/compile/20050328-1.c new file mode 100644 index 0000000..a68574f --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/20050328-1.c @@ -0,0 +1,24 @@ +void fn1 (void *); +void fn2 (void *); +void foo (void); +void bar (void); + +extern inline void * +baz (void) +{ + return 0; +} + +void +foo (void) +{ + fn1 (baz ()); + fn2 (baz ()); +} + +void +bar (void) +{ + fn1 (baz ()); + fn2 (baz); +} diff --git a/gcc/varasm.c b/gcc/varasm.c index 9a04cd5..c174eb4 100644 --- a/gcc/varasm.c +++ b/gcc/varasm.c @@ -1877,7 +1877,11 @@ void mark_decl_referenced (tree decl) { if (TREE_CODE (decl) == FUNCTION_DECL) - cgraph_mark_needed_node (cgraph_node (decl)); + { + /* Extern inline functions don't become needed when referenced. */ + if (!DECL_EXTERNAL (decl)) + cgraph_mark_needed_node (cgraph_node (decl)); + } else if (TREE_CODE (decl) == VAR_DECL) cgraph_varpool_mark_needed_node (cgraph_varpool_node (decl)); /* else do nothing - we can get various sorts of CST nodes here, -- 2.7.4