// RUN: %clang_cc1 -no-opaque-pointers -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 -no-opaque-pointers -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 noundef 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;
  };
}
