aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAlexandre Oliva <oliva@lsd.ic.unicamp.br>1999-11-21 17:49:59 +0000
committerAlexandre Oliva <oliva@gcc.gnu.org>1999-11-21 17:49:59 +0000
commit250ba2372cdb135d47cb4a47227d0457fb73ce9a (patch)
treec80271ae2afaf401e64eb3ce3710db73eeeba145 /gcc
parentc7edeea32a97ad35fc1cc936d5f9bcc49d67016f (diff)
downloadgcc-250ba2372cdb135d47cb4a47227d0457fb73ce9a.zip
gcc-250ba2372cdb135d47cb4a47227d0457fb73ce9a.tar.gz
gcc-250ba2372cdb135d47cb4a47227d0457fb73ce9a.tar.bz2
* delete2.C, delete3.C, delete4.C, delete5.C: New tests.
From-SVN: r30607
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog4
-rw-r--r--gcc/testsuite/g++.old-deja/g++.oliva/delete2.C25
-rw-r--r--gcc/testsuite/g++.old-deja/g++.oliva/delete3.C36
-rw-r--r--gcc/testsuite/g++.old-deja/g++.oliva/delete4.C29
-rw-r--r--gcc/testsuite/g++.old-deja/g++.oliva/delete5.C29
5 files changed, 123 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog b/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog
index 79ae203..9d636f9 100644
--- a/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog
+++ b/gcc/testsuite/g++.old-deja/g++.oliva/ChangeLog
@@ -1,3 +1,7 @@
+1999-11-21 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+ * delete2.C, delete3.C, delete4.C, delete5.C: New tests.
+
1999-11-19 Alexandre Oliva <oliva@lsd.ic.unicamp.br>
* template7.C: Crash test passes, bug error is now bogus.
diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/delete2.C b/gcc/testsuite/g++.old-deja/g++.oliva/delete2.C
new file mode 100644
index 0000000..cdd0dc5
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.oliva/delete2.C
@@ -0,0 +1,25 @@
+// Copyright (C) 1999 Free Software Foundation
+
+// by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+// distilled from bug report by Barry M. Caceres <barryc@itravelpartners.com>
+
+// Test whether dtors of vbases are called on delete[].
+
+extern "C" void abort();
+extern "C" void exit(int);
+
+struct Foo {
+ ~Foo() {
+ std::exit(0);
+ }
+};
+
+struct Bar : virtual Foo {
+};
+
+int main() {
+ delete [] new Bar[1];
+ std::abort();
+}
+
+
diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/delete3.C b/gcc/testsuite/g++.old-deja/g++.oliva/delete3.C
new file mode 100644
index 0000000..65932d3
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.oliva/delete3.C
@@ -0,0 +1,36 @@
+// Copyright (C) 1999 Free Software Foundation
+
+// by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+// Test whether dtors of vbases are called on throw within new[].
+// Variant of delete2.C.
+
+extern "C" void abort();
+extern "C" void exit(int);
+
+struct Foo {
+ static bool first;
+
+ Foo() {
+ if (first)
+ first = false;
+ else
+ throw first;
+ }
+
+ ~Foo() {
+ std::exit(0);
+ }
+};
+
+bool Foo::first = true;
+
+struct Bar : virtual Foo {
+};
+
+int main() {
+ delete [] new Bar[2];
+ std::abort();
+}
+
+
diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/delete4.C b/gcc/testsuite/g++.old-deja/g++.oliva/delete4.C
new file mode 100644
index 0000000..def3411
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.oliva/delete4.C
@@ -0,0 +1,29 @@
+// Copyright (C) 1999 Free Software Foundation
+
+// by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+// Test whether dtors of vbases are called from dtor of aggregate of array.
+// Variant of delete2.C and delete3.C.
+
+extern "C" void abort();
+extern "C" void exit(int);
+
+struct Foo {
+ ~Foo() {
+ std::exit(0);
+ }
+};
+
+struct Bar : virtual Foo {
+};
+
+struct Baz {
+ Bar i[1];
+};
+
+int main() {
+ Baz();
+ std::abort();
+}
+
+
diff --git a/gcc/testsuite/g++.old-deja/g++.oliva/delete5.C b/gcc/testsuite/g++.old-deja/g++.oliva/delete5.C
new file mode 100644
index 0000000..8284525
--- /dev/null
+++ b/gcc/testsuite/g++.old-deja/g++.oliva/delete5.C
@@ -0,0 +1,29 @@
+// Copyright (C) 1999 Free Software Foundation
+
+// by Alexandre Oliva <oliva@lsd.ic.unicamp.br>
+
+// Test whether dtors of vbases are called from dtor of auto array.
+// Variant of delete2.C, delete3.C and delete4.C.
+
+extern "C" void abort();
+extern "C" void exit(int);
+
+struct Foo {
+ ~Foo() {
+ std::exit(0);
+ }
+};
+
+struct Bar : virtual Foo {
+};
+
+void foo() {
+ Bar i[1];
+}
+
+int main() {
+ foo();
+ std::abort();
+}
+
+