Closed
Description
The working example in #72956 builds fine, but if I add -Zunpretty=mir-cfg
it panics. Repro:
use std::ops::Index;
struct Banana(*mut ());
unsafe impl Send for Banana {}
impl Banana {
fn new() -> &'static mut Banana {
static mut BANANA: Banana = Banana(std::ptr::null_mut());
unsafe { &mut BANANA }
}
}
struct Peach<'a>(&'a mut Banana);
impl<'a> std::ops::Index<usize> for Peach<'a> {
type Output = ();
fn index(&self, idx: usize) -> &() {
&()
}
}
async fn baz(v: &()) {}
async fn bar() -> () {
let peach = Peach(Banana::new());
let r: &() = &*std::ops::Index::index(&peach, 0);
baz(r).await;
peach.index(0);
}
fn assert_send<T: Send>(_: T) {}
pub fn main() {
assert_send(bar())
}
It builds fine:
$ rustc +stage1 test_works.rs --edition=2018
warning: unused variable: `v`
--> test_works.rs:22:14
|
22 | async fn baz(v: &()) {}
| ^ help: if this is intentional, prefix it with an underscore: `_v`
|
= note: `#[warn(unused_variables)]` on by default
warning: unused variable: `idx`
--> test_works.rs:17:21
|
17 | fn index(&self, idx: usize) -> &() {
| ^^^ help: if this is intentional, prefix it with an underscore: `_idx`
warning: 2 warnings emitted
Panics with -Zunpretty=mir-cfg
:
$ rustc +stage1 test_works.rs --edition=2018 -Zunpretty=mir-cfg
warning: unused variable: `v`
--> test_works.rs:22:14
|
22 | async fn baz(v: &()) {}
| ^ help: if this is intentional, prefix it with an underscore: `_v`
|
= note: `#[warn(unused_variables)]` on by default
warning: unused variable: `idx`
--> test_works.rs:17:21
|
17 | fn index(&self, idx: usize) -> &() {
| ^^^ help: if this is intentional, prefix it with an underscore: `_idx`
thread 'rustc' panicked at 'do not use `optimized_mir` for constants: Static(Mut)', compiler/rustc_mir/src/transform/mod.rs:579:24
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.
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.52.0-dev running on x86_64-unknown-linux-gnu
note: compiler flags: -Z unpretty=mir-cfg
query stack during panic:
#0 [optimized_mir] optimizing MIR for `Banana::new::BANANA`
end of query stack
warning: 2 warnings emitted
Backtrace
0: rust_begin_unwind
at /home/omer/rust/rust/library/std/src/panicking.rs:493:5
1: std::panicking::begin_panic_fmt
at /home/omer/rust/rust/library/std/src/panicking.rs:435:5
2: rustc_mir::transform::inner_optimized_mir
at /home/omer/rust/rust/compiler/rustc_mir/src/transform/mod.rs:579:24
3: rustc_mir::transform::optimized_mir
at /home/omer/rust/rust/compiler/rustc_mir/src/transform/mod.rs:561:21
4: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::optimized_mir>::compute
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/query/plumbing.rs:377:17
5: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
at /home/omer/rust/rust/compiler/rustc_query_system/src/dep_graph/graph.rs:363:14
6: rustc_query_system::query::plumbing::force_query_with_job::{{closure}}::{{closure}}
7: rustc_middle::ty::query::plumbing::<impl rustc_query_system::query::QueryContext for rustc_middle::ty::context::TyCtxt>::start_query::{{closure}}::{{closure}}::{{closure}}
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/query/plumbing.rs:73:74
8: stacker::maybe_grow
at /home/omer/.cargo/registry/src/github.com-1ecc6299db9ec823/stacker-0.1.12/src/lib.rs:55:9
9: rustc_data_structures::stack::ensure_sufficient_stack
at /home/omer/rust/rust/compiler/rustc_data_structures/src/stack.rs:16:5
10: rustc_middle::ty::query::plumbing::<impl rustc_query_system::query::QueryContext for rustc_middle::ty::context::TyCtxt>::start_query::{{closure}}::{{closure}}
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/query/plumbing.rs:73:17
11: rustc_middle::ty::context::tls::enter_context::{{closure}}
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/context.rs:1712:50
12: rustc_middle::ty::context::tls::set_tlv
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/context.rs:1696:9
13: rustc_middle::ty::context::tls::enter_context
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/context.rs:1712:9
14: rustc_middle::ty::query::plumbing::<impl rustc_query_system::query::QueryContext for rustc_middle::ty::context::TyCtxt>::start_query::{{closure}}
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/query/plumbing.rs:72:13
15: rustc_middle::ty::context::tls::with_related_context::{{closure}}
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/context.rs:1756:13
16: rustc_middle::ty::context::tls::with_context::{{closure}}
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/context.rs:1740:40
17: rustc_middle::ty::context::tls::with_context_opt
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/context.rs:1729:22
18: rustc_middle::ty::context::tls::with_context
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/context.rs:1740:9
19: rustc_middle::ty::context::tls::with_related_context
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/context.rs:1753:9
20: rustc_middle::ty::query::plumbing::<impl rustc_query_system::query::QueryContext for rustc_middle::ty::context::TyCtxt>::start_query
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/query/plumbing.rs:61:9
21: rustc_query_system::query::plumbing::force_query_with_job::{{closure}}
at /home/omer/rust/rust/compiler/rustc_query_system/src/query/plumbing.rs:598:9
22: rustc_query_system::query::plumbing::with_diagnostics
at /home/omer/rust/rust/compiler/rustc_query_system/src/query/plumbing.rs:303:18
23: rustc_query_system::query::plumbing::force_query_with_job
at /home/omer/rust/rust/compiler/rustc_query_system/src/query/plumbing.rs:597:51
24: rustc_query_system::query::plumbing::try_execute_query
at /home/omer/rust/rust/compiler/rustc_query_system/src/query/plumbing.rs:427:16
25: rustc_query_system::query::plumbing::get_query_impl::{{closure}}
at /home/omer/rust/rust/compiler/rustc_query_system/src/query/plumbing.rs:645:23
26: <rustc_query_system::query::caches::DefaultCache<K,V> as rustc_query_system::query::caches::QueryCache>::lookup
at /home/omer/rust/rust/compiler/rustc_query_system/src/query/caches.rs:114:79
27: rustc_query_system::query::plumbing::try_get_cached
at /home/omer/rust/rust/compiler/rustc_query_system/src/query/plumbing.rs:380:5
28: rustc_query_system::query::plumbing::get_query_impl
at /home/omer/rust/rust/compiler/rustc_query_system/src/query/plumbing.rs:637:5
29: rustc_query_system::query::plumbing::get_query
at /home/omer/rust/rust/compiler/rustc_query_system/src/query/plumbing.rs:739:5
30: rustc_middle::ty::query::TyCtxtAt::optimized_mir
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/query/plumbing.rs:487:17
31: rustc_middle::ty::query::<impl rustc_middle::ty::context::TyCtxt>::optimized_mir
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/query/plumbing.rs:448:17
32: rustc_mir::util::graphviz::write_mir_graphviz
at /home/omer/rust/rust/compiler/rustc_mir/src/util/graphviz.rs:25:21
33: rustc_driver::pretty::print_with_analysis
at /home/omer/rust/rust/compiler/rustc_driver/src/pretty.rs:499:26
34: rustc_driver::pretty::print_after_hir_lowering
at /home/omer/rust/rust/compiler/rustc_driver/src/pretty.rs:431:22
35: rustc_driver::run_compiler::{{closure}}::{{closure}}::{{closure}}
at /home/omer/rust/rust/compiler/rustc_driver/src/lib.rs:349:25
36: rustc_interface::passes::QueryContext::enter::{{closure}}
at /home/omer/rust/rust/compiler/rustc_interface/src/passes.rs:749:42
37: rustc_middle::ty::context::tls::enter_context::{{closure}}
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/context.rs:1712:50
38: rustc_middle::ty::context::tls::set_tlv
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/context.rs:1696:9
39: rustc_middle::ty::context::tls::enter_context
at /home/omer/rust/rust/compiler/rustc_middle/src/ty/context.rs:1712:9
40: rustc_interface::passes::QueryContext::enter
at /home/omer/rust/rust/compiler/rustc_interface/src/passes.rs:749:9
41: rustc_driver::run_compiler::{{closure}}::{{closure}}
at /home/omer/rust/rust/compiler/rustc_driver/src/lib.rs:347:21
42: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::enter
at /home/omer/rust/rust/compiler/rustc_interface/src/queries.rs:418:19
43: rustc_driver::run_compiler::{{closure}}
at /home/omer/rust/rust/compiler/rustc_driver/src/lib.rs:341:22
44: rustc_interface::interface::create_compiler_and_run::{{closure}}
at /home/omer/rust/rust/compiler/rustc_interface/src/interface.rs:197:13
45: rustc_span::with_source_map
at /home/omer/rust/rust/compiler/rustc_span/src/lib.rs:789:5
46: rustc_interface::interface::create_compiler_and_run
at /home/omer/rust/rust/compiler/rustc_interface/src/interface.rs:191:5
47: rustc_interface::interface::run_compiler::{{closure}}
at /home/omer/rust/rust/compiler/rustc_interface/src/interface.rs:213:12
48: rustc_interface::util::setup_callbacks_and_run_in_thread_pool_with_globals::{{closure}}::{{closure}}
at /home/omer/rust/rust/compiler/rustc_interface/src/util.rs:152:13
49: scoped_tls::ScopedKey<T>::set
at /home/omer/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-1.0.0/src/lib.rs:137:9
50: rustc_span::with_session_globals
at /home/omer/rust/rust/compiler/rustc_span/src/lib.rs:105:5
51: rustc_interface::util::setup_callbacks_and_run_in_thread_pool_with_globals::{{closure}}
at /home/omer/rust/rust/compiler/rustc_interface/src/util.rs:150:9
52: rustc_interface::util::scoped_thread::{{closure}}
at /home/omer/rust/rust/compiler/rustc_interface/src/util.rs:125:24