From fcb36e7363f231cd0b58f500ef6fabf6da214e32 Mon Sep 17 00:00:00 2001 From: Dodji Seketeli Date: Sun, 20 Nov 2011 07:10:24 +0000 Subject: 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 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C | 17 +++++++++++++++++ 4 files changed, 34 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp0x/alias-decl-15.C (limited to 'gcc') 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 + + 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 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 861f36c..c5f33a6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-11-20 Dodji Seketeli + + PR c++/51194 + * g++.dg/cpp0x/alias-decl-15.C: New test. + 2011-11-19 Paolo Carlini 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 //#1 +struct foo {}; // { dg-error "provided for|foo" } + +template +struct P {}; + +template class... TT> +struct bar { + template + using mem = P...>;//#2 { dg-error "wrong number of|arguments" } +}; + +bar::mem b;//#3 { dg-error "invalid type" } + -- cgit v1.1