Skip to content

thread 'rustc' panicked at 'no entry found for key', src/librustc_mir_build/build/mod.rs:345:9 #79913

Closed
@chris-belcher

Description

@chris-belcher

Code

use std::error::Error;

use tokio::net::TcpStream;
use tokio::prelude::*;
use tokio::io::BufReader;
use tokio::sync::mpsc;

use serde_json;
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize)]
pub struct TakerHello {
    pub protocol_version_min: u32,
    pub protocol_version_max: u32,
}

#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "method", rename_all = "lowercase")]
pub enum TakerToMakerMessage {
    TakerHello(TakerHello),
}

#[derive(Debug, Serialize, Deserialize)]
pub struct Offer {
    pub absolute_fee: u32,
    pub amount_relative_fee: f32,
    pub max_size: u64,
    pub min_size: u64,
}

#[derive(Debug, Serialize, Deserialize)]
#[serde(tag = "method", rename_all = "lowercase")]
pub enum MakerToTakerMessage {
    Offer(Offer),
}

pub struct OfferAddress {
    pub offer: Offer,
    pub socket_address: String, //string for now when its "localhost:port"
}

async fn sync_offerbook() -> Result<Vec<OfferAddress>, Box<dyn Error>> {

    let (syncd_offers_writer, mut syncd_offers_reader) =
        mpsc::channel::<Option<OfferAddress>>(100);

    for host in &["localhost:6102", "localhost:16102"] {
        //TODO add timeouts to deal with indefinite hangs
        let mut tx = syncd_offers_writer.clone();
        tokio::spawn(async move {
            let mut socket = match TcpStream::connect(host).await {
                Ok(s) => s,
                Err(_e) => {
                    tx.send(None).await;
                    return;
                }
            };

            let (socket_reader, mut socket_writer) = socket.split();
            let mut socket_reader = BufReader::new(socket_reader);

            let mut message_packet = serde_json::to_vec(
                &TakerToMakerMessage::TakerHello(TakerHello {
                    protocol_version_min: 0,
                    protocol_version_max: 0,
                })
            ).unwrap();
            message_packet.push(b'\n');
            message_packet.append(
                &mut serde_json::to_vec(
                    &TakerToMakerMessage::TakerHello(TakerHello {
                        protocol_version_min: 0,
                        protocol_version_max: 0,
                    })
                ).unwrap()
            );
            message_packet.push(b'\n');
            //TODO error handling here
            socket_writer.write_all(&message_packet).await.unwrap();

            let mut line = String::new();
            let n = match socket_reader.read_line(&mut line).await {
                Ok(0) | Err(_e) => {
                    tx.send(None).await;
                    return;
                },
                Ok(n) => n,
            };

        });
    }

    Ok(vec![])
}

fn main() {
    println!("hello world");
}

Cargo.toml

[package]
name = "indium"
version = "0.1.0"
authors = ["chris-belcher <[email protected]>"]
edition = "2018"

# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

[dependencies]
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
tokio = { version = "0.3", features = ["full"] }
futures = "0.3"

Meta

rustc --version --verbose:

rustc 1.44.1 (c7087fe00 2020-06-17)
binary: rustc
commit-hash: c7087fe00d2ba919df1d813c040a5d47e43b0fe7
commit-date: 2020-06-17
host: x86_64-unknown-linux-gnu
release: 1.44.1
LLVM version: 9.0

Error output

$ cargo check
    Checking indium v0.1.0 (/home/username/coding/project/indium-compiler-crash)
error[E0408]: variable `_e` is not bound in all patterns
  --> src/main.rs:83:17
   |
