On Mon, Sep 14, 2020 at 12:53:18PM -0400, Nathan Sidwell wrote: > On 9/14/20 12:49 PM, Marek Polacek wrote: > > 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? > > ah, thanks -- great. I knew of VAR_P and the lack of FUNCTION_P, but not > that one. (bah, who needs consistency!)
Yup... I keep wishing we had ARRAY_TYPE_P, for example. Anyway, I just pushed this: gcc/cp/ChangeLog: * pt.c (push_template_decl_real): Use VAR_OR_FUNCTION_DECL_P. --- gcc/cp/pt.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 8124efcbe24..c630ef5a070 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -6072,8 +6072,7 @@ push_template_decl_real (tree decl, bool is_friend) if (is_primary) retrofit_lang_decl (decl); if (DECL_LANG_SPECIFIC (decl) - && ((TREE_CODE (decl) != VAR_DECL - && TREE_CODE (decl) != FUNCTION_DECL) + && (!VAR_OR_FUNCTION_DECL_P (decl) || !ctx || !DECL_LOCAL_DECL_P (decl))) DECL_TEMPLATE_INFO (decl) = info; base-commit: 5bcc0fa05ef713594f6c6d55d5c837e13a9c9803 -- 2.26.2