re PR c++/66093 (g++ produces incorrect output on code with constexpr function initia...
authorPaolo Carlini <paolo.carlini@oracle.com>
Mon, 19 Jun 2017 10:15:57 +0000 (10:15 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 19 Jun 2017 10:15:57 +0000 (10:15 +0000)
2017-06-19  Paolo Carlini  <paolo.carlini@oracle.com>

PR c++/66093
* g++.dg/cpp1y/constexpr-66093.C: New.

From-SVN: r249364

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp1y/constexpr-66093.C [new file with mode: 0644]

index 8153a71760d87da45f61038b4d84290cd49ad2a0..f879c10a7ade90c961a6a142a9c5aaeb9f140aa8 100644 (file)
@@ -1,3 +1,8 @@
+2017-06-19  Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR c++/66093
+       * g++.dg/cpp1y/constexpr-66093.C: New.
+
 2017-06-19  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * g++.dg/other/unused1.C: Remove *-*-solaris2.[56]* from
diff --git a/gcc/testsuite/g++.dg/cpp1y/constexpr-66093.C b/gcc/testsuite/g++.dg/cpp1y/constexpr-66093.C
new file mode 100644 (file)
index 0000000..ad31692
--- /dev/null
@@ -0,0 +1,35 @@
+// { dg-do run { target c++14 } }
+
+#include <cassert>
+
+constexpr int n = 10;
+
+struct A {
+    constexpr operator const int*() const {
+        return data;
+    }
+  
+    constexpr operator int*() {
+        return data;
+    }
+  
+private:
+    int data[n];
+};
+
+constexpr A f() {
+    A a{};
+    for (int i = 1; i <= n; i++) {
+        a[i] = i;
+    }
+    return a;
+}
+
+A a = f();
+
+int main()
+{
+    for (int i = 0; i < n; i++) {
+        assert (a[i] == i);
+    }
+}