aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDodji Seketeli <dodji@redhat.com>2011-11-20 07:10:24 +0000
committerDodji Seketeli <dodji@gcc.gnu.org>2011-11-20 08:10:24 +0100
commitfcb36e7363f231cd0b58f500ef6fabf6da214e32 (patch)
treebc79e57074c519761cbdad6d84718baf024059ab
parent417c27ab304f6e807ff295a53e49b5c8169bd272 (diff)
downloadgcc-fcb36e7363f231cd0b58f500ef6fabf6da214e32.zip
gcc-fcb36e7363f231cd0b58f500ef6fabf6da214e32.tar.gz
gcc-fcb36e7363f231cd0b58f500ef6fabf6da214e32.tar.bz2
PR c++/51194 - ICE with invalid alias template
gcc/cp/ PR c++/51194 * pt.c (lookup_template_class_1): Go out early if the type of the template is error_mark_node. gcc/testsuite/ PR c++/51194 * g++.dg/cpp0x/alias-decl-15.C: New test. From-SVN: r181523
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/pt.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C17
4 files changed, 34 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3d0f356..96e4d20 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2011-11-20 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/51194
+ * pt.c (lookup_template_class_1): Go out early if the type of the
+ template is error_mark_node.
+
2011-11-19 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51216
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 987b70b..2b02fa4 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -7270,6 +7270,12 @@ lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
int is_dependent_type;
int use_partial_inst_tmpl = false;
+ if (template_type == error_mark_node)
+ /* An error occured while building the template TEMPL, and a
+ diagnostic has most certainly been emitted for that
+ already. Let's propagate that error. */
+ return error_mark_node;
+
gen_tmpl = most_general_template (templ);
parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
parm_depth = TMPL_PARMS_DEPTH (parmlist);
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 861f36c4..c5f33a6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2011-11-20 Dodji Seketeli <dodji@redhat.com>
+
+ PR c++/51194
+ * g++.dg/cpp0x/alias-decl-15.C: New test.
+
2011-11-19 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51216
diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C
new file mode 100644
index 0000000..2bc9b11
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C
@@ -0,0 +1,17 @@
+// Origin PR c++/51194
+// { dg-options "-std=c++0x" }
+
+template<class U, class V> //#1
+struct foo {}; // { dg-error "provided for|foo" }
+
+template<class U, class V=char>
+struct P {};
+
+template<template<class... U> class... TT>
+struct bar {
+ template<class... Args>
+ using mem = P<TT<Args...>...>;//#2 { dg-error "wrong number of|arguments" }
+};
+
+bar<foo>::mem<int, char> b;//#3 { dg-error "invalid type" }
+