re PR c++/51369 ([c++0x] [4.7 Regression] ICE using constexpr in template)
authorJakub Jelinek <jakub@redhat.com>
Wed, 7 Dec 2011 19:51:54 +0000 (20:51 +0100)
committerJakub Jelinek <jakub@gcc.gnu.org>
Wed, 7 Dec 2011 19:51:54 +0000 (20:51 +0100)
PR c++/51369
* init.c (build_value_init): Allow array types even when
processing_template_decl.

* g++.dg/cpp0x/constexpr-51369.C: New test.

From-SVN: r182086

gcc/cp/ChangeLog
gcc/cp/init.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/constexpr-51369.C [new file with mode: 0644]

index 71a707e80bb5320cc31cf4640b48e577934cf730..76bd0af6162c0471713c12cf2c41de093d87d2d2 100644 (file)
@@ -1,3 +1,9 @@
+2011-12-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/51369
+       * init.c (build_value_init): Allow array types even when
+       processing_template_decl.
+
 2011-12-07  Ed Smith-Rowland <3dw4rd@verizon.net>
 
        PR c++/51420
index e1eb681de67636a74d5343a26b8137c1b0392195..e93e82cac57ea0ec124d0e88e93f39204607b9bc 100644 (file)
@@ -333,7 +333,8 @@ build_value_init (tree type, tsubst_flags_t complain)
      constructor.  */
 
   /* The AGGR_INIT_EXPR tweaking below breaks in templates.  */
-  gcc_assert (!processing_template_decl || SCALAR_TYPE_P (type));
+  gcc_assert (!processing_template_decl
+             || (SCALAR_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE));
 
   if (CLASS_TYPE_P (type))
     {
index 04d6c2304f1fbcde806aaf23b4b7033580685755..1a4a182a8f7695319c04bdddee49caddf7d3e3d5 100644 (file)
@@ -1,3 +1,8 @@
+2011-12-07  Jakub Jelinek  <jakub@redhat.com>
+
+       PR c++/51369
+       * g++.dg/cpp0x/constexpr-51369.C: New test.
+
 2011-12-07  Andrew Pinski  <apinski@cavium.com>
 
        PR middle-end/45416
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-51369.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-51369.C
new file mode 100644 (file)
index 0000000..6606be8
--- /dev/null
@@ -0,0 +1,12 @@
+// PR c++/51369
+// { dg-do compile }
+// { dg-options "-std=c++11" }
+
+constexpr int x[2][2] = {};
+
+template<int>
+void
+foo ()
+{
+  x[0][0];
+}