rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
98.86k stars 12.77k forks source link

[ICE]: Cannot relate bound region #16747

Closed crumblingstatue closed 10 years ago

crumblingstatue commented 10 years ago

This code

trait ListItem<'a> {
    fn list_name() -> &'a str;
}

struct List<'a, T: ListItem<'a>> {
    slice: &'a [T]
}

impl<'a, T: ListItem<'a>> Collection for List<'a, T> {
    fn len(&self) -> uint {
        0
    }
}

fn main() {
}

Causes this ICE

test.rs:9:1: 13:2 error: internal compiler error: cannot relate bound region: ReEarlyBound(29, TypeSpace, 0, 'a) <= ReFree(25, BrNamed(syntax::ast::DefId{krate: 0u32, node: 29u32}, 'a))
test.rs:9 impl<'a, T: ListItem<'a>> Collection for List<'a, T> {
test.rs:10     fn len(&self) -> uint {
test.rs:11         0
test.rs:12     }
test.rs:13 }

RUSTC_BACKTRACE=1 output

task 'rustc' failed at 'Box<Any>', /home/rustbuild/src/rust-buildbot/slave/nightly-linux/build/src/libsyntax/ast_util.rs:776

stack backtrace:
   1:     0x7f998a9c7460 - rt::backtrace::imp::write::h18b753371f3f9ce4UYq
   2:     0x7f998a9ca610 - failure::on_fail::h8b148d7ea01ad414Bkr
   3:     0x7f998b195510 - unwind::begin_unwind_inner::h95325e05b1285682pie
   4:     0x7f9987478890 - unwind::begin_unwind::h11886784450375267201
   5:     0x7f99874787e0 - diagnostic::SpanHandler::span_bug::h7e01102b77dc6ccfdqF
   6:     0x7f998b720150 - driver::session::Session::span_bug::h64271874b664f154Jty
   7:     0x7f998bbb2800 - middle::typeck::infer::region_inference::RegionVarBindings<'a>::make_subregion::h4d9c94c5e2a52f9fXj4
   8:     0x7f998bb9a490 - middle::typeck::infer::sub::Sub<'f>.Combine::regions::h01a279f6c3dd5fbfQJ6
   9:     0x7f998bb9a800 - middle::typeck::infer::sub::Sub<'f>.Combine::contraregions::hdda7ddc886cfbc7fgJ6
  10:     0x7f998bbc42c0 - middle::typeck::infer::combine::Combine::substs::h6143560546622796331
  11:     0x7f998bbecee0 - middle::typeck::infer::mk_sub_trait_refs::closure.126361
  12:     0x7f998bbecc10 - middle::typeck::infer::InferCtxt<'a>::commit_if_ok::closure.126353
  13:     0x7f998bbeca60 - middle::typeck::infer::InferCtxt<'a>::commit_unconditionally::h84882112510864248
  14:     0x7f998ba8fa40 - middle::typeck::infer::mk_sub_trait_refs::hd5dd1a653add0c8fLFb
  15:     0x7f998ba8f3b0 - middle::typeck::check::vtable::relate_trait_refs::hd2353c5413fef28cRpK
  16:     0x7f998ba939a0 - middle::typeck::check::vtable::lookup_vtable_from_bounds::closure.121800
  17:     0x7f998ba5ce10 - middle::ty::each_bound_trait_and_supertraits::h200637ff3ab6a085cvH
  18:     0x7f998ba8d630 - middle::typeck::check::vtable::lookup_vtables_for_param::closure.121773
  19:     0x7f998ba5ce10 - middle::ty::each_bound_trait_and_supertraits::h200637ff3ab6a085cvH
  20:     0x7f998ba8d0b0 - middle::typeck::check::vtable::lookup_vtables_for_param::h4434ba5a22fe5e6dibK
  21:     0x7f998ba8b0b0 - middle::typeck::check::vtable::lookup_vtables::h4da8aebbea78be1dk5J
  22:     0x7f998b812080 - middle::typeck::check::vtable::check_param_bounds::h504b9dc2d6d8e4a7zLL
  23:     0x7f998b811d90 - middle::kind::check_bounds_on_structs_or_enums_in_type_if_possible::closure.110610
  24:     0x7f998ba59290 - middle::ty::walk_ty::closure.120581
  25:     0x7f998b7f80b0 - middle::ty::maybe_walk_ty::h867184bbacff06f7dOD
  26:     0x7f998b808c30 - middle::kind::check_bounds_on_structs_or_enums_in_type_if_possible::h826a0efdd31cf77fSPw
  27:     0x7f998b8007a0 - middle::kind::check_item::h5a6fe2387dac9563Agw
  28:     0x7f998b8041c0 - middle::kind::check_crate::h3dde9f98fbaa1ff7a4v
  29:     0x7f998b56e940 - util::common::time::h630719443776585502
  30:     0x7f998bd92a60 - driver::driver::phase_3_run_analysis_passes::ha7a07a1607fe33bfuWw
  31:     0x7f998bd8dc00 - driver::driver::compile_input::h99199d0ae0e721f6AIw
  32:     0x7f998be21cd0 - driver::run_compiler::h23c8c067c597dffdtfA
  33:     0x7f998be21be0 - driver::main_args::closure.137253
  34:     0x7f998be33ab0 - task::TaskBuilder<S>::try_future::closure.138373
  35:     0x7f998be338b0 - task::TaskBuilder<S>::spawn_internal::closure.138350
  36:     0x7f998c855dc0 - task::spawn_opts::closure.8268
  37:     0x7f998b1eda90 - rust_try_inner
  38:     0x7f998b1eda80 - rust_try
  39:     0x7f998b192b80 - unwind::try::h897530fe9a04a6a3F6d
  40:     0x7f998b192920 - task::Task::run::ha1dfd395f272d95cZcd
  41:     0x7f998c855b80 - task::spawn_opts::closure.8214
  42:     0x7f998b194760 - thread::thread_start::hb2d1975aedb783e1LBd
  43:     0x7f998a45f060 - start_thread
  44:     0x7f998ae62489 - __clone
  45:                0x0 - <unknown>

