Skip to content

buggy bswap implementation seems to assume unsigned arguments #169

Closed
@FractalFir

Description

@FractalFir

This snippet of Rust code:

#![feature(core_intrinsics)]
#![no_std]
use spirv_std::spirv;
#[spirv(compute(threads(1)))]
pub fn main() {
    core::intrinsics::bswap(-1_i32);
}

causes a panic in rust-gpu:

thread 'rustc' panicked at crates/rustc_codegen_spirv/src/builder/builder_methods.rs:1243:9:
Expected types to be equal:
i32
==
u32
stack backtrace:
   0:     0x7fc78dc61935 - std::backtrace_rs::backtrace::libunwind::trace::h19be1b2eef092323
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/../../backtrace/src/backtrace/libunwind.rs:105:5
   1:     0x7fc78dc61935 - std::backtrace_rs::backtrace::trace_unsynchronized::h5fb87216a898ae13
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/../../backtrace/src/backtrace/mod.rs:66:5
   2:     0x7fc78dc61935 - std::sys_common::backtrace::_print_fmt::hb7c11d9dfb93defb
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/sys_common/backtrace.rs:68:5
   3:     0x7fc78dc61935 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hb67a26e8fbf63961
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/sys_common/backtrace.rs:44:22
   4:     0x7fc78dcb0a6b - core::fmt::rt::Argument::fmt::hf262f5ae63b7280d
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/core/src/fmt/rt.rs:165:63
   5:     0x7fc78dcb0a6b - core::fmt::write::hf662053177767752
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/core/src/fmt/mod.rs:1157:21
   6:     0x7fc78dc5653f - std::io::Write::write_fmt::hbe0746a38afa3ed8
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/io/mod.rs:1832:15
   7:     0x7fc78dc6170e - std::sys_common::backtrace::_print::h449d3837fdc38e9e
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/sys_common/backtrace.rs:47:5
   8:     0x7fc78dc6170e - std::sys_common::backtrace::print::hbaf62f5795d4cfbf
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/sys_common/backtrace.rs:34:9
   9:     0x7fc78dc64079 - std::panicking::default_hook::{{closure}}::hd3baa576f047dd31
  10:     0x7fc78dc63dbd - std::panicking::default_hook::h629aac334d35fabe
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/panicking.rs:298:9
  11:     0x7fc78a652cfc - std[db34fec1d5020528]::panicking::update_hook::<alloc[d9f9aafa851aff33]::boxed::Box<rustc_driver_impl[5c10b38f6ed04dbe]::install_ice_hook::{closure#0}>>::{closure#0}
  12:     0x7fc78a652cfc - std[db34fec1d5020528]::panicking::update_hook::<alloc[d9f9aafa851aff33]::boxed::Box<rustc_driver_impl[5c10b38f6ed04dbe]::install_ice_hook::{closure#0}>>::{closure#0}
  13:     0x7fc78dc64776 - <alloc::boxed::Box<F,A> as core::ops::function::Fn<Args>>::call::h1a245891e3b97a26
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/alloc/src/boxed.rs:2036:9
  14:     0x7fc78dc64776 - std::panicking::rust_panic_with_hook::h9a48efc72c1f19d6
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/panicking.rs:799:13
  15:     0x7fc78dc64524 - std::panicking::begin_panic_handler::{{closure}}::h7ba519a7ff46ba95
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/panicking.rs:664:13
  16:     0x7fc78dc61df9 - std::sys_common::backtrace::__rust_end_short_backtrace::h542fa69f276529d5
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/sys_common/backtrace.rs:171:18
  17:     0x7fc78dc64257 - rust_begin_unwind
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/panicking.rs:652:5
  18:     0x7fc78dcacf33 - core::panicking::panic_fmt::h7eb870b4cabf95b0
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/core/src/panicking.rs:72:14
  19:     0x7fc77c19cc68 - rustc_codegen_spirv::builder::builder_methods::<impl rustc_codegen_ssa::traits::builder::BuilderMethods for rustc_codegen_spirv::builder::Builder>::and::h3de7ceafa7d09fef
                               at /home/michal/rust-gpu/crates/rustc_codegen_spirv/src/builder/builder_methods.rs:1243:9
  20:     0x7fc77c1b9eef - rustc_codegen_spirv::builder::intrinsics::<impl rustc_codegen_ssa::traits::intrinsic::IntrinsicCallMethods for rustc_codegen_spirv::builder::Builder>::codegen_intrinsic_call::he18382318c092a0d
                               at /home/michal/rust-gpu/crates/rustc_codegen_spirv/src/builder/intrinsics.rs:283:36
  21:     0x7fc77c314eb9 - rustc_codegen_ssa::mir::intrinsic::<impl rustc_codegen_ssa::mir::FunctionCx<Bx>>::codegen_intrinsic_call::hdaedf831c17413ba
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/compiler/rustc_codegen_ssa/src/mir/intrinsic.rs:508:24
  22:     0x7fc77c2fa3e7 - rustc_codegen_ssa::mir::block::<impl rustc_codegen_ssa::mir::FunctionCx<Bx>>::codegen_call_terminator::hd798a22cb753efca
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/compiler/rustc_codegen_ssa/src/mir/block.rs:956:23
  23:     0x7fc77c2f835e - rustc_codegen_ssa::mir::block::<impl rustc_codegen_ssa::mir::FunctionCx<Bx>>::codegen_terminator::h212fef884ce12aa2
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/compiler/rustc_codegen_ssa/src/mir/block.rs:1372:18
  24:     0x7fc77c2f56b7 - rustc_codegen_ssa::mir::block::<impl rustc_codegen_ssa::mir::FunctionCx<Bx>>::codegen_block::h2b1f27c23923db79
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/compiler/rustc_codegen_ssa/src/mir/block.rs:1259:32
  25:     0x7fc77c2f20f6 - rustc_codegen_ssa::mir::codegen_mir::h0a3c6b6a40bb9cf3
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/compiler/rustc_codegen_ssa/src/mir/mod.rs:270:13
  26:     0x7fc77c097ef3 - rustc_codegen_ssa::base::codegen_instance::h0aa41afa02875a8d
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/compiler/rustc_codegen_ssa/src/base.rs:386:5
  27:     0x7fc77bf20e8d - <rustc_middle::mir::mono::MonoItem as rustc_codegen_ssa::mono_item::MonoItemExt>::define::h7866994c40a1de5e
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/compiler/rustc_codegen_ssa/src/mono_item.rs:104:17
  28:     0x7fc77c082b7e - <rustc_codegen_spirv::SpirvCodegenBackend as rustc_codegen_ssa::traits::backend::ExtraBackendMethods>::compile_codegen_unit::{{closure}}::hb88818f6b57b290e
                               at /home/michal/rust-gpu/crates/rustc_codegen_spirv/src/lib.rs:427:17
  29:     0x7fc77c07379d - <rustc_codegen_spirv::SpirvCodegenBackend as rustc_codegen_ssa::traits::backend::ExtraBackendMethods>::compile_codegen_unit::hbed45f46a5f82cb3
                               at /home/michal/rust-gpu/crates/rustc_codegen_spirv/src/lib.rs:439:36
  30:     0x7fc77c096432 - rustc_codegen_ssa::base::codegen_crate::hc5fcfd2f6ef47857
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/compiler/rustc_codegen_ssa/src/base.rs:746:34
  31:     0x7fc77c07238a - <rustc_codegen_spirv::SpirvCodegenBackend as rustc_codegen_ssa::traits::backend::CodegenBackend>::codegen_crate::h9e9308d203a90d6d
                               at /home/michal/rust-gpu/crates/rustc_codegen_spirv/src/lib.rs:225:18
  32:     0x7fc78c8fc8df - rustc_interface[b67c563168272ea]::passes::start_codegen
  33:     0x7fc78c8fbf5a - <rustc_interface[b67c563168272ea]::queries::Queries>::codegen_and_build_linker
  34:     0x7fc78c617136 - rustc_interface[b67c563168272ea]::interface::run_compiler::<core[888f6a0b8de5a452]::result::Result<(), rustc_span[ff1220fe343bc5a6]::ErrorGuaranteed>, rustc_driver_impl[5c10b38f6ed04dbe]::run_compiler::{closure#0}>::{closure#1}
  35:     0x7fc78c5fd509 - std[db34fec1d5020528]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[b67c563168272ea]::util::run_in_thread_with_globals<rustc_interface[b67c563168272ea]::util::run_in_thread_pool_with_globals<rustc_interface[b67c563168272ea]::interface::run_compiler<core[888f6a0b8de5a452]::result::Result<(), rustc_span[ff1220fe343bc5a6]::ErrorGuaranteed>, rustc_driver_impl[5c10b38f6ed04dbe]::run_compiler::{closure#0}>::{closure#1}, core[888f6a0b8de5a452]::result::Result<(), rustc_span[ff1220fe343bc5a6]::ErrorGuaranteed>>::{closure#0}, core[888f6a0b8de5a452]::result::Result<(), rustc_span[ff1220fe343bc5a6]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[888f6a0b8de5a452]::result::Result<(), rustc_span[ff1220fe343bc5a6]::ErrorGuaranteed>>
  36:     0x7fc78c5fd2ba - <<std[db34fec1d5020528]::thread::Builder>::spawn_unchecked_<rustc_interface[b67c563168272ea]::util::run_in_thread_with_globals<rustc_interface[b67c563168272ea]::util::run_in_thread_pool_with_globals<rustc_interface[b67c563168272ea]::interface::run_compiler<core[888f6a0b8de5a452]::result::Result<(), rustc_span[ff1220fe343bc5a6]::ErrorGuaranteed>, rustc_driver_impl[5c10b38f6ed04dbe]::run_compiler::{closure#0}>::{closure#1}, core[888f6a0b8de5a452]::result::Result<(), rustc_span[ff1220fe343bc5a6]::ErrorGuaranteed>>::{closure#0}, core[888f6a0b8de5a452]::result::Result<(), rustc_span[ff1220fe343bc5a6]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[888f6a0b8de5a452]::result::Result<(), rustc_span[ff1220fe343bc5a6]::ErrorGuaranteed>>::{closure#2} as core[888f6a0b8de5a452]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  37:     0x7fc78dc6e60b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::ha4af6e05c1d0cf88
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/alloc/src/boxed.rs:2022:9
  38:     0x7fc78dc6e60b - <alloc::boxed::Box<F,A> as core::ops::function::FnOnce<Args>>::call_once::h102b55c00467134a
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/alloc/src/boxed.rs:2022:9
  39:     0x7fc78dc6e60b - std::sys::pal::unix::thread::Thread::new::thread_start::hde2208f61633c92b
                               at /rustc/244da22fabd9fa677bbd0ac601a88e5ca6917526/library/std/src/sys/pal/unix/thread.rs:108:17
  40:     0x7fc7874a66d7 - start_thread
  41:     0x7fc78752a60c - __clone3
  42:                0x0 - <unknown>

error: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: please make sure that you have updated to the latest nightly

note: please attach the file at `/home/michal/rust-gpu/rustc-ice-2024-12-02T22_24_58-50766.txt` to your bug report

note: compiler flags: --crate-type lib --crate-type dylib -C opt-level=3 -C embed-bitcode=no -C codegen-units=1 -C incremental=[REDACTED] -C strip=debuginfo -Z unstable-options -Z codegen-backend=/home/michal/rust-gpu/target/debug/deps/librustc_codegen_spirv.so -Z binary-dep-depinfo -C symbol-mangling-version=v0 -Z crate-attr=feature(register_tool) -Z crate-attr=register_tool(rust_gpu) -C overflow-checks=off -C debug-assertions=off -Z inline-mir=off -Z mir-enable-passes=-GVN

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
end of query stack

error: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-gpu/rust-gpu/issues/new

note: please make sure that you have updated to the latest nightly

note: please attach the file at `/home/michal/rust-gpu/rustc-ice-2024-12-02T22_24_58-50766.txt` to your bug report

note: compiler flags: --crate-type lib --crate-type dylib -C opt-level=3 -C embed-bitcode=no -C codegen-units=1 -C incremental=[REDACTED] -C strip=debuginfo -Z unstable-options -Z codegen-backend=/home/michal/rust-gpu/target/debug/deps/librustc_codegen_spirv.so -Z binary-dep-depinfo -C symbol-mangling-version=v0 -Z crate-attr=feature(register_tool) -Z crate-attr=register_tool(rust_gpu) -C overflow-checks=off -C debug-assertions=off -Z inline-mir=off -Z mir-enable-passes=-GVN

note: some of the compiler flags provided by cargo are hidden

query stack during panic:
end of query stack
note: `rust-gpu` version `0.9.0`

This seems to be caused by implementation of bswap assuming its argument is unsigned, which is not correct.

let arg = args[0].immediate();

BTW: This bug is the very first boon of fuzzing rustgpu with rustlants!

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions