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
This commit is contained in:
parent
417c27ab30
commit
fcb36e7363
|
@ -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>
|
2011-11-19 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/51216
|
PR c++/51216
|
||||||
|
|
|
@ -7270,6 +7270,12 @@ lookup_template_class_1 (tree d1, tree arglist, tree in_decl, tree context,
|
||||||
int is_dependent_type;
|
int is_dependent_type;
|
||||||
int use_partial_inst_tmpl = false;
|
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);
|
gen_tmpl = most_general_template (templ);
|
||||||
parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
|
parmlist = DECL_TEMPLATE_PARMS (gen_tmpl);
|
||||||
parm_depth = TMPL_PARMS_DEPTH (parmlist);
|
parm_depth = TMPL_PARMS_DEPTH (parmlist);
|
||||||
|
|
|
@ -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>
|
2011-11-19 Paolo Carlini <paolo.carlini@oracle.com>
|
||||||
|
|
||||||
PR c++/51216
|
PR c++/51216
|
||||||
|
|
|
@ -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" }
|
||||||
|
|
Loading…
Reference in New Issue