Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/g++.dg/cpp2a/destroying-delete1.C @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/g++.dg/cpp2a/destroying-delete1.C Thu Feb 13 11:34:05 2020 +0900 @@ -0,0 +1,41 @@ +// { dg-do run { target c++2a } } + +#include <new> + +int adt, adl; +struct A { + ~A() { ++adt; } + void operator delete (A *p, std::destroying_delete_t) { + ++adl; + if (adt) __builtin_abort(); + p->~A(); + ::operator delete (p); + } +}; + +struct B { + virtual ~B() {} + void operator delete(void*, std::size_t) { __builtin_abort(); } +}; + +int edel, edtor; +struct E : B { + ~E() { ++edtor; } + void operator delete(E *p, std::destroying_delete_t) { + ++edel; + if (edtor) __builtin_abort(); + p->~E(); + ::operator delete(p); + } +}; +int main() { + A* ap = new A; + delete ap; + if (adl != 1 || adt != 1) + __builtin_abort(); + + B* bp = new E; + delete bp; // 2: uses E::operator delete(E*, std::destroying_delete_t) + if (edel != 1 || edtor != 1) + __builtin_abort(); +}