Skip to content
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

Use platform intrinsics, not LLVM, for floor & ceil #47

Merged
merged 3 commits into from
Dec 8, 2020

Conversation

workingjubilee
Copy link
Member

@workingjubilee workingjubilee commented Dec 1, 2020

This PR removes the direct linkage to LLVM for trunc and round intrinsics, while replacing that link with rustc's platform intrinsics for floor and ceil functions, namely simd_floor and simd_ceil. Tests that are no longer testable are removed. In doing so it resolves the riscv64gc compilation problems.

This PR will close #35.

This reverts commit 3ad356d.
There are no platform intrinsics in the rustc for these functions yet,
so this removes them as a distinct commit for later reversion.
@workingjubilee
Copy link
Member Author

This is blocked on rust-lang/rust#79560, indeed the entire library might be.

@workingjubilee
Copy link
Member Author

This is no longer blocked. Please disregard Travis' "pull request' failure, it was based on the spurious error from before.

@workingjubilee
Copy link
Member Author

workingjubilee commented Dec 4, 2020

Huh, there is a further issue but only with the mask types on wasm SIMD. I assume this was not introduced by this patch, so there should be no reason not to merge this.

big fat error log failures:

---- ops::ops_impl::mask128::mask128x4::bitand output ----

error output:

    panicked at 'assertion failed: `(left == right)`

      left: `[false (0), false (0), false (0), true (ffffffffffffffffffffffffffffffff)]`,

     right: `[false (0), false (0), true (ffffffffffffffff), true (ffffffffffffffffffffffffffffffff)]`', crates/core_simd/tests/ops_impl/mask128.rs:4:1

    

    Stack:

    

    Error

        at http://127.0.0.1:45623/wasm-bindgen-test:578:19

        at http://127.0.0.1:45623/wasm-bindgen-test:154:22

        at console_error_panic_hook::hook::h8a744eaa07f313f0 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[3580]:0x231cd6)

        at core::ops::function::Fn::call::h8d9f8d3764bff0d3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[14961]:0x3e4466)

        at std::panicking::rust_panic_with_hook::h7ba07724d623fbd6 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7289]:0x3635f3)

        at std::panicking::begin_panic_handler::{{closure}}::hf841a66ae6cb12c2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7582]:0x3722d2)

        at std::sys_common::backtrace::__rust_end_short_backtrace::h1aceb706833fcda2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12320]:0x3d9f13)

        at rust_begin_unwind (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12201]:0x3d8374)

        at core::panicking::panic_fmt::h125c8438143be5c3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12322]:0x3d9f77)

        at ops::ops_impl::mask128::mask128x4::bitand::h71eb62a9f2d1b01d (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[265]:0x7290b)

    

    



JS exception that was thrown:

    RuntimeError: unreachable

        at __rust_start_panic (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[14994]:0x3e4581)

        at rust_panic (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12377]:0x3da900)

        at std::panicking::rust_panic_with_hook::h7ba07724d623fbd6 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7289]:0x36361a)

        at std::panicking::begin_panic_handler::{{closure}}::hf841a66ae6cb12c2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7582]:0x3722d2)

        at std::sys_common::backtrace::__rust_end_short_backtrace::h1aceb706833fcda2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12320]:0x3d9f13)

        at rust_begin_unwind (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12201]:0x3d8374)

        at core::panicking::panic_fmt::h125c8438143be5c3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12322]:0x3d9f77)

        at ops::ops_impl::mask128::mask128x4::bitand::h71eb62a9f2d1b01d (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[265]:0x7290b)

        at <wasm_bindgen_test::__rt::TestFuture<F> as core::future::future::Future>::poll::{{closure}}::{{closure}}::hae6ed923cee3795b (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[11445]:0x3c7e5b)

        at wasm_bindgen::convert::closures::invoke0_mut::hd679e8cfa73e2075 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12410]:0x3daddb)

---- ops::ops_impl::mask128::mask128x4::bitand_assign output ----

