1*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-gnu-linux -emit-llvm -o - %s | FileCheck %s -check-prefix=PLAIN 2*67e74705SXin Li // RUN: %clang_cc1 -triple x86_64-gnu-linux -emit-llvm -o - -fsanitize=address %s | FileCheck %s -check-prefix=ASAN 3*67e74705SXin Li 4*67e74705SXin Li typedef __typeof__(sizeof(0)) size_t; 5*67e74705SXin Li namespace std { 6*67e74705SXin Li struct nothrow_t {}; 7*67e74705SXin Li std::nothrow_t nothrow; 8*67e74705SXin Li } 9*67e74705SXin Li void *operator new[](size_t, const std::nothrow_t &) throw(); 10*67e74705SXin Li void *operator new[](size_t, char *); 11*67e74705SXin Li 12*67e74705SXin Li struct C { 13*67e74705SXin Li int x; 14*67e74705SXin Li ~C(); 15*67e74705SXin Li }; 16*67e74705SXin Li CallNew()17*67e74705SXin LiC *CallNew() { 18*67e74705SXin Li return new C[10]; 19*67e74705SXin Li } 20*67e74705SXin Li // PLAIN-LABEL: CallNew 21*67e74705SXin Li // PLAIN-NOT: nosanitize 22*67e74705SXin Li // PLAIN-NOT: __asan_poison_cxx_array_cookie 23*67e74705SXin Li // ASAN-LABEL: CallNew 24*67e74705SXin Li // ASAN: store{{.*}}nosanitize 25*67e74705SXin Li // ASAN-NOT: nosanitize 26*67e74705SXin Li // ASAN: call void @__asan_poison_cxx_array_cookie 27*67e74705SXin Li CallNewNoThrow()28*67e74705SXin LiC *CallNewNoThrow() { 29*67e74705SXin Li return new (std::nothrow) C[10]; 30*67e74705SXin Li } 31*67e74705SXin Li // PLAIN-LABEL: CallNewNoThrow 32*67e74705SXin Li // PLAIN-NOT: nosanitize 33*67e74705SXin Li // PLAIN-NOT: __asan_poison_cxx_array_cookie 34*67e74705SXin Li // ASAN-LABEL: CallNewNoThrow 35*67e74705SXin Li // ASAN: store{{.*}}nosanitize 36*67e74705SXin Li // ASAN-NOT: nosanitize 37*67e74705SXin Li // ASAN: call void @__asan_poison_cxx_array_cookie 38*67e74705SXin Li CallDelete(C * c)39*67e74705SXin Livoid CallDelete(C *c) { 40*67e74705SXin Li delete [] c; 41*67e74705SXin Li } 42*67e74705SXin Li 43*67e74705SXin Li // PLAIN-LABEL: CallDelete 44*67e74705SXin Li // PLAIN-NOT: nosanitize 45*67e74705SXin Li // ASAN-LABEL: CallDelete 46*67e74705SXin Li // ASAN-NOT: nosanitize 47*67e74705SXin Li // ASAN: call i64 @__asan_load_cxx_array_cookie 48*67e74705SXin Li // ASAN-NOT: nosanitize 49*67e74705SXin Li 50*67e74705SXin Li char Buffer[20]; CallPlacementNew()51*67e74705SXin LiC *CallPlacementNew() { 52*67e74705SXin Li return new (Buffer) C[20]; 53*67e74705SXin Li } 54*67e74705SXin Li // ASAN-LABEL: CallPlacementNew 55*67e74705SXin Li // ASAN-NOT: __asan_poison_cxx_array_cookie 56