Skip to content

Compiler error that only occurs occasionally #97858

Closed as not planned
Closed as not planned
@kkaatii

Description

@kkaatii

Note that the below error cannot be repeated by myself anymore...I tried minimizing the bug but then it disappeared and even after reverting back to the original troublesome code cargo no longer complains.

Code

use std::error::Error;
use hyper::{http::Method, Body, Request, Response};

async fn process(req: Request<Body>) -> Result<Response<Body>, Box<dyn Error + Send + Sync>> {
    let session = req
        .headers()
        .get("session")
        .map(|v| v.as_bytes())
        .unwrap_or(&[]);
    let dest = (req.method(), req.uri().path()).into();
    if authorized(session, &dest) {
        match dest {
            Dest::ECHO => {
                Ok(Response::new(req.into_body()))
            }
            Dest(_, _) => Ok(Response::new(Body::empty()))
        }
    } else {
        Err(format!("Unauthorized access to {dest:?}").into())
    }
}

pub(crate) fn authorized(_session: &[u8], dest: &Dest) -> bool {
    match *dest {
        Dest::ECHO | Dest::PLAYER_CREATE => return true,
        _ => {}
    }
    false
}

#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub(crate) struct Dest<'a>(&'a Method, &'a str);

impl<'a> From<(&'a Method, &'a str)> for Dest<'a> {
    fn from(tuple: (&'a Method, &'a str)) -> Self {
        Dest(tuple.0, tuple.1)
    }
}

impl<'a> Dest<'a> {
    pub const ECHO: Self = Dest(&Method::POST, "/echo");
    pub const PLAYER_CREATE: Self = Dest(&Method::POST, "/player/create");
}

Meta

rustc --version --verbose:

rustc 1.61.0 (fe5b13d68 2022-05-18)
binary: rustc
commit-hash: fe5b13d681f25ee6474be29d748c65adcd91f69e
commit-date: 2022-05-18
host: x86_64-apple-darwin
release: 1.61.0
LLVM version: 14.0.0

Error output

thread 'rustc' panicked at 'forcing query with already existing `DepNode`
- query-key: ParamEnvAnd { param_env: ParamEnv { caller_bounds: [], reveal: UserFacing, constness: NotConst }, value: Const { ty: &hyper::Method, val: Value(Scalar(alloc90)) } }
- dep-node: deref_const(d496ad5959ba647-6df8c3a57cdd01b5)', /rustc/fe5b13d681f25ee6474be29d748c65adcd91f69e/compiler/rustc_query_system/src/dep_graph/graph.rs:300:9
Backtrace

