Commit 2620d095 by Kriang Lerdsuwanakij Committed by Kriang Lerdsuwanakij

re PR c++/13797 (ICE on invalid template parameter)

	PR c++/13797
	* pt.c (instantiate_class_template): Add an error_mark_node
	check.
	(tsubst_decl) <TEMPLATE_DECL case>: Likewise.

	* g++.dg/template/nontype4.C: New test.
	* g++.dg/template/nontype5.C: Likewise.

From-SVN: r76556
parent 135f54eb
2003-01-25 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/13797
* pt.c (instantiate_class_template): Add an error_mark_node
check.
(tsubst_decl) <TEMPLATE_DECL case>: Likewise.
2004-01-23 Andrew Pinski <pinskia@physics.uc.edu> 2004-01-23 Andrew Pinski <pinskia@physics.uc.edu>
PR c++/13701 PR c++/13701
......
...@@ -5370,7 +5370,9 @@ instantiate_class_template (tree type) ...@@ -5370,7 +5370,9 @@ instantiate_class_template (tree type)
tree newtag; tree newtag;
newtag = tsubst (tag, args, tf_error, NULL_TREE); newtag = tsubst (tag, args, tf_error, NULL_TREE);
my_friendly_assert (newtag != error_mark_node, 20010206); if (newtag == error_mark_node)
continue;
if (TREE_CODE (newtag) != ENUMERAL_TYPE) if (TREE_CODE (newtag) != ENUMERAL_TYPE)
{ {
if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag)) if (TYPE_LANG_SPECIFIC (tag) && CLASSTYPE_IS_TEMPLATE (tag))
...@@ -5902,6 +5904,9 @@ tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain) ...@@ -5902,6 +5904,9 @@ tsubst_decl (tree t, tree args, tree type, tsubst_flags_t complain)
if (TREE_CODE (decl) == TYPE_DECL) if (TREE_CODE (decl) == TYPE_DECL)
{ {
tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl); tree new_type = tsubst (TREE_TYPE (t), args, complain, in_decl);
if (new_type == error_mark_node)
return error_mark_node;
TREE_TYPE (r) = new_type; TREE_TYPE (r) = new_type;
CLASSTYPE_TI_TEMPLATE (new_type) = r; CLASSTYPE_TI_TEMPLATE (new_type) = r;
DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type); DECL_TEMPLATE_RESULT (r) = TYPE_MAIN_DECL (new_type);
......
2003-01-25 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/13797
* g++.dg/template/nontype4.C: New test.
* g++.dg/template/nontype5.C: Likewise.
2004-01-25 Richard Sandiford <rsandifo@redhat.com> 2004-01-25 Richard Sandiford <rsandifo@redhat.com>
* gcc.dg/torture/mips-clobber-at.c: New test. * gcc.dg/torture/mips-clobber-at.c: New test.
......
// { dg-do compile }
// Origin: Ivan Godard <igodard@pacbell.net>
// Volker Reichelt <reichelt@gcc.gnu.org>
// PR c++/13797: ICE invalid nontype template parameter
template <int> struct A
{
typedef A<0> B; // { dg-error "not a valid type|conflict" }
template <B> struct B {}; // { dg-error "not a valid type|declaration" }
};
A<0> a; // { dg-error "instantiated" }
// { dg-do compile }
// Origin: Ivan Godard <igodard@pacbell.net>
// Volker Reichelt <reichelt@gcc.gnu.org>
// PR c++/13797: ICE invalid nontype template parameter
template <int> struct A
{
typedef A<0> B;
template <B> struct C {}; // { dg-error "not a valid type" }
};
A<0> a; // { dg-error "instantiated" }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment