add a check for correct order of destructor calls (from the gcc mailing
list) which points at a misconfiguration at our side (cxa_atexit not used)
This commit is contained in:
parent
f9577d3ada
commit
9b1b051e89
@ -1,5 +1,6 @@
|
||||
# $NetBSD: Makefile,v 1.14 2007/02/19 19:42:50 rmind Exp $
|
||||
# $NetBSD: Makefile,v 1.15 2007/09/17 17:37:48 drochner Exp $
|
||||
|
||||
SUBDIR+= basename bzip2 config cut dirname grep gzip m4 make rtld sdiff sort xlint
|
||||
SUBDIR+= basename bzip2 c++ config cut dirname grep gzip m4 make rtld
|
||||
SUBDIR+= sdiff sort xlint
|
||||
|
||||
.include <bsd.subdir.mk>
|
||||
|
5
regress/usr.bin/c++/Makefile
Normal file
5
regress/usr.bin/c++/Makefile
Normal file
@ -0,0 +1,5 @@
|
||||
# $NetBSD: Makefile,v 1.1 2007/09/17 17:37:48 drochner Exp $
|
||||
|
||||
SUBDIR= static_destructor
|
||||
|
||||
.include <bsd.subdir.mk>
|
11
regress/usr.bin/c++/static_destructor/Makefile
Normal file
11
regress/usr.bin/c++/static_destructor/Makefile
Normal file
@ -0,0 +1,11 @@
|
||||
# $NetBSD: Makefile,v 1.1 2007/09/17 17:37:48 drochner Exp $
|
||||
|
||||
PROG_CXX= static_destructor
|
||||
NOMAN= # defined
|
||||
|
||||
regress:
|
||||
./${PROG} > out && diff out ${.CURDIR}/expected
|
||||
|
||||
CLEANFILES+= out
|
||||
|
||||
.include <bsd.prog.mk>
|
4
regress/usr.bin/c++/static_destructor/expected
Normal file
4
regress/usr.bin/c++/static_destructor/expected
Normal file
@ -0,0 +1,4 @@
|
||||
constructor A
|
||||
constructor B
|
||||
destructor B : i = 1
|
||||
destructor A : i = 10
|
37
regress/usr.bin/c++/static_destructor/static_destructor.cc
Normal file
37
regress/usr.bin/c++/static_destructor/static_destructor.cc
Normal file
@ -0,0 +1,37 @@
|
||||
/* $NetBSD: static_destructor.cc,v 1.1 2007/09/17 17:37:49 drochner Exp $ */
|
||||
|
||||
/*
|
||||
* Tests proper order of destructor calls
|
||||
* (must be in reverse order of constructor completion).
|
||||
* from the gcc mailing list
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
class A
|
||||
{
|
||||
public:
|
||||
int i;
|
||||
A(int j) : i(j) { cout << "constructor A" << endl; }
|
||||
~A() { cout << "destructor A : i = " << i << endl; }
|
||||
};
|
||||
|
||||
class B
|
||||
{
|
||||
public:
|
||||
A *n;
|
||||
B() {
|
||||
static A p(1);
|
||||
n = &p;
|
||||
cout << "constructor B" << endl;
|
||||
}
|
||||
~B() {
|
||||
cout << "destructor B : i = " << n->i << endl;
|
||||
n->i = 10;
|
||||
}
|
||||
};
|
||||
|
||||
class B x1;
|
||||
|
||||
int main (void) { return 0; }
|
Loading…
Reference in New Issue
Block a user