Closed as not planned
Description
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