Skip to content

Internal compiler error with warp server + CORS in library referenced from binary #105171

Closed as not planned

Description

Code

Minimal reproduction repo

Meta

Nightly

The bug was introduced in nightly-2022-11-20 (tested by bisecting nightlies from rustup). The previous day works fine.

First broken version:

rustc --version --verbose:

rustc 1.67.0-nightly (c5d82ed7a 2022-11-19)
binary: rustc
commit-hash: c5d82ed7a4ad94a538bb87e5016e7d5ce0bd434b
commit-date: 2022-11-19
host: aarch64-apple-darwin
release: 1.67.0-nightly
LLVM version: 15.0.4

Last working version:
rustc --version --verbose

rustc 1.67.0-nightly (b833ad56f 2022-11-18)
binary: rustc
commit-hash: b833ad56f46a0bbe0e8729512812a161e7dae28a
commit-date: 2022-11-18
host: aarch64-apple-darwin
release: 1.67.0-nightly
LLVM version: 15.0.4

Beta

rustc --version --verbose:

rustc 1.66.0-beta.2 (0040709e3 2022-11-20)
binary: rustc
commit-hash: 0040709e39bfa159d099ee14628ad4ac72f91406
commit-date: 2022-11-20
host: aarch64-apple-darwin
release: 1.66.0-beta.2
LLVM version: 15.0.2

No error.

Stable

rustc --version --verbose:

rustc 1.65.0 (897e37553 2022-11-02)
binary: rustc
commit-hash: 897e37553bba8b42751c67658967889d11ecd120
commit-date: 2022-11-02
host: aarch64-apple-darwin
release: 1.65.0
LLVM version: 15.0.0

No error.

Error output

Attached as a file because it's too long!

2022-12-rust-ice.txt

Here's a taste of the error output:

warning: Error finalizing incremental compilation session directory `/Users/ross/Projects/2022-12-rust-ice-repro/target/debug/incremental/app-1h19fwfbfapnj/s-gfyl3ekz1u-1rggnpp-working`: No such file or directory (os error 2)

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

