facebookexperimental / MIRAI

Rust mid-level IR Abstract Interpreter

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Fail build with MIRAI

zakrush opened this issue · comments

Issue

When building Get punic.

Compiling tracing-core v0.1.17
thread 'rustc' panicked at 'internal error: entered unreachable code', checker/src/type_visitor.rs:864:25
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

error: internal compiler error: unexpected panic

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

Steps to Reproduce

Run build as described to README.md

Expected Behavior

RUN with RUST_BACKTRACE=1

thread 'rustc' panicked at 'internal error: entered unreachable code', checker/src/type_visitor.rs:864:25
stack backtrace:
   0: rust_begin_unwind
             at /rustc/b70888601af92f6cdc0364abab3446e418b91d36/library/std/src/panicking.rs:515:5
   1: core::panicking::panic_fmt
             at /rustc/b70888601af92f6cdc0364abab3446e418b91d36/library/core/src/panicking.rs:92:14
   2: core::panicking::panic
             at /rustc/b70888601af92f6cdc0364abab3446e418b91d36/library/core/src/panicking.rs:50:5
   3: mirai::type_visitor::TypeVisitor::get_type_for_projection_element::{{closure}}
   4: core::iter::traits::iterator::Iterator::fold
             at /rustc/b70888601af92f6cdc0364abab3446e418b91d36/library/core/src/iter/traits/iterator.rs:2174:21
   5: mirai::type_visitor::TypeVisitor::get_type_for_projection_element
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/type_visitor.rs:852:9
   6: mirai::type_visitor::TypeVisitor::get_rustc_place_type::{{closure}}
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/type_visitor.rs:813:13
   7: mirai::type_visitor::TypeVisitor::get_rustc_place_type
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/type_visitor.rs:805:5
   8: mirai::block_visitor::BlockVisitor::visit_address_of
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/block_visitor.rs:1664:27
   9: mirai::block_visitor::BlockVisitor::visit_rvalue
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/block_visitor.rs:1501:17
  10: mirai::block_visitor::BlockVisitor::visit_assign
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/block_visitor.rs:152:9
  11: mirai::block_visitor::BlockVisitor::visit_statement
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/block_visitor.rs:116:17
  12: mirai::block_visitor::BlockVisitor::visit_basic_block
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/block_visitor.rs:88:17
  13: mirai::fixed_point_visitor::FixedPointVisitor::visit_basic_block
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/fixed_point_visitor.rs:131:9
  14: mirai::fixed_point_visitor::FixedPointVisitor::visit_blocks
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/fixed_point_visitor.rs:83:21
  15: mirai::body_visitor::BodyVisitor::visit_body
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/body_visitor.rs:198:9
  16: mirai::call_visitor::CallVisitor::create_and_cache_function_summary
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/call_visitor.rs:134:17
  17: mirai::call_visitor::CallVisitor::get_function_summary
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/call_visitor.rs:318:21
  18: mirai::call_visitor::CallVisitor::inline_indirectly_called_function
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/call_visitor.rs:1233:27
  19: mirai::call_visitor::CallVisitor::handled_as_special_function_call
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/call_visitor.rs:435:17
  20: mirai::block_visitor::BlockVisitor::visit_call
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/block_visitor.rs:674:12
  21: mirai::block_visitor::BlockVisitor::visit_terminator
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/block_visitor.rs:279:18
  22: mirai::block_visitor::BlockVisitor::visit_basic_block
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/block_visitor.rs:103:13
  23: mirai::fixed_point_visitor::FixedPointVisitor::visit_basic_block
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/fixed_point_visitor.rs:131:9
  24: mirai::fixed_point_visitor::FixedPointVisitor::visit_loop_body
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/fixed_point_visitor.rs:219:21
  25: mirai::fixed_point_visitor::FixedPointVisitor::compute_fixed_point
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/fixed_point_visitor.rs:151:26
  26: mirai::fixed_point_visitor::FixedPointVisitor::visit_blocks
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/fixed_point_visitor.rs:85:21
  27: mirai::body_visitor::BodyVisitor::visit_body
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/body_visitor.rs:198:9
  28: mirai::call_visitor::CallVisitor::create_and_cache_function_summary
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/call_visitor.rs:134:17
  29: mirai::call_visitor::CallVisitor::get_function_summary
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/call_visitor.rs:318:21
  30: mirai::block_visitor::BlockVisitor::visit_call
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/block_visitor.rs:677:32
  31: mirai::block_visitor::BlockVisitor::visit_terminator
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/block_visitor.rs:279:18
  32: mirai::block_visitor::BlockVisitor::visit_basic_block
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/block_visitor.rs:103:13
  33: mirai::fixed_point_visitor::FixedPointVisitor::visit_basic_block
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/fixed_point_visitor.rs:131:9
  34: mirai::fixed_point_visitor::FixedPointVisitor::visit_blocks
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/fixed_point_visitor.rs:83:21
  35: mirai::body_visitor::BodyVisitor::visit_body
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/body_visitor.rs:198:9
  36: mirai::crate_visitor::CrateVisitor::analyze_body::{{closure}}
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/crate_visitor.rs:162:23
  37: mirai::crate_visitor::CrateVisitor::analyze_body
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/crate_visitor.rs:150:5
  38: mirai::crate_visitor::CrateVisitor::analyze_some_bodies::{{closure}}
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/crate_visitor.rs:108:13
  39: mirai::crate_visitor::CrateVisitor::analyze_some_bodies
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/crate_visitor.rs:67:5
  40: mirai::callbacks::MiraiCallbacks::analyze_with_mirai::{{closure}}
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/callbacks.rs:288:9
  41: mirai::callbacks::MiraiCallbacks::analyze_with_mirai
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/callbacks.rs:245:5
  42: <mirai::callbacks::MiraiCallbacks as rustc_driver::Callbacks>::after_analysis::{{closure}}::{{closure}}
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/callbacks.rs:128:26
  43: rustc_interface::passes::QueryContext::enter::{{closure}}
             at /rustc/b70888601af92f6cdc0364abab3446e418b91d36/compiler/rustc_interface/src/passes.rs:780:42
  44: rustc_middle::ty::context::tls::enter_context::{{closure}}
             at /rustc/b70888601af92f6cdc0364abab3446e418b91d36/compiler/rustc_middle/src/ty/context.rs:1784:50
  45: rustc_middle::ty::context::tls::set_tlv
             at /rustc/b70888601af92f6cdc0364abab3446e418b91d36/compiler/rustc_middle/src/ty/context.rs:1768:9
  46: rustc_middle::ty::context::tls::enter_context
             at /rustc/b70888601af92f6cdc0364abab3446e418b91d36/compiler/rustc_middle/src/ty/context.rs:1784:9
  47: rustc_interface::passes::QueryContext::enter
             at /rustc/b70888601af92f6cdc0364abab3446e418b91d36/compiler/rustc_interface/src/passes.rs:780:9
  48: <mirai::callbacks::MiraiCallbacks as rustc_driver::Callbacks>::after_analysis::{{closure}}
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/callbacks.rs:124:9
  49: <mirai::callbacks::MiraiCallbacks as rustc_driver::Callbacks>::after_analysis
             at /home/dm/Job/Dir/tools/MIRAI/checker/src/callbacks.rs:104:5
  50: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter
  51: rustc_span::with_source_map
  52: rustc_interface::interface::create_compiler_and_run
  53: scoped_tls::ScopedKey<T>::set
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

