- 
                Notifications
    
You must be signed in to change notification settings  - Fork 18
 
Open
Description
fn main() -> ExitCode {
  let cli = Cli::parse();
  match run!(cli.rustc_args(), || demo(cli)) {
    Ok(_) | Err(CompilerError::Skipped | CompilerError::Interrupted(_))
      => ExitCode::SUCCESS,
    _ => ExitCode::FAILURE,
  }
}
struct MyT;
impl MirVisitor for MyT {
  fn visit_mir_const(&mut self, constant: &ty::MirConst, location: mir::visit::Location) {
    println!("{:?}", constant.eval_target_usize());
  }
}
fn demo(cli: Cli) -> ControlFlow<()> {
  let mut v = MyT;
  
  v.visit_body(&stable_mir::entry_fn().unwrap().body());
  ControlFlow::Break(())
}I try to evaluate a const value via the above api. But it fails to borrow the Context.
thread 'rustc' panicked at compiler/rustc_smir/src/rustc_smir/context.rs:238:29:
already mutably borrowed: BorrowError
stack backtrace:
   0: rust_begin_unwind
   1: core::panicking::panic_fmt
   2: core::cell::panic_already_mutably_borrowed
   3: <rustc_smir::rustc_smir::context::TablesWrapper as stable_mir::compiler_interface::Context>::def_name
   4: <stable_mir::crate_def::DefId as core::fmt::Debug>::fmt
   5: core::fmt::Formatter::debug_tuple_field1_finish
   6: <stable_mir::ty::ConstDef as core::fmt::Debug>::fmt
   7: core::fmt::builders::DebugStruct::field
   8: core::fmt::Formatter::debug_struct_field3_finish
   9: <&stable_mir::ty::UnevaluatedConst as core::fmt::Debug>::fmt
  10: core::fmt::Formatter::debug_tuple_field1_finish
  11: <stable_mir::ty::ConstantKind as core::fmt::Debug>::fmt
  12: core::fmt::builders::DebugStruct::field
  13: core::fmt::Formatter::debug_struct_field3_finish
  14: <&stable_mir::ty::MirConst as core::fmt::Debug>::fmt
  15: core::fmt::write
  16: alloc::fmt::format::format_inner
  17: <rustc_smir::rustc_smir::context::TablesWrapper as stable_mir::compiler_interface::Context>::eval_target_usize
  18: <stable_mir::ty::MirConst>::eval_target_usize
  19: <stable_mir_analysis::MyT as stable_mir::mir::visit::MirVisitor>::visit_mir_const
             at ./src/main.rs:47:22
  20: stable_mir::mir::visit::MirVisitor::super_const_operand
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:376:9
  21: stable_mir::mir::visit::MirVisitor::visit_const_operand
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:112:9
  22: stable_mir::mir::visit::MirVisitor::super_operand
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:359:17
  23: stable_mir::mir::visit::MirVisitor::visit_operand
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:99:9
  24: stable_mir::mir::visit::MirVisitor::super_rvalue
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:348:17
  25: stable_mir::mir::visit::MirVisitor::visit_rvalue
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:95:9
  26: stable_mir::mir::visit::MirVisitor::super_statement
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:195:17
  27: stable_mir::mir::visit::MirVisitor::visit_statement
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:64:9
  28: stable_mir::mir::visit::MirVisitor::super_basic_block
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:170:13
  29: stable_mir::mir::visit::MirVisitor::visit_basic_block
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:48:9
  30: stable_mir::mir::visit::MirVisitor::super_body
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:146:13
  31: stable_mir::mir::visit::MirVisitor::visit_body
             at /home/zhuyt/.rustup/toolchains/nightly-2025-03-02-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/compiler/stable_mir/src/mir/visit.rs:44:9
  32: stable_mir_analysis::demo
             at ./src/main.rs:54:3Btw, is there any way to read the initial value of a global const variable?
Metadata
Metadata
Assignees
Labels
No labels