diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3849f64c5964..eac51c99adfe 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 32a7715f84c1..42caf4654d6f 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);