re PR c++/13289 (ICE in regenerate_decl_from_template on recursive template)
authorKriang Lerdsuwanakij <lerdsuwa@users.sourceforge.net>
Mon, 29 Dec 2003 11:00:36 +0000 (11:00 +0000)
committerKriang Lerdsuwanakij <lerdsuwa@gcc.gnu.org>
Mon, 29 Dec 2003 11:00:36 +0000 (11:00 +0000)
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

gcc/cp/ChangeLog
gcc/cp/semantics.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/nontype1.C [new file with mode: 0644]

index 1cceeb84435da6a709dbb5eda292c71271d101ae..72c0f5f9bc2d4edc856ab9e5a0c39d278ff3e554 100644 (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
index c9a4a68a40a0b127c5f7e3803ba8cf795e692dde..4cf0261aff29f1a44e9521e864e9323886279d97 100644 (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)
index 14faa0dc2151ad76f2221c3c4c5347e765875fdd..2cccfddf358291955fd4bc604bea62d52166eec6 100644 (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
diff --git a/gcc/testsuite/g++.dg/parse/nontype1.C b/gcc/testsuite/g++.dg/parse/nontype1.C
new file mode 100644 (file)
index 0000000..e721700
--- /dev/null
@@ -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; };