brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.0 KiB · 55913af Raw
115 lines · cpp
1// Check that delete exprs call the sized deallocation function if2// -fsized-deallocation is passed in C++11 or std >= C++14.3// RUN: %clang_cc1 -std=c++11 -fsized-deallocation %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s4// RUN: %clang_cc1 -std=c++14 %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s5 6// Check that we don't used sized deallocation with -fno-sized-deallocation or without C++14.7// RUN: %clang_cc1 -std=c++11 %s -emit-llvm -triple x86_64-linux-gnu -o - | FileCheck %s --check-prefix=CHECK-UNSIZED8// RUN: %clang_cc1 -std=c++14 %s -emit-llvm -triple x86_64-linux-gnu -fno-sized-deallocation -o - \9// RUN:     | FileCheck %s --check-prefix=CHECK-UNSIZED10 11// CHECK-UNSIZED-NOT: _ZdlPvm12// CHECK-UNSIZED-NOT: _ZdaPvm13 14typedef decltype(sizeof(0)) size_t;15 16typedef int A;17struct B { int n; };18struct C { ~C() {} };19struct D { D(); virtual ~D() {} };20struct E {21  void *operator new(size_t);22  void *operator new[](size_t);23  void operator delete(void *) noexcept;24  void operator delete[](void *) noexcept;25};26struct F {27  void *operator new(size_t);28  void *operator new[](size_t);29  void operator delete(void *, size_t) noexcept;30  void operator delete[](void *, size_t) noexcept;31};32 33template<typename T> T get();34 35template<typename T>36void del() {37  ::delete get<T*>();38  ::delete[] get<T*>();39  delete get<T*>();40  delete[] get<T*>();41}42 43template void del<A>();44template void del<B>();45template void del<C>();46template void del<D>();47template void del<E>();48template void del<F>();49 50D::D() {}51 52// CHECK-LABEL: define weak_odr void @_Z3delIiEvv()53// CHECK: call void @_ZdlPvm(ptr noundef %{{[^ ]*}}, i64 noundef 4)54// CHECK: call void @_ZdaPv(ptr noundef %{{[^ ]*}})55//56// CHECK: call void @_ZdlPvm(ptr noundef %{{[^ ]*}}, i64 noundef 4)57// CHECK: call void @_ZdaPv(ptr noundef %{{[^ ]*}})58 59// CHECK-LABEL: declare void @_ZdlPvm(ptr60 61// CHECK-LABEL: define weak_odr void @_Z3delI1BEvv()62// CHECK: call void @_ZdlPvm(ptr noundef %{{[^ ]*}}, i64 noundef 4)63// CHECK: call void @_ZdaPv(ptr noundef %{{[^ ]*}})64//65// CHECK: call void @_ZdlPvm(ptr noundef %{{[^ ]*}}, i64 noundef 4)66// CHECK: call void @_ZdaPv(ptr noundef %{{[^ ]*}})67 68// CHECK-LABEL: define weak_odr void @_Z3delI1CEvv()69// CHECK: call void @_ZdlPvm(ptr noundef %{{[^ ]*}}, i64 noundef 1)70// CHECK: mul i64 1, %{{[^ ]*}}71// CHECK: add i64 %{{[^ ]*}}, 872// CHECK: call void @_ZdaPvm(ptr noundef %{{[^ ]*}}, i64 noundef %{{[^ ]*}})73//74// CHECK: call void @_ZdlPvm(ptr noundef %{{[^ ]*}}, i64 noundef 1)75// CHECK: mul i64 1, %{{[^ ]*}}76// CHECK: add i64 %{{[^ ]*}}, 877// CHECK: call void @_ZdaPvm(ptr noundef %{{[^ ]*}}, i64 noundef %{{[^ ]*}})78 79// CHECK-LABEL: declare void @_ZdaPvm(ptr80 81// CHECK-LABEL: define weak_odr void @_Z3delI1DEvv()82// CHECK: call void @_ZdlPvm(ptr noundef %{{[^ ]*}}, i64 noundef 8)83// CHECK: mul i64 8, %{{[^ ]*}}84// CHECK: add i64 %{{[^ ]*}}, 885// CHECK: call void @_ZdaPvm(ptr noundef %{{[^ ]*}}, i64 noundef %{{[^ ]*}})86//87// CHECK-NOT: Zdl88// CHECK: call void %{{.*}}89// CHECK-NOT: Zdl90// CHECK: mul i64 8, %{{[^ ]*}}91// CHECK: add i64 %{{[^ ]*}}, 892// CHECK: call void @_ZdaPvm(ptr noundef %{{[^ ]*}}, i64 noundef %{{[^ ]*}})93 94// CHECK-LABEL: define weak_odr void @_Z3delI1EEvv()95// CHECK: call void @_ZdlPvm(ptr noundef %{{[^ ]*}}, i64 noundef 1)96// CHECK: call void @_ZdaPv(ptr noundef %{{[^ ]*}})97//98// CHECK: call void @_ZN1EdlEPv(ptr noundef %{{[^ ]*}})99// CHECK: call void @_ZN1EdaEPv(ptr noundef %{{[^ ]*}})100 101// CHECK-LABEL: define weak_odr void @_Z3delI1FEvv()102// CHECK: call void @_ZdlPvm(ptr noundef %{{[^ ]*}}, i64 noundef 1)103// CHECK: mul i64 1, %{{[^ ]*}}104// CHECK: add i64 %{{[^ ]*}}, 8105// CHECK: call void @_ZdaPvm(ptr noundef %{{[^ ]*}}, i64 noundef %{{[^ ]*}})106//107// CHECK: call void @_ZN1FdlEPvm(ptr noundef %{{[^ ]*}}, i64 noundef 1)108// CHECK: mul i64 1, %{{[^ ]*}}109// CHECK: add i64 %{{[^ ]*}}, 8110// CHECK: call void @_ZN1FdaEPvm(ptr noundef %{{[^ ]*}}, i64 noundef %{{[^ ]*}})111 112 113// CHECK-LABEL: define linkonce_odr void @_ZN1DD0Ev(ptr {{[^,]*}} %this)114// CHECK: call void @_ZdlPvm(ptr noundef %{{[^ ]*}}, i64 noundef 8)115