// RUN: %clang_cc1 -no-opaque-pointers -std=c++11 -triple x86_64-apple-darwin10 -emit-llvm -fobjc-arc -disable-llvm-passes -o - %s | FileCheck %s
// rdar://18249673

@class MyObject;
struct base {
  ~base() = default;
};
struct derived : public base {
  MyObject *myobject;
};

void test1() {
  derived d1;
}
// CHECK-LABEL: define{{.*}} void @_Z5test1v()
// CHECK: call void @_ZN7derivedC1Ev
// CHECK: call void @_ZN7derivedD1Ev

void test2() {
  derived *d2 = new derived;
  delete d2;
}
// CHECK-LABEL: define{{.*}} void @_Z5test2v()
// CHECK:   call void @_ZN7derivedC1Ev
// CHECK:   call void @_ZN7derivedD1Ev

template <typename T>
struct tderived : public base {
  MyObject *myobject;
};
void test3() {
  tderived<int> d1;
}
// CHECK-LABEL: define{{.*}} void @_Z5test3v()
// CHECK: call void @_ZN8tderivedIiEC1Ev
// CHECK: call void @_ZN8tderivedIiED1Ev

void test4() {
  tderived<int> *d2 = new tderived<int>;
  delete d2;
}
// CHECK-LABEL: define{{.*}} void @_Z5test4v()
// CHECK: call void @_ZN8tderivedIiEC1Ev
// CHECK: call void @_ZN8tderivedIiED1Ev

// CHECK-LABEL: define linkonce_odr void @_ZN7derivedD2Ev
// CHECK: call void @llvm.objc.storeStrong(i8** {{.*}}, i8* null)

// CHECK-LABEL: define linkonce_odr void @_ZN8tderivedIiED2Ev
// CHECK: call void @llvm.objc.storeStrong(i8** {{.*}}, i8* null)
