// RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s void t1(int *a) { delete a; } struct S { int a; }; // POD types. void t3(S *s) { delete s; } // Non-POD struct T { ~T(); int a; }; // CHECK: define void @_Z2t4P1T void t4(T *t) { // CHECK: call void @_ZN1TD1Ev // CHECK-NEXT: bitcast // CHECK-NEXT: call void @_ZdlPv delete t; } // PR5102 template class A { operator T *() const; }; void f() { A a; delete a; } namespace test0 { struct A { void *operator new(__SIZE_TYPE__ sz); void operator delete(void *p) { ::operator delete(p); } ~A() {} }; // CHECK: define void @_ZN5test04testEPNS_1AE( void test(A *a) { // CHECK: call void @_ZN5test01AD1Ev // CHECK-NEXT: bitcast // CHECK-NEXT: call void @_ZN5test01AdlEPv delete a; } // CHECK: define linkonce_odr void @_ZN5test01AD1Ev // CHECK: define linkonce_odr void @_ZN5test01AdlEPv }