diff options
author | Mark Mitchell <mmitchell@usa.net> | 1998-03-04 11:33:01 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchell@gcc.gnu.org> | 1998-03-04 11:33:01 +0000 |
commit | a1da6cbacfac48657e23fe42e44ee8bb635314f3 (patch) | |
tree | ad4956cd4d0438509b17b79145267bf8fcd876c2 | |
parent | 1dd8faa86e8230e703417b67318ee2e8c7c6c9b7 (diff) | |
download | gcc-a1da6cbacfac48657e23fe42e44ee8bb635314f3.zip gcc-a1da6cbacfac48657e23fe42e44ee8bb635314f3.tar.gz gcc-a1da6cbacfac48657e23fe42e44ee8bb635314f3.tar.bz2 |
pt.c (finish_member_template_decl): Deal more gracefully with invalid declarations.
* pt.c (finish_member_template_decl): Deal more gracefully with
invalid declarations.
From-SVN: r18399
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 19 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C | 6 |
3 files changed, 24 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 54b45e1..0140891 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +Wed Mar 4 11:28:08 1998 Mark Mitchell <mmitchell@usa.net> + + * pt.c (finish_member_template_decl): Deal more gracefully with + invalid declarations. + Tue Mar 3 01:38:17 1998 Jason Merrill <jason@yorick.cygnus.com> * call.c, class.c, cp-tree.h, cvt.c, decl.c, init.c, lex.c, diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index dcc1373..f467897 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -118,14 +118,21 @@ finish_member_template_decl (template_parameters, decl) } return NULL_TREE; } - else if (DECL_TEMPLATE_INFO (decl) && - !DECL_TEMPLATE_SPECIALIZATION (decl)) + else if (DECL_TEMPLATE_INFO (decl)) { - check_member_template (DECL_TI_TEMPLATE (decl)); - return DECL_TI_TEMPLATE (decl); - } + if (!DECL_TEMPLATE_SPECIALIZATION (decl)) + { + check_member_template (DECL_TI_TEMPLATE (decl)); + return DECL_TI_TEMPLATE (decl); + } + else + return decl; + } + else + cp_error ("invalid member template declaration `%D'", decl); + - return decl; + return error_mark_node; } /* Returns the template nesting level of the indicated class TYPE. diff --git a/gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C b/gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C new file mode 100644 index 0000000..f3b72be --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C @@ -0,0 +1,6 @@ +// Build don't link: + +class A +{ + template<class T>T epsilon; // ERROR - invalid member template +}; // ERROR - the compiler crashes here |