Skip to content

Commit 74617de

Browse files
committed
Add the definition for extern "C" at cast-target-abi.rs.
1 parent 5227bba commit 74617de

File tree

1 file changed

+242
-24
lines changed

1 file changed

+242
-24
lines changed

tests/codegen/cast-target-abi.rs

+242-24
Original file line numberDiff line numberDiff line change
@@ -72,29 +72,247 @@ pub struct Three32s {
7272
c: u32,
7373
}
7474

75-
extern "C" {
76-
fn receives_twou16s(x: TwoU16s);
77-
fn returns_twou16s() -> TwoU16s;
75+
// CHECK-LABEL: @receives_twou16s
76+
// aarch64-SAME: ([[ABI_TYPE:i64]] {{.*}}[[ABI_VALUE:%.+]])
77+
// loongarch64-SAME: ([[ABI_TYPE:i64]] {{.*}}[[ABI_VALUE:%.+]])
78+
// powerpc64-SAME: ([[ABI_TYPE:i32]] {{.*}}[[ABI_VALUE:%.+]])
79+
// sparc64-SAME: ([[ABI_TYPE:i64]] {{.*}}[[ABI_VALUE:%.+]])
80+
// x86_64-SAME: ([[ABI_TYPE:i32]] {{.*}}[[ABI_VALUE:%.+]])
81+
#[no_mangle]
82+
#[inline(never)]
83+
pub extern "C" fn receives_twou16s(x: TwoU16s) {
84+
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [8 x i8], align [[ABI_ALIGN:8]]
85+
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [8 x i8], align [[ABI_ALIGN:8]]
86+
// powerpc64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:4]]
87+
// sparc64: [[ABI_ALLOCA:%.+]] = alloca [8 x i8], align [[ABI_ALIGN:8]]
88+
// x86_64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:4]]
89+
90+
// CHECK: [[RUST_ALLOCA:%.+]] = alloca [4 x i8], align [[RUST_ALIGN:2]]
91+
92+
// CHECK: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
93+
94+
// CHECK: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 4, i1 false)
95+
}
96+
97+
// CHECK-LABEL: @returns_twou16s
98+
// powerpc64-SAME: sret([4 x i8]) align [[RUST_ALIGN:2]] {{.*}}[[RET_PTR:%.*]])
99+
#[no_mangle]
100+
#[inline(never)]
101+
pub extern "C" fn returns_twou16s() -> TwoU16s {
102+
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
103+
// The other targets copy the cast ABI type to an alloca.
104+
105+
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:2]]
106+
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:2]]
107+
// sparc64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:2]]
108+
// x86_64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:2]]
109+
110+
// aarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:i64]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
111+
// loongarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:i64]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
112+
// sparc64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:i64]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
113+
// x86_64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:i32]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
114+
115+
// aarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
116+
// loongarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
117+
// sparc64: ret [[ABI_TYPE]] [[ABI_VALUE]]
118+
// x86_64: ret [[ABI_TYPE]] [[ABI_VALUE]]
119+
TwoU16s { a: 0, b: 1 }
120+
}
121+
122+
// CHECK-LABEL: @receives_fiveu16s
123+
// aarch64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
124+
// loongarch64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
125+
// powerpc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
126+
// sparc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
127+
// x86_64-SAME: ([[ABI_TYPE:{ i64, i16 }]] {{.*}}[[ABI_VALUE:%.+]])
128+
#[no_mangle]
129+
#[inline(never)]
130+
pub extern "C" fn receives_fiveu16s(x: FiveU16s) {
131+
// CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
132+
133+
// CHECK: [[RUST_ALLOCA:%.+]] = alloca [10 x i8], align [[RUST_ALIGN:2]]
134+
135+
// CHECK: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
136+
137+
// CHECK: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 10, i1 false)
138+
}
139+
140+
// CHECK-LABEL: @returns_fiveu16s
141+
// powerpc64-SAME: sret([10 x i8]) align [[RUST_ALIGN:2]] {{.*}}[[RET_PTR:%.*]])
142+
#[no_mangle]
143+
#[inline(never)]
144+
pub extern "C" fn returns_fiveu16s() -> FiveU16s {
145+
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
146+
// The other targets copy the cast ABI type to an alloca.
147+
148+
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [10 x i8], align [[ABI_ALIGN:2]]
149+
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [10 x i8], align [[ABI_ALIGN:2]]
150+
// sparc64: [[ABI_ALLOCA:%.+]] = alloca [10 x i8], align [[ABI_ALIGN:2]]
151+
// x86_64: [[ABI_ALLOCA:%.+]] = alloca [10 x i8], align [[ABI_ALIGN:2]]
152+
153+
// aarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
154+
// loongarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
155+
// sparc64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
156+
// x86_64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ i64, i16 }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
157+
158+
// aarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
159+
// loongarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
160+
// sparc64: ret [[ABI_TYPE]] [[ABI_VALUE]]
161+
// x86_64: ret [[ABI_TYPE]] [[ABI_VALUE]]
162+
FiveU16s { a: 0, b: 1, c: 2, d: 3, e: 4 }
163+
}
164+
165+
// CHECK-LABEL: @receives_doubledouble
166+
// aarch64-SAME: ([[ABI_TYPE:\[2 x double\]]] {{.*}}[[ABI_VALUE:%.+]])
167+
// loongarch64-SAME: ([[ABI_TYPE:{ double, double }]] {{.*}}[[ABI_VALUE:%.+]])
168+
// powerpc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
169+
// sparc64-SAME: ([[ABI_TYPE:{ double, double }]] {{.*}}[[ABI_VALUE:%.+]])
170+
// x86_64-SAME: ([[ABI_TYPE:{ double, double }]] {{.*}}[[ABI_VALUE:%.+]])
171+
#[no_mangle]
172+
#[inline(never)]
173+
pub extern "C" fn receives_doubledouble(x: DoubleDouble) {
174+
// CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
175+
176+
// CHECK: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
177+
178+
// CHECK: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
179+
180+
// CHECK: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 16, i1 false)
181+
}
182+
183+
// CHECK-LABEL: @returns_doubledouble
184+
// powerpc64-SAME: sret([16 x i8]) align [[RUST_ALIGN:8]] {{.*}}[[RET_PTR:%.*]])
185+
#[no_mangle]
186+
#[inline(never)]
187+
pub extern "C" fn returns_doubledouble() -> DoubleDouble {
188+
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
189+
// The other targets copy the cast ABI type to an alloca.
190+
191+
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
192+
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
193+
// sparc64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
194+
// x86_64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
78195

79-
fn receives_fiveu16s(x: FiveU16s);
80-
fn returns_fiveu16s() -> FiveU16s;
196+
// aarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x double\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
197+
// loongarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ double, double }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
198+
// sparc64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ double, double }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
199+
// x86_64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ double, double }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
200+
201+
// aarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
202+
// loongarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
203+
// sparc64: ret [[ABI_TYPE]] [[ABI_VALUE]]
204+
// x86_64: ret [[ABI_TYPE]] [[ABI_VALUE]]
205+
DoubleDouble { f: 0., g: 1. }
206+
}
207+
208+
// CHECK-LABEL: @receives_three32s
209+
// aarch64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
210+
// loongarch64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
211+
// powerpc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
212+
// sparc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
213+
// x86_64-SAME: ([[ABI_TYPE:{ i64, i32 }]] {{.*}}[[ABI_VALUE:%.+]])
214+
#[no_mangle]
215+
#[inline(never)]
216+
pub extern "C" fn receives_three32s(x: Three32s) {
217+
// CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
218+
219+
// CHECK: [[RUST_ALLOCA:%.+]] = alloca [12 x i8], align [[RUST_ALIGN:4]]
220+
221+
// CHECK: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
222+
223+
// CHECK: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 12, i1 false)
224+
}
225+
226+
// CHECK-LABEL: @returns_three32s
227+
// powerpc64-SAME: sret([12 x i8]) align [[RUST_ALIGN:4]] {{.*}}[[RET_PTR:%.*]])
228+
#[no_mangle]
229+
#[inline(never)]
230+
pub extern "C" fn returns_three32s() -> Three32s {
231+
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
232+
// The other targets copy the cast ABI type to an alloca.
233+
234+
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [12 x i8], align [[ABI_ALIGN:4]]
235+
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [12 x i8], align [[ABI_ALIGN:4]]
236+
// sparc64: [[ABI_ALLOCA:%.+]] = alloca [12 x i8], align [[ABI_ALIGN:4]]
237+
// x86_64: [[ABI_ALLOCA:%.+]] = alloca [12 x i8], align [[ABI_ALIGN:4]]
81238

82-
fn receives_doubledouble(x: DoubleDouble);
83-
fn returns_doubledouble() -> DoubleDouble;
239+
// aarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
240+
// loongarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
241+
// sparc64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
242+
// x86_64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ i64, i32 }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
84243

85-
fn receives_three32s(x: Three32s);
86-
fn returns_three32s() -> Three32s;
244+
// aarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
245+
// loongarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
246+
// sparc64: ret [[ABI_TYPE]] [[ABI_VALUE]]
247+
// x86_64: ret [[ABI_TYPE]] [[ABI_VALUE]]
248+
Three32s { a: 0, b: 0, c: 0 }
249+
}
250+
251+
// These functions cause an ICE in sparc64 ABI code (https://github.com/rust-lang/rust/issues/122620)
252+
#[cfg(not(target_arch = "sparc64"))]
253+
// aarch64-LABEL: @receives_doublefloat
254+
// loongarch64-LABEL: @receives_doublefloat
255+
// powerpc64-LABEL: @receives_doublefloat
256+
// x86_64-LABEL: @receives_doublefloat
257+
258+
// aarch64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
259+
// loongarch64-SAME: ([[ABI_TYPE:{ double, float }]] {{.*}}[[ABI_VALUE:%.+]])
260+
// powerpc64-SAME: ([[ABI_TYPE:\[2 x i64\]]] {{.*}}[[ABI_VALUE:%.+]])
261+
// x86_64-SAME: ([[ABI_TYPE:{ double, double }]] {{.*}}[[ABI_VALUE:%.+]])
262+
#[no_mangle]
263+
#[inline(never)]
264+
pub extern "C" fn receives_doublefloat(x: DoubleFloat) {
265+
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
266+
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
267+
// powerpc64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
268+
// x86_64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
269+
270+
// aarch64: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
271+
// loongarch64: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
272+
// powerpc64: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
273+
// x86_64: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
274+
275+
// aarch64: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
276+
// loongarch64: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
277+
// powerpc64: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
278+
// x86_64: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
279+
280+
// aarch64: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 16, i1 false)
281+
// loongarch64: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 12, i1 false)
282+
// powerpc64: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 16, i1 false)
283+
// x86_64: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 16, i1 false)
284+
}
285+
286+
#[cfg(not(target_arch = "sparc64"))]
287+
// aarch64-LABEL: @returns_doublefloat
288+
// loongarch64-LABEL: @returns_doublefloat
289+
// powerpc64-LABEL: @returns_doublefloat
290+
// x86_64-LABEL: @returns_doublefloat
291+
292+
// powerpc64-SAME: sret([16 x i8]) align [[RUST_ALIGN:8]] {{.*}}[[RET_PTR:%.*]])
293+
#[no_mangle]
294+
#[inline(never)]
295+
pub extern "C" fn returns_doublefloat() -> DoubleFloat {
296+
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
297+
// The other targets copy the cast ABI type to an alloca.
298+
299+
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
300+
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
301+
// x86_64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
302+
303+
// aarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:\[2 x i64\]]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
304+
// loongarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ double, float }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
305+
// x86_64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE:{ double, double }]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
87306

88-
// These functions cause an ICE in sparc64 ABI code (https://github.com/rust-lang/rust/issues/122620)
89-
#[cfg(not(target_arch = "sparc64"))]
90-
fn receives_doublefloat(x: DoubleFloat);
91-
#[cfg(not(target_arch = "sparc64"))]
92-
fn returns_doublefloat() -> DoubleFloat;
307+
// aarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
308+
// loongarch64: ret [[ABI_TYPE]] [[ABI_VALUE]]
309+
// x86_64: ret [[ABI_TYPE]] [[ABI_VALUE]]
310+
DoubleFloat { f: 0., g: 0. }
93311
}
94312