error output:

    panicked at 'assertion failed: `(left == right)`

      left: `[false (0), false (0), false (0), true (ffffffffffffffffffffffffffffffff)]`,

     right: `[false (0), false (0), true (ffffffffffffffff), true (ffffffffffffffffffffffffffffffff)]`', crates/core_simd/tests/ops_impl/mask128.rs:4:1

    

    Stack:

    

    Error

        at http://127.0.0.1:45623/wasm-bindgen-test:578:19

        at http://127.0.0.1:45623/wasm-bindgen-test:154:22

        at console_error_panic_hook::hook::h8a744eaa07f313f0 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[3580]:0x231cd6)

        at core::ops::function::Fn::call::h8d9f8d3764bff0d3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[14961]:0x3e4466)

        at std::panicking::rust_panic_with_hook::h7ba07724d623fbd6 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7289]:0x3635f3)

        at std::panicking::begin_panic_handler::{{closure}}::hf841a66ae6cb12c2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7582]:0x3722d2)

        at std::sys_common::backtrace::__rust_end_short_backtrace::h1aceb706833fcda2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12320]:0x3d9f13)

        at rust_begin_unwind (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12201]:0x3d8374)

        at core::panicking::panic_fmt::h125c8438143be5c3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12322]:0x3d9f77)

        at ops::ops_impl::mask128::mask128x4::bitand_assign::hc476ffd786a33543 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[268]:0x733fd)

    

    



