re PR c++/13289 (ICE in regenerate_decl_from_template on recursive template)

PR c++/13289
	* semantics.c (finish_id_expression): Only check if the type of
	a template argument is integral or enumeration when it is not
	dependent.

	* g++.dg/parse/nontype1.C: New test.

From-SVN: r75200
This commit is contained in:
Kriang Lerdsuwanakij 2003-12-29 11:00:36 +00:00 committed by Kriang Lerdsuwanakij
parent 2f9afd51aa
commit 68deab91f2
4 changed files with 22 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2003-12-29 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/13289
* semantics.c (finish_id_expression): Only check if the type of
a template argument is integral or enumeration when it is not
dependent.
2003-12-29 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/12403

View File

@ -2400,6 +2400,7 @@ finish_id_expression (tree id_expression,
if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
decl = TEMPLATE_PARM_DECL (decl);
if (integral_constant_expression_p
&& !dependent_type_p (TREE_TYPE (decl))
&& !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (decl)))
{
if (!allow_non_integral_constant_expression_p)

View File

@ -1,3 +1,8 @@
2003-12-29 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/13289
* g++.dg/parse/nontype1.C: New test.
2003-12-29 Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
PR c++/12403

View File

@ -0,0 +1,9 @@
// Copyright (C) 2003 Free Software Foundation
// Contributed by Kriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
// { dg-do compile }
// PR c++/13289: Incorrectly reject non-type template argument that has
// dependent type
template <class T, T t> class C {};
template <class T, T t> class D { C<T, t-1> c; };