memcheck: Handle Err_ReallocSizeZero in MC_(eq_Error)
[valgrind.git] / memcheck / tests / cxx17_aligned_new.cpp
blob6f574d066f66da369479fd0dce76639a1bfacf6e
1 #include <cstdlib>
2 #include <new>
3 #include <iostream>
5 class alignas(64) MyClass {
6 public:
7 int i;
8 };
10 class OrdinaryClass {
11 public:
12 int i;
15 int main() {
16 // unsized versions
17 MyClass* myClass = new MyClass;
18 operator delete(myClass, std::align_val_t(64U));
20 MyClass* myClass5 = new MyClass[5];
21 operator delete [](myClass5, std::align_val_t(64U));
23 // sized versions
24 myClass = new MyClass();
25 operator delete(myClass, 64U, std::align_val_t(64U));
27 myClass5 = new MyClass[5];
28 operator delete [](myClass5, 320U, std::align_val_t(64U));
30 MyClass* myClassNt = new (std::nothrow) MyClass;
31 operator delete(myClassNt, std::align_val_t(64U), std::nothrow);
33 MyClass* myClass5Nt = new (std::nothrow) MyClass[5];
34 operator delete [](myClass5Nt, std::align_val_t(64U), std::nothrow);
36 OrdinaryClass* oClass = new OrdinaryClass;
37 // this is a limitation, VG does not use enough bits
38 // to tell apart aligned and unaligned allocations
39 // so new/aligned delete is not a mismatch
40 operator delete(oClass, std::align_val_t(64U));
41 oClass = new (std::nothrow) OrdinaryClass;
42 //delete oClass;
43 // changed the above delete because GCC generates
44 // a sized delete (???) whilst clang generates an ordinary delete
45 operator delete(oClass);
46 oClass = new OrdinaryClass[5];
47 delete [] oClass;
48 oClass = new (std::nothrow) OrdinaryClass[5];
49 delete [] oClass;