JS exception that was thrown:

    RuntimeError: unreachable

        at std::panicking::rust_panic_with_hook::h7ba07724d623fbd6 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7289]:0x363614)

        at std::panicking::begin_panic_handler::{{closure}}::hf841a66ae6cb12c2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7582]:0x3722d2)

        at std::sys_common::backtrace::__rust_end_short_backtrace::h1aceb706833fcda2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12320]:0x3d9f13)

        at rust_begin_unwind (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12201]:0x3d8374)

        at core::panicking::panic_fmt::h125c8438143be5c3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12322]:0x3d9f77)

        at ops::ops_impl::mask128::mask128x4::bitand_assign::hc476ffd786a33543 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[268]:0x733fd)

        at <wasm_bindgen_test::__rt::TestFuture<F> as core::future::future::Future>::poll::{{closure}}::{{closure}}::h73958fc516e56f26 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[10941]:0x3bcd32)

        at wasm_bindgen::convert::closures::invoke0_mut::hd679e8cfa73e2075 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12410]:0x3daddb)

        at __wbg_adapter_31 (http://127.0.0.1:45623/wasm-bindgen-test:272:10)

        at cb0 (http://127.0.0.1:45623/wasm-bindgen-test:438:28)

---- ops::ops_impl::mask128::mask128x4::bitor output ----

JS exception that was thrown:

    RuntimeError: unreachable

        at std::panicking::rust_panic_with_hook::h7ba07724d623fbd6 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7289]:0x363614)

        at std::panicking::begin_panic_handler::{{closure}}::hf841a66ae6cb12c2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7582]:0x3722d2)

        at std::sys_common::backtrace::__rust_end_short_backtrace::h1aceb706833fcda2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12320]:0x3d9f13)

        at rust_begin_unwind (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12201]:0x3d8374)

        at core::panicking::panic_fmt::h125c8438143be5c3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12322]:0x3d9f77)

        at ops::ops_impl::mask128::mask128x4::bitor::h4b1e89598caa7d84 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[264]:0x72565)

        at <wasm_bindgen_test::__rt::TestFuture<F> as core::future::future::Future>::poll::{{closure}}::{{closure}}::hb726a0c793bc3995 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[11506]:0x3c93cb)

        at wasm_bindgen::convert::closures::invoke0_mut::hd679e8cfa73e2075 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12410]:0x3daddb)

        at __wbg_adapter_31 (http://127.0.0.1:45623/wasm-bindgen-test:272:10)

        at cb0 (http://127.0.0.1:45623/wasm-bindgen-test:438:28)

---- ops::ops_impl::mask128::mask128x4::bitor_assign output ----

JS exception that was thrown:

    RuntimeError: unreachable

        at std::panicking::rust_panic_with_hook::h7ba07724d623fbd6 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7289]:0x363614)

        at std::panicking::begin_panic_handler::{{closure}}::hf841a66ae6cb12c2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7582]:0x3722d2)

        at std::sys_common::backtrace::__rust_end_short_backtrace::h1aceb706833fcda2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12320]:0x3d9f13)

        at rust_begin_unwind (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12201]:0x3d8374)

        at core::panicking::panic_fmt::h125c8438143be5c3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12322]:0x3d9f77)

        at ops::ops_impl::mask128::mask128x4::bitor_assign::hb25b897258725486 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[266]:0x72cb1)

        at <wasm_bindgen_test::__rt::TestFuture<F> as core::future::future::Future>::poll::{{closure}}::{{closure}}::hc0896b93aa597c15 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[11596]:0x3cb36f)

        at wasm_bindgen::convert::closures::invoke0_mut::hd679e8cfa73e2075 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12410]:0x3daddb)

        at __wbg_adapter_31 (http://127.0.0.1:45623/wasm-bindgen-test:272:10)

        at cb0 (http://127.0.0.1:45623/wasm-bindgen-test:438:28)

---- ops::ops_impl::mask128::mask128x4::bitxor output ----

JS exception that was thrown:

    RuntimeError: unreachable

        at std::panicking::rust_panic_with_hook::h7ba07724d623fbd6 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7289]:0x363614)

        at std::panicking::begin_panic_handler::{{closure}}::hf841a66ae6cb12c2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7582]:0x3722d2)

        at std::sys_common::backtrace::__rust_end_short_backtrace::h1aceb706833fcda2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12320]:0x3d9f13)

        at rust_begin_unwind (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12201]:0x3d8374)

        at core::panicking::panic_fmt::h125c8438143be5c3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12322]:0x3d9f77)

        at ops::ops_impl::mask128::mask128x4::bitxor::h499b762503c708a2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[263]:0x721bf)

        at <wasm_bindgen_test::__rt::TestFuture<F> as core::future::future::Future>::poll::{{closure}}::{{closure}}::hb07e3dcef1efc51c (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[11461]:0x3c83fa)

        at wasm_bindgen::convert::closures::invoke0_mut::hd679e8cfa73e2075 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12410]:0x3daddb)

        at __wbg_adapter_31 (http://127.0.0.1:45623/wasm-bindgen-test:272:10)

        at cb0 (http://127.0.0.1:45623/wasm-bindgen-test:438:28)

---- ops::ops_impl::mask128::mask128x4::bitxor_assign output ----

JS exception that was thrown:

    RuntimeError: unreachable

        at std::panicking::rust_panic_with_hook::h7ba07724d623fbd6 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7289]:0x363614)

        at std::panicking::begin_panic_handler::{{closure}}::hf841a66ae6cb12c2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7582]:0x3722d2)

        at std::sys_common::backtrace::__rust_end_short_backtrace::h1aceb706833fcda2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12320]:0x3d9f13)

        at rust_begin_unwind (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12201]:0x3d8374)

        at core::panicking::panic_fmt::h125c8438143be5c3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12322]:0x3d9f77)

        at ops::ops_impl::mask128::mask128x4::bitxor_assign::h50b0501b3d030033 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[267]:0x73057)

        at <wasm_bindgen_test::__rt::TestFuture<F> as core::future::future::Future>::poll::{{closure}}::{{closure}}::hbb6aa0f070eb7bd4 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[11551]:0x3ca39d)

        at wasm_bindgen::convert::closures::invoke0_mut::hd679e8cfa73e2075 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12410]:0x3daddb)

        at __wbg_adapter_31 (http://127.0.0.1:45623/wasm-bindgen-test:272:10)

        at cb0 (http://127.0.0.1:45623/wasm-bindgen-test:438:28)

failures:

ops::ops_impl::mask128::mask128x4::bitand

ops::ops_impl::mask128::mask128x4::bitand_assign

ops::ops_impl::mask128::mask128x4::bitor

ops::ops_impl::mask128::mask128x4::bitor_assign

ops::ops_impl::mask128::mask128x4::bitxor

ops::ops_impl::mask128::mask128x4::bitxor_assign

test result: FAILED. 2212 passed; 6 failed; 0 ignored

console.log div contained:

panicked at 'assertion failed: `(left == right)`

  left: `[false (0), false (0), false (0), true (ffffffffffffffffffffffffffffffff)]`,

 right: `[false (0), false (0), true (ffffffffffffffff), true (ffffffffffffffffffffffffffffffff)]`', crates/core_simd/tests/ops_impl/mask128.rs:4:1



Stack:



Error

    at http://127.0.0.1:45623/wasm-bindgen-test:578:19

    at http://127.0.0.1:45623/wasm-bindgen-test:154:22

    at console_error_panic_hook::hook::h8a744eaa07f313f0 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[3580]:0x231cd6)

    at core::ops::function::Fn::call::h8d9f8d3764bff0d3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[14961]:0x3e4466)

    at std::panicking::rust_panic_with_hook::h7ba07724d623fbd6 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7289]:0x3635f3)

    at std::panicking::begin_panic_handler::{{closure}}::hf841a66ae6cb12c2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7582]:0x3722d2)

    at std::sys_common::backtrace::__rust_end_short_backtrace::h1aceb706833fcda2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12320]:0x3d9f13)

    at rust_begin_unwind (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12201]:0x3d8374)

    at core::panicking::panic_fmt::h125c8438143be5c3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12322]:0x3d9f77)

    at ops::ops_impl::mask128::mask128x4::bitand::h71eb62a9f2d1b01d (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[265]:0x7290b)





