Skip to content

Commit 2f6e73c

Browse files
committed
test/c-variadic: Fix patterns on powerpc64
On architectures such as powerpc64 that use extend_integer_width_to in their C ABI processing, integer parameters shorter than the native register width will be annotated with the ArgAttribute::SExt or ArgAttribute::ZExt attribute, and that attribute will be included in the generated LLVM IR. In this test, all relevant parameters are `i32`, which will get the `signext` annotation on the relevant 64-bit architectures. Match both the annotated and non-annotated case, but enforce that the annotation is applied consistently.
1 parent ef54f57 commit 2f6e73c

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

src/test/codegen/c-variadic.rs

+12-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
// compile-flags: -C no-prepopulate-passes
2+
// ignore-tidy-linelength
23

34
#![crate_type = "lib"]
45
#![feature(c_variadic)]
@@ -14,13 +15,13 @@ extern "C" {
1415
#[unwind(aborts)] // FIXME(#58794)
1516
pub unsafe extern "C" fn use_foreign_c_variadic_0() {
1617
// Ensure that we correctly call foreign C-variadic functions.
17-
// CHECK: invoke void (i32, ...) @foreign_c_variadic_0(i32 0)
18+
// CHECK: invoke void (i32, ...) @foreign_c_variadic_0([[PARAM:i32( signext)?]] 0)
1819
foreign_c_variadic_0(0);
19-
// CHECK: invoke void (i32, ...) @foreign_c_variadic_0(i32 0, i32 42)
20+
// CHECK: invoke void (i32, ...) @foreign_c_variadic_0([[PARAM]] 0, [[PARAM]] 42)
2021
foreign_c_variadic_0(0, 42i32);
21-
// CHECK: invoke void (i32, ...) @foreign_c_variadic_0(i32 0, i32 42, i32 1024)
22+
// CHECK: invoke void (i32, ...) @foreign_c_variadic_0([[PARAM]] 0, [[PARAM]] 42, [[PARAM]] 1024)
2223
foreign_c_variadic_0(0, 42i32, 1024i32);
23-
// CHECK: invoke void (i32, ...) @foreign_c_variadic_0(i32 0, i32 42, i32 1024, i32 0)
24+
// CHECK: invoke void (i32, ...) @foreign_c_variadic_0([[PARAM]] 0, [[PARAM]] 42, [[PARAM]] 1024, [[PARAM]] 0)
2425
foreign_c_variadic_0(0, 42i32, 1024i32, 0i32);
2526
}
2627

@@ -34,18 +35,18 @@ pub unsafe extern "C" fn use_foreign_c_variadic_1_0(ap: VaList) {
3435

3536
#[unwind(aborts)] // FIXME(#58794)
3637
pub unsafe extern "C" fn use_foreign_c_variadic_1_1(ap: VaList) {
37-
// CHECK: invoke void ({{.*}}*, ...) @foreign_c_variadic_1({{.*}} %ap, i32 42)
38+
// CHECK: invoke void ({{.*}}*, ...) @foreign_c_variadic_1({{.*}} %ap, [[PARAM]] 42)
3839
foreign_c_variadic_1(ap, 42i32);
3940
}
4041
#[unwind(aborts)] // FIXME(#58794)
4142
pub unsafe extern "C" fn use_foreign_c_variadic_1_2(ap: VaList) {
42-
// CHECK: invoke void ({{.*}}*, ...) @foreign_c_variadic_1({{.*}} %ap, i32 2, i32 42)
43+
// CHECK: invoke void ({{.*}}*, ...) @foreign_c_variadic_1({{.*}} %ap, [[PARAM]] 2, [[PARAM]] 42)
4344
foreign_c_variadic_1(ap, 2i32, 42i32);
4445
}
4546

4647
#[unwind(aborts)] // FIXME(#58794)
4748
pub unsafe extern "C" fn use_foreign_c_variadic_1_3(ap: VaList) {
48-
// CHECK: invoke void ({{.*}}*, ...) @foreign_c_variadic_1({{.*}} %ap, i32 2, i32 42, i32 0)
49+
// CHECK: invoke void ({{.*}}*, ...) @foreign_c_variadic_1({{.*}} %ap, [[PARAM]] 2, [[PARAM]] 42, [[PARAM]] 0)
4950
foreign_c_variadic_1(ap, 2i32, 42i32, 0i32);
5051
}
5152

@@ -64,12 +65,12 @@ pub unsafe extern "C" fn c_variadic(n: i32, mut ap: ...) -> i32 {
6465
// Ensure that we generate the correct `call` signature when calling a Rust
6566
// defined C-variadic.
6667
pub unsafe fn test_c_variadic_call() {
67-
// CHECK: call i32 (i32, ...) @c_variadic(i32 0)
68+
// CHECK: call [[RET:(signext )?i32]] (i32, ...) @c_variadic([[PARAM]] 0)
6869
c_variadic(0);
69-
// CHECK: call i32 (i32, ...) @c_variadic(i32 0, i32 42)
70+
// CHECK: call [[RET]] (i32, ...) @c_variadic([[PARAM]] 0, [[PARAM]] 42)
7071
c_variadic(0, 42i32);
71-
// CHECK: call i32 (i32, ...) @c_variadic(i32 0, i32 42, i32 1024)
72+
// CHECK: call [[RET]] (i32, ...) @c_variadic([[PARAM]] 0, [[PARAM]] 42, [[PARAM]] 1024)
7273
c_variadic(0, 42i32, 1024i32);
73-
// CHECK: call i32 (i32, ...) @c_variadic(i32 0, i32 42, i32 1024, i32 0)
74+
// CHECK: call [[RET]] (i32, ...) @c_variadic([[PARAM]] 0, [[PARAM]] 42, [[PARAM]] 1024, [[PARAM]] 0)
7475
c_variadic(0, 42i32, 1024i32, 0i32);
7576
}

0 commit comments

Comments
 (0)