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