95313
// CHECK-LABEL: @call_twou16s
96314
#[no_mangle]
97-
pub unsafe fn call_twou16s() {
315+
pub fn call_twou16s() {
98316
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [8 x i8], align [[ABI_ALIGN:8]]
99317
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [8 x i8], align [[ABI_ALIGN:8]]
100318
// powerpc64: [[ABI_ALLOCA:%.+]] = alloca [4 x i8], align [[ABI_ALIGN:4]]
@@ -118,7 +336,7 @@ pub unsafe fn call_twou16s() {
118336

119337
// CHECK-LABEL: @return_twou16s
120338
#[no_mangle]
121-
pub unsafe fn return_twou16s() -> TwoU16s {
339+
pub fn return_twou16s() -> TwoU16s {
122340
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
123341

124342
// powerpc64: [[RETVAL:%.+]] = alloca [4 x i8], align 2
@@ -155,7 +373,7 @@ pub unsafe fn return_twou16s() -> TwoU16s {
155373

156374
// CHECK-LABEL: @call_fiveu16s
157375
#[no_mangle]
158-
pub unsafe fn call_fiveu16s() {
376+
pub fn call_fiveu16s() {
159377
// CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
160378

161379
// CHECK: [[RUST_ALLOCA:%.+]] = alloca [10 x i8], align 2
@@ -176,7 +394,7 @@ pub unsafe fn call_fiveu16s() {
176394
// CHECK-LABEL: @return_fiveu16s
177395
// CHECK-SAME: (ptr {{.+}} sret([10 x i8]) align [[RUST_ALIGN:2]] dereferenceable(10) [[RET_PTR:%.+]])
178396
#[no_mangle]
179-
pub unsafe fn return_fiveu16s() -> FiveU16s {
397+
pub fn return_fiveu16s() -> FiveU16s {
180398
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
181399

182400
// powerpc64: call void @returns_fiveu16s(ptr {{.+}} [[RET_PTR]])
@@ -207,7 +425,7 @@ pub unsafe fn return_fiveu16s() -> FiveU16s {
207425

208426
// CHECK-LABEL: @call_doubledouble
209427
#[no_mangle]
210-
pub unsafe fn call_doubledouble() {
428+
pub fn call_doubledouble() {
211429
// CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
212430

213431
// CHECK: [[RUST_ALLOCA:%.+]] = alloca [16 x i8], align [[RUST_ALIGN:8]]
@@ -227,7 +445,7 @@ pub unsafe fn call_doubledouble() {
227445

228446
// CHECK-LABEL: @return_doubledouble
229447
#[no_mangle]
230-
pub unsafe fn return_doubledouble() -> DoubleDouble {
448+
pub fn return_doubledouble() -> DoubleDouble {
231449
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
232450

233451
// powerpc64: [[RETVAL:%.+]] = alloca [16 x i8], align 8
@@ -269,7 +487,7 @@ pub unsafe fn return_doubledouble() -> DoubleDouble {
269487
// powerpc64-LABEL: @call_doublefloat
270488
// x86_64-LABEL: @call_doublefloat
271489
#[no_mangle]
272-
pub unsafe fn call_doublefloat() {
490+
pub fn call_doublefloat() {
273491
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
274492
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
275493
// powerpc64: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
@@ -305,7 +523,7 @@ pub unsafe fn call_doublefloat() {
305523
// powerpc64-LABEL: @return_doublefloat
306524
// x86_64-LABEL: @return_doublefloat
307525
#[no_mangle]
308-
pub unsafe fn return_doublefloat() -> DoubleFloat {
526+
pub fn return_doublefloat() -> DoubleFloat {
309527
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
310528

311529
// powerpc64: [[RETVAL:%.+]] = alloca [16 x i8], align 8
@@ -337,7 +555,7 @@ pub unsafe fn return_doublefloat() -> DoubleFloat {
337555

338556
// CHECK-LABEL: @call_three32s
339557
#[no_mangle]
340-
pub unsafe fn call_three32s() {
558+
pub fn call_three32s() {
341559
// CHECK: [[ABI_ALLOCA:%.+]] = alloca [16 x i8], align [[ABI_ALIGN:8]]
342560
// CHECK: [[RUST_ALLOCA:%.+]] = alloca [12 x i8], align [[RUST_ALIGN:4]]
343561
// CHECK: call void @llvm.memcpy.{{.+}}(ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], i64 12, i1 false)
@@ -357,7 +575,7 @@ pub unsafe fn call_three32s() {
357575
// CHECK-LABEL: @return_three32s(
358576
// CHECK-SAME: sret([12 x i8]) align [[RUST_ALIGN:4]] {{.*}}[[RUST_RETVAL:%.*]])
359577
#[no_mangle]
360-
pub unsafe fn return_three32s() -> Three32s {
578+
pub fn return_three32s() -> Three32s {
361579
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
362580

363581
// powerpc64: call void @returns_three32s(ptr {{.+}} [[RUST_RETVAL]])

0 commit comments

Comments
 (0)