Skip to content

ICE in rustc_borrowck/src/region_infer #114907

Closed

Description

@sjeohp

Code

use tungstenite::handshake::server::{Response, ErrorResponse};
fn accept_connection(stream: TcpStream, config: rustls::server::ServerConfig) -> Result<Socket> {
    let mut conn = rustls::server::ServerConnection::new(std::sync::Arc::new(config.clone()))?;
    let tlsstream = rustls::StreamOwned::new(conn, stream.try_clone()?);
    if let Ok(ws) = match tungstenite::accept_hdr_with_config(tlsstream, |req, res| -> std::result::Result<Response, ErrorResponse> {
        let callback = |req, res| -> std::result::Result<tungstenite::handshake::server::Response, tungstenite::handshake::server::ErrorResponse> {
            dbg!(&req);
            dbg!(&res);
            Ok(res)
        }; 
        if let Ok(ws) = match tungstenite::accept_hdr_with_config(tlsstream, callback, None) {

Does not happen with this callback:

    let callback = |req: &Request, res| {
        dbg!(req);
         dbg!(&res);
         Ok(res)
    };  

Meta

rustc --version --verbose:

rustc 1.71.1 (eb26296b5 2023-08-03)
binary: rustc
commit-hash: eb26296b556cef10fb713a38f3d16b9886080f26
commit-date: 2023-08-03
host: aarch64-apple-darwin
release: 1.71.1
LLVM version: 16.0.5

Error output

thread 'rustc' panicked at 'IndexMap: key not found', compiler/rustc_borrowck/src/region_infer/mod.rs:2243:9
stack backtrace:
   0:        0x1050b2cc0 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hb75be2413dd8ceb3
   1:        0x105101a64 - core::fmt::write::h95d50546e769656f
   2:        0x1050a8e2c - std::io::Write::write_fmt::hce019ca594763835
   3:        0x1050b2b14 - std::sys_common::backtrace::print::hae7307dcada41b2a
   4:        0x1050b5578 - std::panicking::default_hook::{{closure}}::h30c41986d637ef23
   5:        0x1050b5380 - std::panicking::default_hook::h81d03189ef2e7e78
   6:        0x10d567f98 - rustc_driver_impl[21827c9a287a9f15]::install_ice_hook::{closure#0}
   7:        0x1050b5c2c - std::panicking::rust_panic_with_hook::he8360f4d28da55fc
   8:        0x1050b5a0c - std::panicking::begin_panic_handler::{{closure}}::he9e07d605072520f
   9:        0x1050b30a0 - std::sys_common::backtrace::__rust_end_short_backtrace::he03bf52f9c1eb73a
  10:        0x1050b5780 - _rust_begin_unwind
  11:        0x10512c9e0 - core::panicking::panic_fmt::ha5f5ca2311fff2ad
  12:        0x10512c9ac - core::option::expect_failed::hd3d75bda03d1d99e
  13:        0x11032336c - <rustc_borrowck[d3fa50dc65dee768]::MirBorrowckCtxt>::report_region_errors
  14:        0x1103347b4 - rustc_borrowck[d3fa50dc65dee768]::do_mir_borrowck
  15:        0x110327a84 - rustc_borrowck[d3fa50dc65dee768]::mir_borrowck
  16:        0x11083d904 - rustc_query_impl[465c999071b35b]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[465c999071b35b]::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle[a39402582bfd677]::query::erase::Erased<[u8; 8usize]>>
  17:        0x11072372c - <rustc_query_impl[465c999071b35b]::query_impl::mir_borrowck::dynamic_query::{closure#2} as core[6a5f4426c52daa32]::ops::function::FnOnce<(rustc_middle[a39402582bfd677]::ty::context::TyCtxt, rustc_span[2eda851f0959417e]::def_id::LocalDefId)>>::call_once
  18:        0x1106f6a9c - rustc_query_system[1b28c1e83e3a453c]::query::plumbing::try_execute_query::<rustc_query_impl[465c999071b35b]::DynamicConfig<rustc_query_system[1b28c1e83e3a453c]::query::caches::VecCache<rustc_span[2eda851f0959417e]::def_id::LocalDefId, rustc_middle[a39402582bfd677]::query::erase::Erased<[u8; 8usize]>>, false, false, false>, rustc_query_impl[465c999071b35b]::plumbing::QueryCtxt, true>
  19:        0x1108d4a44 - rustc_query_impl[465c999071b35b]::query_impl::mir_borrowck::get_query_incr::__rust_end_short_backtrace
  20:        0x10d5b48e8 - <core[6a5f4426c52daa32]::panic::unwind_safe::AssertUnwindSafe<rustc_data_structures[f6cc48a9066b13bc]::sync::par_for_each_in<&[rustc_span[2eda851f0959417e]::def_id::LocalDefId], <rustc_middle[a39402582bfd677]::hir::map::Map>::par_body_owners<rustc_interface[df80c09a2aa6fb7f]::passes::analysis::{closure#1}::{closure#0}>::{closure#0}>::{closure#0}::{closure#0}> as core[6a5f4426c52daa32]::ops::function::FnOnce<()>>::call_once
  21:        0x10d5c1ed8 - rustc_data_structures[f6cc48a9066b13bc]::sync::par_for_each_in::<&[rustc_span[2eda851f0959417e]::def_id::LocalDefId], <rustc_middle[a39402582bfd677]::hir::map::Map>::par_body_owners<rustc_interface[df80c09a2aa6fb7f]::passes::analysis::{closure#1}::{closure#0}>::{closure#0}>
  22:        0x10d62bdc8 - rustc_interface[df80c09a2aa6fb7f]::passes::analysis
  23:        0x110841f30 - rustc_query_impl[465c999071b35b]::plumbing::__rust_begin_short_backtrace::<rustc_query_impl[465c999071b35b]::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle[a39402582bfd677]::query::erase::Erased<[u8; 1usize]>>
  24:        0x1107af73c - <rustc_query_impl[465c999071b35b]::query_impl::analysis::dynamic_query::{closure#2} as core[6a5f4426c52daa32]::ops::function::FnOnce<(rustc_middle[a39402582bfd677]::ty::context::TyCtxt, ())>>::call_once
  25:        0x1106a09c0 - rustc_query_system[1b28c1e83e3a453c]::query::plumbing::try_execute_query::<rustc_query_impl[465c999071b35b]::DynamicConfig<rustc_query_system[1b28c1e83e3a453c]::query::caches::SingleCache<rustc_middle[a39402582bfd677]::query::erase::Erased<[u8; 1usize]>>, false, false, false>, rustc_query_impl[465c999071b35b]::plumbing::QueryCtxt, true>
  26:        0x11072bfb0 - rustc_query_impl[465c999071b35b]::query_impl::analysis::get_query_incr::__rust_end_short_backtrace
  27:        0x10d527200 - <rustc_interface[df80c09a2aa6fb7f]::queries::QueryResult<&rustc_middle[a39402582bfd677]::ty::context::GlobalCtxt>>::enter::<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}::{closure#2}::{closure#4}>
  28:        0x10d569568 - <rustc_interface[df80c09a2aa6fb7f]::interface::Compiler>::enter::<rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}::{closure#2}, core[6a5f4426c52daa32]::result::Result<core[6a5f4426c52daa32]::option::Option<rustc_interface[df80c09a2aa6fb7f]::queries::Linker>, rustc_span[2eda851f0959417e]::ErrorGuaranteed>>
  29:        0x10d5220b4 - rustc_span[2eda851f0959417e]::set_source_map::<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
  30:        0x10d51882c - <scoped_tls[80ce123946cbe7a6]::ScopedKey<rustc_span[2eda851f0959417e]::SessionGlobals>>::set::<rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>
  31:        0x10d525268 - std[12e62f360352ccd]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[df80c09a2aa6fb7f]::util::run_in_thread_pool_with_globals<rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>
  32:        0x10d51641c - <<std[12e62f360352ccd]::thread::Builder>::spawn_unchecked_<rustc_interface[df80c09a2aa6fb7f]::util::run_in_thread_pool_with_globals<rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>::{closure#1} as core[6a5f4426c52daa32]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  33:        0x1050be640 - std::sys::unix::thread::Thread::new::thread_start::h06dea01d0985d944
  34:        0x1a7b33fa8 - __pthread_joiner_wake

query stack during panic:
#0 [mir_borrowck] borrow-checking `accept_connection`
#1 [analysis] running analysis passes on this crate
end of query stack

error: internal compiler error: no errors encountered even though `delay_span_bug` issued

error: internal compiler error: BoundUniversalRegionError { longer_fr: '?279, error_element: Location(bb0[0]), placeholder: Placeholder { universe: U14, bound: BoundRegion { var: 0, kind: BrNamed(DefId(36:1566 ~ tungstenite[c104]::handshake::server::{impl#2}::'_), '_) } } }
  |
  = note: delayed at compiler/rustc_borrowck/src/region_infer/mod.rs:1743:27
             0: std::backtrace::Backtrace::create
             1: <rustc_errors::HandlerInner>::emit_diagnostic
             2: <rustc_errors::Handler>::delay_span_bug::<rustc_span::span_encoding::Span, alloc::string::String>
             3: <rustc_borrowck::diagnostics::region_errors::RegionErrors>::push::<rustc_borrowck::diagnostics::region_errors::RegionErrorKind>
             4: <rustc_borrowck::region_infer::RegionInferenceContext>::check_bound_universal_region
             5: <rustc_borrowck::region_infer::RegionInferenceContext>::solve
             6: rustc_borrowck::nll::compute_regions
             7: rustc_borrowck::do_mir_borrowck
             8: rustc_borrowck::mir_borrowck
             9: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 8]>>
            10: <rustc_query_impl::query_impl::mir_borrowck::dynamic_query::{closure#2} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, rustc_span::def_id::LocalDefId)>>::call_once
            11: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, true>
            12: rustc_query_impl::query_impl::mir_borrowck::get_query_incr::__rust_end_short_backtrace
            13: <core::panic::unwind_safe::AssertUnwindSafe<rustc_data_structures::sync::par_for_each_in<&[rustc_span::def_id::LocalDefId], <rustc_middle::hir::map::Map>::par_body_owners<rustc_interface::passes::analysis::{closure#1}::{closure#0}>::{closure#0}>::{closure#0}::{closure#0}> as core::ops::function::FnOnce<()>>::call_once
            14: rustc_data_structures::sync::par_for_each_in::<&[rustc_span::def_id::LocalDefId], <rustc_middle::hir::map::Map>::par_body_owners<rustc_interface::passes::analysis::{closure#1}::{closure#0}>::{closure#0}>
            15: rustc_interface::passes::analysis
            16: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 1]>>
            17: <rustc_query_impl::query_impl::analysis::dynamic_query::{closure#2} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, ())>>::call_once
            18: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 1]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, true>
            19: rustc_query_impl::query_impl::analysis::get_query_incr::__rust_end_short_backtrace
            20: <rustc_interface::queries::QueryResult<&rustc_middle::ty::context::GlobalCtxt>>::enter::<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}::{closure#2}::{closure#4}>
            21: <rustc_interface::interface::Compiler>::enter::<rustc_driver_impl::run_compiler::{closure#1}::{closure#2}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>
            22: rustc_span::set_source_map::<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
            23: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>
            24: std::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>
            25: <<std::thread::Builder>::spawn_unchecked_<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
            26: std::sys::unix::thread::Thread::new::thread_start
            27: __pthread_joiner_wake

error: internal compiler error: `compute_regions` tainted `infcx` with errors but did not emit any errors
   --> midgard/src/lib.rs:325:1
    |
325 | / fn accept_connection(stream: TcpStream, config: rustls::server::ServerConfig) -> Result<Socket> {
326 | |     let mut conn = rustls::server::ServerConnection::new(std::sync::Arc::new(config.clone()))?;
327 | |     let tlsstream = rustls::StreamOwned::new(conn, stream.try_clone()?);
328 | |     let f = |req, res| -> std::result::Result<tungstenite::handshake::server::Response, tungstenite::handshake::server::ErrorResponse> {
...   |
354 | |     }
355 | | }
    | |_^
    |
    = note: delayed at compiler/rustc_borrowck/src/nll.rs:310:52
               0: std::backtrace::Backtrace::create
               1: <rustc_errors::HandlerInner>::emit_diagnostic
               2: <rustc_session::session::Session>::delay_span_bug::<rustc_span::span_encoding::Span, &str>
               3: rustc_borrowck::nll::compute_regions
               4: rustc_borrowck::do_mir_borrowck
               5: rustc_borrowck::mir_borrowck
               6: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::mir_borrowck::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 8]>>
               7: <rustc_query_impl::query_impl::mir_borrowck::dynamic_query::{closure#2} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, rustc_span::def_id::LocalDefId)>>::call_once
               8: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::VecCache<rustc_span::def_id::LocalDefId, rustc_middle::query::erase::Erased<[u8; 8]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, true>
               9: rustc_query_impl::query_impl::mir_borrowck::get_query_incr::__rust_end_short_backtrace
              10: <core::panic::unwind_safe::AssertUnwindSafe<rustc_data_structures::sync::par_for_each_in<&[rustc_span::def_id::LocalDefId], <rustc_middle::hir::map::Map>::par_body_owners<rustc_interface::passes::analysis::{closure#1}::{closure#0}>::{closure#0}>::{closure#0}::{closure#0}> as core::ops::function::FnOnce<()>>::call_once
              11: rustc_data_structures::sync::par_for_each_in::<&[rustc_span::def_id::LocalDefId], <rustc_middle::hir::map::Map>::par_body_owners<rustc_interface::passes::analysis::{closure#1}::{closure#0}>::{closure#0}>
              12: rustc_interface::passes::analysis
              13: rustc_query_impl::plumbing::__rust_begin_short_backtrace::<rustc_query_impl::query_impl::analysis::dynamic_query::{closure#2}::{closure#0}, rustc_middle::query::erase::Erased<[u8; 1]>>
              14: <rustc_query_impl::query_impl::analysis::dynamic_query::{closure#2} as core::ops::function::FnOnce<(rustc_middle::ty::context::TyCtxt, ())>>::call_once
              15: rustc_query_system::query::plumbing::try_execute_query::<rustc_query_impl::DynamicConfig<rustc_query_system::query::caches::SingleCache<rustc_middle::query::erase::Erased<[u8; 1]>>, false, false, false>, rustc_query_impl::plumbing::QueryCtxt, true>
              16: rustc_query_impl::query_impl::analysis::get_query_incr::__rust_end_short_backtrace
              17: <rustc_interface::queries::QueryResult<&rustc_middle::ty::context::GlobalCtxt>>::enter::<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}::{closure#2}::{closure#4}>
              18: <rustc_interface::interface::Compiler>::enter::<rustc_driver_impl::run_compiler::{closure#1}::{closure#2}, core::result::Result<core::option::Option<rustc_interface::queries::Linker>, rustc_span::ErrorGuaranteed>>
              19: rustc_span::set_source_map::<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
              20: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>
              21: std::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>
              22: <<std::thread::Builder>::spawn_unchecked_<rustc_interface::util::run_in_thread_pool_with_globals<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_span::ErrorGuaranteed>, rustc_driver_impl::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#0}::{closure#0}, core::result::Result<(), rustc_span::ErrorGuaranteed>>::{closure#1} as core::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
              23: std::sys::unix::thread::Thread::new::thread_start
              24: __pthread_joiner_wake
            

thread 'rustc' panicked at 'called `Result::unwrap()` on an `Err` value: failed while formatting fluent string `infer_trait_placeholder_mismatch`: 
the fluent string has an argument `trait_def_id` that was not found.
help: no arguments are available
', compiler/rustc_errors/src/emitter.rs:2397:77
stack backtrace:
   0:        0x101732cc0 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hb75be2413dd8ceb3
   1:        0x101781a64 - core::fmt::write::h95d50546e769656f
   2:        0x101728e2c - std::io::Write::write_fmt::hce019ca594763835
   3:        0x101732b14 - std::sys_common::backtrace::print::hae7307dcada41b2a
   4:        0x101735578 - std::panicking::default_hook::{{closure}}::h30c41986d637ef23
   5:        0x101735380 - std::panicking::default_hook::h81d03189ef2e7e78
   6:        0x109be7f98 - rustc_driver_impl[21827c9a287a9f15]::install_ice_hook::{closure#0}
   7:        0x101735c2c - std::panicking::rust_panic_with_hook::he8360f4d28da55fc
   8:        0x101735a0c - std::panicking::begin_panic_handler::{{closure}}::he9e07d605072520f
   9:        0x1017330a0 - std::sys_common::backtrace::__rust_end_short_backtrace::he03bf52f9c1eb73a
  10:        0x101735780 - _rust_begin_unwind
  11:        0x1017ac9e0 - core::panicking::panic_fmt::ha5f5ca2311fff2ad
  12:        0x1017acda0 - core::result::unwrap_failed::h34067e5e60f3683e
  13:        0x10db8574c - <rustc_errors[8219b94d386394ca]::emitter::FileWithAnnotatedLines>::collect_annotations
  14:        0x10db8809c - <rustc_errors[8219b94d386394ca]::emitter::EmitterWriter>::emit_message_default::{closure#0}
  15:        0x10db8b494 - <rustc_errors[8219b94d386394ca]::emitter::EmitterWriter>::emit_messages_default
  16:        0x10db81c68 - <rustc_errors[8219b94d386394ca]::emitter::EmitterWriter as rustc_errors[8219b94d386394ca]::emitter::Emitter>::emit_diagnostic
  17:        0x10dbaba30 - <rustc_errors[8219b94d386394ca]::json::Diagnostic>::from_errors_diagnostic
  18:        0x10dbaa638 - <rustc_errors[8219b94d386394ca]::json::JsonEmitter as rustc_errors[8219b94d386394ca]::emitter::Emitter>::emit_diagnostic
  19:        0x10db962f0 - <rustc_errors[8219b94d386394ca]::HandlerInner>::emit_diagnostic::{closure#2}
  20:        0x10db95c48 - <rustc_errors[8219b94d386394ca]::HandlerInner>::emit_diagnostic
  21:        0x10db96998 - <rustc_errors[8219b94d386394ca]::HandlerInner>::flush_delayed::<alloc[e0f95eb21a34f6a8]::vec::Vec<rustc_errors[8219b94d386394ca]::DelayedDiagnostic>, &str>
  22:        0x10db931a0 - <rustc_errors[8219b94d386394ca]::HandlerInner as core[6a5f4426c52daa32]::ops::drop::Drop>::drop
  23:        0x109b8cc28 - core[6a5f4426c52daa32]::ptr::drop_in_place::<rustc_session[1039b6c2e3771dcd]::parse::ParseSess>
  24:        0x109b8e0d0 - core[6a5f4426c52daa32]::ptr::drop_in_place::<rustc_session[1039b6c2e3771dcd]::session::Session>
  25:        0x109ba4e88 - core[6a5f4426c52daa32]::ptr::drop_in_place::<rustc_interface[df80c09a2aa6fb7f]::interface::Compiler>
  26:        0x109ba24f0 - rustc_span[2eda851f0959417e]::set_source_map::<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
  27:        0x109b9882c - <scoped_tls[80ce123946cbe7a6]::ScopedKey<rustc_span[2eda851f0959417e]::SessionGlobals>>::set::<rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>
  28:        0x109ba5268 - std[12e62f360352ccd]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[df80c09a2aa6fb7f]::util::run_in_thread_pool_with_globals<rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>
  29:        0x109b9641c - <<std[12e62f360352ccd]::thread::Builder>::spawn_unchecked_<rustc_interface[df80c09a2aa6fb7f]::util::run_in_thread_pool_with_globals<rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>::{closure#1} as core[6a5f4426c52daa32]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  30:        0x10173e640 - std::sys::unix::thread::Thread::new::thread_start::h06dea01d0985d944
  31:        0x1a7b33fa8 - __pthread_joiner_wake

query stack during panic:
end of query stack
thread 'rustc' panicked at 'panic in a function that cannot unwind', library/core/src/panicking.rs:126:5
stack backtrace:
   0:        0x101732cc0 - <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt::hb75be2413dd8ceb3
   1:        0x101781a64 - core::fmt::write::h95d50546e769656f
   2:        0x101728e2c - std::io::Write::write_fmt::hce019ca594763835
   3:        0x101732b14 - std::sys_common::backtrace::print::hae7307dcada41b2a
   4:        0x101735578 - std::panicking::default_hook::{{closure}}::h30c41986d637ef23
   5:        0x101735380 - std::panicking::default_hook::h81d03189ef2e7e78
   6:        0x109be7f98 - rustc_driver_impl[21827c9a287a9f15]::install_ice_hook::{closure#0}
   7:        0x101735c2c - std::panicking::rust_panic_with_hook::he8360f4d28da55fc
   8:        0x1017359d0 - std::panicking::begin_panic_handler::{{closure}}::he9e07d605072520f
   9:        0x1017330a0 - std::sys_common::backtrace::__rust_end_short_backtrace::he03bf52f9c1eb73a
  10:        0x101735780 - _rust_begin_unwind
  11:        0x1017aca10 - core::panicking::panic_nounwind_fmt::h6a635b966d82551e
  12:        0x1017aca8c - core::panicking::panic_nounwind::h241eff56ec55ba7a
  13:        0x1017acb80 - core::panicking::panic_cannot_unwind::h911ff5cd61f62d63
  14:        0x109ba2508 - rustc_span[2eda851f0959417e]::set_source_map::<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
  15:        0x109b9882c - <scoped_tls[80ce123946cbe7a6]::ScopedKey<rustc_span[2eda851f0959417e]::SessionGlobals>>::set::<rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>
  16:        0x109ba5268 - std[12e62f360352ccd]::sys_common::backtrace::__rust_begin_short_backtrace::<rustc_interface[df80c09a2aa6fb7f]::util::run_in_thread_pool_with_globals<rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>
  17:        0x109b9641c - <<std[12e62f360352ccd]::thread::Builder>::spawn_unchecked_<rustc_interface[df80c09a2aa6fb7f]::util::run_in_thread_pool_with_globals<rustc_interface[df80c09a2aa6fb7f]::interface::run_compiler<core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>, rustc_driver_impl[21827c9a287a9f15]::run_compiler::{closure#1}>::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>::{closure#0}::{closure#0}, core[6a5f4426c52daa32]::result::Result<(), rustc_span[2eda851f0959417e]::ErrorGuaranteed>>::{closure#1} as core[6a5f4426c52daa32]::ops::function::FnOnce<()>>::call_once::{shim:vtable#0}
  18:        0x10173e640 - std::sys::unix::thread::Thread::new::thread_start::h06dea01d0985d944
  19:        0x1a7b33fa8 - __pthread_joiner_wake

note: rustc 1.71.1 (eb26296b5 2023-08-03) running on aarch64-apple-darwin

note: compiler flags: --crate-type lib -C embed-bitcode=no -C split-debuginfo=unpacked -C debuginfo=2 -C incremental=[REDACTED]

Activity

  1. added
    C-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.
    on Aug 16, 2023
  2. added
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Aug 16, 2023
  3. changed the title [-]Bug report[/-] [+]ICE in rustc_borrowck/src/region_infer[/+] on Aug 17, 2023
  4. lqd commented on Aug 17, 2023

    @lqd
    Member

    @sjeohp The code snippet is incomplete: is there a repository available that we could try, to reproduce the error? If not, could you at least add the full accept_connection function?
    Thanks!

  5. sjeohp commented on Aug 17, 2023

    @sjeohp
    Author
    use tungstenite::handshake::server::{Response, ErrorResponse};
    fn accept_connection(stream: TcpStream, config: rustls::server::ServerConfig) -> Result<Socket> {
        let mut conn = rustls::server::ServerConnection::new(std::sync::Arc::new(config.clone()))?;
        let tlsstream = rustls::StreamOwned::new(conn, stream.try_clone()?);
        if let Ok(ws) = match tungstenite::accept_hdr_with_config(tlsstream, |req, res| -> std::result::Result<Response, ErrorResponse> {
            let callback = |req, res| -> std::result::Result<tungstenite::handshake::server::Response, tungstenite::handshake::server::ErrorResponse> {
                dbg!(&req);
                dbg!(&res);
                Ok(res)
            }; 
            if let Ok(ws) = match tungstenite::accept_hdr_with_config(tlsstream, callback, None) {
            Err(HandshakeError::Interrupted(midhandshake)) => {
                info!(
                    "Handshake interrupted with peer {} - waiting to try again.",
                    peer_addr
                );  
                Ok(Socket::Interrupted(midhandshake))
            }   
    
            Err(e) => {
                error!("Error accepting secure websocket connection: {e}");
                Err(e)?
            }   
    
            Ok(ws) => Ok(Socket::SecureWebSocket(ws)),
        }   
    }
    }
  6. lqd commented on Aug 17, 2023

    @lqd
    Member

    @sjeohp This is still incomplete and doesn't parse.

    Do you have a repository where the issue can be reproduced?

  7. self-assigned this
    on Aug 17, 2023
  8. sjeohp commented on Aug 17, 2023

    @sjeohp
    Author

    No repo. You can make it parse pretty easily. I am not a rustc expert but I believe the issue was with the callback.

  9. added
    E-needs-bisectionCall for participation: This issue needs bisection: https://github.com/rust-lang/cargo-bisect-rustc
    E-needs-mcveCall for participation: This issue has a repro, but needs a Minimal Complete and Verifiable Example
    on Aug 18, 2023
  10. lqd commented on Aug 18, 2023

    @lqd
    Member

    Here's a small (but not minimal yet) working repro:

    use std::io::{self, Read, Write};
    
    struct S;
    
    impl Read for S {
        fn read(&mut self, _buf: &mut [u8]) -> io::Result<usize> {
            todo!()
        }
    }
    
    impl Write for S {
        fn write(&mut self, _buf: &[u8]) -> io::Result<usize> {
            todo!()
        }
    
        fn flush(&mut self) -> io::Result<()> {
            todo!()
        }
    }
    
    fn main() {
        let s = S;
        tungstenite::accept_hdr(s, |_, _| {
            let callback = |_, _| {
                todo!()
            };
    
            tungstenite::accept_hdr(s, callback);
            todo!()
        });
    }

    and with that we can finally bisect, to nightly-2022-06-08:

    I'll minimize tungstenite next to remove this dependency and create an MCVE.

  11. added and removed
    E-needs-bisectionCall for participation: This issue needs bisection: https://github.com/rust-lang/cargo-bisect-rustc
    needs-triageThis issue may need triage. Remove when done. See docs forge.rust-lang.org/release/issue-triaging
    on Aug 18, 2023
  12. sjeohp commented on Aug 19, 2023

    @sjeohp
    Author

    tungstenite removed:

    use std::{
    	error, fmt,
    	io::{self, Cursor, Read, Write},
    	marker::PhantomData,
    	result,
    };
    
    struct S;
    
    impl Read for S {
    	fn read(&mut self, _buf: &mut [u8]) -> io::Result<usize> {
    		todo!()
    	}
    }
    
    impl Write for S {
    	fn write(&mut self, _buf: &[u8]) -> io::Result<usize> {
    		todo!()
    	}
    
    	fn flush(&mut self) -> io::Result<()> {
    		todo!()
    	}
    }
    
    pub type Result<T, E = Error> = result::Result<T, E>;
    pub enum Error {}
    
    struct Request;
    struct Response;
    
    pub trait Callback {}
    
    impl<F> Callback for F where F: FnOnce(&Request, Response) -> Result<Response> {}
    
    pub enum HandshakeError<Role: HandshakeRole> {
    	Interrupted(MidHandshake<Role>),
    }
    
    impl<Role: HandshakeRole> fmt::Debug for HandshakeError<Role> {
    	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    		todo!()
    	}
    }
    
    impl<Role: HandshakeRole> fmt::Display for HandshakeError<Role> {
    	fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    		todo!()
    	}
    }
    
    impl<Role: HandshakeRole> error::Error for HandshakeError<Role> {}
    
    pub trait HandshakeRole {
    	type InternalStream: Read + Write;
    }
    
    pub struct ServerHandshake<S, C> {
    	_marker: PhantomData<(S, C)>,
    }
    
    impl<S: Read + Write, C: Callback> HandshakeRole for ServerHandshake<S, C> {
    	type InternalStream = S;
    }
    
    pub struct MidHandshake<Role: HandshakeRole> {
    	machine: HandshakeMachine<Role::InternalStream>,
    }
    
    impl<Role: HandshakeRole> MidHandshake<Role> {
    	pub fn handshake(mut self) -> Result<(), HandshakeError<Role>> {
    		todo!()
    	}
    }
    
    pub struct HandshakeMachine<Stream> {
    	stream: Stream,
    	state: io::Cursor<Vec<u8>>,
    }
    
    fn accept<C: Callback>(callback: C) -> Result<(), HandshakeError<ServerHandshake<S, C>>> {
    	todo!()
    }
    
    fn main() {
    	accept(|_, _| {
    		let callback = |_, _| todo!();
    
    		accept(callback);
    		todo!()
    	});
    }
  13. lqd commented on Aug 19, 2023

    @lqd
    Member

    Probably not yet an MCVE and could be further simplified, but getting close.

    use std::marker::PhantomData;
    
    trait Callback {}
    impl<F> Callback for F where F: FnOnce(&()) {} // arg needs to be a ref
    
    trait HandshakeRole {
        type InternalStream;
    }
    
    struct ServerHandshake<C> {
        _marker: PhantomData<C>,
    }
    
    impl<C: Callback> HandshakeRole for ServerHandshake<C> {
        type InternalStream = ();
    }
    
    struct HandshakeError<Role: HandshakeRole> {
        _machine: HandshakeMachine<Role::InternalStream>,
    }
    
    struct HandshakeMachine<S> {
        _stream: S,
        _state: TypeWithDrop, // needs a Drop impl
    }
    
    struct TypeWithDrop;
    impl Drop for TypeWithDrop {
        fn drop(&mut self) {
        }
    }
    
    fn accept<C: Callback>(_callback: C) -> HandshakeError<ServerHandshake<C>> {
        todo!()
    }
    
    fn main() {
        let callback = |_| {};
        accept(callback);
    }
  14. added
    A-diagnosticsArea: Messages for errors, warnings, and lints
    on Aug 19, 2023
  15. sjeohp commented on Aug 19, 2023

    @sjeohp
    Author
    trait Role<C> {
        type I;
    }
    
    struct H;
    
    impl<C: Fn(&())> Role<C> for H { 
        type I = (); 
    }
    
    struct Machine<C, R: Role<C>> {
        _i: R::I,
    }
    
    impl<C, R: Role<C>> Drop for Machine<C, R> {
        fn drop(&mut self) {}
    }
    
    fn accept<C: Fn(&()), R: Role<C>>(_callback: C) -> Machine<C, R> {
        todo!()
    }
    
    fn main() {
        let callback = |_| {}; 
        accept::<_, H>(callback);
    }
  16. added
    I-prioritizeIssue needs a team member to assess the impact. Will be replaced by P-{low,medium,high,critical}
    on Aug 25, 2023
  17. matthiaskrgr commented on Aug 25, 2023

    @matthiaskrgr
    Member

    1.62 error -> 1.63 error + ice

  18. self-assigned this
    on Aug 29, 2023
  19. apiraino commented on Aug 30, 2023

    @apiraino
    Contributor

    WG-prioritization assigning priority (Zulip discussion).

    @rustbot label -I-prioritize +P-medium -E-needs-mcve

  20. added and removed
    I-prioritizeIssue needs a team member to assess the impact. Will be replaced by P-{low,medium,high,critical}
    E-needs-mcveCall for participation: This issue has a repro, but needs a Minimal Complete and Verifiable Example
    on Aug 30, 2023
  21. added a commit that references this issue on Aug 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

A-borrow-checkerArea: The borrow checkerA-diagnosticsArea: Messages for errors, warnings, and lintsC-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️P-mediumMedium priorityT-compilerRelevant to the compiler team, which will review and decide on the PR/issue.regression-from-stable-to-stablePerformance or correctness regression from one stable version to another.

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions