1 // Ensure that operator new/delete are still replaceable. 2 3 // RUN: %clangxx %s -o %t -fsanitize=address -shared-libsan && not %run %t 2>&1 | FileCheck %s 4 // RUN: %clangxx %s -o %t -fsanitize=address -static-libsan && not %run %t 2>&1 | FileCheck %s 5 6 #include <cstdio> 7 #include <cstdlib> 8 #include <new> 9 10 void *operator new[](size_t size) { 11 fprintf(stderr, "replaced new\n"); 12 return malloc(size); 13 } 14 15 void operator delete[](void *ptr) noexcept { 16 fprintf(stderr, "replaced delete\n"); 17 return free(ptr); 18 } 19 20 int main(int argc, char **argv) { 21 // CHECK: replaced new 22 char *x = new char[5]; 23 // CHECK: replaced delete 24 delete[] x; 25 // CHECK: ERROR: AddressSanitizer 26 *x = 13; 27 return 0; 28 } 29