1*673dc3d4SNico Weber // REQUIRES: asan-64-bits 2*673dc3d4SNico Weber // RUN: %clangxx_asan -O3 %s -o %t 3*673dc3d4SNico Weber // RUN: not %run %t 2>&1 | FileCheck %s 4*673dc3d4SNico Weber // RUN: %env_asan_opts=poison_array_cookie=1 not %run %t 2>&1 | FileCheck %s 5*673dc3d4SNico Weber // RUN: %env_asan_opts=poison_array_cookie=0 not %run %t 2>&1 | FileCheck %s --check-prefix=NO_COOKIE 6*673dc3d4SNico Weber 7*673dc3d4SNico Weber // UNSUPPORTED: ios 8*673dc3d4SNico Weber 9*673dc3d4SNico Weber #include <stdio.h> 10*673dc3d4SNico Weber #include <stdlib.h> 11*673dc3d4SNico Weber struct C { 12*673dc3d4SNico Weber int x; ~CC13*673dc3d4SNico Weber ~C() { 14*673dc3d4SNico Weber fprintf(stderr, "ZZZZZZZZ\n"); 15*673dc3d4SNico Weber exit(1); 16*673dc3d4SNico Weber } 17*673dc3d4SNico Weber }; 18*673dc3d4SNico Weber main(int argc,char ** argv)19*673dc3d4SNico Weberint main(int argc, char **argv) { 20*673dc3d4SNico Weber C *buffer = new C[argc]; 21*673dc3d4SNico Weber buffer[-2].x = 10; 22*673dc3d4SNico Weber // CHECK: AddressSanitizer: heap-buffer-overflow 23*673dc3d4SNico Weber // CHECK: in main {{.*}}new_array_cookie_test.cpp:[[@LINE-2]] 24*673dc3d4SNico Weber // CHECK: is located 0 bytes inside of 12-byte region 25*673dc3d4SNico Weber // NO_COOKIE: ZZZZZZZZ 26*673dc3d4SNico Weber delete [] buffer; 27*673dc3d4SNico Weber } 28