83 |                 Ok(0) | Err(_e) => {
   |                 ^^^^^       -- variable not in all patterns
   |                 |
   |                 pattern doesn't bind `_e`

thread 'rustc' panicked at 'no entry found for key', src/librustc_mir_build/build/mod.rs:345:9
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/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.44.1 (c7087fe00 2020-06-17) running on x86_64-unknown-linux-gnu

note: compiler flags: -C debuginfo=2 -C incremental --crate-type bin

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

error: aborting due to previous error

For more information about this error, try `rustc --explain E0408`.
error: could not compile `indium`.

To learn more, run the command again with --verbose.
Backtrace

$ RUST_BACKTRACE=1 cargo build
   Compiling indium v0.1.0 (/home/username/coding/project/indium-compiler-crash)
error[E0408]: variable `_e` is not bound in all patterns
  --> src/main.rs:83:17
   |
83 |                 Ok(0) | Err(_e) => {
   |                 ^^^^^       -- variable not in all patterns
   |                 |
   |                 pattern doesn't bind `_e`

thread 'rustc' panicked at 'no entry found for key', src/librustc_mir_build/build/mod.rs:345:9
stack backtrace:
   0: backtrace::backtrace::libunwind::trace
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/libunwind.rs:86
   1: backtrace::backtrace::trace_unsynchronized
             at /cargo/registry/src/github.com-1ecc6299db9ec823/backtrace-0.3.46/src/backtrace/mod.rs:66
   2: std::sys_common::backtrace::_print_fmt
             at src/libstd/sys_common/backtrace.rs:78
   3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
             at src/libstd/sys_common/backtrace.rs:59
   4: core::fmt::write
             at src/libcore/fmt/mod.rs:1069
   5: std::io::Write::write_fmt
             at src/libstd/io/mod.rs:1504
   6: std::sys_common::backtrace::_print
             at src/libstd/sys_common/backtrace.rs:62
   7: std::sys_common::backtrace::print
             at src/libstd/sys_common/backtrace.rs:49
   8: std::panicking::default_hook::{{closure}}
             at src/libstd/panicking.rs:198
   9: std::panicking::default_hook
             at src/libstd/panicking.rs:218
  10: rustc_driver::report_ice
  11: <alloc::boxed::Box<F> as core::ops::function::Fn<A>>::call
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7/src/liballoc/boxed.rs:1022
  12: proc_macro::bridge::client::<impl proc_macro::bridge::Bridge>::enter::{{closure}}::{{closure}}
             at /rustc/c7087fe00d2ba919df1d813c040a5d47e43b0fe7/src/libproc_macro/bridge/client.rs:305
  13: std::panicking::rust_panic_with_hook
             at src/libstd/panicking.rs:515
  14: rust_begin_unwind
             at src/libstd/panicking.rs:419
  15: core::panicking::panic_fmt
             at src/libcore/panicking.rs:111
  16: core::option::expect_failed
             at src/libcore/option.rs:1260
  17: rustc_mir_build::build::matches::<impl rustc_mir_build::build::Builder>::bind_and_guard_matched_candidate
  18: rustc_mir_build::build::matches::traverse_candidate
  19: rustc_mir_build::build::matches::traverse_candidate
  20: rustc_mir_build::build::matches::<impl rustc_mir_build::build::Builder>::bind_pattern
  21: rustc_mir_build::build::scope::<impl rustc_mir_build::build::Builder>::in_scope
  22: <core::iter::adapters::Map<I,F> as core::iter::traits::iterator::Iterator>::fold
  23: rustc_mir_build::build::expr::into::<impl rustc_mir_build::build::Builder>::into_expr
  24: rustc_mir_build::build::expr::into::<impl rustc_mir_build::build::Builder>::into_expr
  25: rustc_mir_build::build::block::<impl rustc_mir_build::build::Builder>::ast_block_stmts
  26: rustc_mir_build::build::expr::into::<impl rustc_mir_build::build::Builder>::into_expr
  27: rustc_mir_build::build::expr::into::<impl rustc_mir_build::build::Builder>::into_expr
  28: rustc_mir_build::build::expr::into::<impl rustc_mir_build::build::Builder>::into_expr
  29: rustc_mir_build::build::construct_fn
  30: rustc_infer::infer::InferCtxtBuilder::enter
  31: rustc_mir_build::build::mir_built
  32: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::mir_built>::compute
  33: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
  34: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  35: rustc_query_system::query::plumbing::get_query
  36: rustc_mir::transform::check_unsafety::unsafety_check_result
  37: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::unsafety_check_result>::compute
  38: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
  39: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  40: rustc_query_system::query::plumbing::get_query
  41: <rustc_mir::transform::check_unsafety::UnsafetyChecker as rustc_middle::mir::visit::Visitor>::visit_rvalue
  42: <rustc_mir::transform::check_unsafety::UnsafetyChecker as rustc_middle::mir::visit::Visitor>::visit_statement
  43: rustc_mir::transform::check_unsafety::unsafety_check_result
  44: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::unsafety_check_result>::compute
  45: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
  46: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  47: rustc_query_system::query::plumbing::get_query
  48: <rustc_mir::transform::check_unsafety::UnsafetyChecker as rustc_middle::mir::visit::Visitor>::visit_rvalue
  49: <rustc_mir::transform::check_unsafety::UnsafetyChecker as rustc_middle::mir::visit::Visitor>::visit_statement
  50: rustc_mir::transform::check_unsafety::unsafety_check_result
  51: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::unsafety_check_result>::compute
  52: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
  53: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  54: rustc_query_system::query::plumbing::get_query
  55: rustc_mir::transform::mir_const
  56: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::mir_const>::compute
  57: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
  58: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  59: rustc_query_system::query::plumbing::get_query
  60: rustc_mir::transform::mir_validated
  61: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::mir_validated>::compute
  62: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
  63: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  64: rustc_query_system::query::plumbing::get_query
  65: rustc_mir::borrow_check::mir_borrowck
  66: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::mir_borrowck>::compute
  67: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
  68: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  69: rustc_query_system::query::plumbing::get_query
  70: rustc_typeck::collect::type_of::type_of
  71: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
  72: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  73: rustc_query_system::query::plumbing::get_query
  74: rustc_middle::ty::util::<impl rustc_middle::ty::context::TyCtxt>::try_expand_impl_trait_type::OpaqueTypeExpander::expand_opaque_ty
  75: rustc_middle::ty::util::<impl rustc_middle::ty::context::TyCtxt>::try_expand_impl_trait_type
  76: rustc_typeck::check::check_item_type
  77: rustc_middle::hir::map::Map::visit_item_likes_in_module
  78: rustc_typeck::check::check_mod_item_types
  79: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::check_mod_item_types>::compute
  80: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
  81: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  82: rustc_query_system::query::plumbing::get_query
  83: rustc_query_system::query::plumbing::ensure_query
  84: rustc_typeck::check_crate
  85: rustc_interface::passes::analysis
  86: rustc_middle::ty::query::<impl rustc_query_system::query::config::QueryAccessors<rustc_middle::ty::context::TyCtxt> for rustc_middle::ty::query::queries::analysis>::compute
  87: rustc_middle::dep_graph::<impl rustc_query_system::dep_graph::DepKind for rustc_middle::dep_graph::dep_node::DepKind>::with_deps
  88: rustc_query_system::dep_graph::graph::DepGraph<K>::with_task_impl
  89: rustc_query_system::query::plumbing::get_query
  90: rustc_middle::ty::context::tls::enter_global
  91: rustc_interface::interface::run_compiler_in_existing_thread_pool
  92: scoped_tls::ScopedKey<T>::set
  93: rustc_ast::attr::with_globals
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/blob/master/CONTRIBUTING.md#bug-reports

note: rustc 1.44.1 (c7087fe00 2020-06-17) running on x86_64-unknown-linux-gnu

note: compiler flags: -C debuginfo=2 -C incremental --crate-type bin

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

query stack during panic:
#0 [mir_built] building MIR for
#1 [unsafety_check_result] unsafety-checking `sync_offerbook::{{closure}}#0::{{closure}}#0`
#2 [unsafety_check_result] unsafety-checking `sync_offerbook::{{closure}}#0`
#3 [unsafety_check_result] unsafety-checking `sync_offerbook`
#4 [mir_const] processing `sync_offerbook`
#5 [mir_validated] processing `sync_offerbook`
#6 [mir_borrowck] borrow-checking `sync_offerbook`
#7 [type_of] processing `sync_offerbook::{{opaque}}#0`
#8 [check_mod_item_types] checking item types in top-level module
#9 [analysis] running analysis passes on this crate
end of query stack
error: aborting due to previous error

For more information about this error, try `rustc --explain E0408`.
error: could not compile `indium`.

To learn more, run the command again with --verbose.

If I use Ok(0) | Err(_) => { instead of Ok(0) | Err(_e) => { then the crash doesn't happen

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.E-needs-testCall for participation: An issue has been fixed and does not reproduce, but no test has been added.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️T-compilerRelevant to the compiler team, which will review and decide on the PR/issue.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions