aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2017-06-19 10:15:57 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2017-06-19 10:15:57 +0000
commit431abe69f1c4ba0b4b05609f2f4f9206cc6e041a (patch)
tree4321f7d6292efefb207bdc94c2d45ab63757a7d3 /gcc
parenta06a5385483af460e2a477d5c791750ce28dc9a0 (diff)
downloadgcc-431abe69f1c4ba0b4b05609f2f4f9206cc6e041a.zip
gcc-431abe69f1c4ba0b4b05609f2f4f9206cc6e041a.tar.gz
gcc-431abe69f1c4ba0b4b05609f2f4f9206cc6e041a.tar.bz2
re PR c++/66093 (g++ produces incorrect output on code with constexpr function initializing class with private fields)
2017-06-19 Paolo Carlini <paolo.carlini@oracle.com> PR c++/66093 * g++.dg/cpp1y/constexpr-66093.C: New. From-SVN: r249364
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp1y/constexpr-66093.C35
2 files changed, 40 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 8153a71..f879c10 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -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
index 0000000..ad31692
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1y/constexpr-66093.C
@@ -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);
+ }
+}