Open
Description
Code
The crash probably has something to do with an MIR back edge to a basic block terminated by a Call
with RET
as destination.
This can only be triggered with -Zmir-opt-level=2
. For some reason it doesn't happen with -Zmir-opt-level=3
#![feature(custom_mir, core_intrinsics)]
extern crate core;
use core::intrinsics::mir::*;
pub fn a() -> char {
'a'
}
#[custom_mir(dialect = "runtime", phase = "initial")]
pub fn ice(arg: char) -> char {
mir! (
let c: char;
let discr: i32;
{
Goto(bb1)
}
bb1 = {
RET = 'a';
c = RET;
Call(RET, bb2, a())
}
bb2 = {
c = arg;
RET = c;
discr = 42;
match discr {
0 => bb1,
_ => bb3
}
}
bb3 = {
Return()
})
}
pub fn main() {
ice('a');
}
Meta
rustc --version --verbose
:
rustc 1.71.0-nightly (1c42cb4ef 2023-04-26)
binary: rustc
commit-hash: 1c42cb4ef0544fbfaa500216e53382d6b079c001
commit-date: 2023-04-26
host: aarch64-apple-darwin
release: 1.71.0-nightly
LLVM version: 16.0.2
Error output
thread 'rustc' panicked at 'assertion failed: `(left == right)`
left: `MutatingUse(Call)`,
right: `NonUse(VarDebugInfo)`', compiler/rustc_mir_transform/src/nrvo.rs:204:13
stack backtrace:
0: 0x104e2d680 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::h2e4b316da8d1b868
1: 0x104e7d624 - core::fmt::write::hee60b630fddd701c
2: 0x104e23590 - std::io::Write::write_fmt::h7829782ffee0a74a
3: 0x104e2d4e0 - std::sys_common::backtrace::print::h69a078fe21ab83fc
4: 0x104e2fea0 - std::panicking::default_hook::{{closure}}::h5166913d03826b1e
5: 0x104e2fca4 - std::panicking::default_hook::h4211b85bce80d367
6: 0x10d2b7f80 - rustc_driver_impl[d2744e2f64f48052]::DEFAULT_HOOK::{closure#0}::{closure#0}
7: 0x104e30494 - std::panicking::rust_panic_with_hook::h4c1dd5e7fe26462e
8: 0x104e302a8 - std::panicking::begin_panic_handler::{{closure}}::h0964cad812c6bc09
9: 0x104e2da7c - std::sys_common::backtrace::__rust_end_short_backtrace::h18678632515b788f
10: 0x104e3003c - _rust_begin_unwind
11: 0x104ea8e98 - core::panicking::panic_fmt::hd45ba9707abd3d04
12: 0x104ea9200 - core::panicking::assert_failed_inner::h6f72dad26ebd5426
13: 0x11156b27c - core[13006027e59f563b]::panicking::assert_failed::<rustc_middle[4bd1076e66066330]::mir::visit::PlaceContext, rustc_middle[4bd1076e66066330]::mir::visit::PlaceContext>
14: 0x10fa2cdf4 - <rustc_mir_transform[ac6be147cdb829a7]::nrvo::RenameToReturnPlace as rustc_middle[4bd1076e66066330]::mir::visit::MutVisitor>::visit_place
15: 0x10fa342ec - <rustc_mir_transform[ac6be147cdb829a7]::nrvo::RenameReturnPlace as rustc_middle[4bd1076e66066330]::mir::MirPass>::run_pass
16: 0x10fb0057c - rustc_mir_transform[ac6be147cdb829a7]::pass_manager::run_passes_inner
17: 0x10f9f9e08 - rustc_mir_transform[ac6be147cdb829a7]::optimized_mir
18: 0x110406b40 - rustc_query_system[dfd69d1f88b4517]::query::plumbing::try_execute_query::<rustc_query_impl[4fb062e88122548a]::queries::optimized_mir, rustc_query_impl[4fb062e88122548a]::plumbing::QueryCtxt>
19: 0x11065bed8 - <rustc_query_impl[4fb062e88122548a]::Queries as rustc_middle[4bd1076e66066330]::ty::query::QueryEngine>::optimized_mir
20: 0x1111c9c34 - <rustc_middle[4bd1076e66066330]::ty::context::TyCtxt>::instance_mir
21: 0x10f995a58 - rustc_monomorphize[6f51a5b3b0e2afbf]::collector::collect_neighbours
22: 0x10f994368 - rustc_monomorphize[6f51a5b3b0e2afbf]::collector::collect_items_rec
23: 0x10f9b5ab0 - <core[13006027e59f563b]::panic::unwind_safe::AssertUnwindSafe<rustc_data_structures[a04248f14933d50e]::sync::par_for_each_in<alloc[4d30c02dd49f99e9]::vec::Vec<rustc_middle[4bd1076e66066330]::mir::mono::MonoItem>, rustc_monomorphize[6f51a5b3b0e2afbf]::collector::collect_crate_mono_items::{closure#1}::{closure#0}>::{closure#0}::{closure#0}> as core[13006027e59f563b]::ops::function::FnOnce<()>>::call_once
24: 0x10f9a8fa8 - rustc_data_structures[a04248f14933d50e]::sync::par_for_each_in::<alloc[4d30c02dd49f99e9]::vec::Vec<rustc_middle[4bd1076e66066330]::mir::mono::MonoItem>, rustc_monomorphize[6f51a5b3b0e2afbf]::collector::collect_crate_mono_items::{closure#1}::{closure#0}>
25: 0x10f9b4258 - <rustc_session[a15cea41fa418eb5]::session::Session>::time::<(), rustc_monomorphize[6f51a5b3b0e2afbf]::collector::collect_crate_mono_items::{closure#1}>
26: 0x10f992828 - rustc_monomorphize[6f51a5b3b0e2afbf]::collector::collect_crate_mono_items
27: 0x10f9a63a8 - rustc_monomorphize[6f51a5b3b0e2afbf]::partitioning::collect_and_partition_mono_items
28: 0x1104cf96c - rustc_query_system[dfd69d1f88b4517]::query::plumbing::try_execute_query::<rustc_query_impl[4fb062e88122548a]::queries::collect_and_partition_mono_items, rustc_query_impl[4fb062e88122548a]::plumbing::QueryCtxt>
29: 0x1106710c8 - <rustc_query_impl[4fb062e88122548a]::Queries as rustc_middle[4bd1076e66066330]::ty::query::QueryEngine>::collect_and_partition_mono_items
30: 0x1107563ec - rustc_codegen_ssa[fd6d44b2de446342]::back::symbol_export::exported_symbols_provider_local
31: 0x110430a8c - rustc_query_system[dfd69d1f88b4517]::query::plumbing::try_execute_query::<rustc_query_impl[4fb062e88122548a]::queries::exported_symbols, rustc_query_impl[4fb062e88122548a]::plumbing::QueryCtxt>
32: 0x110670f04 - <rustc_query_impl[4fb062e88122548a]::Queries as rustc_middle[4bd1076e66066330]::ty::query::QueryEngine>::exported_symbols
33: 0x110a1e08c - <rustc_metadata[6e54bd569d7c9f96]::rmeta::encoder::EncodeContext>::encode_crate_root
34: 0x110a29000 - rustc_metadata[6e54bd569d7c9f96]::rmeta::encoder::encode_metadata_impl
35: 0x1109fc580 - rustc_data_structures[a04248f14933d50e]::sync::join::<rustc_metadata[6e54bd569d7c9f96]::rmeta::encoder::encode_metadata::{closure#0}, rustc_metadata[6e54bd569d7c9f96]::rmeta::encoder::encode_metadata::{closure#1}, (), ()>
36: 0x110a28824 - rustc_metadata[6e54bd569d7c9f96]::rmeta::encoder::encode_metadata
37: 0x110a0dcf8 - rustc_metadata[6e54bd569d7c9f96]::fs::encode_and_write_metadata
38: 0x10d3638cc - rustc_interface[87946e0f114a4094]::passes::start_codegen
39: 0x10d36ad94 - <rustc_middle[4bd1076e66066330]::ty::context::GlobalCtxt>::enter::<<rustc_interface[87946e0f114a4094]::queries::Queries>::ongoing_codegen::{closure#0}::{closure#0}, core[13006027e59f563b]::result::Result<alloc[4d30c02dd49f99e9]::boxed::Box<dyn core[13006027e59f563b]::any::Any>, rustc_span[a7e895295122ec2d]::ErrorGuaranteed>>
40: 0x10d31addc - <rustc_interface[87946e0f114a4094]::queries::Queries>::ongoing_codegen
41: 0x10d29497c - <rustc_interface[87946e0f114a4094]::interface::Compiler>::enter::<rustc_driver_impl[d2744e2f64f48052]::run_compiler::{closure#1}::{closure#2}, core[13006027e59f563b]::result::Result<core[13006027e59f563b]::option::Option<rustc_interface[87946e0f114a4094]::queries::Linker>, rustc_span[a7e895295122ec2d]::ErrorGuaranteed>>
42: 0x10d259430 - <scoped_tls[c0382597cdb10fcc]::ScopedKey<rustc_span[a7e895295122ec2d]::SessionGlobals>>::set::<rustc_interface[87946e0f114a4094]::interface::run_compiler<core[13006027e59f563b]::result::Result<(), rustc_span[a7e895295122ec2d]::ErrorGuaranteed>, rustc_driver_impl[d2744e2f64f48052]::run_compiler::{closure#1}>::{closure#0}, core[13006027e59f563b]::result::Result<(), rustc_span[a7e895295122ec2d]::ErrorGuaranteed>>
43: 0x10d2649e4 - std[c618651f4d1565b5]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[87946e0f114a4094]::util::run_in_thread_pool_with_globals<rustc_interface[87946e0f114a4094]::interface::run_compiler<core[13006027e59f563b]::result::Result<(), rustc_span[a7e895295122ec2d]::ErrorGuaranteed>, rustc_driver_impl[d2744e2f64f48052]::run_compiler::{closure#1}>::{closure#0}, core[13006027e59f563b]::result::Result<(), rustc_span[a7e895295122ec2d]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[13006027e59f563b]::result::Result<(), rustc_span[a7e895295122ec2d]::ErrorGuaranteed>>
44: 0x10d254c20 - <<std[c618651f4d1565b5]::thread::Builder>::spawn_unchecked_<rustc_interface[87946e0f114a4094]::util::run_in_thread_pool_with_globals<rustc_interface[87946e0f114a4094]::interface::run_compiler<core[13006027e59f563b]::result::Result<(), rustc_span[a7e895295122ec2d]::ErrorGuaranteed>, rustc_driver_impl[d2744e2f64f48052]::run_compiler::{closure#1}>::{closure#0}, core[13006027e59f563b]::result::Result<(), rustc_span[a7e895295122ec2d]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[13006027e59f563b]::result::Result<(), rustc_span[a7e895295122ec2d]::ErrorGuaranteed>>::{closure#1} as core[13006027e59f563b]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
45: 0x104e38be4 - std::sys::unix::thread::Thread::new::thread_start::hd4c5932775b29ea0
46: 0x187e6bfa8 - __pthread_joiner_wake
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: rustc 1.71.0-nightly (1c42cb4ef 2023-04-26) running on aarch64-apple-darwin
note: compiler flags: --crate-type lib -Z mir-opt-level=2
query stack during panic:
#0 [optimized_mir] optimizing MIR for `ice`
#1 [collect_and_partition_mono_items] collect_and_partition_mono_items
#2 [exported_symbols] collecting exported symbols for crate `0`
end of query stack
warning: 1 warning emitted