summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/init/lifetime1.C
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/init/lifetime1.C')
-rw-r--r--gcc/testsuite/g++.dg/init/lifetime1.C29
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/init/lifetime1.C b/gcc/testsuite/g++.dg/init/lifetime1.C
new file mode 100644
index 00000000000..57f8c62179a
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/lifetime1.C
@@ -0,0 +1,29 @@
+// PR c++/48370
+// { dg-do run }
+
+extern "C" void abort();
+
+int last = 4;
+
+struct A {
+ int i;
+ A(int i): i(i) { }
+ ~A() { if (i > last) abort(); last = i; }
+};
+
+struct D { int i; };
+
+struct B: D, A { B(int i): A(i) { } };
+struct E: D, virtual A { E(int i): A(i) { } };
+
+struct C
+{
+ const A& ar1;
+ const A& ar2;
+ const A& ar3;
+};
+
+int main()
+{
+ C c = { 1, B(2), E(3) };
+}