c++: local externs in templates do not get template head

Marek Polacek polacek@redhat.com
Mon Sep 14 16:49:17 GMT 2020


On Mon, Sep 14, 2020 at 12:45:33PM -0400, Nathan Sidwell wrote:
> Now we consistently mark local externs with DECL_LOCAL_DECL_P, we can
> teach the template machinery not to give them a TEMPLATE_DECL head,
> and the instantiation machinery treat them as the local specialiations
> they are.  (openmp UDRs also fall into this category, and are dealt
> with similarly.)
> 
>         gcc/cp/
>         * pt.c (push_template_decl_real): Don't attach a template head to
>         local externs.
>         (tsubst_function_decl): Add support for headless local extern
>         decls.
>         (tsubst_decl): Add support for headless local extern decls.
> 
> pushed to trunk
> -- 
> Nathan Sidwell

> diff --git i/gcc/cp/pt.c w/gcc/cp/pt.c
> index 0f52a9ed77d..8124efcbe24 100644
> --- i/gcc/cp/pt.c
> +++ w/gcc/cp/pt.c
> @@ -6071,7 +6071,11 @@ push_template_decl_real (tree decl, bool is_friend)
>      {
>        if (is_primary)
>  	retrofit_lang_decl (decl);
> -      if (DECL_LANG_SPECIFIC (decl))
> +      if (DECL_LANG_SPECIFIC (decl)
> +	  && ((TREE_CODE (decl) != VAR_DECL
> +	       && TREE_CODE (decl) != FUNCTION_DECL)

This is !VAR_OR_FUNCTION_DECL_P.  Want me to "fix" that as obvious?

Marek



More information about the Gcc-patches mailing list