rustc -v: rustc 0.12.0-pre-nightly (833277e2d 2014-08-25 00:00:59 +0000) uname -a: Linux 3.16.1-1-ARCH #1 SMP PREEMPT Thu Aug 14 07:40:19 CEST 2014 x86_64 GNU/Linux

flugsio commented 10 years ago

Duplicate? https://github.com/rust-lang/rust/issues/16596

This code and the code in that issue gives no ICE on 0.11.0

JustAPerson commented 10 years ago

The given example no longer causes an ICE on master. http://is.gd/n0Ovjs Output:

<anon>:5:1: 7:2 error: the parameter type `T` may not live long enough; consider adding an explicit lifetime bound `T:'a`...
<anon>:5 struct List<'a, T: ListItem<'a>> {
<anon>:6     slice: &'a [T],
<anon>:7 }
<anon>:5:1: 7:2 note: ...so that the reference type `&'a [T]` does not outlive the data it points at
<anon>:5 struct List<'a, T: ListItem<'a>> {
<anon>:6     slice: &'a [T],
<anon>:7 }
error: aborting due to previous error

However, following the prescribed advice of the compiler does seem to reproduce the ICE. http://is.gd/PKO0dk Output:

<anon>:9:1: 13:2 error: internal compiler error: cannot relate bound region: ReEarlyBound(31, TypeSpace, 0, 'a) <= ReFree(26, BrNamed(syntax::ast::DefId{krate: 0u32, node: 31u32}, 'a))
<anon>:9 impl<'a, T: 'a + ListItem<'a>> Collection for List<'a, T> {
<anon>:10     fn len(&self) -> uint {
<anon>:11         0
<anon>:12     }
<anon>:13 }
note: the compiler hit an unexpected failure path. this is a bug.
note: we would appreciate a bug report: http://doc.rust-lang.org/complement-bugreport.html
note: run with `RUST_BACKTRACE=1` for a backtrace
task 'rustc' failed at 'Box<Any>', /build/rust-git/src/rust/src/libsyntax/ast_util.rs:784