Skip to content

src/librustc_mir/transform/generator.rs:715: Broken MIR #62126

Closed
@gila

Description

@gila

The minimal code that reproduces the issue:

#![feature(async_await)]
use futures::{executor::LocalPool, future, task::LocalSpawnExt};

async fn do_something(s: String) -> Result<String, String> {
    Ok(s)
}

async fn do_it() {
    for i in 0 ..= 3 {
        let s = format!("test-{}", i);
        let result = do_something(s).await;
        // when removing the dbg!() the code compiles 
        dbg!(result);
    }
}

#[test]
fn mir_error() {
    let mut p = LocalPool::new();
    let mut s = p.spawner();
    s.spawn_local(do_it()).unwrap();
    p.run_until_stalled();
}

Getting the following error:

  --> spdk-rs/tests/for.rs:8:18
   |
8  |   async fn do_it() {
   |  __________________^
9  | |     for i in 0 ..= 3 {
10 | |         let s = format!("test-{}", i);
11 | |         let result = do_something(s).await;
12 | |         dbg!(result);
13 | |     }
14 | | }
   | |_^

thread 'rustc' panicked at 'Box<Any>', src/librustc_errors/lib.rs:578:9
stack backtrace:
   0: backtrace::backtrace::libunwind::trace
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/libunwind.rs:88
   1: backtrace::backtrace::trace_unsynchronized
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/mod.rs:66
   2: std::sys_common::backtrace::_print
             at src/libstd/sys_common/backtrace.rs:47
   3: std::sys_common::backtrace::print
             at src/libstd/sys_common/backtrace.rs:36
   4: std::panicking::default_hook::{{closure}}
             at src/libstd/panicking.rs:198
   5: std::panicking::default_hook
             at src/libstd/panicking.rs:212
   6: rustc::util::common::panic_hook
   7: std::panicking::rust_panic_with_hook
             at src/libstd/panicking.rs:479
   8: std::panicking::begin_panic
   9: rustc_errors::Handler::span_bug
  10: rustc::util::bug::opt_span_bug_fmt::{{closure}}
  11: rustc::ty::context::tls::with_opt::{{closure}}
  12: rustc::ty::context::tls::with_context_opt
  13: rustc::ty::context::tls::with_opt
  14: rustc::util::bug::opt_span_bug_fmt
  15: rustc::util::bug::span_bug_fmt
  16: rustc_mir::transform::generator::compute_layout
  17: <rustc_mir::transform::generator::StateTransform as rustc_mir::transform::MirPass>::run_pass
  18: rustc_mir::transform::run_passes::{{closure}}
  19: rustc_mir::transform::run_passes
  20: rustc_mir::transform::optimized_mir
  21: rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::optimized_mir>::compute
  22: rustc::dep_graph::graph::DepGraph::with_task_impl
  23: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::force_query
  24: rustc::ty::query::plumbing::force_from_dep_node
  25: rustc::dep_graph::graph::DepGraph::try_mark_previous_green
  26: rustc::dep_graph::graph::DepGraph::try_mark_green
  27: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
  28: <rustc::ty::layout::LayoutCx<rustc::ty::context::TyCtxt> as rustc_target::abi::LayoutOf>::layout_of
  29: <rustc_mir::transform::const_prop::ConstPropagator as rustc::mir::visit::MutVisitor>::visit_statement
  30: <rustc_mir::transform::const_prop::ConstProp as rustc_mir::transform::MirPass>::run_pass
  31: rustc_mir::transform::run_passes::{{closure}}
  32: rustc_mir::transform::run_passes
  33: rustc_mir::transform::optimized_mir
  34: rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::optimized_mir>::compute
  35: rustc::dep_graph::graph::DepGraph::with_task_impl
  36: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
  37: rustc_mir::monomorphize::collector::collect_items_rec
  38: rustc_mir::monomorphize::collector::collect_items_rec
  39: rustc_mir::monomorphize::collector::collect_items_rec
  40: rustc_mir::monomorphize::collector::collect_items_rec
  41: rustc_mir::monomorphize::collector::collect_crate_mono_items::{{closure}}
  42: rustc::util::common::time
  43: rustc_mir::monomorphize::collector::collect_crate_mono_items
  44: rustc::util::common::time
  45: rustc_mir::monomorphize::partitioning::collect_and_partition_mono_items
  46: rustc::ty::query::__query_compute::collect_and_partition_mono_items
  47: rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::collect_and_partition_mono_items>::compute
  48: rustc::dep_graph::graph::DepGraph::with_task_impl
  49: rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query
  50: rustc_codegen_ssa::base::codegen_crate
  51: <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_utils::codegen_backend::CodegenBackend>::codegen_crate
  52: rustc::util::common::time
  53: rustc_interface::passes::start_codegen
  54: rustc::ty::context::tls::enter_global
  55: rustc_interface::passes::BoxedGlobalCtxt::access::{{closure}}
  56: rustc_interface::passes::create_global_ctxt::{{closure}}
  57: rustc_interface::passes::BoxedGlobalCtxt::enter
  58: rustc_interface::queries::Query<T>::compute
  59: rustc_interface::queries::<impl rustc_interface::interface::Compiler>::ongoing_codegen
  60: rustc_interface::interface::run_compiler_in_existing_thread_pool
  61: std::thread::local::LocalKey<T>::with
  62: scoped_tls::ScopedKey<T>::set
  63: syntax::with_globals
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
query stack during panic:
#0 [optimized_mir] processing `do_it::{{closure}}#0`
#1 [layout_raw] computing layout of `[static generator@spdk-rs/tests/for.rs:8:18: 14:2 {fn(std::ops::RangeInclusive<i32>) -> <std::ops::RangeInclusive<i32> as std::iter::IntoIterator>::IntoIter {<std::ops::RangeInclusive<i32> as std::iter::IntoIterator>::into_iter}, fn(i32, i32) -> std::ops::RangeInclusive<i32> {std::ops::RangeInclusive::<i32>::new}, i32, std::ops::RangeInclusive<i32>, std::string::String, std::future::GenFuture<[static generator@spdk-rs/tests/for.rs:4:60: 6:2 s:std::string::String {}]>, ()}]`
#2 [optimized_mir] processing `do_it`
#3 [collect_and_partition_mono_items] collect_and_partition_mono_items
end of query stack

Meta

rustc 1.37.0-nightly (8aa42ed7c 2019-06-24)
binary: rustc
commit-hash: 8aa42ed7c2adb9f37faa6eb905f890f6199e1db9
commit-date: 2019-06-24
host: x86_64-unknown-linux-gnu
release: 1.37.0-nightly
LLVM version: 8.0

I think this might be somewhat related to #62025 and perhaps #61442 but i'll leave that to the experts.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions