Don't call vg_assert inside sync_signalhandler_from_kernel
[valgrind.git] / memcheck / tests / sized_aligned_new_delete_misaligned1.cpp
blobf4383a47cfd8cc43d88f817b6a313b338dad519f
1 #include <new>
2 #include <cassert>
3 #include <cstdlib>
4 #include "valgrind.h"
6 int main() {
7 std::align_val_t misalign(static_cast<std::align_val_t>(63U));
8 std::align_val_t zeroalign(static_cast<std::align_val_t>(0U));
9 std::align_val_t onealign(static_cast<std::align_val_t>(1U));
10 std::align_val_t align(static_cast<std::align_val_t>(64U));
11 std::size_t size(32);
12 std::nothrow_t tag;
13 void *mem = nullptr;
15 // libc++ will allocate something for size zero
16 // but libstdc++ doesn't
17 mem = operator new(size, zeroalign, tag);
18 if (RUNNING_ON_VALGRIND) {
19 assert(!mem);
21 operator delete(mem, zeroalign, tag);
22 mem = nullptr;
24 mem = operator new(size, onealign, tag);
25 assert(mem);
26 operator delete(mem, onealign, tag);
27 mem = nullptr;
29 mem = operator new(size, align);
30 operator delete(mem, misalign);
31 mem = nullptr;
33 mem = operator new[](size, align);
34 operator delete[](mem, misalign);
35 mem = nullptr;
37 // doesn't matter that tag is uninit
38 // don't want to see an error
39 mem = operator new(size, misalign, tag);
40 operator delete(mem, misalign, tag);
41 assert(!mem);
43 mem = operator new[](size, misalign, tag);
44 operator delete[](mem, misalign, tag);
45 assert(!mem);
47 mem = operator new(size, align);
48 operator delete(mem, size, misalign);
49 mem = nullptr;
51 mem = operator new[](size, align);
52 operator delete[](mem, size, misalign);
54 // initially this test had two throwing
55 // versions called from fork()s
56 // but that doesn't mix well with xml
57 // so they have split out int versions 2 and 3