Hello. After IRC discussion, IPA ICF will set local flag to false for both original and node that becomes an alias. That will enforce equal calling convention to be use.
i686-pc-linux bootstrap has been still running, I will commit the fix as soon as it finishes. I consider it as pre-approved. Thanks you, Martin
gcc/ChangeLog: 2014-10-17 Martin Liska <mli...@suse.cz> * ipa-icf.c (sem_function::merge): Local flags are set to false to enforce equal calling convention to be used. * opts.c (common_handle_option): Indentation fix.
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c index f7510b3..0e6bd9a 100644 --- a/gcc/ipa-icf.c +++ b/gcc/ipa-icf.c @@ -630,6 +630,11 @@ sem_function::merge (sem_item *alias_item) cgraph_node::create_alias (alias_func->decl, decl); alias->resolve_alias (original); + /* Workaround for PR63566 that forces equal calling convention + to be used. */ + alias->local.local = false; + original->local.local = false; + if (dump_file) fprintf (dump_file, "Callgraph alias has been created.\n\n"); } diff --git a/gcc/opts.c b/gcc/opts.c index dc8ddf4..3054196 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -1982,8 +1982,8 @@ common_handle_option (struct gcc_options *opts, break; case OPT_fipa_icf: - opts->x_flag_ipa_icf_functions = value; - opts->x_flag_ipa_icf_variables = value; + opts->x_flag_ipa_icf_functions = value; + opts->x_flag_ipa_icf_variables = value; break; default: