> 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

Reply via email to