stack backtrace:
   0: _rust_begin_unwind
   1: core::panicking::panic_fmt
   2: <rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle::ty::context::TyCtxt, rustc_middle::ty::ParamEnvAnd<rustc_middle::ty::consts::Const>, rustc_middle::ty::consts::Const>
   3: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::plumbing::QueryCtxt, rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::ParamEnvAnd<rustc_middle::ty::consts::Const>, rustc_middle::ty::consts::Const>>
   4: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::deref_const, rustc_query_impl::plumbing::QueryCtxt>
   5: <rustc_mir_build::thir::pattern::const_to_pat::ConstToPat>::recur
   6: <core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::consts::Const>> as core::iter::traits::iterator::Iterator>::try_fold::<(), <core::iter::adapters::enumerate::Enumerate<_> as core::iter::traits::iterator::Iterator>::try_fold::enumerate<rustc_middle::ty::consts::Const, (), core::ops::control_flow::ControlFlow<core::ops::control_flow::ControlFlow<rustc_middle::thir::FieldPat>>, core::iter::adapters::map::map_try_fold<(usize, rustc_middle::ty::consts::Const), core::result::Result<rustc_middle::thir::FieldPat, rustc_mir_build::thir::pattern::const_to_pat::fallback_to_const_ref::FallbackToConstRef>, (), core::ops::control_flow::ControlFlow<core::ops::control_flow::ControlFlow<rustc_middle::thir::FieldPat>>, <rustc_mir_build::thir::pattern::const_to_pat::ConstToPat>::field_pats<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::consts::Const>>>::{closure#0}, <core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::iter::adapters::enumerate::Enumerate<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::consts::Const>>>, <rustc_mir_build::thir::pattern::const_to_pat::ConstToPat>::field_pats<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::consts::Const>>>::{closure#0}>, core::result::Result<core::convert::Infallible, rustc_mir_build::thir::pattern::const_to_pat::fallback_to_const_ref::FallbackToConstRef>> as core::iter::traits::iterator::Iterator>::try_fold<(), core::iter::traits::iterator::Iterator::try_for_each::call<rustc_middle::thir::FieldPat, core::ops::control_flow::ControlFlow<rustc_middle::thir::FieldPat>, core::ops::control_flow::ControlFlow<rustc_middle::thir::FieldPat>::Break>::{closure#0}, core::ops::control_flow::ControlFlow<rustc_middle::thir::FieldPat>>::{closure#0}>::{closure#0}>::{closure#0}, core::ops::control_flow::ControlFlow<core::ops::control_flow::ControlFlow<rustc_middle::thir::FieldPat>>>
   7: <alloc::vec::Vec<rustc_middle::thir::FieldPat> as alloc::vec::spec_from_iter::SpecFromIter<rustc_middle::thir::FieldPat, core::iter::adapters::GenericShunt<core::iter::adapters::map::Map<core::iter::adapters::enumerate::Enumerate<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::consts::Const>>>, <rustc_mir_build::thir::pattern::const_to_pat::ConstToPat>::field_pats<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::consts::Const>>>::{closure#0}>, core::result::Result<core::convert::Infallible, rustc_mir_build::thir::pattern::const_to_pat::fallback_to_const_ref::FallbackToConstRef>>>>::from_iter
   8: core::iter::adapters::try_process::<core::iter::adapters::map::Map<core::iter::adapters::enumerate::Enumerate<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::consts::Const>>>, <rustc_mir_build::thir::pattern::const_to_pat::ConstToPat>::field_pats<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::consts::Const>>>::{closure#0}>, rustc_middle::thir::FieldPat, core::result::Result<core::convert::Infallible, rustc_mir_build::thir::pattern::const_to_pat::fallback_to_const_ref::FallbackToConstRef>, <core::result::Result<alloc::vec::Vec<rustc_middle::thir::FieldPat>, rustc_mir_build::thir::pattern::const_to_pat::fallback_to_const_ref::FallbackToConstRef> as core::iter::traits::collect::FromIterator<core::result::Result<rustc_middle::thir::FieldPat, rustc_mir_build::thir::pattern::const_to_pat::fallback_to_const_ref::FallbackToConstRef>>>::from_iter<core::iter::adapters::map::Map<core::iter::adapters::enumerate::Enumerate<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::consts::Const>>>, <rustc_mir_build::thir::pattern::const_to_pat::ConstToPat>::field_pats<core::iter::adapters::copied::Copied<core::slice::iter::Iter<rustc_middle::ty::consts::Const>>>::{closure#0}>>::{closure#0}, alloc::vec::Vec<rustc_middle::thir::FieldPat>>
   9: <rustc_mir_build::thir::pattern::const_to_pat::ConstToPat>::recur
  10: <rustc_mir_build::thir::pattern::const_to_pat::ConstToPat>::to_pat
  11: <rustc_infer::infer::InferCtxtBuilder>::enter::<rustc_middle::thir::Pat, <rustc_mir_build::thir::pattern::PatCtxt>::const_to_pat::{closure#0}>
  12: <rustc_mir_build::thir::pattern::PatCtxt>::const_to_pat
  13: <rustc_mir_build::thir::pattern::PatCtxt>::lower_path
  14: <rustc_mir_build::thir::pattern::PatCtxt>::lower_pattern
  15: rustc_mir_build::thir::pattern::pat_from_hir
  16: <rustc_mir_build::thir::cx::Cx>::convert_arm
  17: <alloc::vec::Vec<rustc_middle::thir::ArmId> as alloc::vec::spec_from_iter::SpecFromIter<rustc_middle::thir::ArmId, core::iter::adapters::map::Map<core::slice::iter::Iter<rustc_hir::hir::Arm>, <rustc_mir_build::thir::cx::Cx>::make_mirror_unadjusted::{closure#11}>>>::from_iter
  18: <rustc_mir_build::thir::cx::Cx>::make_mirror_unadjusted
  19: <rustc_mir_build::thir::cx::Cx>::mirror_expr_inner
  20: <rustc_mir_build::thir::cx::Cx>::mirror_block
  21: <rustc_mir_build::thir::cx::Cx>::make_mirror_unadjusted
  22: <rustc_mir_build::thir::cx::Cx>::mirror_expr_inner
  23: <rustc_mir_build::thir::cx::Cx>::make_mirror_unadjusted
  24: <rustc_mir_build::thir::cx::Cx>::mirror_expr_inner
  25: <rustc_mir_build::thir::cx::Cx>::mirror_block
  26: <rustc_mir_build::thir::cx::Cx>::make_mirror_unadjusted
  27: <rustc_mir_build::thir::cx::Cx>::mirror_expr_inner
  28: <rustc_mir_build::thir::cx::Cx>::make_mirror_unadjusted
  29: <rustc_mir_build::thir::cx::Cx>::mirror_expr_inner
  30: <rustc_mir_build::thir::cx::Cx>::mirror_block
  31: <rustc_mir_build::thir::cx::Cx>::make_mirror_unadjusted
  32: <rustc_mir_build::thir::cx::Cx>::mirror_expr_inner
  33: rustc_mir_build::thir::cx::thir_body
  34: <rustc_middle::dep_graph::dep_node::DepKind as rustc_query_system::dep_graph::DepKind>::with_deps::<<rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task_impl<rustc_middle::ty::context::TyCtxt, rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, core::result::Result<(&rustc_data_structures::steal::Steal<rustc_middle::thir::Thir>, rustc_middle::thir::ExprId), rustc_errors::ErrorGuaranteed>>::{closure#0}, core::result::Result<(&rustc_data_structures::steal::Steal<rustc_middle::thir::Thir>, rustc_middle::thir::ExprId), rustc_errors::ErrorGuaranteed>>
  35: <rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle::ty::context::TyCtxt, rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, core::result::Result<(&rustc_data_structures::steal::Steal<rustc_middle::thir::Thir>, rustc_middle::thir::ExprId), rustc_errors::ErrorGuaranteed>>
  36: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::thir_body, rustc_query_impl::plumbing::QueryCtxt>
  37: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::thir_body
  38: <rustc_infer::infer::InferCtxtBuilder>::enter::<rustc_middle::mir::Body, rustc_mir_build::build::mir_build::{closure#1}>
  39: rustc_mir_build::build::mir_built
  40: <rustc_middle::dep_graph::dep_node::DepKind as rustc_query_system::dep_graph::DepKind>::with_deps::<<rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task_impl<rustc_middle::ty::context::TyCtxt, rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, &rustc_data_structures::steal::Steal<rustc_middle::mir::Body>>::{closure#0}, &rustc_data_structures::steal::Steal<rustc_middle::mir::Body>>
  41: <rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle::ty::context::TyCtxt, rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, &rustc_data_structures::steal::Steal<rustc_middle::mir::Body>>
  42: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::plumbing::QueryCtxt, rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, &rustc_data_structures::steal::Steal<rustc_middle::mir::Body>>>
  43: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::mir_built, rustc_query_impl::plumbing::QueryCtxt>
  44: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_built
  45: rustc_mir_transform::check_unsafety::unsafety_check_result
  46: <rustc_mir_transform::check_unsafety::provide::{closure#0} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, rustc_span::def_id::LocalDefId)>>::call_once
  47: <rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle::ty::context::TyCtxt, rustc_span::def_id::LocalDefId, &rustc_middle::mir::query::UnsafetyCheckResult>
  48: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::plumbing::QueryCtxt, rustc_query_system::query::caches::DefaultCache<rustc_span::def_id::LocalDefId, &rustc_middle::mir::query::UnsafetyCheckResult>>
  49: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::unsafety_check_result, rustc_query_impl::plumbing::QueryCtxt>
  50: <rustc_mir_transform::check_unsafety::UnsafetyChecker as rustc_middle::mir::visit::Visitor>::visit_rvalue
  51: rustc_mir_transform::check_unsafety::unsafety_check_result
  52: <rustc_mir_transform::check_unsafety::provide::{closure#0} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, rustc_span::def_id::LocalDefId)>>::call_once
  53: <rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle::ty::context::TyCtxt, rustc_span::def_id::LocalDefId, &rustc_middle::mir::query::UnsafetyCheckResult>
  54: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::plumbing::QueryCtxt, rustc_query_system::query::caches::DefaultCache<rustc_span::def_id::LocalDefId, &rustc_middle::mir::query::UnsafetyCheckResult>>
  55: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::unsafety_check_result, rustc_query_impl::plumbing::QueryCtxt>
  56: rustc_mir_transform::mir_const
  57: <rustc_middle::dep_graph::dep_node::DepKind as rustc_query_system::dep_graph::DepKind>::with_deps::<<rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task_impl<rustc_middle::ty::context::TyCtxt, rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, &rustc_data_structures::steal::Steal<rustc_middle::mir::Body>>::{closure#0}, &rustc_data_structures::steal::Steal<rustc_middle::mir::Body>>
  58: <rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle::ty::context::TyCtxt, rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, &rustc_data_structures::steal::Steal<rustc_middle::mir::Body>>
  59: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::plumbing::QueryCtxt, rustc_query_system::query::caches::DefaultCache<rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, &rustc_data_structures::steal::Steal<rustc_middle::mir::Body>>>
  60: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::mir_const, rustc_query_impl::plumbing::QueryCtxt>
  61: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_const
  62: rustc_mir_transform::mir_promoted
  63: <rustc_middle::dep_graph::dep_node::DepKind as rustc_query_system::dep_graph::DepKind>::with_deps::<<rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task_impl<rustc_middle::ty::context::TyCtxt, rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, (&rustc_data_structures::steal::Steal<rustc_middle::mir::Body>, &rustc_data_structures::steal::Steal<rustc_index::vec::IndexVec<rustc_middle::mir::Promoted, rustc_middle::mir::Body>>)>::{closure#0}, (&rustc_data_structures::steal::Steal<rustc_middle::mir::Body>, &rustc_data_structures::steal::Steal<rustc_index::vec::IndexVec<rustc_middle::mir::Promoted, rustc_middle::mir::Body>>)>
  64: <rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle::ty::context::TyCtxt, rustc_middle::ty::WithOptConstParam<rustc_span::def_id::LocalDefId>, (&rustc_data_structures::steal::Steal<rustc_middle::mir::Body>, &rustc_data_structures::steal::Steal<rustc_index::vec::IndexVec<rustc_middle::mir::Promoted, rustc_middle::mir::Body>>)>
  65: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::mir_promoted, rustc_query_impl::plumbing::QueryCtxt>
  66: <rustc_query_impl::Queries as rustc_middle::ty::query::QueryEngine>::mir_promoted
  67: rustc_borrowck::mir_borrowck
  68: <rustc_borrowck::provide::{closure#0} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, rustc_span::def_id::LocalDefId)>>::call_once
  69: <rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle::ty::context::TyCtxt, rustc_span::def_id::LocalDefId, &rustc_middle::mir::query::BorrowCheckResult>
  70: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::plumbing::QueryCtxt, rustc_query_system::query::caches::DefaultCache<rustc_span::def_id::LocalDefId, &rustc_middle::mir::query::BorrowCheckResult>>
  71: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::mir_borrowck, rustc_query_impl::plumbing::QueryCtxt>
  72: rustc_typeck::collect::type_of::type_of
  73: <rustc_query_system::dep_graph::graph::DepGraph<rustc_middle::dep_graph::dep_node::DepKind>>::with_task::<rustc_middle::ty::context::TyCtxt, rustc_span::def_id::DefId, rustc_middle::ty::Ty>
  74: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::plumbing::QueryCtxt, rustc_query_system::query::caches::DefaultCache<rustc_span::def_id::DefId, rustc_middle::ty::Ty>>
  75: rustc_query_system::query::plumbing::get_query::<rustc_query_impl::queries::type_of, rustc_query_impl::plumbing::QueryCtxt>
  76: <rustc_trait_selection::traits::select::SelectionContext>::confirm_candidate
  77: <rustc_trait_selection::traits::select::SelectionContext>::select
  78: <rustc_trait_selection::traits::fulfill::FulfillProcessor>::process_trait_obligation
  79: <rustc_trait_selection::traits::fulfill::FulfillProcessor>::process_changed_obligations
  80: <rustc_data_structures::obligation_forest::ObligationForest<rustc_trait_selection::traits::fulfill::PendingPredicateObligation>>::process_obligations::<rustc_trait_selection::traits::fulfill::FulfillProcessor, rustc_data_structures::obligation_forest::Outcome<rustc_trait_selection::traits::fulfill::PendingPredicateObligation, rustc_infer::traits::FulfillmentErrorCode>>
  81: <rustc_trait_selection::traits::fulfill::FulfillmentContext as rustc_infer::traits::engine::TraitEngine>::select_where_possible
  82: <rustc_typeck::check::fn_ctxt::FnCtxt>::check_argument_types
  83: <rustc_typeck::check::fn_ctxt::FnCtxt>::check_method_argument_types
  84: <rustc_typeck::check::fn_ctxt::FnCtxt>::check_expr_kind
  85: <rustc_typeck::check::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  86: <rustc_typeck::check::fn_ctxt::FnCtxt>::check_argument_types
  87: <rustc_typeck::check::fn_ctxt::FnCtxt>::confirm_builtin_call
  88: <rustc_typeck::check::fn_ctxt::FnCtxt>::check_call
  89: <rustc_typeck::check::fn_ctxt::FnCtxt>::check_expr_kind
  90: <rustc_typeck::check::fn_ctxt::FnCtxt>::check_expr_with_expectation_and_args
  91: <rustc_typeck::check::fn_ctxt::FnCtxt>::demand_scrutinee_type

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-incr-compArea: Incremental compilationC-bugCategory: This is a bug.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