You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
//@ run-pass//! Test that item kind works as expected.//@ ignore-stage1//@ ignore-cross-compile//@ ignore-remote//@ edition: 2021#![feature(rustc_private)]#![feature(assert_matches)]externcrate rustc_middle;#[macro_use]externcrate rustc_smir;externcrate rustc_driver;externcrate rustc_interface;externcrate stable_mir;use rustc_smir::rustc_internal;use std::io::Write;use std::ops::ControlFlow;constCRATE_NAME:&str = "input";/// This function uses the Stable MIR APIs to get information about the test crate.fntest_item_kind() -> ControlFlow<()>{let items = stable_mir::all_local_items();// Constructor item.for item in items {let _ = item.kind();}ControlFlow::Continue(())}/// This test will generate and analyze a dummy crate using the stable mir./// For that, it will first write the dummy crate into a file./// Then it will create a `StableMir` using custom arguments and then/// it will run the compiler.fnmain(){let path = "item_kind_input.rs";generate_input(&path).unwrap();let args = vec!["rustc".to_string(),"-Cpanic=abort".to_string(),"--crate-type=lib".to_string(),"--crate-name".to_string(),CRATE_NAME.to_string(),
path.to_string(),];run!(args, test_item_kind).unwrap();}fngenerate_input(path:&str) -> std::io::Result<()>{letmut file = std::fs::File::create(path)?;write!(
file,r##" std::arch::global_asm!(r#" .global my_noop .text my_noop: ret "#); "##)?;Ok(())}
❯ cargo run
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.01s
Running `target/debug/stable-mir-bug`
thread 'rustc' panicked at compiler/rustc_smir/src/rustc_smir/mod.rs:145:13:
internal error: entered unreachable code: Not a valid item kind: GlobalAsm
stack backtrace:
0: 0x11c029b50 - <std::sys::backtrace::BacktraceLock::print::DisplayBacktrace as core::fmt::Display>::fmt::h01f5e23dcfa2a90e
1: 0x118fcec23 - core::fmt::write::he4853cc08b80db6c
2: 0x11c01ddb2 - std::io::Write::write_fmt::h2d4ff1e93b93926d
3: 0x11c0299a2 - std::sys::backtrace::BacktraceLock::print::hc1c953a08614aca4
4: 0x11c02c520 - std::panicking::default_hook::{{closure}}::h29c83fe2f5c6f731
5: 0x11c02c124 - std::panicking::default_hook::h0666ac6f30006983
6: 0x11c02ce3e - std::panicking::rust_panic_with_hook::hc99d3b08a18f95f9
7: 0x11c02cb28 - std::panicking::begin_panic_handler::{{closure}}::h5b3ef507ee63af0e
8: 0x11c029ff9 - std::sys::backtrace::__rust_end_short_backtrace::h7b36728f4c4db291
9: 0x11c02c764 - _rust_begin_unwind
10: 0x11f353eaf - core::panicking::panic_fmt::he11055326097ecd8
11: 0x11b935943 - <rustc_smir[a1f7f53badb6847c]::rustc_smir::context::TablesWrapper as stable_mir[3c1241d0939fa9]::compiler_interface::Context>::item_kind
12: 0x10d6c9022 - stable_mir_bug::test_item_kind::hdc645e6427a486e8
at /Users/delmasrd/projects/stable-mir-bug/src/main.rs:30:18
13: 0x10d6c9afd - stable_mir_bug::main::{{closure}}::he4a8877abdbd151b
at /Users/delmasrd/.rustup/toolchains/nightly-2025-03-02-x86_64-apple-darwin/lib/rustlib/src/rust/compiler/rustc_smir/src/rustc_internal/mod.rs:279:31
14: 0x10d6c9ab1 - <stable_mir_bug::main::StableMir<B,C,F> as rustc_driver_impl::Callbacks>::after_analysis::{{closure}}::h866eb4518471c3f9
at /Users/delmasrd/.rustup/toolchains/nightly-2025-03-02-x86_64-apple-darwin/lib/rustlib/src/rust/compiler/rustc_smir/src/rustc_internal/mod.rs:386:44
15: 0x10d6c8351 - rustc_smir::rustc_internal::init::{{closure}}::h4473f79754c35572
at /Users/delmasrd/.rustup/toolchains/nightly-2025-03-02-x86_64-apple-darwin/lib/rustlib/src/rust/compiler/rustc_smir/src/rustc_internal/mod.rs:196:33
16: 0x10d6c6dcc - scoped_tls::ScopedKey<T>::set::h8a831d5ecd414d27
at /rust/deps/scoped-tls-1.0.1/src/lib.rs:137:9
17: 0x10d6c8303 - rustc_smir::rustc_internal::init::h14cea51accd9d4d8
at /Users/delmasrd/.rustup/toolchains/nightly-2025-03-02-x86_64-apple-darwin/lib/rustlib/src/rust/compiler/rustc_smir/src/rustc_internal/mod.rs:196:5
18: 0x10d6c8285 - rustc_smir::rustc_internal::run::{{closure}}::h50942426ffddc9c8
at /Users/delmasrd/.rustup/toolchains/nightly-2025-03-02-x86_64-apple-darwin/lib/rustlib/src/rust/compiler/rustc_smir/src/rustc_internal/mod.rs:227:53
19: 0x10d6c9d73 - stable_mir::compiler_interface::run::{{closure}}::h58b5e7ef6698d7d2
at /Users/delmasrd/.rustup/toolchains/nightly-2025-03-02-x86_64-apple-darwin/lib/rustlib/src/rust/compiler/stable_mir/src/compiler_interface.rs:268:40
20: 0x10d6c6e97 - scoped_tls::ScopedKey<T>::set::hc6f7b556f6350e22
at /rust/deps/scoped-tls-1.0.1/src/lib.rs:137:9
21: 0x10d6c9ceb - stable_mir::compiler_interface::run::h7c47e5f0420eaf0d
at /Users/delmasrd/.rustup/toolchains/nightly-2025-03-02-x86_64-apple-darwin/lib/rustlib/src/rust/compiler/stable_mir/src/compiler_interface.rs:268:9
22: 0x10d6c8212 - rustc_smir::rustc_internal::run::h3267ecc81af27e0b
at /Users/delmasrd/.rustup/toolchains/nightly-2025-03-02-x86_64-apple-darwin/lib/rustlib/src/rust/compiler/rustc_smir/src/rustc_internal/mod.rs:227:5
23: 0x10d6c99e4 - <stable_mir_bug::main::StableMir<B,C,F> as rustc_driver_impl::Callbacks>::after_analysis::h715cb9875dad65ee
at /Users/delmasrd/.rustup/toolchains/nightly-2025-03-02-x86_64-apple-darwin/lib/rustlib/src/rust/compiler/rustc_smir/src/rustc_internal/mod.rs:385:21
24: 0x119c3d3a7 - rustc_interface[12e2c5bb59b8f261]::passes::create_and_enter_global_ctxt::<core[e62a462baba2588e]::option::Option<rustc_interface[12e2c5bb59b8f261]::queries::Linker>, rustc_driver_impl[fa162f55ecd1d14e]::run_compiler::{closure#0}::{closure#2}>
25: 0x119c8ee38 - rustc_interface[12e2c5bb59b8f261]::interface::run_compiler::<(), rustc_driver_impl[fa162f55ecd1d14e]::run_compiler::{closure#0}>::{closure#1}
26: 0x119c7e80d - std[f99b8324fcf2a019]::sys::backtrace::__rust_begin_short_backtrace::<rustc_interface[12e2c5bb59b8f261]::util::run_in_thread_with_globals<rustc_interface[12e2c5bb59b8f261]::util::run_in_thread_pool_with_globals<rustc_interface[12e2c5bb59b8f261]::interface::run_compiler<(), rustc_driver_impl[fa162f55ecd1d14e]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>
27: 0x119c9826d - <<std[f99b8324fcf2a019]::thread::Builder>::spawn_unchecked_<rustc_interface[12e2c5bb59b8f261]::util::run_in_thread_with_globals<rustc_interface[12e2c5bb59b8f261]::util::run_in_thread_pool_with_globals<rustc_interface[12e2c5bb59b8f261]::interface::run_compiler<(), rustc_driver_impl[fa162f55ecd1d14e]::run_compiler::{closure#0}>::{closure#1}, ()>::{closure#0}, ()>::{closure#0}::{closure#0}, ()>::{closure#1} as core[e62a462baba2588e]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
28: 0x11c0387fb - std::sys::pal::unix::thread::Thread::new::thread_start::h703431e570bc9684
29: 0x7ff802bb3253 - __pthread_start
This is triggered from Kani, which uses stable MIR to load up a crate and find all MonoItems it contains to use them as entry points for analysis/GOTO codegen.
/// Collect all (top-level) items in the crate that matches the given predicate./// An item can only be a root if they are a non-generic function.pubfn filter_crate_items<F>(tcx:TyCtxt,predicate:F) -> Vec<Instance>whereF:Fn(TyCtxt,Instance) -> bool,{let crate_items = stable_mir::all_local_items();// Filter regular items.
crate_items
.iter().filter_map(|item| {// Only collect monomorphic items.matches!(item.kind(),ItemKind::Fn) <<<<<<< Problem happens here
.then(|| {Instance::try_from(*item).ok().and_then(|instance| predicate(tcx, instance).then_some(instance))}).flatten()}).collect::<Vec<_>>()}
At the Kani level we don't need to surface a representation of the ASM code. Adding an ItemKind::GlobalAsm would be sufficient for Kani to introspect/filter the Items found in a crate.
The text was updated successfully, but these errors were encountered:
Minimum reproducer:
This is triggered from Kani, which uses stable MIR to load up a crate and find all MonoItems it contains to use them as entry points for analysis/GOTO codegen.
At the Kani level we don't need to surface a representation of the ASM code. Adding an ItemKind::GlobalAsm would be sufficient for Kani to introspect/filter the Items found in a crate.
The text was updated successfully, but these errors were encountered: