brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 899c357 Raw
137 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10.0.0 -emit-llvm -o - %s | FileCheck %s2 3struct X { int i; float f; };4struct Y { X x; };5 6// CHECK-LABEL: define{{.*}} void @_Z21reinterpret_cast_testRiRfR1X7void reinterpret_cast_test(int &ir, float &fr, X &xr) {8  // CHECK: load ptr, ptr9  // CHECK: load i32, ptr10  ir = reinterpret_cast<int&>(fr);11  // CHECK: load12  // CHECK: load i32, ptr13  ir = reinterpret_cast<int&>(xr);14  // CHECK: load ptr15  // CHECK: load float, ptr16  fr = reinterpret_cast<float&>(ir);17  // CHECK: load18  // CHECK: load float, ptr19  fr = reinterpret_cast<float&>(xr);20  // CHECK: load ptr, ptr21  // CHECK: call void @llvm.memcpy.p0.p0.i6422  xr = reinterpret_cast<X&>(ir);23  // CHECK: load ptr, ptr24  // CHECK: call void @llvm.memcpy.p0.p0.i6425  xr = reinterpret_cast<X&>(fr);26  _Complex float cf;27  _Complex float &cfr = cf;28  // CHECK: load ptr, ptr29  // CHECK: load float, ptr30  // CHECK: load float, ptr31  cfr = reinterpret_cast<_Complex float&>(ir);32  // CHECK: load ptr, ptr33  // CHECK: load float, ptr34  // CHECK: load float, ptr35  cfr = reinterpret_cast<_Complex float&>(fr);36  // CHECK: load float, ptr37  // CHECK: load float, ptr38  cfr = reinterpret_cast<_Complex float&>(xr);39  // CHECK: ret void40}41 42// CHECK-LABEL: define{{.*}} void @_Z6c_castRiRfR1X43void c_cast(int &ir, float &fr, X &xr) {44  // CHECK: load ptr, ptr45  // CHECK: load i32, ptr46  ir = (int&)fr;47  // CHECK: load48  // CHECK: load i32, ptr49  ir = (int&)xr;50  // CHECK: load ptr51  // CHECK: load float, ptr52  fr = (float&)ir;53  // CHECK: load54  // CHECK: load float, ptr55  fr = (float&)xr;56  // CHECK: load ptr, ptr57  // CHECK: call void @llvm.memcpy.p0.p0.i6458  xr = (X&)ir;59  // CHECK: load ptr, ptr60  // CHECK: call void @llvm.memcpy.p0.p0.i6461  xr = (X&)fr;62  _Complex float cf;63  _Complex float &cfr = cf;64  // CHECK: load ptr, ptr65  // CHECK: load float, ptr66  // CHECK: load float, ptr67  cfr = (_Complex float&)ir;68  // CHECK: load ptr, ptr69  // CHECK: load float, ptr70  // CHECK: load float, ptr71  cfr = (_Complex float&)fr;72  // CHECK: load float, ptr73  // CHECK: load float, ptr74  cfr = (_Complex float&)xr;75  // CHECK: ret void76}77 78// CHECK-LABEL: define{{.*}} void @_Z15functional_castRiRfR1X79void functional_cast(int &ir, float &fr, X &xr) {80  typedef int &intref;81  typedef float &floatref;82  typedef X &Xref;83  // CHECK: load ptr, ptr84  // CHECK: load i32, ptr85  ir = intref(fr);86  // CHECK: load87  // CHECK: load i32, ptr88  ir = intref(xr);89  // CHECK: load ptr90  // CHECK: load float, ptr91  fr = floatref(ir);92  // CHECK: load93  // CHECK: load float, ptr94  fr = floatref(xr);95  // CHECK: load ptr, ptr96  // CHECK: call void @llvm.memcpy.p0.p0.i6497  xr = Xref(ir);98  // CHECK: load ptr, ptr99  // CHECK: call void @llvm.memcpy.p0.p0.i64100  xr = Xref(fr);101  typedef _Complex float &complex_float_ref;102  _Complex float cf;103  _Complex float &cfr = cf;104  // CHECK: load ptr, ptr105  // CHECK: load float, ptr106  // CHECK: load float, ptr107  cfr = complex_float_ref(ir);108  // CHECK: load ptr, ptr109  // CHECK: load float, ptr110  // CHECK: load float, ptr111  cfr = complex_float_ref(fr);112  // CHECK: load float, ptr113  // CHECK: load float, ptr114  cfr = complex_float_ref(xr);115  // CHECK: ret void116}117 118namespace PR6437 {119  struct in_addr {};120  void copy( const struct in_addr &new_addr ) {121    int addr = (int&)new_addr;122  }123}124 125namespace PR7593 {126  void foo(double &X, char *A) {127    X = reinterpret_cast<double&>(A[4]);128  }129}130 131namespace PR7344 {132  void serialize_annotatable_id( void*& id )133  {134    unsigned long l_id = (unsigned long&)id;135  }136}137