-
Notifications
You must be signed in to change notification settings - Fork 12.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Repair several riscv64gc-unknown-linux-gnu
codegen tests
#125220
base: master
Are you sure you want to change the base?
Repair several riscv64gc-unknown-linux-gnu
codegen tests
#125220
Conversation
@@ -4,7 +4,7 @@ | |||
//@ only-linux | |||
#![crate_type = "lib"] | |||
|
|||
// CHECK: define void @f_fpr_tracking(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, i8 zeroext %i) | |||
// CHECK: define void @f_fpr_tracking(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, i8 noundef zeroext %i) unnamed_addr #0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This largely matches the loongarch64 code:
rust/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs
Lines 13 to 15 in 550d1b4
// CHECK: define void @f_fpr_tracking(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, i8 noundef zeroext %i) | |
#[no_mangle] | |
pub extern "C" fn f_fpr_tracking( |
@@ -144,7 +144,7 @@ pub extern "C" fn f_ret_double_int64_s() -> DoubleInt64 { | |||
DoubleInt64 { f: 1., i: 2 } | |||
} | |||
|
|||
// CHECK: define void @f_double_int8_s_arg_insufficient_gprs(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d, i32 signext %e, i32 signext %f, i32 signext %g, i32 signext %h, [2 x i64] %0) | |||
// CHECK: define void @f_double_int8_s_arg_insufficient_gprs(i32 noundef signext %a, i32 noundef signext %b, i32 noundef signext %c, i32 noundef signext %d, i32 noundef signext %e, i32 noundef signext %f, i32 noundef signext %g, i32 noundef signext %h, [2 x i64] %0) unnamed_addr #0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This largely matches the loongarch64 code:
rust/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs
Lines 153 to 155 in 550d1b4
// CHECK: define void @f_double_int8_s_arg_insufficient_gprs(i32 noundef signext %a, i32 noundef signext %b, i32 noundef signext %c, i32 noundef signext %d, i32 noundef signext %e, i32 noundef signext %f, i32 noundef signext %g, i32 noundef signext %h, [2 x i64] %0) | |
#[no_mangle] | |
pub extern "C" fn f_double_int8_s_arg_insufficient_gprs( |
@@ -250,11 +250,11 @@ pub struct IntDoubleInt { | |||
c: i32, | |||
} | |||
|
|||
// CHECK: define void @f_int_double_int_s_arg(%IntDoubleInt* {{.*}}%a) | |||
// CHECK: define void @f_int_double_int_s_arg(ptr {{.*}} %a) unnamed_addr #0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This largely matches the loongarch64 code:
rust/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs
Lines 259 to 261 in 550d1b4
// CHECK: define void @f_int_double_int_s_arg(ptr noalias nocapture noundef align 8 dereferenceable(24) %a) | |
#[no_mangle] | |
pub extern "C" fn f_int_double_int_s_arg(a: IntDoubleInt) {} |
#[no_mangle] | ||
pub extern "C" fn f_int_double_int_s_arg(a: IntDoubleInt) {} | ||
|
||
// CHECK: define void @f_ret_int_double_int_s(%IntDoubleInt* {{.*}}sret | ||
// CHECK: define void @f_ret_int_double_int_s(ptr {{.*}} sret([24 x i8]) align 8 dereferenceable(24) %_0) unnamed_addr #0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This largely matches the loongarch64 code:
rust/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs
Lines 263 to 267 in 550d1b4
// CHECK: define void @f_ret_int_double_int_s(ptr{{( dead_on_unwind)?}} noalias nocapture noundef{{( writable)?}} sret([24 x i8]) align 8 dereferenceable(24) %_0) | |
#[no_mangle] | |
pub extern "C" fn f_ret_int_double_int_s() -> IntDoubleInt { | |
IntDoubleInt { a: 1, b: 2., c: 3 } | |
} |
@@ -4,7 +4,7 @@ | |||
//@ only-linux | |||
#![crate_type = "lib"] | |||
|
|||
// CHECK: define void @f_fpr_tracking(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, i8 zeroext %i) | |||
// CHECK: define void @f_fpr_tracking(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, i8 noundef zeroext %i) unnamed_addr #0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The largely matches the loongarch64 code:
rust/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs
Lines 13 to 26 in 550d1b4
// CHECK: define void @f_fpr_tracking(double %0, double %1, double %2, double %3, double %4, double %5, double %6, double %7, i8 noundef zeroext %i) | |
#[no_mangle] | |
pub extern "C" fn f_fpr_tracking( | |
a: f64, | |
b: f64, | |
c: f64, | |
d: f64, | |
e: f64, | |
f: f64, | |
g: f64, | |
h: f64, | |
i: u8, | |
) { | |
} |
@@ -128,7 +128,7 @@ pub extern "C" fn f_ret_float_int64_s() -> FloatInt64 { | |||
FloatInt64 { f: 1., i: 2 } | |||
} | |||
|
|||
// CHECK: define void @f_float_int8_s_arg_insufficient_gprs(i32 signext %a, i32 signext %b, i32 signext %c, i32 signext %d, i32 signext %e, i32 signext %f, i32 signext %g, i32 signext %h, i64 %0) | |||
// CHECK: define void @f_float_int8_s_arg_insufficient_gprs(i32 noundef signext %a, i32 noundef signext %b, i32 noundef signext %c, i32 noundef signext %d, i32 noundef signext %e, i32 noundef signext %f, i32 noundef signext %g, i32 noundef signext %h, i64 %0) unnamed_addr #0 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The largely matches the llvm code: https://github.com/rust-lang/llvm-project/blob/5399a24c66cb6164cf32280e7d300488c90d5765/clang/test/CodeGen/RISCV/riscv64-abi.c#L612-L617
riscv64gc-unknown-linux-gnu codegen
tests.riscv64gc-unknown-linux-gnu
codegen tests.
r? compiler |
r? compiler |
e2b572c
to
dbe9318
Compare
riscv64gc-unknown-linux-gnu
codegen tests.riscv64gc-unknown-linux-gnu
codegen tests
Co-authored-by: erikdesjardins <erikdesjardins@users.noreply.github.com>
Co-authored-by: erikdesjardins <erikdesjardins@users.noreply.github.com>
tidy: validate LLVM component names in tests LLVM component names are not immediately obvious (they usually omit any suffixes on the target arch name), and if they're incorrect, the test will silently never run. This happened [here](rust-lang#125220 (comment)), and it would be nice to prevent it.
Rollup merge of rust-lang#125472 - erikdesjardins:component, r=clubby789 tidy: validate LLVM component names in tests LLVM component names are not immediately obvious (they usually omit any suffixes on the target arch name), and if they're incorrect, the test will silently never run. This happened [here](rust-lang#125220 (comment)), and it would be nice to prevent it.
(I'm not an official reviewer, but LGTM) |
…4gc-update, r=<try> CI: Update riscv64gc-linux job to Ubuntu 22.04, rename to riscv64gc-gnu Together with joshua.zivkovic@codethink.co.uk, we've been starting to explore improving the state of the `riscv64gc-unknown-linux-gnu` target. Additionally, I'm looking to add support for this platform in [Ferrocene](https://github.com/ferrocene/ferrocene) ([Related PR](ferrocene/ferrocene#618)). There currently exists a `src/ci/docker/host-x86_64/disabled/riscv64gc-linux` job for the CI, however it is currently experiencing errors. <details> <summary>Errors</summary> ```bash $ DEPLOY=1 ./src/ci/docker/run.sh riscv64gc-linux # ... [RUSTC-TIMING] addr2line test:false 0.371 [RUSTC-TIMING] gimli test:false 3.159 [RUSTC-TIMING] object test:false 4.249 error: linking with `riscv64-linux-gnu-gcc` failed: exit status: 1 | = note: LC_ALL="C" PATH="/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-unknown-linux-gnu/bin:/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-unknown-linux-gnu/bin:/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/x86_64-unknown-linux-gnu/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" VSLANG="1033" "riscv64-linux-gnu-gcc" "-Wl,--version-script=/tmp/rustcQaIpWi/list" "-Wl,--no-undefined-version" "/tmp/rustcQaIpWi/symbols.o" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/std-ff89a9732cd5d858.std.1b5d59225ff40bd2-cgu.0.rcgu.o" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/std-ff89a9732cd5d858.dalhl7sfna1ffn4nhy6pyfa7f.rcgu.rmeta" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/std-ff89a9732cd5d858.ef0znsdf1ihn2bjkmclodhclp.rcgu.o" "-Wl,--as-needed" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/release/deps" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/build/compiler_builtins-9e9a40064e2f2bd3/out" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/riscv64gc-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libpanic_unwind-d968371aba64a26c.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libobject-da5b6473912e89d6.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libmemchr-9cfa08d2baa3643e.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libaddr2line-06e0d2153cecb6ce.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libgimli-6fdf5551cec83840.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/librustc_demangle-8ada6466f763fa2e.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libstd_detect-edc0d12d029c4c86.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libhashbrown-9c782935934c8c14.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/librustc_std_workspace_alloc-b6984e43b381efa4.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libminiz_oxide-37ee29bf49ccaa96.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libadler-591133f6804fa0f4.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libunwind-94d98075f42175f3.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libcfg_if-e267a7b9dd7af3a7.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/liblibc-503571a038f8d9fd.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/liballoc-e36c72a5cf0ee45f.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/librustc_std_workspace_core-076c2b8501e25f03.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libcore-c446fff80486d0bb.rlib" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libcompiler_builtins-26dc6b5e31e1fdb9.rlib" "-Wl,-Bdynamic" "-lgcc_s" "-lutil" "-lrt" "-lpthread" "-lm" "-ldl" "-lc" "-Wl,--eh-frame-hdr" "-Wl,-z,noexecstack" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/lib/rustlib/riscv64gc-unknown-linux-gnu/lib" "-o" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libstd-ff89a9732cd5d858.so" "-shared" "-Wl,-z,relro,-z,now" "-Wl,-O1" "-nodefaultlibs" "-Wl,-z,origin" "-Wl,-rpath,$ORIGIN/../lib" # ... /usr/lib/gcc-cross/riscv64-linux-gnu/9/../../../../riscv64-linux-gnu/bin/ld: failed to merge target specific data of file /checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libcompiler_builtins-26dc6b5e31e1fdb9.rlib(compiler_builtins-26dc6b5e31e1fdb9.compiler_builtins.74504a151a6bdbbf-cgu.124.rcgu.o) /usr/lib/gcc-cross/riscv64-linux-gnu/9/../../../../riscv64-linux-gnu/bin/ld: -march=rv64i2p1_m2p0_a2p1_f2p2_d2p2_c2p0_zicsr2p0: unsupported ISA subset `z' /usr/lib/gcc-cross/riscv64-linux-gnu/9/../../../../riscv64-linux-gnu/bin/ld: failed to merge target specific data of file /checkout/obj/build/x86_64-unknown-linux-gnu/stage2-std/riscv64gc-unknown-linux-gnu/release/deps/libcompiler_builtins-26dc6b5e31e1fdb9.rlib(compiler_builtins-26dc6b5e31e1fdb9.compiler_builtins.74504a151a6bdbbf-cgu.004.rcgu.o) collect2: error: ld returned 1 exit status [RUSTC-TIMING] std test:false 15.138 error: could not compile `std` (lib) due to 1 previous error Building bootstrap Build completed unsuccessfully in 0:04:41 local time: Tue May 28 16:25:09 UTC 2024 network time: Tue, 28 May 2024 16:25:17 GMT ``` </details> This PR fixes the breakage enough to get the tests running. It does so through bringing the `riscv64gc-unknown-linux-gnu` related test job in line with other related jobs, adopting many of the recent changes present in `src/ci/docker/host-x86_64/armhf-gnu` such as: * Using Ubuntu 22.04 * Installing a more narrowly scoped package set * Using `curl` instead of `debootstrap` to set up the root * No longer patching `busybox` * Removing the `cmake.sh` script related steps ## Justifying Renaming `riscv64gc-linux` to `riscv64gc-gnu` The `src/ci/docker/host-x86_64/disabled/riscv64gc-linux` job runs the tests for `risv64gc-unknown-linux-gnu`, it is based off `src/ci/docker/host-x86_64/armhf-gnu`. There are other jobs that follow a `$arch-gnu` naming scheme: * `src/ci/docker/host-x86_64/armhf-gnu` * `src/ci/docker/host-x86_64/x86_64-gnu` * `src/ci/docker/host-aarch64/aarch64-gnu` It follows that the name `src/ci/docker/host-x86_64/disabled/riscv64gc-linux` should be `src/ci/docker/host-x86_64/disabled/riscv64gc-gnu`, like the others. ## Testing > [!NOTE] > `riscv64gc-unknown-linux-gnu` is a [**Tier 2 with Host Tools** platform](https://doc.rust-lang.org/beta/rustc/platform-support.html), all tests may not necessarily pass! There is work in rust-lang#125220 which helps fix several related tests. You can test out the renamed job: ```sh DEPLOY=1 ./src/ci/docker/run.sh riscv64gc-gnu ``` `DEPLOY=1` helps reproduce the CI's environment and also avoids the chance of a `llvm-c/BitReader.h` error (detailed in rust-lang#85424 and rust-lang#56650). <details> <summary>Sample of output (expected test failure)</summary> ```bash $ DEPLOY=1 ./src/ci/docker/run.sh riscv64gc-gnu # ... test [ui] tests/ui/where-clauses/where-clause-method-substituion-rpass.rs ... ok failures: ---- [ui] tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs stdout ---- error: test compilation failed although it shouldn't! status: exit status: 1 command: env -u RUSTC_LOG_COLOR RUSTC_ICE="0" RUST_BACKTRACE="short" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2/bin/rustc" "/checkout/tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs" "-Zthreads=1" "-Zsimulate-remapped-rust-src-base=/rustc/FAKE_PREFIX" "-Ztranslate-remapped-path-to-local-path=no" "-Z" "ignore-directory-in-diagnostics-source-blocks=/cargo" "-Z" "ignore-directory-in-diagnostics-source-blocks=/checkout/vendor" "--sysroot" "/checkout/obj/build/x86_64-unknown-linux-gnu/stage2" "--target=riscv64gc-unknown-linux-gnu" "--check-cfg" "cfg(FALSE)" "--error-format" "json" "--json" "future-incompat" "-Ccodegen-units=1" "-Zui-testing" "-Zdeduplicate-diagnostics=no" "-Zwrite-long-types-to-disk=no" "-Cstrip=debuginfo" "-C" "prefer-dynamic" "--out-dir" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo" "-A" "unused" "-A" "internal_features" "-Crpath" "-Lnative=/checkout/obj/build/riscv64gc-unknown-linux-gnu/native/rust-test-helpers" "-Clinker=riscv64-linux-gnu-gcc" "-L" "/checkout/obj/build/x86_64-unknown-linux-gnu/test/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo/auxiliary" "-g" "--emit=llvm-ir" "-Csplit-debuginfo=unpacked" stdout: none --- stderr ------------------------------- error: `-Csplit-debuginfo=unpacked` is unstable on this platform error: aborting due to 1 previous error ------------------------------------------ failures: [ui] tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs test result: FAILED. 5 passed; 1 failed; 16897 ignored; 0 measured; 0 filtered out; finished in 410.99ms Some tests failed in compiletest suite=ui mode=ui host=x86_64-unknown-linux-gnu target=riscv64gc-unknown-linux-gnu local time: Tue May 28 16:28:22 UTC 2024 network time: Tue, 28 May 2024 16:28:30 GMT ``` </details> try-job: riscv64gc-gnu
Together with joshua.zivkovic@codethink.co.uk, we've been starting to explore improving the state of the
riscv64gc-unknown-linux-gnu
target. Additionally, I'm looking to add support for this platform in Ferrocene (Related PR).While running the test suite, we noted several tests were failing.
It appears that several of the riscv64gc-unknown-linux-gnu codegen tests have not been updated in some time and seem to have experienced a small amount of bitrot.
After speaking with @workingjubilee (as I have little expertise in LLVM codegen) I believe these changes to be correct.
tests/codegen/riscv-abi/call-llvm-intrinsics.rs
I believe this change does not alter what the test is testing and is harmless.
tests/codegen/riscv-abi/riscv64-lp64d-abi.rs
The changes largely mirrors those from loongarch64:
rust/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs
Lines 13 to 15 in 550d1b4
rust/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs
Lines 153 to 155 in 550d1b4
rust/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs
Lines 259 to 261 in 550d1b4
rust/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs
Lines 263 to 267 in 550d1b4
tests/codegen/riscv-abi/riscv64-lp64f-lp64d-abi.rs
The changes largely mirror that from loongarch64 or llvm:
rust/tests/codegen/loongarch-abi/loongarch64-lp64d-abi.rs
Lines 13 to 26 in 550d1b4
https://github.com/rust-lang/llvm-project/blob/5399a24c66cb6164cf32280e7d300488c90d5765/clang/test/CodeGen/RISCV/riscv64-abi.c#L612-L617
tests/ui/debuginfo/debuginfo-emit-llvm-ir-and-split-debuginfo.rs
The test is ignored since
-Csplit-debuginfo=unpacked
is not supported on this platform. Context can be found in #120518.Reproducing the failures
Using a
config.toml
with the following:Note
You may need to install a RICV-V toolchain! We get ours from here.
If you are using an old (20.04) Ubuntu container the compiler in the repositories (
gcc-riscv64-linux-gnu
) won't work!Run the following test suite:
./x.py test tests/codegen
Expected output