Skip to content

Commit dec81ac

Browse files
disable crashing test on sparc
1 parent 6577aef commit dec81ac

File tree

1 file changed

+23
-12
lines changed

1 file changed

+23
-12
lines changed

tests/codegen/cast-target-abi.rs

+23-12
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,10 @@ extern "C" {
6767
fn receives_doubledouble(x: DoubleDouble);
6868
fn returns_doubledouble() -> DoubleDouble;
6969

70+
// These functions cause an ICE in sparc64 ABI code (https://github.com/rust-lang/rust/issues/122620)
71+
#[cfg(not(target_arch = "sparc64"))]
7072
fn receives_doublefloat(x: DoubleFloat);
73+
#[cfg(not(target_arch = "sparc64"))]
7174
fn returns_doublefloat() -> DoubleFloat;
7275
}
7376

@@ -214,28 +217,41 @@ pub unsafe fn return_doubledouble() -> DoubleDouble {
214217
returns_doubledouble()
215218
}
216219

217-
// CHECK-LABEL: @call_doublefloat
220+
// This test causes an ICE in sparc64 ABI code (https://github.com/rust-lang/rust/issues/122620)
221+
#[cfg(not(target_arch = "sparc64"))]
222+
// aarch64-LABEL: @call_doublefloat
223+
// loongarch64-LABEL: @call_doublefloat
224+
// powerpc64-LABEL: @call_doublefloat
218225
#[no_mangle]
219226
pub unsafe fn call_doublefloat() {
220227
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [[ABI_TYPE:\[2 x i64\]]], align [[ABI_ALIGN:8]]
221228
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [[ABI_TYPE:{ double, float }]], align [[ABI_ALIGN:8]]
222229
// powerpc64: [[ABI_ALLOCA:%.+]] = alloca [[ABI_TYPE:\[2 x i64\]]], align [[ABI_ALIGN:8]]
223-
// sparc64: [[ABI_ALLOCA:%.+]] = alloca [[ABI_TYPE:{ double, float, i32, i64 }]], align [[ABI_ALIGN:8]]
224230

225-
// CHECK: [[RUST_ALLOCA:%.+]] = alloca %DoubleFloat, align [[RUST_ALIGN:8]]
231+
// aarch64: [[RUST_ALLOCA:%.+]] = alloca %DoubleFloat, align [[RUST_ALIGN:8]]
232+
// loongarch64: [[RUST_ALLOCA:%.+]] = alloca %DoubleFloat, align [[RUST_ALIGN:8]]
233+
// powerpc64: [[RUST_ALLOCA:%.+]] = alloca %DoubleFloat, align [[RUST_ALIGN:8]]
226234

227235
// aarch64: call void @llvm.memcpy.{{.+}}(ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], i64 16, i1 false)
228236
// loongarch64: call void @llvm.memcpy.{{.+}}(ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], i64 12, i1 false)
229237
// powerpc64: call void @llvm.memcpy.{{.+}}(ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], i64 16, i1 false)
230-
// sparc64: call void @llvm.memcpy.{{.+}}(ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], i64 16, i1 false)
231238

232-
// CHECK: [[ABI_VALUE:%.+]] = load [[ABI_TYPE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
233-
// CHECK: call void @receives_doublefloat([[ABI_TYPE]] {{(inreg )?}}[[ABI_VALUE]])
239+
// aarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
240+
// loongarch64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
241+
// powerpc64: [[ABI_VALUE:%.+]] = load [[ABI_TYPE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
242+
243+
// aarch64: call void @receives_doublefloat([[ABI_TYPE]] {{(inreg )?}}[[ABI_VALUE]])
244+
// loongarch64: call void @receives_doublefloat([[ABI_TYPE]] {{(inreg )?}}[[ABI_VALUE]])
245+
// powerpc64: call void @receives_doublefloat([[ABI_TYPE]] {{(inreg )?}}[[ABI_VALUE]])
234246
let x = DoubleFloat { f: 1., g: 2. };
235247
receives_doublefloat(x);
236248
}
237249

238-
// CHECK-LABEL: @return_doublefloat
250+
// This test causes an ICE in sparc64 ABI code (https://github.com/rust-lang/rust/issues/122620)
251+
#[cfg(not(target_arch = "sparc64"))]
252+
// aarch64-LABEL: @return_doublefloat
253+
// loongarch64-LABEL: @return_doublefloat
254+
// powerpc64-LABEL: @return_doublefloat
239255
#[no_mangle]
240256
pub unsafe fn return_doublefloat() -> DoubleFloat {
241257
// powerpc returns this struct via sret pointer, it doesn't use the cast ABI.
@@ -248,22 +264,17 @@ pub unsafe fn return_doublefloat() -> DoubleFloat {
248264

249265
// aarch64: [[ABI_ALLOCA:%.+]] = alloca [[ABI_TYPE:\[2 x i64\]]], align [[ABI_ALIGN:8]]
250266
// loongarch64: [[ABI_ALLOCA:%.+]] = alloca [[ABI_TYPE:{ double, float }]], align [[ABI_ALIGN:8]]
251-
// sparc64: [[ABI_ALLOCA:%.+]] = alloca [[ABI_TYPE:{ double, float, i32, i64 }]], align [[ABI_ALIGN:8]]
252267

253268
// aarch64: [[RUST_ALLOCA:%.+]] = alloca %DoubleFloat, align [[RUST_ALIGN:8]]
254269
// loongarch64: [[RUST_ALLOCA:%.+]] = alloca %DoubleFloat, align [[RUST_ALIGN:8]]
255-
// sparc64: [[RUST_ALLOCA:%.+]] = alloca %DoubleFloat, align [[RUST_ALIGN:8]]
256270

257271
// aarch64: [[ABI_VALUE:%.+]] = call [[ABI_TYPE]] @returns_doublefloat()
258272
// loongarch64: [[ABI_VALUE:%.+]] = call [[ABI_TYPE]] @returns_doublefloat()
259-
// sparc64: [[ABI_VALUE:%.+]] = call inreg [[ABI_TYPE]] @returns_doublefloat()
260273

261274
// aarch64: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
262275
// loongarch64: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
263-
// sparc64: store [[ABI_TYPE]] [[ABI_VALUE]], ptr [[ABI_ALLOCA]], align [[ABI_ALIGN]]
264276

265277
// aarch64: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 16, i1 false)
266278
// loongarch64: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 12, i1 false)
267-
// sparc64: call void @llvm.memcpy.{{.+}}(ptr align [[RUST_ALIGN]] [[RUST_ALLOCA]], ptr align [[ABI_ALIGN]] [[ABI_ALLOCA]], i64 16, i1 false)
268279
returns_doublefloat()
269280
}

0 commit comments

Comments
 (0)