panicked at 'assertion failed: `(left == right)`

  left: `[false (0), false (0), false (0), true (ffffffffffffffffffffffffffffffff)]`,

 right: `[false (0), false (0), true (ffffffffffffffff), true (ffffffffffffffffffffffffffffffff)]`', crates/core_simd/tests/ops_impl/mask128.rs:4:1



Stack:



Error

    at http://127.0.0.1:45623/wasm-bindgen-test:578:19

    at http://127.0.0.1:45623/wasm-bindgen-test:154:22

    at console_error_panic_hook::hook::h8a744eaa07f313f0 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[3580]:0x231cd6)

    at core::ops::function::Fn::call::h8d9f8d3764bff0d3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[14961]:0x3e4466)

    at std::panicking::rust_panic_with_hook::h7ba07724d623fbd6 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7289]:0x3635f3)

    at std::panicking::begin_panic_handler::{{closure}}::hf841a66ae6cb12c2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[7582]:0x3722d2)

    at std::sys_common::backtrace::__rust_end_short_backtrace::h1aceb706833fcda2 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12320]:0x3d9f13)

    at rust_begin_unwind (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12201]:0x3d8374)

    at core::panicking::panic_fmt::h125c8438143be5c3 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[12322]:0x3d9f77)

    at ops::ops_impl::mask128::mask128x4::bitand_assign::hc476ffd786a33543 (http://127.0.0.1:45623/wasm-bindgen-test_bg.wasm:wasm-function[268]:0x733fd)

EDIT: This problem is resolved by #44, as shown by #48.

Copy link
Contributor

@KodrAus KodrAus left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice! 🎉

I didn't realise we already had intrinsics for rounding. Were those just added or is there some automagic handling of the simd_{op} name that lines up with the right LLVM intrinsic? (I already forget how that works...)

@workingjubilee
Copy link
Member Author

We do not have the full set of trunc or round platform intrinsics (and so lose that functionality here), but they can be added to rustc. I wanted to make sure that this would fix that before I moved on to prioritizing that.

@workingjubilee
Copy link
Member Author

To actually answer the question: it is indeed the case that the compiler essentially handles platform intrinsics in LLVM codegen by performing an automagic translation. This is likely why it works for riscv64gc... I suspect there is something about how the intrinsics were specified in-lib that was preempting LLVM's codegen logic.

@programmerjake
Copy link
Member

To actually answer the question: it is indeed the case that the compiler essentially handles platform intrinsics in LLVM codegen by performing an automagic translation. This is likely why it works for riscv64gc... I suspect there is something about how the intrinsics were specified in-lib that was preempting LLVM's codegen logic.

Yup, we were using extern "C" which told rustc that we wanted the C ABI. The C ABI is implemented by a combination of transformations in rustc and LLVM, what was happening is we wanted the function declarations to get to LLVM unmodified, which wasn't happening since rustc was doing the transformations that are its part of implementing the C ABI. Basically we were lying to rustc about the ABI -- no wonder it broke.

@bjorn3
Copy link
Member

bjorn3 commented Dec 4, 2020

There is extern "unadjusted" for this usecase.

@calebzulawski
Copy link
Member

Should this get merged in we should update #38 with the removed functions.

@workingjubilee workingjubilee mentioned this pull request Dec 8, 2020
5 tasks
@workingjubilee
Copy link
Member Author

@bjorn3 Wouldn't that still cause issues on cranelift's end?

@workingjubilee workingjubilee merged commit a69c441 into master Dec 8, 2020
@bjorn3
Copy link
Member

bjorn3 commented Dec 9, 2020

Yes

@workingjubilee workingjubilee mentioned this pull request Dec 10, 2020
@KodrAus
Copy link
Contributor

KodrAus commented Dec 23, 2020

90E689D6-82E0-424B-A80D-42A74C254A75

Green LED means building and running core_simd for riscv32imac-unknown-none-elf works for reals 😁

@KodrAus KodrAus deleted the less-llvm branch January 19, 2021 23:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Fails to compile on riscv64gc
5 participants