16d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// REQUIRES: asan-64-bits 26d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// RUN: %clangxx_asan -O3 %s -o %t 36d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// RUN: not %run %t 2>&1 | FileCheck %s 46d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// RUN: ASAN_OPTIONS=poison_array_cookie=1 not %run %t 2>&1 | FileCheck %s 56d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// RUN: ASAN_OPTIONS=poison_array_cookie=0 not %run %t 2>&1 | FileCheck %s --check-prefix=NO_COOKIE 66d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#include <stdio.h> 76d1862363c88c183b0ed7740fca876342cf0474bStephen Hines#include <stdlib.h> 86d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesstruct C { 96d1862363c88c183b0ed7740fca876342cf0474bStephen Hines int x; 106d1862363c88c183b0ed7740fca876342cf0474bStephen Hines ~C() { 116d1862363c88c183b0ed7740fca876342cf0474bStephen Hines fprintf(stderr, "ZZZZZZZZ\n"); 126d1862363c88c183b0ed7740fca876342cf0474bStephen Hines exit(1); 136d1862363c88c183b0ed7740fca876342cf0474bStephen Hines } 146d1862363c88c183b0ed7740fca876342cf0474bStephen Hines}; 156d1862363c88c183b0ed7740fca876342cf0474bStephen Hines 166d1862363c88c183b0ed7740fca876342cf0474bStephen Hinesint main(int argc, char **argv) { 176d1862363c88c183b0ed7740fca876342cf0474bStephen Hines C *buffer = new C[argc]; 186d1862363c88c183b0ed7740fca876342cf0474bStephen Hines buffer[-2].x = 10; 196d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// CHECK: AddressSanitizer: heap-buffer-overflow 206d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// CHECK: in main {{.*}}new_array_cookie_test.cc:[[@LINE-2]] 216d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// CHECK: is located 0 bytes inside of 12-byte region 226d1862363c88c183b0ed7740fca876342cf0474bStephen Hines// NO_COOKIE: ZZZZZZZZ 236d1862363c88c183b0ed7740fca876342cf0474bStephen Hines delete [] buffer; 246d1862363c88c183b0ed7740fca876342cf0474bStephen Hines} 25