diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 85e47ea543c..ff600753258 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2003-07-15 Kriang Lerdsuwanakij + + PR c++/10108 + * pt.c (tsubst_decl) : Add a check for + error_mark_node. + 2003-07-14 Mark Mitchell PR c++/11509 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index eb108e6338f..90b52afe3fd 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 85d684eb3fb..2f10515a51e 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2003-07-15 Kriang Lerdsuwanakij + + PR c++/10108 + * g++.dg/template/crash7.C: New test. + 2003-07-15 Kazu Hirata 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 00000000000..5b17928f5bb --- /dev/null +++ b/gcc/testsuite/g++.dg/template/crash7.C @@ -0,0 +1,13 @@ +// { dg-do compile } + +// Origin: Volker Reichelt + +// PR c++/10108: ICE in tsubst_decl for error due to non-existence +// nested type. + +template struct A +{ // { dg-error "candidates" } + template A(typename A::X) {} // { dg-error "no type" } +}; + +A a; // { dg-error "instantiated|no match" }