// RUN: %clang_cc1 -fobjc-gc -emit-llvm -triple x86_64-apple-darwin10.0.0 -fobjc-runtime=macosx-fragile-10.5 -o - %s | FileCheck %s -check-prefix=CHECK-OBJ
// RUN: %clang_cc1 -x c++    -emit-llvm -triple x86_64-apple-darwin10.0.0                                    -o - %s | FileCheck %s -check-prefix=CHECK-CPP
#ifdef __OBJC__
struct A { 
  A &operator=(const A&);
  A &operator=(A&);
};

struct B {
  B &operator=(B&);
};

struct C {
  virtual C& operator=(const C&);
};

struct POD {
  id myobjc;
  int array[3][4];
};

struct CopyByValue {
  CopyByValue(const CopyByValue&);
  CopyByValue &operator=(CopyByValue);
};

struct D : A, B, virtual C { 
  int scalar;
  int scalar_array[2][3];
  B class_member;
  C class_member_array[2][3];
  POD pod_array[2][3];

  union {
    int x;
    float f[3];
  };

  CopyByValue by_value;
};

void test_D(D d1, D d2) {
  d1 = d2;
}

// CHECK-OBJ-LABEL: define linkonce_odr nonnull align {{[0-9]+}} dereferenceable({{[0-9]+}}) %struct.D* @_ZN1DaSERS_
// CHECK-OBJ: {{call.*_ZN1AaSERS_}}
// CHECK-OBJ: {{call.*_ZN1BaSERS_}}
// CHECK-OBJ: {{call.*_ZN1CaSERKS_}}
// CHECK-OBJ: {{call void @llvm.memcpy.p0i8.p0i8.i64.*i64 24}}
// CHECK-OBJ: {{call.*_ZN1BaSERS_}}
// CHECK-OBJ: br
// CHECK-OBJ: {{call.*_ZN1CaSERKS_}}
// CHECK-OBJ: {{call.*@objc_memmove_collectable}}
// CHECK-OBJ: {{call void @llvm.memcpy.p0i8.p0i8.i64.*i64 12}}
// CHECK-OBJ: call void @_ZN11CopyByValueC1ERKS_
// CHECK-OBJ: {{call.*_ZN11CopyByValueaSES_}}
// CHECK-OBJ: ret
#endif

namespace PR13329 {
#ifndef __OBJC__
  typedef void* id;
#endif
  struct POD {
    id    i;
    short s;
  };
  
  struct NonPOD {
    id    i;
    short s;
    
    NonPOD();
  };
  
  struct DerivedNonPOD: NonPOD {
    char  c;
  };
  
  struct DerivedPOD: POD {
    char  c;
  };
  
  void testPOD() {
    POD a;
    POD b;
    // CHECK-OBJ: @objc_memmove_collectable{{.*}}i64 16
    // CHECK-CPP: @llvm.memcpy{{.*}}i64 16
    b = a;
  }
  
  void testNonPOD() {
    NonPOD a;
    NonPOD b;
    // CHECK-OBJ: @objc_memmove_collectable{{.*}}i64 10
    // CHECK-CPP: @llvm.memcpy{{.*}}i64 10
    b = a;
  }
  
  void testDerivedNonPOD() {
    DerivedNonPOD a;
    NonPOD        b;
    DerivedNonPOD c;
    // CHECK-OBJ: @objc_memmove_collectable{{.*}}i64 10
    // CHECK-CPP: @llvm.memcpy{{.*}}i64 10
    (NonPOD&) a = b;
    // CHECK-OBJ: @objc_memmove_collectable{{.*}}i64 11
    // CHECK-CPP: @llvm.memcpy{{.*}}i64 11
    a = c;
  };
  
  void testDerivedPOD() {
    DerivedPOD a;
    POD        b;
    DerivedPOD c;
    // CHECK-OBJ: @objc_memmove_collectable{{.*}}i64 16
    // CHECK-CPP: @llvm.memcpy{{.*}}i64 16
    (POD&) a = b;
    // CHECK-OBJ: @objc_memmove_collectable{{.*}}i64 17
    // CHECK-CPP: @llvm.memcpy{{.*}}i64 17
    a = c;
  };
}
