// RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-apple-darwin10.0.0 -emit-llvm -o - %s | FileCheck %s

struct X { int i; float f; };
struct Y { X x; };

// CHECK-LABEL: define{{.*}} void @_Z21reinterpret_cast_testRiRfR1X
void reinterpret_cast_test(int &ir, float &fr, X &xr) {
  // CHECK: load float*, float**
  // CHECK: bitcast float*
  // CHECK: load i32, i32*
  ir = reinterpret_cast<int&>(fr);
  // CHECK: load
  // CHECK: {{bitcast.*to i32\*}}
  // CHECK: load i32, i32*
  ir = reinterpret_cast<int&>(xr);
  // CHECK: load i32
  // CHECK: {{bitcast.*to float\*}}
  // CHECK: load float, float*
  fr = reinterpret_cast<float&>(ir);
  // CHECK: load
  // CHECK: {{bitcast.*to float\*}}
  // CHECK: load float, float*
  fr = reinterpret_cast<float&>(xr);
  // CHECK: load i32*, i32**
  // CHECK: bitcast i32*
  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
  xr = reinterpret_cast<X&>(ir);
  // CHECK: load float*, float**
  // CHECK: bitcast float*
  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
  xr = reinterpret_cast<X&>(fr);
  _Complex float cf;
  _Complex float &cfr = cf;
  // CHECK: load i32*, i32**
  // CHECK: bitcast i32*
  // CHECK: load float, float*
  // CHECK: load float, float*
  cfr = reinterpret_cast<_Complex float&>(ir);
  // CHECK: load float*, float**
  // CHECK: bitcast float*
  // CHECK: load float, float*
  // CHECK: load float, float*
  cfr = reinterpret_cast<_Complex float&>(fr);
  // CHECK: bitcast
  // CHECK: load float, float*
  // CHECK: load float, float*
  cfr = reinterpret_cast<_Complex float&>(xr);
  // CHECK: ret void
}

// CHECK-LABEL: define{{.*}} void @_Z6c_castRiRfR1X
void c_cast(int &ir, float &fr, X &xr) {
  // CHECK: load float*, float**
  // CHECK: bitcast float*
  // CHECK: load i32, i32*
  ir = (int&)fr;
  // CHECK: load
  // CHECK: {{bitcast.*to i32\*}}
  // CHECK: load i32, i32*
  ir = (int&)xr;
  // CHECK: load i32
  // CHECK: {{bitcast.*to float\*}}
  // CHECK: load float, float*
  fr = (float&)ir;
  // CHECK: load
  // CHECK: {{bitcast.*to float\*}}
  // CHECK: load float, float*
  fr = (float&)xr;
  // CHECK: load i32*, i32**
  // CHECK: bitcast i32*
  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
  xr = (X&)ir;
  // CHECK: load float*, float**
  // CHECK: bitcast float*
  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
  xr = (X&)fr;
  _Complex float cf;
  _Complex float &cfr = cf;
  // CHECK: load i32*, i32**
  // CHECK: bitcast i32*
  // CHECK: load float, float*
  // CHECK: load float, float*
  cfr = (_Complex float&)ir;
  // CHECK: load float*, float**
  // CHECK: bitcast float*
  // CHECK: load float, float*
  // CHECK: load float, float*
  cfr = (_Complex float&)fr;
  // CHECK: bitcast
  // CHECK: load float, float*
  // CHECK: load float, float*
  cfr = (_Complex float&)xr;
  // CHECK: ret void
}

// CHECK-LABEL: define{{.*}} void @_Z15functional_castRiRfR1X
void functional_cast(int &ir, float &fr, X &xr) {
  typedef int &intref;
  typedef float &floatref;
  typedef X &Xref;
  // CHECK: load float*, float**
  // CHECK: bitcast float*
  // CHECK: load i32, i32*
  ir = intref(fr);
  // CHECK: load
  // CHECK: {{bitcast.*to i32\*}}
  // CHECK: load i32, i32*
  ir = intref(xr);
  // CHECK: load i32
  // CHECK: {{bitcast.*to float\*}}
  // CHECK: load float, float*
  fr = floatref(ir);
  // CHECK: load
  // CHECK: {{bitcast.*to float\*}}
  // CHECK: load float, float*
  fr = floatref(xr);
  // CHECK: load i32*, i32**
  // CHECK: bitcast i32*
  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
  xr = Xref(ir);
  // CHECK: load float*, float**
  // CHECK: bitcast float*
  // CHECK: call void @llvm.memcpy.p0i8.p0i8.i64
  xr = Xref(fr);
  typedef _Complex float &complex_float_ref;
  _Complex float cf;
  _Complex float &cfr = cf;
  // CHECK: load i32*, i32**
  // CHECK: bitcast i32*
  // CHECK: load float, float*
  // CHECK: load float, float*
  cfr = complex_float_ref(ir);
  // CHECK: load float*, float**
  // CHECK: bitcast float*
  // CHECK: load float, float*
  // CHECK: load float, float*
  cfr = complex_float_ref(fr);
  // CHECK: bitcast
  // CHECK: load float, float*
  // CHECK: load float, float*
  cfr = complex_float_ref(xr);
  // CHECK: ret void
}

namespace PR6437 {
  struct in_addr {};
  void copy( const struct in_addr &new_addr ) {
    int addr = (int&)new_addr;
  }
}

namespace PR7593 {
  void foo(double &X, char *A) {
    X = reinterpret_cast<double&>(A[4]);
  }
}

namespace PR7344 {
  void serialize_annotatable_id( void*& id )
  {
    unsigned long l_id = (unsigned long&)id;
  }
}
