aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mmitchell@usa.net>1998-03-04 11:33:01 +0000
committerMark Mitchell <mmitchell@gcc.gnu.org>1998-03-04 11:33:01 +0000
commita1da6cbacfac48657e23fe42e44ee8bb635314f3 (patch)
treead4956cd4d0438509b17b79145267bf8fcd876c2
parent1dd8faa86e8230e703417b67318ee2e8c7c6c9b7 (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/cp/pt.c19
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/memtemp71.C6
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