Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ICE in rustc_borrowck/src/region_infer #114907

Closed
sjeohp opened this issue Aug 16, 2023 · 10 comments · Fixed by #115384
Closed

ICE in rustc_borrowck/src/region_infer #114907

sjeohp opened this issue Aug 16, 2023 · 10 comments · Fixed by #115384
Assignees
Labels
A-borrow-checker Area: The borrow checker A-diagnostics Area: Messages for errors, warnings, and lints C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ P-medium Medium priority regression-from-stable-to-stable Performance or correctness regression from one stable version to another. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.

Comments

@sjeohp
Copy link

sjeohp commented Aug 16, 2023

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]

@sjeohp sjeohp added C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ T-compiler Relevant to the compiler team, which will review and decide on the PR/issue. labels Aug 16, 2023
@rustbot rustbot added the needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. label Aug 16, 2023
@chenyukang chenyukang changed the title Bug report ICE in rustc_borrowck/src/region_infer Aug 17, 2023
@lqd
Copy link
Member

lqd commented Aug 17, 2023

@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!

@sjeohp
Copy link
Author

sjeohp commented Aug 17, 2023

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)),
    }   
}
}

@lqd
Copy link
Member

lqd commented Aug 17, 2023

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

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

@lqd lqd self-assigned this Aug 17, 2023
@sjeohp
Copy link
Author

sjeohp commented Aug 17, 2023

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

@apiraino apiraino added E-needs-bisection Call for participation: This issue needs bisection: https://github.com/rust-lang/cargo-bisect-rustc E-needs-mcve Call for participation: This issue has a repro, but needs a Minimal Complete and Verifiable Example labels Aug 18, 2023
@lqd
Copy link
Member

lqd commented Aug 18, 2023

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.

@lqd lqd added A-borrow-checker Area: The borrow checker and removed E-needs-bisection Call for participation: This issue needs bisection: https://github.com/rust-lang/cargo-bisect-rustc needs-triage This issue may need triage. Remove it if it has been sufficiently triaged. labels Aug 18, 2023
@sjeohp
Copy link
Author

sjeohp commented Aug 19, 2023

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!()
	});
}

@lqd
Copy link
Member

lqd commented Aug 19, 2023

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);
}

@lqd lqd added the A-diagnostics Area: Messages for errors, warnings, and lints label Aug 19, 2023
@sjeohp
Copy link
Author

sjeohp commented Aug 19, 2023

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);
}

@matthiaskrgr matthiaskrgr added the regression-from-stable-to-stable Performance or correctness regression from one stable version to another. label Aug 25, 2023
@rustbot rustbot added the I-prioritize Issue: Indicates that prioritization has been requested for this issue. label Aug 25, 2023
@matthiaskrgr
Copy link
Member

1.62 error -> 1.63 error + ice

@apiraino
Copy link
Contributor

WG-prioritization assigning priority (Zulip discussion).

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

@rustbot rustbot added P-medium Medium priority and removed I-prioritize Issue: Indicates that prioritization has been requested for this issue. E-needs-mcve Call for participation: This issue has a repro, but needs a Minimal Complete and Verifiable Example labels Aug 30, 2023
@bors bors closed this as completed in 4b71f03 Aug 31, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-borrow-checker Area: The borrow checker A-diagnostics Area: Messages for errors, warnings, and lints C-bug Category: This is a bug. I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ P-medium Medium priority regression-from-stable-to-stable Performance or correctness regression from one stable version to another. T-compiler Relevant to the compiler team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants