diff options
Diffstat (limited to 'gcc/testsuite/g++.old-deja/g++.jason/dtor5.C')
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.jason/dtor5.C | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.old-deja/g++.jason/dtor5.C b/gcc/testsuite/g++.old-deja/g++.jason/dtor5.C new file mode 100644 index 00000000000..245e057deac --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.jason/dtor5.C @@ -0,0 +1,24 @@ +// PRMS Id: 5286 +// Bug: g++ forgets side-effects of object in call to nonexistent destructor. + +void * operator new (__SIZE_TYPE__ s, void * p) { return p; } + +int r; + +template <class T> struct A { + T *p; + int i; + A() { i = 0; p = (T*) new char[sizeof (T)]; new (p + i++) T; } + ~A() { p[--i].~T(); r = i; } +}; + +main() +{ + { A<int> a; } + + int* p = (int*) new char[sizeof (int)]; + new (p + r++) int; + p[--r].~int(); + + return r; +} |