re PR c++/70648 (adplug-xmms fails to compile)
authorJason Merrill <jason@redhat.com>
Thu, 14 Apr 2016 20:14:38 +0000 (16:14 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Thu, 14 Apr 2016 20:14:38 +0000 (16:14 -0400)
PR c++/70648

* constexpr.c (cxx_eval_store_expression): Also copy
CONSTRUCTOR_NO_IMPLICIT_ZERO.

From-SVN: r234989

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

index feb38c2..cba07aa 100644 (file)
@@ -1,3 +1,9 @@
+2016-04-14  Jason Merrill  <jason@redhat.com>
+
+       PR c++/70648
+       * constexpr.c (cxx_eval_store_expression): Also copy
+       CONSTRUCTOR_NO_IMPLICIT_ZERO.
+
 2016-04-14  Martin Sebor  <msebor@redhat.com>
 
        PR c++/69517
index 37cc336..4abff20 100644 (file)
@@ -3149,6 +3149,8 @@ cxx_eval_store_expression (const constexpr_ctx *ctx, tree t,
       CONSTRUCTOR_ELTS (*valp) = CONSTRUCTOR_ELTS (init);
       TREE_CONSTANT (*valp) = TREE_CONSTANT (init);
       TREE_SIDE_EFFECTS (*valp) = TREE_SIDE_EFFECTS (init);
+      CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp)
+       = CONSTRUCTOR_NO_IMPLICIT_ZERO (init);
     }
   else
     *valp = init;
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist10.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-initlist10.C
new file mode 100644 (file)
index 0000000..c12347d
--- /dev/null
@@ -0,0 +1,11 @@
+// PR c++/70648
+// { dg-do compile { target c++11 } }
+
+struct C
+{
+  template <class... U>
+  constexpr C (...) : c { static_cast<U &&>(0)... } {}
+  int c[1];
+};
+
+static constexpr int b = C{}.c[0];