| // RUN: %clang_cc1 -triple x86_64-gnu-linux -emit-llvm -o - %s | FileCheck %s -check-prefix=PLAIN | 
 | // RUN: %clang_cc1 -triple x86_64-gnu-linux -emit-llvm -o - -fsanitize=address %s | FileCheck %s -check-prefix=ASAN | 
 | // RUN: %clang_cc1 -triple x86_64-gnu-linux -emit-llvm -o - -fsanitize=address -fsanitize-address-poison-custom-array-cookie %s | FileCheck %s -check-prefix=ASAN-POISON-ALL-NEW-ARRAY | 
 |  | 
 | typedef __typeof__(sizeof(0)) size_t; | 
 | namespace std { | 
 |   struct nothrow_t {}; | 
 |   std::nothrow_t nothrow; | 
 | } | 
 | void *operator new[](size_t, const std::nothrow_t &) throw(); | 
 | void *operator new[](size_t, char *); | 
 | void *operator new[](size_t, int, int); | 
 |  | 
 | struct C { | 
 |   int x; | 
 |   ~C(); | 
 | }; | 
 |  | 
 | C *CallNew() { | 
 |   return new C[10]; | 
 | } | 
 | // PLAIN-LABEL: CallNew | 
 | // PLAIN-NOT: nosanitize | 
 | // PLAIN-NOT: __asan_poison_cxx_array_cookie | 
 | // ASAN-LABEL: CallNew | 
 | // ASAN: store{{.*}}nosanitize | 
 | // ASAN-NOT: nosanitize | 
 | // ASAN: call void @__asan_poison_cxx_array_cookie | 
 |  | 
 | C *CallNewNoThrow() { | 
 |   return new (std::nothrow) C[10]; | 
 | } | 
 | // PLAIN-LABEL: CallNewNoThrow | 
 | // PLAIN-NOT: nosanitize | 
 | // PLAIN-NOT: __asan_poison_cxx_array_cookie | 
 | // ASAN-LABEL: CallNewNoThrow | 
 | // ASAN: store{{.*}}nosanitize | 
 | // ASAN-NOT: nosanitize | 
 | // ASAN: call void @__asan_poison_cxx_array_cookie | 
 |  | 
 | void CallDelete(C *c) { | 
 |   delete [] c; | 
 | } | 
 |  | 
 | // PLAIN-LABEL: CallDelete | 
 | // PLAIN-NOT: nosanitize | 
 | // ASAN-LABEL: CallDelete | 
 | // ASAN-NOT: nosanitize | 
 | // ASAN: call i64 @__asan_load_cxx_array_cookie | 
 | // ASAN-NOT: nosanitize | 
 |  | 
 | char Buffer[20]; | 
 | C *CallPlacementNew() { | 
 |   return new (Buffer) C[20]; | 
 | } | 
 | // ASAN-LABEL: CallPlacementNew | 
 | // ASAN-NOT: __asan_poison_cxx_array_cookie | 
 |  | 
 | C *CallNewWithArgs() { | 
 | // ASAN-LABEL: CallNewWithArgs | 
 | // ASAN-NOT: call void @__asan_poison_cxx_array_cookie | 
 | // ASAN-POISON-ALL-NEW-ARRAY: call void @__asan_poison_cxx_array_cookie | 
 |   return new (123, 456) C[20]; | 
 | } |