Skip to content

ICE: "cannot relate bound region" when using conservative_impl_trait #39665

Closed
@kryptan

Description

@kryptan

Playground

#![feature(conservative_impl_trait)]

fn batches(n: &u32) -> impl Iterator<Item=&u32> {
    std::iter::once(n)
}

fn main() {}

Output:

E:\mega3\projects\ice\ice>cargo build
   Compiling ice v0.1.0 (file:///E:/mega3/projects/ice/ice)
error: internal compiler error: C:\bot\slave\nightly-dist-rustc-win-msvc-64\build\src\librustc\infer\region_inference/mod.rs:744: cannot relate bound region: '_#1r <= ReLateBound(DebruijnIndex { depth: 2 }, BrAnon(0))
 --> src\main.rs:3:24
  |
3 | fn batches(n: &u32) -> impl Iterator<Item=&u32> {
  |                        ^^^^^^^^^^^^^^^^^^^^^^^^

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

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: run with `RUST_BACKTRACE=1` for a backtrace

thread 'rustc' panicked at 'Box<Any>', C:\bot\slave\nightly-dist-rustc-win-msvc-64\build\src\librustc_errors\lib.rs:376
stack backtrace:
   0:     0x7ffbf9a60d58 - std::panicking::Location::line::ha91c35bc276d0b51
   1:     0x7ffbf9a601e2 - std::panicking::Location::line::ha91c35bc276d0b51
   2:     0x7ffbf9a63c1d - std::panicking::rust_panic_with_hook::hf12525c539cafb95
   3:     0x7ffbf6d1288b - <unknown>
   4:     0x7ffbf6efbd99 - rustc::session::bug_fmt::h2b4624f40b53342d
   5:     0x7ffbf6efb7e2 - rustc::session::bug_fmt::h2b4624f40b53342d
   6:     0x7ffbf6efaf54 - rustc::session::bug_fmt::h2b4624f40b53342d
   7:     0x7ffbf6e378a4 - rustc::infer::region_inference::RegionVarBindings::make_subregion::h7d1c928b417a379e
   8:     0x7ffbf6e37177 - rustc::infer::region_inference::RegionVarBindings::make_eqregion::h7aba2537086b9605
   9:     0x7ffbf6e18347 - <rustc::infer::equate::Equate<'combine, 'infcx, 'gcx, 'tcx> as rustc::ty::relate::TypeRelation<'infcx, 'gcx, 'tcx>>::regions::h3e5abdb2851963c5
  10:     0x7ffbf6f66209 - rustc::ty::outlives::<impl rustc::ty::context::TyCtxt<'a, 'gcx, 'tcx>>::outlives_components::h006225a62a2484ea
  11:     0x7ffbf6e17a98 - <rustc::infer::equate::Equate<'combine, 'infcx, 'gcx, 'tcx> as rustc::ty::relate::TypeRelation<'infcx, 'gcx, 'tcx>>::tys::h0e345c52eceb6db5
  12:     0x7ffbf6e4ce89 - rustc::infer::InferCtxt::combine_fields::h8d78780cd9bc1f89
  13:     0x7ffbf6e537c4 - rustc::infer::InferCtxt::eq_types::h341a931021d55886
  14:     0x7ffbf6f15081 - rustc::traits::fulfill::GlobalFulfilledPredicates::check_duplicate_trait::h93cb52b260fb1258
  15:     0x7ffbf6e51365 - rustc::infer::InferCtxt::commit_from::h79f349c198c8b4f0
  16:     0x7ffbf6f12969 - <rustc::traits::fulfill::FulfillProcessor<'a, 'b, 'gcx, 'tcx> as rustc_data_structures::obligation_forest::ObligationProcessor>::process_obligation::h80789c9225e6da16
  17:     0x7ffbf6f104a4 - rustc::traits::fulfill::FulfillmentContext::take_deferred_obligations::h59157437f621c52e
  18:     0x7ffbf6f0fdb7 - rustc::traits::fulfill::FulfillmentContext::select_where_possible::hedb3ea6dfe818e1e
  19:     0x7ffbf79ef1a5 - rustc_typeck::check::FnCtxt::field_ty::h387f0899108f3c54
  20:     0x7ffbf79edfac - rustc_typeck::check::FnCtxt::field_ty::h387f0899108f3c54
  21:     0x7ffbf79dd506 - rustc_typeck::check::check_drop_impls::h632d17e4d693e43d
  22:     0x7ffbf79d9db0 - rustc_typeck::check::check_item_bodies::h9a3914a42542ad06
  23:     0x7ffbf7a5d7a0 - rustc_typeck::check_crate::h26811b192a872b84
  24:     0x7ffbf9e15c7e - rustc_driver::driver::count_nodes::h80b2ce48c34d37f0
  25:     0x7ffbf9d663c6 - <unknown>
  26:     0x7ffbf9df13f6 - rustc_driver::driver::compile_input::hc2e887bda4c69183
  27:     0x7ffbf9e42dfb - rustc_driver::run_compiler::h94efe000e99b91da
  28:     0x7ffbf9d1efbe - <unknown>
  29:     0x7ffbf9a66c51 - _rust_maybe_catch_panic
  30:     0x7ffbf9d4c806 - <unknown>
  31:     0x7ffbf9a5e1ce - std::sys::imp::thread::Thread::new::hd3ea3fbc2b0bf083
  32:     0x7ffc1abd8363 - BaseThreadInitThunk

error: Could not compile `ice`.

To learn more, run the command again with --verbose.

Other example (possibly different bug):

#![feature(conservative_impl_trait)]

fn batches(n: &u32) -> impl Iterator<Item=&u32> {
    std::iter::empty()
}

fn main() {}

Output:

E:\mega3\projects\ice\ice>cargo build
   Compiling ice v0.1.0 (file:///E:/mega3/projects/ice/ice)
error: internal compiler error: unexpected panic

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

note: we would appreciate a bug report: https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md#bug-reports

note: run with `RUST_BACKTRACE=1` for a backtrace

thread 'rustc' panicked at 'assertion failed: !obligation.predicate.has_escaping_regions()', C:\bot\slave\nightly-dist-rustc-win-msvc-64\build\src\librustc\traits\select.rs:409
stack backtrace:
   0:     0x7ffbf9a60d58 - std::panicking::Location::line::ha91c35bc276d0b51
   1:     0x7ffbf9a601e2 - std::panicking::Location::line::ha91c35bc276d0b51
   2:     0x7ffbf9a63c1d - std::panicking::rust_panic_with_hook::hf12525c539cafb95
   3:     0x7ffbf6d12843 - <unknown>
   4:     0x7ffbf6f2236a - rustc::traits::select::SelectionContext::select::h1761016ce8ef2f1e
   5:     0x7ffbf6f1268d - <rustc::traits::fulfill::FulfillProcessor<'a, 'b, 'gcx, 'tcx> as rustc_data_structures::obligation_forest::ObligationProcessor>::process_obligation::h80789c9225e6da16
   6:     0x7ffbf6f104a4 - rustc::traits::fulfill::FulfillmentContext::take_deferred_obligations::h59157437f621c52e
   7:     0x7ffbf6f0fdb7 - rustc::traits::fulfill::FulfillmentContext::select_where_possible::hedb3ea6dfe818e1e
   8:     0x7ffbf783f1a5 - rustc_typeck::check::FnCtxt::field_ty::h387f0899108f3c54
   9:     0x7ffbf7838ea8 - rustc_typeck::check::FnCtxt::resolve_type_vars_with_obligations::h09ff96390f67faf0
  10:     0x7ffbf77de126 - rustc_typeck::check::demand::<impl rustc_typeck::check::FnCtxt<'a, 'gcx, 'tcx>>::demand_coerce::h839b40a8b211aade
  11:     0x7ffbf782ebba - <rustc_typeck::check::GatherLocalsVisitor<'a, 'gcx, 'tcx> as rustc::hir::intravisit::Visitor<'gcx>>::visit_pat::h8fcdbeae3dbc14f2
  12:     0x7ffbf782d4f3 - rustc_typeck::check::check_drop_impls::h632d17e4d693e43d
  13:     0x7ffbf7829db0 - rustc_typeck::check::check_item_bodies::h9a3914a42542ad06
  14:     0x7ffbf78ad7a0 - rustc_typeck::check_crate::h26811b192a872b84
  15:     0x7ffbf9e15c7e - rustc_driver::driver::count_nodes::h80b2ce48c34d37f0
  16:     0x7ffbf9d663c6 - <unknown>
  17:     0x7ffbf9df13f6 - rustc_driver::driver::compile_input::hc2e887bda4c69183
  18:     0x7ffbf9e42dfb - rustc_driver::run_compiler::h94efe000e99b91da
  19:     0x7ffbf9d1efbe - <unknown>
  20:     0x7ffbf9a66c51 - _rust_maybe_catch_panic
  21:     0x7ffbf9d4c806 - <unknown>
  22:     0x7ffbf9a5e1ce - std::sys::imp::thread::Thread::new::hd3ea3fbc2b0bf083
  23:     0x7ffc1abd8363 - BaseThreadInitThunk

error: Could not compile `ice`.

To learn more, run the command again with --verbose.

Meta

rustc 1.17.0-nightly (c49d10207 2017-02-07)
binary: rustc
commit-hash: c49d10207a7e105525fb3bd71c18fde6fc2f5aed
commit-date: 2017-02-07
host: x86_64-pc-windows-msvc
release: 1.17.0-nightly
LLVM version: 3.9

Metadata

Metadata

Assignees

No one assigned

    Labels

    C-bugCategory: This is a bug.I-ICEIssue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions