diff options
author | Jan Hubicka <jh@suse.cz> | 2008-06-18 15:42:36 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2008-06-18 13:42:36 +0000 |
commit | f0c882ab6fcf7595b5d12203a9840202167d45f1 (patch) | |
tree | 0f7aeaefa2ec493bdcf33125095f31469d281db5 /gcc | |
parent | ff2c88a5611bfb610de62937e762457124747d3c (diff) | |
download | gcc-f0c882ab6fcf7595b5d12203a9840202167d45f1.zip gcc-f0c882ab6fcf7595b5d12203a9840202167d45f1.tar.gz gcc-f0c882ab6fcf7595b5d12203a9840202167d45f1.tar.bz2 |
cgraph.h (cgraph_mark_if_needed): New function.
* cgraph.h (cgraph_mark_if_needed): New function.
* cgraphunit.c (cgraph_mark_if_needed): New function.
* c-decl.c (duplicate_decl): Use it.
From-SVN: r136893
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/c-decl.c | 4 | ||||
-rw-r--r-- | gcc/cgraph.h | 1 | ||||
-rw-r--r-- | gcc/cgraphunit.c | 12 |
4 files changed, 21 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 32fb7e8..743b89b 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2008-06-16 Jan Hubicka <jh@suse.cz> + * cgraph.h (cgraph_mark_if_needed): New function. + * cgraphunit.c (cgraph_mark_if_needed): New function. + * c-decl.c (duplicate_decl): Use it. + +2008-06-16 Jan Hubicka <jh@suse.cz> + * cgraph.c (cgraph_add_new_function): When in expansion state, do lowering. diff --git a/gcc/c-decl.c b/gcc/c-decl.c index 89fdf3d..38c1581 100644 --- a/gcc/c-decl.c +++ b/gcc/c-decl.c @@ -1913,9 +1913,9 @@ merge_decls (tree newdecl, tree olddecl, tree newtype, tree oldtype) /* If we changed a function from DECL_EXTERNAL to !DECL_EXTERNAL, and the definition is coming from the old version, cgraph needs to be called again. */ - if (extern_changed && !new_is_definition + if (extern_changed && !new_is_definition && TREE_CODE (olddecl) == FUNCTION_DECL && DECL_INITIAL (olddecl)) - cgraph_finalize_function (olddecl, false); + cgraph_mark_if_needed (olddecl); } /* Handle when a new declaration NEWDECL has the same name as an old diff --git a/gcc/cgraph.h b/gcc/cgraph.h index b537cb5..dda2a18 100644 --- a/gcc/cgraph.h +++ b/gcc/cgraph.h @@ -331,6 +331,7 @@ void cgraph_add_new_function (tree, bool); /* In cgraphunit.c */ void cgraph_finalize_function (tree, bool); +void cgraph_mark_if_needed (tree); void cgraph_finalize_compilation_unit (void); void cgraph_optimize (void); void cgraph_mark_needed_node (struct cgraph_node *); diff --git a/gcc/cgraphunit.c b/gcc/cgraphunit.c index 7c0db40..dec2213 100644 --- a/gcc/cgraphunit.c +++ b/gcc/cgraphunit.c @@ -642,6 +642,18 @@ cgraph_finalize_function (tree decl, bool nested) do_warn_unused_parameter (decl); } +/* C99 extern inline keywords allow changing of declaration after function + has been finalized. We need to re-decide if we want to mark the function as + needed then. */ + +void +cgraph_mark_if_needed (tree decl) +{ + struct cgraph_node *node = cgraph_node (decl); + if (node->local.finalized && decide_is_function_needed (node, decl)) + cgraph_mark_needed_node (node); +} + /* Verify cgraph nodes of given cgraph node. */ void verify_cgraph_node (struct cgraph_node *node) |