1176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// RUN: %clang_cc1 -triple x86_64-gnu-linux -emit-llvm -o - %s | FileCheck %s -check-prefix=PLAIN 2176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// RUN: %clang_cc1 -triple x86_64-gnu-linux -emit-llvm -o - -fsanitize=address %s | FileCheck %s -check-prefix=ASAN 3176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 4176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinestypedef __typeof__(sizeof(0)) size_t; 5176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesnamespace std { 6176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines struct nothrow_t {}; 7176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines std::nothrow_t nothrow; 8176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 9176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid *operator new[](size_t, const std::nothrow_t &) throw(); 10176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid *operator new[](size_t, char *); 11176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 12176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesstruct C { 13176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines int x; 14176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines ~C(); 15176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines}; 16176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 17176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesC *CallNew() { 18176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return new C[10]; 19176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 20176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// PLAIN-LABEL: CallNew 21176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// PLAIN-NOT: nosanitize 22176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// PLAIN-NOT: __asan_poison_cxx_array_cookie 23176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN-LABEL: CallNew 24176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN: store{{.*}}nosanitize 25176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN-NOT: nosanitize 26176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN: call void @__asan_poison_cxx_array_cookie 27176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 28176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesC *CallNewNoThrow() { 29176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return new (std::nothrow) C[10]; 30176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 31176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// PLAIN-LABEL: CallNewNoThrow 32176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// PLAIN-NOT: nosanitize 33176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// PLAIN-NOT: __asan_poison_cxx_array_cookie 34176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN-LABEL: CallNewNoThrow 35176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN: store{{.*}}nosanitize 36176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN-NOT: nosanitize 37176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN: call void @__asan_poison_cxx_array_cookie 38176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 39176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hinesvoid CallDelete(C *c) { 40176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines delete [] c; 41176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 42176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 43176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// PLAIN-LABEL: CallDelete 44176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// PLAIN-NOT: nosanitize 45176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN-LABEL: CallDelete 46176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN-NOT: nosanitize 47176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN: call i64 @__asan_load_cxx_array_cookie 48176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN-NOT: nosanitize 49176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines 50176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hineschar Buffer[20]; 51176edba5311f6eff0cad2631449885ddf4fbc9eaStephen HinesC *CallPlacementNew() { 52176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines return new (Buffer) C[20]; 53176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines} 54176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN-LABEL: CallPlacementNew 55176edba5311f6eff0cad2631449885ddf4fbc9eaStephen Hines// ASAN-NOT: __asan_poison_cxx_array_cookie 56