diff options
author | Volker Reichelt <reichelt@igpm.rwth-aachen.de> | 2006-06-22 09:47:51 +0000 |
---|---|---|
committer | Volker Reichelt <reichelt@gcc.gnu.org> | 2006-06-22 09:47:51 +0000 |
commit | 3e9ac7e52541c6612146354b8d2d12badd45eec1 (patch) | |
tree | 73b66a1b11d3fab19c48d501ca14051f0b7badbf /gcc | |
parent | 717f805313d19641bf97400f1d6a9c8a6bbcb16e (diff) | |
download | gcc-3e9ac7e52541c6612146354b8d2d12badd45eec1.zip gcc-3e9ac7e52541c6612146354b8d2d12badd45eec1.tar.gz gcc-3e9ac7e52541c6612146354b8d2d12badd45eec1.tar.bz2 |
re PR c++/28110 (ICE with invalid template constant parameter)
PR c++/28110
* pt.c (unify) <case TEMPLATE_PARM_INDEX>: Check for invalid
parameters.
* g++.dg/template/crash53.C: New test.
From-SVN: r114885
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash53.C | 11 |
4 files changed, 20 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f666fab..ac044d1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2006-06-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + PR c++/28110 + * pt.c (unify) <case TEMPLATE_PARM_INDEX>: Check for invalid + parameters. + PR c++/28109 * rtti.c (get_tinfo_decl_dynamic): Robustify. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 08bda26..f7bc7ce 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -10281,6 +10281,8 @@ unify (tree tparms, tree targs, tree parm, tree arg, int strict) case TEMPLATE_PARM_INDEX: tparm = TREE_VALUE (TREE_VEC_ELT (tparms, 0)); + if (tparm == error_mark_node) + return 1; if (TEMPLATE_PARM_LEVEL (parm) != template_decl_level (tparm)) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d08e87c..a02dc4c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2006-06-22 Volker Reichelt <reichelt@igpm.rwth-aachen.de> + PR c++/28110 + * g++.dg/template/crash53.C: New test. + PR c++/28109 * g++.dg/rtti/incomplete1.C: New test. diff --git a/gcc/testsuite/g++.dg/template/crash53.C b/gcc/testsuite/g++.dg/template/crash53.C new file mode 100644 index 0000000..bbd1e7f --- /dev/null +++ b/gcc/testsuite/g++.dg/template/crash53.C @@ -0,0 +1,11 @@ +// PR c++/28110 +// { dg-do compile } + +template<int> struct A {}; + +template<typename T> struct B +{ + template<T I> B(A<I>); // { dg-error "template constant parameter" } +}; + +B<double> a=A<0>(); // { dg-error "non-scalar type" } |