From 6b9ab5cc45bfc38ce768e9c472cad34e81c857f7 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Sat, 11 Jul 1998 15:42:37 +0000 Subject: pt.c (push_template_decl_real): Don't look at DECL_TEMPLATE_INFO for TYPE_DECLs. * pt.c (push_template_decl_real): Don't look at DECL_TEMPLATE_INFO for TYPE_DECLs. From-SVN: r21061 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/pt.c | 14 ++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) (limited to 'gcc') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3849f64..eac51c9 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +1998-07-11 Mark Mitchell + + * pt.c (push_template_decl_real): Don't look at DECL_TEMPLATE_INFO + for TYPE_DECLs. + 1998-07-08 Vladimir N. Makarov * cp-tree.h (warn_long_long): Define. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 32a7715..42caf46 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -1808,8 +1808,18 @@ push_template_decl_real (decl, is_friend) if (CLASSTYPE_TEMPLATE_INSTANTIATION (ctx)) cp_error ("must specialize `%#T' before defining member `%#D'", ctx, decl); - if (TREE_CODE (decl) == TYPE_DECL && DECL_ARTIFICIAL (decl)) - tmpl = CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)); + if (TREE_CODE (decl) == TYPE_DECL) + { + if (IS_AGGR_TYPE_CODE (TREE_CODE (TREE_TYPE (decl))) + && CLASSTYPE_TEMPLATE_INFO (TREE_TYPE (decl)) + && CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl))) + tmpl = CLASSTYPE_TI_TEMPLATE (TREE_TYPE (decl)); + else + { + cp_error ("`%D' does not declare a template type", decl); + return decl; + } + } else if (! DECL_TEMPLATE_INFO (decl)) { cp_error ("template definition of non-template `%#D'", decl); -- cgit v1.1