summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2005-03-28 14:10:05 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2005-03-28 14:10:05 +0000
commite907e77f77e7d68d8c73f6f5b18a8a3eba52c4fc (patch)
tree354aee552e84dfee7c7daada9782277acd4a1880
parente064592194a7b66a6b64651b601ae08b2ac02868 (diff)
downloadppe42-gcc-e907e77f77e7d68d8c73f6f5b18a8a3eba52c4fc.tar.gz
ppe42-gcc-e907e77f77e7d68d8c73f6f5b18a8a3eba52c4fc.zip
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
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/20050328-1.c24
-rw-r--r--gcc/varasm.c6
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 33a60b1b93b..c07d3c43600 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,9 @@
2005-03-28 Jan Hubicka <jh@suse.cz>
+ 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 447cf20a20e..9e7efa7f4d8 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2005-03-28 Jan Hubicka <jh@suse.cz>
+
+ PR middle-end/20635
+ * compile/gcc.c-torture/compile/20050328-1.c: New testcase made
+ by Jakub Jelinek.
+
2005-03-27 Dorit Naishlos <dorit@il.ibm.com>
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 00000000000..a68574f1fbd
--- /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 9a04cd51ab3..c174eb41414 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,
OpenPOWER on IntegriCloud