error: internal compiler error: unexpected panic

note: 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: rustc 1.56.0-nightly (b70888601 2021-07-28) running on x86_64-unknown-linux-gnu

note: compiler flags: -Z always_encode_mir -C embed-bitcode=no -C debuginfo=2 --crate-type lib

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

query stack during panic:
end of query stack
error: could not compile `tracing-core`

.

Actual Results

No panic during of build

Environment

Rust version (rustc --version)

 rustc --version
rustc 1.56.0-nightly (b70888601 2021-07-28)

I've seen this as well and I'm working my way up to fixing it. Meanwhile, you might be able to avoid running into it if you only do an incremental build. I.e. first build your crate just with rustc, then touch your lib.rs, then build with MIRAI. With any luck, your code won't cover the problematic MIR that causes MIRAI to crash.

BTW. It is hard for to follow your repro instructions since I have no idea where to find "Get punic".

I'm getting panic into private prodict, I can't share it.

cargo build
touch src/lib.rs 
RUSTFLAGS="-Z always_encode_mir" RUSTC_WRAPPER=mirai cargo build 

didn't help me.

@hermanventer I found how to Reproduce

git clone https://github.com/tokio-rs/tracing.git
git checkout -b tag tracing-subscriber-0.2.17
 rustup override set nightly-2021-07-29 
RUSTFLAGS="-Z always_encode_mir" RUSTC_WRAPPER=mirai cargo build 

I'm getting panic into private prodict, I can't share it.

cargo build
touch src/lib.rs 
RUSTFLAGS="-Z always_encode_mir" RUSTC_WRAPPER=mirai cargo build 

didn't help me.

When you do the initial cargo build, you also have to specify RUSTFLAGS="-Z always_encode_mir".

tracing-core now compiles with MIRAI.