> 2018-04-16 Martin Liska <mli...@suse.cz> > > * multiple_target.c (create_dispatcher_calls): Set apostrophes > for target_clone error message. Make default implementation > clone to be a local declaration. > (separate_attrs): Add new argument and check for an emptry > string. > (expand_target_clones): Handle it. > (ipa_target_clone): Make redirection just for target_clones > functions. > > gcc/testsuite/ChangeLog: > > 2018-04-16 Martin Liska <mli...@suse.cz> > > * g++.dg/ext/pr85329-2.C: New test. > * g++.dg/ext/pr85329.C: New test. > * gcc.target/i386/mvc12.c: New test. > --- > gcc/multiple_target.c | 55 > ++++++++++++++++++++++++++--------- > gcc/testsuite/g++.dg/ext/pr85329-2.C | 22 ++++++++++++++ > gcc/testsuite/g++.dg/ext/pr85329.C | 19 ++++++++++++ > gcc/testsuite/gcc.target/i386/mvc12.c | 11 +++++++ > 4 files changed, 93 insertions(+), 14 deletions(-) > create mode 100644 gcc/testsuite/g++.dg/ext/pr85329-2.C > create mode 100644 gcc/testsuite/g++.dg/ext/pr85329.C > create mode 100644 gcc/testsuite/gcc.target/i386/mvc12.c > > diff --git a/gcc/multiple_target.c b/gcc/multiple_target.c > index b006a5ab6ec..a1fe09a5983 100644 > --- a/gcc/multiple_target.c > +++ b/gcc/multiple_target.c > @@ -88,7 +88,7 @@ create_dispatcher_calls (struct cgraph_node *node) > if (!idecl) > { > error_at (DECL_SOURCE_LOCATION (node->decl), > - "default target_clones attribute was not set"); > + "default %<target_clones%> attribute was not set"); > return; > } > > @@ -161,10 +161,25 @@ create_dispatcher_calls (struct cgraph_node *node) > } > } > > - TREE_PUBLIC (node->decl) = 0; > symtab->change_decl_assembler_name (node->decl, > clone_function_name (node->decl, > "default")); > + > + /* FIXME: copy of cgraph_node::make_local that should be cleaned up > + in next stage1. */ > + node->make_decl_local (); > + node->set_section (NULL); > + node->set_comdat_group (NULL); > + node->externally_visible = false; > + node->forced_by_abi = false; > + node->set_section (NULL);
Probably no need to do this twice (next stage1 we can fix that in make_local as well) > + node->unique_name = ((node->resolution == LDPR_PREVAILING_DEF_IRONLY > + || node->resolution == LDPR_PREVAILING_DEF_IRONLY_EXP) > + && !flag_incremental_link); > + node->resolution = LDPR_PREVAILING_DEF_IRONLY; > + > + DECL_ARTIFICIAL (node->decl) = 1; > + node->force_output = true; And we don't really need force_output, but that is for next stage1 as well. OK and thanks for working on this! Honza