Fix PR 63566 part 1
Jan Hubicka
hubicka@ucw.cz
Sun Feb 8 20:10:00 GMT 2015
Hi,
PR63566 after fixing the underlying wrong code issue is about functions with aliases not market local.
This patch prepares cgraphunit for some changes needed to make i386.c aliases safe.
Bootstrapped/regtested x86_64-linux, comitted.
Honza
PR ipa/63566
* cgraphunit.c (cgraph_node::analyze): Be sure target of thunk is
aliases before trying to expand it.
(cgraph_node::expand_thunk): Fix formating.
Index: cgraphunit.c
===================================================================
--- cgraphunit.c (revision 220509)
+++ cgraphunit.c (working copy)
@@ -580,8 +580,19 @@ cgraph_node::analyze (void)
if (thunk.thunk_p)
{
- create_edge (cgraph_node::get (thunk.alias),
- NULL, 0, CGRAPH_FREQ_BASE);
+ cgraph_node *t = cgraph_node::get (thunk.alias);
+
+ create_edge (t, NULL, 0, CGRAPH_FREQ_BASE);
+ /* Target code in expand_thunk may need the thunk's target
+ to be analyzed, so recurse here. */
+ if (!t->analyzed)
+ t->analyze ();
+ if (t->alias)
+ {
+ t = t->get_alias_target ();
+ if (!t->analyzed)
+ t->analyze ();
+ }
if (!expand_thunk (false, false))
{
thunk.alias = NULL;
@@ -1515,7 +1526,8 @@ cgraph_node::expand_thunk (bool output_a
current_function_decl = thunk_fndecl;
/* Ensure thunks are emitted in their correct sections. */
- resolve_unique_section (thunk_fndecl, 0, flag_function_sections);
+ resolve_unique_section (thunk_fndecl, 0,
+ flag_function_sections);
DECL_RESULT (thunk_fndecl)
= build_decl (DECL_SOURCE_LOCATION (thunk_fndecl),
@@ -1568,7 +1580,8 @@ cgraph_node::expand_thunk (bool output_a
current_function_decl = thunk_fndecl;
/* Ensure thunks are emitted in their correct sections. */
- resolve_unique_section (thunk_fndecl, 0, flag_function_sections);
+ resolve_unique_section (thunk_fndecl, 0,
+ flag_function_sections);
DECL_IGNORED_P (thunk_fndecl) = 1;
bitmap_obstack_initialize (NULL);
More information about the Gcc-patches
mailing list