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 Weber int 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