Closed
Description
Fail-to-compile code:
#![feature(async_await)]
use futures::prelude::*;
use runtime::net::TcpListener;
use std::io;
#[runtime::main]
async fn main() -> io::Result<()> {
let mut listener = TcpListener::bind("127.0.0.1:12345")?;
let mut incoming = listener.incoming();
while let Some(stream) = incoming.next().await {
runtime::spawn(async move {
let stream = stream?;
let (mut rd, mut wr) = stream.split();
rd.copy_into(&mut wr).await?;
Ok::<_, std::io::Error>(())
});
}
Ok(())
}
Error message:
Compiling rtecho v0.1.0 (/home/sirius/rtecho)
error: internal compiler error: src/librustc_mir/transform/generator.rs:540: Broken MIR: generator contains type runtime::task::JoinHandle<std::result::Result<(), std::io::Error>> in MIR, but typeck only knows about for<'r, 's, 't0> {runtime::net::tcp::TcpListener, runtime::net::tcp::Incoming<'r>, futures_util::stream::next::Next<'s, runtime::net::tcp::Incoming<'t0>>, ()}
--> src/main.rs:7:1
|
7 | #[runtime::main]
| ^^^^^^^^^^^^^^^^
thread 'rustc' panicked at 'Box<Any>', src/librustc_errors/lib.rs:572:9
stack backtrace:
0: 0xb571f638 - backtrace::backtrace::libunwind::trace::h2d31d29820972887
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/libunwind.rs:88
1: 0xb571f638 - backtrace::backtrace::trace_unsynchronized::h9ca3ecbe3c54ada5
at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.29/src/backtrace/mod.rs:66
2: 0xb571f638 - std::sys_common::backtrace::_print::hb41a9429afcb2ffa
at src/libstd/sys_common/backtrace.rs:47
3: 0xb571f638 - std::sys_common::backtrace::print::hcaa481e2ae622640
at src/libstd/sys_common/backtrace.rs:36
4: 0xb571f638 - std::panicking::default_hook::{{closure}}::h2af0ce3430227ffd
at src/libstd/panicking.rs:198
5: 0xb571f244 - std::panicking::default_hook::hc047f542655530b6
at src/libstd/panicking.rs:212
6: 0xb475d074 - rustc::util::common::panic_hook::h7347d59a0792e813
7: 0xb571fddc - std::panicking::rust_panic_with_hook::h07d0f4dd4c8050d6
at src/libstd/panicking.rs:479
8: 0xb519c6a0 - std::panicking::begin_panic::h2c922964066c85f9
9: 0xb51ea02c - rustc_errors::Handler::span_bug::h2c1c0a8ab667fab8
10: 0xb4f71378 - rustc::util::bug::opt_span_bug_fmt::{{closure}}::h1500601a36607631
11: 0xb4f6fb40 - rustc::ty::context::tls::with_opt::{{closure}}::h8aac2f2ae7c9fd12
12: 0xb4f6fad4 - rustc::ty::context::tls::with_context_opt::h0dcdd93b89d72608
13: 0xb4f6fb00 - rustc::ty::context::tls::with_opt::hf19eba58424f6994
14: 0xb4f71288 - rustc::util::bug::opt_span_bug_fmt::hd64cf9a90a48134b
15: 0xb4f71254 - rustc::util::bug::span_bug_fmt::h96da24e0ca1951e6
16: 0xb5196d90 - <rustc_mir::transform::generator::StateTransform as rustc_mir::transform::MirPass>::run_pass::hec8dbebf6b131272
17: 0xb4ef2dbc - rustc_mir::transform::run_passes::{{closure}}::hc6795771803246b4
18: 0xb4ef2a94 - rustc_mir::transform::run_passes::hb7f85c17f2ad6ed4
19: 0xb4ef3768 - rustc_mir::transform::optimized_mir::hb4c1147cf3c6a714
20: 0xb46f8a0c - rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::optimized_mir>::compute::ha478417c36b9a96b
21: 0xb42fa008 - rustc::dep_graph::graph::DepGraph::with_task_impl::heb9fba9bb55b1ebc
22: 0xb45e3720 - rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query::hc3c5b89b47d3aa20
23: 0xb427df38 - rustc::ty::layout::LayoutCx<rustc::ty::context::TyCtxt>::layout_raw_uncached::h92929fb5f59c11d3
24: 0xb427c610 - rustc::ty::layout::layout_raw::hc4f829bf7a84bee3
25: 0xb4377e20 - rustc::ty::query::__query_compute::layout_raw::haaa4b7bfd54b916f
26: 0xb46f93a0 - rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::layout_raw>::compute::h912efc661325f36b
27: 0xb42c26fc - rustc::dep_graph::graph::DepGraph::with_task_impl::h08bc5ac169eb8885
28: 0xb4583abc - rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query::h683eebb3c25a9f7d
29: 0xb4285fac - <rustc::ty::layout::LayoutCx<rustc::ty::context::TyCtxt> as rustc_target::abi::LayoutOf>::layout_of::h6fe5b876700cc14c
30: 0xb47a68b8 - <&mut I as core::iter::traits::iterator::Iterator>::next::he00b2dc4a819971c
31: 0xb48829e8 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::hae6e8ef7c1bc1857
32: 0xb4226604 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once::h586d2178388ba51d
33: 0xb4883ad0 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::hb39bad92b705fc8f
34: 0xb427ce9c - rustc::ty::layout::LayoutCx<rustc::ty::context::TyCtxt>::layout_raw_uncached::h92929fb5f59c11d3
35: 0xb427c610 - rustc::ty::layout::layout_raw::hc4f829bf7a84bee3
36: 0xb4377e20 - rustc::ty::query::__query_compute::layout_raw::haaa4b7bfd54b916f
37: 0xb46f93a0 - rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::layout_raw>::compute::h912efc661325f36b
38: 0xb42c26fc - rustc::dep_graph::graph::DepGraph::with_task_impl::h08bc5ac169eb8885
39: 0xb4583abc - rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query::h683eebb3c25a9f7d
40: 0xb4285fac - <rustc::ty::layout::LayoutCx<rustc::ty::context::TyCtxt> as rustc_target::abi::LayoutOf>::layout_of::h6fe5b876700cc14c
41: 0xb47a5c74 - <&mut I as core::iter::traits::iterator::Iterator>::next::h80abf7a3121e3e5e
42: 0xb4861bac - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::h05d6962c084de4a0
43: 0xb4227024 - core::ops::function::impls::<impl core::ops::function::FnOnce<A> for &mut F>::call_once::ha22cc4109fa256b1
44: 0xb47a4b2c - <&mut I as core::iter::traits::iterator::Iterator>::next::h2a270222e2a891ba
45: 0xb4864c14 - <alloc::vec::Vec<T> as alloc::vec::SpecExtend<T,I>>::from_iter::h13ec37d27edc3501
46: 0xb427dfb4 - rustc::ty::layout::LayoutCx<rustc::ty::context::TyCtxt>::layout_raw_uncached::h92929fb5f59c11d3
47: 0xb427c610 - rustc::ty::layout::layout_raw::hc4f829bf7a84bee3
48: 0xb4377e20 - rustc::ty::query::__query_compute::layout_raw::haaa4b7bfd54b916f
49: 0xb46f93a0 - rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::layout_raw>::compute::h912efc661325f36b
50: 0xb42c26fc - rustc::dep_graph::graph::DepGraph::with_task_impl::h08bc5ac169eb8885
51: 0xb4583abc - rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query::h683eebb3c25a9f7d
52: 0xb4285fac - <rustc::ty::layout::LayoutCx<rustc::ty::context::TyCtxt> as rustc_target::abi::LayoutOf>::layout_of::h6fe5b876700cc14c
53: 0xb4f4bd7c - <rustc_mir::transform::const_prop::ConstPropagator as rustc::mir::visit::MutVisitor>::visit_statement::h4ba189d0f6dc4b28
54: 0xb4f46238 - <rustc_mir::transform::const_prop::ConstProp as rustc_mir::transform::MirPass>::run_pass::h4538fb6fc0235ad9
55: 0xb4ef2dbc - rustc_mir::transform::run_passes::{{closure}}::hc6795771803246b4
56: 0xb4ef2a94 - rustc_mir::transform::run_passes::hb7f85c17f2ad6ed4
57: 0xb4ef3768 - rustc_mir::transform::optimized_mir::hb4c1147cf3c6a714
58: 0xb46f8a0c - rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::optimized_mir>::compute::ha478417c36b9a96b
59: 0xb42fa008 - rustc::dep_graph::graph::DepGraph::with_task_impl::heb9fba9bb55b1ebc
60: 0xb45e3720 - rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query::hc3c5b89b47d3aa20
61: 0xb46f6ec0 - rustc::ty::<impl rustc::ty::context::TyCtxt>::instance_mir::h00c0987817843de4
62: 0xb50d005c - rustc_mir::monomorphize::collector::collect_items_rec::h265dcd4773bf226d
63: 0xb4f977b0 - rustc_mir::monomorphize::collector::collect_crate_mono_items::{{closure}}::h159ef937882f4ccc
64: 0xb4f71578 - rustc::util::common::time::hd3e121facb2973e9
65: 0xb50cf04c - rustc_mir::monomorphize::collector::collect_crate_mono_items::h6916cdd741d72378
66: 0xb4f716d8 - rustc::util::common::time::he613f5bfbad8e9af
67: 0xb5128674 - rustc_mir::monomorphize::partitioning::collect_and_partition_mono_items::hf8d93c82ad4f69fe
68: 0xae8a8ba4 - rustc::ty::query::__query_compute::collect_and_partition_mono_items::h48322cdde7675cad
69: 0xae8d1da0 - rustc::ty::query::<impl rustc::ty::query::config::QueryAccessors for rustc::ty::query::queries::collect_and_partition_mono_items>::compute::h47a73497b0993177
70: 0xae877ad8 - rustc::dep_graph::graph::DepGraph::with_task_impl::h728173ffa2354de8
71: 0xae8f3054 - rustc::ty::query::plumbing::<impl rustc::ty::context::TyCtxt>::get_query::h3633be2d1d873f29
72: 0xae974444 - <rustc_codegen_llvm::LlvmCodegenBackend as rustc_codegen_utils::codegen_backend::CodegenBackend>::codegen_crate::he7b69e00b681143d
73: 0xb549609c - rustc::util::common::time::h3ffe0cff42c88246
74: 0xb5446c38 - rustc_interface::passes::start_codegen::h4929930da55d1f72
75: 0xb542f120 - rustc::ty::context::tls::enter_global::h1c6e1b52096b5554
76: 0xb5447370 - rustc_interface::passes::BoxedGlobalCtxt::access::{{closure}}::h8902cc3e445118fe
77: 0xb549eaf4 - rustc_interface::passes::create_global_ctxt::{{closure}}::hb8061a2e0a037d21
78: 0xb5446058 - rustc_interface::passes::BoxedGlobalCtxt::enter::ha8a4bcdb5d2f590e
79: 0xb5432358 - rustc_interface::queries::Query<T>::compute::h3faf0584888fd7ff
80: 0xb5510a6c - rustc_interface::queries::<impl rustc_interface::interface::Compiler>::ongoing_codegen::h9a837d64e2a19dab
81: 0xb57fc290 - rustc_interface::interface::run_compiler_in_existing_thread_pool::hd45106de8a079b95
82: 0xb58641d4 - std::thread::local::LocalKey<T>::with::h4a4be7732992048e
83: 0xb580e960 - scoped_tls::ScopedKey<T>::set::ha8f389698324989a
84: 0xb5832fec - syntax::with_globals::h288536884bfffbbd
85: 0xb5851410 - std::sys_common::backtrace::__rust_begin_short_backtrace::hb95161392c0e9f23
86: 0xb572e2b8 - __rust_maybe_catch_panic
at src/libpanic_unwind/lib.rs:85
87: 0xb57e59f8 - core::ops::function::FnOnce::call_once{{vtable.shim}}::h7095b5af77598ff4
88: 0xb5703e34 - <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::h951a9152f4cb3a2e
at /rustc/02564de47b40e953b5144dfd37450c16a84672f1/src/liballoc/boxed.rs:746
89: 0xb572d05c - <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once::he7a53fc66a9b3bba
at /rustc/02564de47b40e953b5144dfd37450c16a84672f1/src/liballoc/boxed.rs:746
90: 0xb572d05c - std::sys_common::thread::start_thread::hf1bbbc97dcb37476
at src/libstd/sys_common/thread.rs:13
91: 0xb572d05c - std::sys::unix::thread::Thread::new::thread_start::hd4d8de3151a7cbb4
at src/libstd/sys/unix/thread.rs:79
query stack during panic:
#0 [optimized_mir] processing `main::main::{{closure}}#0`
#1 [layout_raw] computing layout of `[static generator@src/main.rs:7:1: 7:17 for<'r, 's, 't0> {runtime::net::tcp::TcpListener, runtime::net::tcp::Incoming<'r>, futures_util::stream::next::Next<'s, runtime::net::tcp::Incoming<'t0>>, ()}]`
#2 [layout_raw] computing layout of `std::future::GenFuture<[static generator@src/main.rs:7:1: 7:17 for<'r, 's, 't0> {runtime::net::tcp::TcpListener, runtime::net::tcp::Incoming<'r>, futures_util::stream::next::Next<'s, runtime::net::tcp::Incoming<'t0>>, ()}]>`
#3 [layout_raw] computing layout of `[static generator@src/main.rs:7:1: 7:17 {std::future::GenFuture<[static generator@src/main.rs:7:1: 7:17 for<'r, 's, 't0> {runtime::net::tcp::TcpListener, runtime::net::tcp::Incoming<'r>, futures_util::stream::next::Next<'s, runtime::net::tcp::Incoming<'t0>>, ()}]>, ()}]`
#4 [optimized_mir] processing `main`
#5 [collect_and_partition_mono_items] collect_and_partition_mono_items
end of query stack
error: aborting due to previous error
note: the compiler unexpectedly panicked. this is a bug.
note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports
note: rustc 1.37.0-nightly (02564de47 2019-06-10) running on armv7-unknown-linux-gnueabihf
note: compiler flags: -C debuginfo=2 -C incremental --crate-type bin
note: some of the compiler flags provided by cargo are hidden
error: Could not compile `rtecho`.
To learn more, run the command again with --verbose.
Output of cargo-expand, if useful:
#![feature(prelude_import)]
#![no_std]
#![feature(async_await)]
#[prelude_import]
use ::std::prelude::v1::*;
#[macro_use]
extern crate std as std;
use futures::prelude::*;
use runtime::net::TcpListener;
use std::io;
fn main() -> io::Result<()> {
async fn main() -> io::Result<()> {
{
let mut listener = TcpListener::bind("127.0.0.1:12345")?;
let mut incoming = listener.incoming();
while let Some(stream) = incoming.next().await {
runtime::spawn(async move {
let stream = stream?;
let (mut rd, mut wr) = stream.split();
rd.copy_into(&mut wr).await?;
Ok::<_, std::io::Error>(())
});
}
Ok(())
}
}
runtime::raw::enter(runtime::native::Native, async { main().await })
}
Metadata
Metadata
Assignees
Labels
Area: Mid-level IR (MIR) - https://blog.rust-lang.org/2016/04/19/MIR.htmlArea: Async & AwaitArea: CoroutinesAsync-await issues that are part of the "polish" areaCategory: This is a bug.Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️Relevant to the compiler team, which will review and decide on the PR/issue.