aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/init
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/g++.dg/init')
-rw-r--r--gcc/testsuite/g++.dg/init/copy7.C39
-rw-r--r--gcc/testsuite/g++.dg/init/lifetime1.C29
-rw-r--r--gcc/testsuite/g++.dg/init/lifetime2.C23
-rw-r--r--gcc/testsuite/g++.dg/init/ref21.C7
4 files changed, 59 insertions, 39 deletions
diff --git a/gcc/testsuite/g++.dg/init/copy7.C b/gcc/testsuite/g++.dg/init/copy7.C
deleted file mode 100644
index 20e1e47dbb9..00000000000
--- a/gcc/testsuite/g++.dg/init/copy7.C
+++ /dev/null
@@ -1,39 +0,0 @@
-// PR c++/39480
-// It isn't always safe to call memcpy with identical arguments.
-// { dg-do run }
-
-extern "C" void abort();
-extern "C" void *
-memcpy(void *dest, void *src, __SIZE_TYPE__ n)
-{
- if (dest == src)
- abort();
- else
- {
- __SIZE_TYPE__ i;
- for (i = 0; i < n; i++)
- ((char *)dest)[i] = ((const char*)src)[i];
- }
-}
-
-struct A
-{
- double d[10];
-};
-
-struct B: public A
-{
- char bc;
-};
-
-B b;
-
-void f(B *a1, B* a2)
-{
- *a1 = *a2;
-}
-
-int main()
-{
- f(&b,&b);
-}
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) };
+}
diff --git a/gcc/testsuite/g++.dg/init/lifetime2.C b/gcc/testsuite/g++.dg/init/lifetime2.C
new file mode 100644
index 00000000000..293bd692e9c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/lifetime2.C
@@ -0,0 +1,23 @@
+// PR c++/26714
+// { dg-do run }
+
+extern "C" void abort();
+
+bool ok = false;
+struct A
+{
+ A() { }
+ ~A() { if (!ok) abort(); }
+};
+
+struct B
+{
+ const A &a1;
+ const A &a2;
+ B() : a1(A()),a2(A()) { ok = true; }
+};
+
+int main()
+{
+ B b;
+}
diff --git a/gcc/testsuite/g++.dg/init/ref21.C b/gcc/testsuite/g++.dg/init/ref21.C
new file mode 100644
index 00000000000..db4ac4a300f
--- /dev/null
+++ b/gcc/testsuite/g++.dg/init/ref21.C
@@ -0,0 +1,7 @@
+struct A
+{
+ const int &i1;
+ const int &i2;
+};
+
+A a = { 1, 2 };