diff options
author | Alexandre Oliva <oliva@lsd.ic.unicamp.br> | 1999-11-21 17:49:59 +0000 |
---|---|---|
committer | Alexandre Oliva <oliva@gcc.gnu.org> | 1999-11-21 17:49:59 +0000 |
commit | 250ba2372cdb135d47cb4a47227d0457fb73ce9a (patch) | |
tree | c80271ae2afaf401e64eb3ce3710db73eeeba145 /gcc | |
parent | c7edeea32a97ad35fc1cc936d5f9bcc49d67016f (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.oliva/delete2.C | 25 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.oliva/delete3.C | 36 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.oliva/delete4.C | 29 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.oliva/delete5.C | 29 |
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(); +} + + |