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