1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10.0.0 -emit-llvm -o - %s | FileCheck %s
3 struct X
{ int i
; float f
; };
6 // CHECK-LABEL: define{{.*}} void @_Z21reinterpret_cast_testRiRfR1X
7 void reinterpret_cast_test(int &ir
, float &fr
, X
&xr
) {
8 // CHECK: load ptr, ptr
9 // CHECK: load i32, ptr
10 ir
= reinterpret_cast<int&>(fr
);
12 // CHECK: load i32, ptr
13 ir
= reinterpret_cast<int&>(xr
);
15 // CHECK: load float, ptr
16 fr
= reinterpret_cast<float&>(ir
);
18 // CHECK: load float, ptr
19 fr
= reinterpret_cast<float&>(xr
);
20 // CHECK: load ptr, ptr
21 // CHECK: call void @llvm.memcpy.p0.p0.i64
22 xr
= reinterpret_cast<X
&>(ir
);
23 // CHECK: load ptr, ptr
24 // CHECK: call void @llvm.memcpy.p0.p0.i64
25 xr
= reinterpret_cast<X
&>(fr
);
27 _Complex
float &cfr
= cf
;
28 // CHECK: load ptr, ptr
29 // CHECK: load float, ptr
30 // CHECK: load float, ptr
31 cfr
= reinterpret_cast<_Complex
float&>(ir
);
32 // CHECK: load ptr, ptr
33 // CHECK: load float, ptr
34 // CHECK: load float, ptr
35 cfr
= reinterpret_cast<_Complex
float&>(fr
);
36 // CHECK: load float, ptr
37 // CHECK: load float, ptr
38 cfr
= reinterpret_cast<_Complex
float&>(xr
);
42 // CHECK-LABEL: define{{.*}} void @_Z6c_castRiRfR1X
43 void c_cast(int &ir
, float &fr
, X
&xr
) {
44 // CHECK: load ptr, ptr
45 // CHECK: load i32, ptr
48 // CHECK: load i32, ptr
51 // CHECK: load float, ptr
54 // CHECK: load float, ptr
56 // CHECK: load ptr, ptr
57 // CHECK: call void @llvm.memcpy.p0.p0.i64
59 // CHECK: load ptr, ptr
60 // CHECK: call void @llvm.memcpy.p0.p0.i64
63 _Complex
float &cfr
= cf
;
64 // CHECK: load ptr, ptr
65 // CHECK: load float, ptr
66 // CHECK: load float, ptr
67 cfr
= (_Complex
float&)ir
;
68 // CHECK: load ptr, ptr
69 // CHECK: load float, ptr
70 // CHECK: load float, ptr
71 cfr
= (_Complex
float&)fr
;
72 // CHECK: load float, ptr
73 // CHECK: load float, ptr
74 cfr
= (_Complex
float&)xr
;
78 // CHECK-LABEL: define{{.*}} void @_Z15functional_castRiRfR1X
79 void functional_cast(int &ir
, float &fr
, X
&xr
) {
81 typedef float &floatref
;
83 // CHECK: load ptr, ptr
84 // CHECK: load i32, ptr
87 // CHECK: load i32, ptr
90 // CHECK: load float, ptr
93 // CHECK: load float, ptr
95 // CHECK: load ptr, ptr
96 // CHECK: call void @llvm.memcpy.p0.p0.i64
98 // CHECK: load ptr, ptr
99 // CHECK: call void @llvm.memcpy.p0.p0.i64
101 typedef _Complex
float &complex_float_ref
;
103 _Complex
float &cfr
= cf
;
104 // CHECK: load ptr, ptr
105 // CHECK: load float, ptr
106 // CHECK: load float, ptr
107 cfr
= complex_float_ref(ir
);
108 // CHECK: load ptr, ptr
109 // CHECK: load float, ptr
110 // CHECK: load float, ptr
111 cfr
= complex_float_ref(fr
);
112 // CHECK: load float, ptr
113 // CHECK: load float, ptr
114 cfr
= complex_float_ref(xr
);
120 void copy( const struct in_addr
&new_addr
) {
121 int addr
= (int&)new_addr
;
126 void foo(double &X
, char *A
) {
127 X
= reinterpret_cast<double&>(A
[4]);
132 void serialize_annotatable_id( void*& id
)
134 unsigned long l_id
= (unsigned long&)id
;