summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/cpp0x/constexpr-array15.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/cpp0x/constexpr-array15.C')
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-array15.C29
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-array15.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-array15.C
new file mode 100644
index 00000000000..a59e6f5df14
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-array15.C
@@ -0,0 +1,29 @@
+// PR c++/68949
+// { dg-do run { target c++11 } }
+
+struct Sub {
+ int i;
+
+ constexpr Sub() : i(-1) {} // remove constexpr and it works as expected
+ Sub(Sub&& rhs); // remove this constructor and it works as epxected.
+};
+
+// v-- move this inline and it works as expected
+// v-- remove ': Sub()' and it works as expected
+Sub::Sub(Sub&& rhs) : Sub() { int tmp = i; i = rhs.i; rhs.i = tmp; }
+
+struct Class {
+ // v-- remove '[1]' and it works as expected
+ // v-- add '= {}' and it works as expected
+ Sub s[1];
+
+ // v-- add ': s{}' and it works as expected
+ // v-- removing this constructor makes it work as expected
+ Class() {}
+};
+
+int main() {
+ Class c;
+ if (c.s[0].i != -1)
+ __builtin_abort();
+}