diff options
author | Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> | 2003-07-15 15:28:38 +0000 |
---|---|---|
committer | Kriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org> | 2003-07-15 15:28:38 +0000 |
commit | caec1dc05935c3e9d9d275b86c83907c264786b9 (patch) | |
tree | b053618f75b2887d823f19a92578f126cf986f6d /gcc | |
parent | aadf50ed060a224fce82f98c90a9891aff57a65c (diff) | |
download | gcc-caec1dc05935c3e9d9d275b86c83907c264786b9.zip gcc-caec1dc05935c3e9d9d275b86c83907c264786b9.tar.gz gcc-caec1dc05935c3e9d9d275b86c83907c264786b9.tar.bz2 |
re PR c++/10108 (tree checking ICE: expected var_decl, have error_mark in tsubst_decl)
PR c++/10108
* pt.c (tsubst_decl) <TEMPLATE_DECL>: Add a check for
error_mark_node.
* g++.dg/template/crash7.C: New test.
From-SVN: r69409
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash7.C | 13 |
4 files changed, 26 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 85e47ea..ff60075 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-07-15 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> + + PR c++/10108 + * pt.c (tsubst_decl) <TEMPLATE_DECL>: Add a check for + error_mark_node. + 2003-07-14 Mark Mitchell <mark@codesourcery.com> PR c++/11509 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index eb108e6..90b52af 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -5837,6 +5837,8 @@ tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain) else { tree new_decl = tsubst (decl, args, complain, in_decl); + if (new_decl == error_mark_node) + return error_mark_node; DECL_TEMPLATE_RESULT (r) = new_decl; DECL_TI_TEMPLATE (new_decl) = r; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 85d684e..2f10515 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-07-15 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net> + + PR c++/10108 + * g++.dg/template/crash7.C: New test. + 2003-07-15 Kazu Hirata <kazu@cs.umass.edu> PR target/10795 diff --git a/gcc/testsuite/g++.dg/template/crash7.C b/gcc/testsuite/g++.dg/template/crash7.C new file mode 100644 index 0000000..5b17928 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/crash7.C @@ -0,0 +1,13 @@ +// { dg-do compile } + +// Origin: Volker Reichelt <reichelt@igpm.rwth-aachen.de> + +// PR c++/10108: ICE in tsubst_decl for error due to non-existence +// nested type. + +template <typename> struct A +{ // { dg-error "candidates" } + template <typename> A(typename A::X) {} // { dg-error "no type" } +}; + +A<void> a; // { dg-error "instantiated|no match" } |