brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.8 KiB · 356145e Raw
78 lines · cpp
1/// From sanitizer_common/TestCases/Linux/new_delete_test.cpp2// RUN: %clangxx_nsan -fno-sized-deallocation -O0 %s -o %t && %run %t3// RUN: %clangxx_nsan -fsized-deallocation -O0 %s -o %t && %run %t4 5#include <cstddef>6 7namespace std {8struct nothrow_t {};9static const nothrow_t nothrow;10enum class align_val_t : size_t {};11} // namespace std12 13void *operator new(size_t);14void *operator new[](size_t);15void *operator new(size_t, std::nothrow_t const &);16void *operator new[](size_t, std::nothrow_t const &);17void *operator new(size_t, std::align_val_t);18void *operator new[](size_t, std::align_val_t);19void *operator new(size_t, std::align_val_t, std::nothrow_t const &);20void *operator new[](size_t, std::align_val_t, std::nothrow_t const &);21 22void operator delete(void *) throw();23void operator delete[](void *) throw();24void operator delete(void *, std::nothrow_t const &);25void operator delete[](void *, std::nothrow_t const &);26void operator delete(void *, size_t) throw();27void operator delete[](void *, size_t) throw();28void operator delete(void *, std::align_val_t) throw();29void operator delete[](void *, std::align_val_t) throw();30void operator delete(void *, std::align_val_t, std::nothrow_t const &);31void operator delete[](void *, std::align_val_t, std::nothrow_t const &);32void operator delete(void *, size_t, std::align_val_t) throw();33void operator delete[](void *, size_t, std::align_val_t) throw();34 35template <typename T> inline T *break_optimization(T *arg) {36  __asm__ __volatile__("" : : "r"(arg) : "memory");37  return arg;38}39 40struct S12 {41  int a, b, c;42};43struct alignas(128) S12_128 {44  int a, b, c;45};46struct alignas(256) S12_256 {47  int a, b, c;48};49struct alignas(512) S1024_512 {50  char a[1024];51};52struct alignas(1024) S1024_1024 {53  char a[1024];54};55 56int main(int argc, char **argv) {57  delete break_optimization(new S12);58  operator delete(break_optimization(new S12), std::nothrow);59  delete[] break_optimization(new S12[100]);60  operator delete[](break_optimization(new S12[100]), std::nothrow);61 62  delete break_optimization(new S12_128);63  operator delete(break_optimization(new S12_128),64                  std::align_val_t(alignof(S12_128)));65  operator delete(break_optimization(new S12_128),66                  std::align_val_t(alignof(S12_128)), std::nothrow);67  operator delete(break_optimization(new S12_128), sizeof(S12_128),68                  std::align_val_t(alignof(S12_128)));69 70  delete[] break_optimization(new S12_128[100]);71  operator delete[](break_optimization(new S12_128[100]),72                    std::align_val_t(alignof(S12_128)));73  operator delete[](break_optimization(new S12_128[100]),74                    std::align_val_t(alignof(S12_128)), std::nothrow);75  operator delete[](break_optimization(new S12_128[100]), sizeof(S12_128[100]),76                    std::align_val_t(alignof(S12_128)));77}78