error: internal compiler error: broken MIR in DropGlue(DefId(2:2801 ~ core[7323]::ptr::drop_in_place), Some(hyper::server::server::new_svc::State<hyper::server::tcp::addr_stream::AddrStream, futures_util::future::ready::Ready<std::result::Result<hyper::service::util::ServiceFn<[closure@warp::server::Server<warp::filters::cors::internal::CorsFilter<warp::filter::or::Or<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::unify::Unify<warp::filter::or::Or<warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::get::{closure#0}]>::{closure#0}]>, warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::head::{closure#0}]>::{closure#0}]>>>, warp::filter::and_then::AndThen<warp::filter::FilterFn<[closure@warp::filters::path::tail::{closure#0}]>, [closure@warp::filters::fs::path_from_tail::{closure#0}]>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_modified_since::IfModifiedSince>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_modified_since::IfModifiedSince>, std::convert::Infallible>>>::{closure#0}]>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_unmodified_since::IfUnmodifiedSince>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_unmodified_since::IfUnmodifiedSince>, std::convert::Infallible>>>::{closure#0}]>>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_range::IfRange>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_range::IfRange>, std::convert::Infallible>>>::{closure#0}]>>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::range::Range>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::range::Range>, std::convert::Infallible>>>::{closure#0}]>>, [closure@warp::filters::fs::conditionals::{closure#0}]>>, fn(warp::filters::fs::ArcPath, warp::filters::fs::Conditionals) -> impl std::future::Future<Output = std::result::Result<warp::filters::fs::File, warp::reject::Rejection>> + std::marker::Send {warp::filters::fs::file_reply}>, warp::filter::and_then::AndThen<warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::get::{closure#0}]>::{closure#0}]>, fn() -> impl std::future::Future<Output = std::result::Result<impl warp::reply::Reply, std::convert::Infallible>> {server::serve_foo}>>>>::bind_ephemeral<([u8; 4], u16)>::{closure#1}::{closure#0}::{closure#0}], hyper::body::body::Body>, std::convert::Infallible>>, hyper::service::util::ServiceFn<[closure@warp::server::Server<warp::filters::cors::internal::CorsFilter<warp::filter::or::Or<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::unify::Unify<warp::filter::or::Or<warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::get::{closure#0}]>::{closure#0}]>, warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::head::{closure#0}]>::{closure#0}]>>>, warp::filter::and_then::AndThen<warp::filter::FilterFn<[closure@warp::filters::path::tail::{closure#0}]>, [closure@warp::filters::fs::path_from_tail::{closure#0}]>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_modified_since::IfModifiedSince>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_modified_since::IfModifiedSince>, std::convert::Infallible>>>::{closure#0}]>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_unmodified_since::IfUnmodifiedSince>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_unmodified_since::IfUnmodifiedSince>, std::convert::Infallible>>>::{closure#0}]>>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_range::IfRange>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_range::IfRange>, std::convert::Infallible>>>::{closure#0}]>>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::range::Range>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::range::Range>, std::convert::Infallible>>>::{closure#0}]>>, [closure@warp::filters::fs::conditionals::{closure#0}]>>, fn(warp::filters::fs::ArcPath, warp::filters::fs::Conditionals) -> impl std::future::Future<Output = std::result::Result<warp::filters::fs::File, warp::reject::Rejection>> + std::marker::Send {warp::filters::fs::file_reply}>, warp::filter::and_then::AndThen<warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::get::{closure#0}]>::{closure#0}]>, fn() -> impl std::future::Future<Output = std::result::Result<impl warp::reply::Reply, std::convert::Infallible>> {server::serve_foo}>>>>::bind_ephemeral<([u8; 4], u16)>::{closure#1}::{closure#0}::{closure#0}], hyper::body::body::Body>, hyper::common::exec::Exec, hyper::server::server::NoopWatcher>)) (after phase change to runtime-optimized) at bb3[0]:
                                Field projection `((*_1) as Connected).field[0]` specified type `hyper::server::conn::upgrades::UpgradeableConnection<hyper::server::tcp::addr_stream::AddrStream, hyper::service::util::ServiceFn<[closure@warp::server::Server<warp::filters::cors::internal::CorsFilter<warp::filter::or::Or<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::unify::Unify<warp::filter::or::Or<warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::get::{closure#0}]>::{closure#0}]>, warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::head::{closure#0}]>::{closure#0}]>>>, warp::filter::and_then::AndThen<warp::filter::FilterFn<[closure@warp::filters::path::tail::{closure#0}]>, [closure@warp::filters::fs::path_from_tail::{closure#0}]>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_modified_since::IfModifiedSince>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_modified_since::IfModifiedSince>, std::convert::Infallible>>>::{closure#0}]>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_unmodified_since::IfUnmodifiedSince>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_unmodified_since::IfUnmodifiedSince>, std::convert::Infallible>>>::{closure#0}]>>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_range::IfRange>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_range::IfRange>, std::convert::Infallible>>>::{closure#0}]>>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::range::Range>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::range::Range>, std::convert::Infallible>>>::{closure#0}]>>, [closure@warp::filters::fs::conditionals::{closure#0}]>>, fn(warp::filters::fs::ArcPath, warp::filters::fs::Conditionals) -> impl std::future::Future<Output = std::result::Result<warp::filters::fs::File, warp::reject::Rejection>> + std::marker::Send {warp::filters::fs::file_reply}>, warp::filter::and_then::AndThen<warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::get::{closure#0}]>::{closure#0}]>, fn() -> impl std::future::Future<Output = std::result::Result<impl warp::reply::Reply, std::convert::Infallible>> {server::serve_foo}>>>>::bind_ephemeral<([u8; 4], u16)>::{closure#1}::{closure#0}::{closure#0}], hyper::body::body::Body>, hyper::common::exec::Exec>`, but actual type is `<hyper::server::server::NoopWatcher as hyper::server::server::Watcher<hyper::server::tcp::addr_stream::AddrStream, hyper::service::util::ServiceFn<[closure@warp::server::Server<warp::filters::cors::internal::CorsFilter<warp::filter::or::Or<warp::filter::and_then::AndThen<warp::filter::and::And<warp::filter::and::And<warp::filter::unify::Unify<warp::filter::or::Or<warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::get::{closure#0}]>::{closure#0}]>, warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::head::{closure#0}]>::{closure#0}]>>>, warp::filter::and_then::AndThen<warp::filter::FilterFn<[closure@warp::filters::path::tail::{closure#0}]>, [closure@warp::filters::fs::path_from_tail::{closure#0}]>>, warp::filter::map::Map<warp::filter::and::And<warp::filter::and::And<warp::filter::and::And<warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_modified_since::IfModifiedSince>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_modified_since::IfModifiedSince>, std::convert::Infallible>>>::{closure#0}]>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_unmodified_since::IfUnmodifiedSince>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_unmodified_since::IfUnmodifiedSince>, std::convert::Infallible>>>::{closure#0}]>>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::if_range::IfRange>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::if_range::IfRange>, std::convert::Infallible>>>::{closure#0}]>>, warp::filter::FilterFn<[closure@warp::filter::filter_fn_one<[closure@warp::filters::header::optional2<headers::common::range::Range>::{closure#0}], futures_util::future::ready::Ready<std::result::Result<std::option::Option<headers::common::range::Range>, std::convert::Infallible>>>::{closure#0}]>>, [closure@warp::filters::fs::conditionals::{closure#0}]>>, fn(warp::filters::fs::ArcPath, warp::filters::fs::Conditionals) -> impl std::future::Future<Output = std::result::Result<warp::filters::fs::File, warp::reject::Rejection>> + std::marker::Send {warp::filters::fs::file_reply}>, warp::filter::and_then::AndThen<warp::filter::FilterFn<[closure@warp::filters::method::method_is<[closure@warp::filters::method::get::{closure#0}]>::{closure#0}]>, fn() -> impl std::future::Future<Output = std::result::Result<impl warp::reply::Reply, std::convert::Infallible>> {server::serve_foo}>>>>::bind_ephemeral<([u8; 4], u16)>::{closure#1}::{closure#0}::{closure#0}], hyper::body::body::Body>, hyper::common::exec::Exec>>::Future`
  |
  = note: delayed at compiler/rustc_const_eval/src/transform/validate.rs:88:36
Backtrace

stack backtrace:
   0: std::panicking::begin_panic::<rustc_errors::ExplicitBug>
   1: std::panic::panic_any::<rustc_errors::ExplicitBug>
   2: <rustc_errors::HandlerInner>::flush_delayed::<alloc::vec::Vec<rustc_errors::diagnostic::Diagnostic>, &str>
   3: <rustc_errors::HandlerInner as core::ops::drop::Drop>::drop
   4: core::ptr::drop_in_place::<rustc_session::parse::ParseSess>
   5: core::ptr::drop_in_place::<rustc_session::session::Session>
   6: core::ptr::drop_in_place::<rustc_interface::interface::Compiler>
   7: rustc_span::with_source_map::<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}::{closure#0}>
   8: <scoped_tls::ScopedKey<rustc_span::SessionGlobals>>::set::<rustc_interface::interface::run_compiler<core::result::Result<(), rustc_errors::ErrorGuaranteed>, rustc_driver::run_compiler::{closure#1}>::{closure#0}, core::result::Result<(), rustc_errors::ErrorGuaranteed>>
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

note: the compiler unexpectedly panicked. this is a bug.

note: we would appreciate a bug report: https://github.com/rust-lang/rust/issues/new?labels=C-bug%2C+I-ICE%2C+T-compiler&template=ice.md

note: rustc 1.67.0-nightly (c090c6880 2022-12-01) running on aarch64-apple-darwin

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

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

query stack during panic:
end of query stack

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Assignees

No one assigned

    Labels

    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.regression-from-stable-to-nightlyPerformance or correctness regression from stable to nightly.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions