Skip to content

ICE on calling lifetime-generic trait method #13645

@dwrensha

Description

@dwrensha

Updated minimal test case

creduce reduced this down to:

trait FromStructReader<'a> { }
trait ResponseHook {
     fn get<'a, T: FromStructReader<'a>>(&'a self);
}
fn foo(res : Box<ResponseHook>) { res.get }
fn main() {}
error: internal compiler error: unexpected failure
note: the compiler hit an unexpected failure path. this is a bug.
note: we would appreciate a bug report: http://static.rust-lang.org/doc/master/complement-bugreport.html
note: run with `RUST_BACKTRACE=1` for a backtrace
task 'rustc' failed at 'OwnedSlice: index out of bounds', /Users/erickt/rust/rust-master/src/libstd/option.rs:164
stack backtrace:
   1:        0x10c1bf5b5 - rt::backtrace::imp::write::hae9e0c8649bd0651E1F::v0.11.pre
   2:        0x10c12c6ae - rt::unwind::begin_unwind_inner::hd5684ca19e9518eaIBF::v0.11.pre
   3:        0x109412428 - rt::unwind::begin_unwind::h6306384670831263120::v0.11.pre
   4:        0x1095d0e5c - middle::subst::ty..Region.Subst::subst_spanned::ha6be338a3f2341abYkR::v0.11.pre
   5:        0x1096b96e2 - middle::typeck::check::method::LookupContext<'a>::push_inherent_candidates_from_object::closure.68413
   6:        0x1096ba801 - middle::typeck::check::method::LookupContext<'a>::push_inherent_candidates_from_bounds_inner::closure.68423
   7:        0x10959c523 - middle::ty::each_bound_trait_and_supertraits::hf62d6da34182ab08B3P::v0.11.pre
   8:        0x1096b6b97 - middle::typeck::check::method::LookupContext<'a>::push_inherent_candidates::closure.68388
   9:        0x1096b618a - middle::typeck::check::autoderef::h14491325893577732316::v0.11.pre
  10:        0x1096b1607 - middle::typeck::check::method::lookup::hfa80a1cd76ce18fcbX5::v0.11.pre
  11:        0x109703b6b - middle::typeck::check::check_expr_with_unifier::check_field::hfdc64548ea59d3e8KFb::v0.11.pre
  12:        0x1096f1f74 - middle::typeck::check::check_expr_with_unifier::h4e2897dbe4ea38cclIa::v0.11.pre
  13:        0x1096d0665 - middle::typeck::check::check_block_with_expected::hc40e54c79cbf136ak7c::v0.11.pre
  14:        0x1096cbc6a - middle::typeck::check::check_fn::h110e9312e887d6depv8::v0.11.pre
  15:        0x1096cb45a - middle::typeck::check::check_bare_fn::h63ca38b0c972d0e4Wk8::v0.11.pre
  16:        0x1096c408f - middle::typeck::check::check_item::hb9ceb87f27759b1a0R8::v0.11.pre
  17:        0x1096cb1dd - middle::typeck::check::check_item_types::hb17499c25494b6f0ek8::v0.11.pre
  18:        0x1098033d6 - util::common::time::h17646179309215505883::v0.11.pre
  19:        0x10980244d - middle::typeck::check_crate::hc361b33fe1242173Qgw::v0.11.pre
  20:        0x109c2b529 - driver::driver::phase_3_run_analysis_passes::h0f47e246146a1253bei::v0.11.pre
  21:        0x109c30fe2 - driver::driver::compile_input::h2c3dbe74f799efa1gEi::v0.11.pre
  22:        0x109c57211 - run_compiler::h6db406e36b756e80saq::v0.11.pre
  23:        0x109c6ed8d - main_args::closure.93972
  24:        0x109c6d502 - monitor::closure.93850
  25:        0x109c6805b - task::TaskBuilder::try::closure.93616
  26:        0x10b7f7b6c - task::spawn_opts::closure.7397
  27:        0x10c1b6c18 - rt::task::Task::run::closure.28413
  28:        0x10c1d7b7c - rust_try
  29:        0x10c1b6a97 - rt::task::Task::run::hf99ca2c1546bbfb0XqD::v0.11.pre
  30:        0x10b7f79ef - task::spawn_opts::closure.7369
  31:        0x10c1bdf16 - rt::thread::thread_start::h61d07f070734480188D::v0.11.pre
  32:     0x7fff90436899 - _pthread_body
  33:     0x7fff9043672a - _pthread_struct_init

Original issue

I observe this behavior on a27dc53

// lifetimes_bug.rs

pub struct StructReader<'a>;

pub trait FromStructReader<'a> {
    fn new(struct_reader : StructReader<'a>) -> Self;
}

pub trait ResponseHook {
    fn get<'a, T : FromStructReader<'a>>(&'a mut self) -> T;
}

pub struct FooReader<'a>;

impl <'a> FromStructReader<'a> for FooReader<'a> {
    fn new(reader : StructReader<'a>) -> FooReader { fail!() }
}


pub fn foo(res : ~ResponseHook) {
    let message : FooReader = res.get();
}

pub fn main () {}
$ RUST_BACKTRACE=1 rustc lifetimes_bug.rs 
error: internal compiler error: unexpected failure
note: the compiler hit an unexpected failure path. this is a bug.
note: we would appreciate a bug report: http://static.rust-lang.org/doc/master/complement-bugreport.html
note: run with `RUST_BACKTRACE=1` for a backtrace
task 'rustc' failed at 'OwnedSlice: index out of bounds', /Users/dwrensha/Code/rust/src/libstd/option.rs:245
stack backtrace:
   1:        0x1111e4b94 - rt::backtrace::imp::write::h65f1256a33d396dbpCa::v0.11.pre
   2:        0x111146d56 - rt::unwind::begin_unwind_inner::h68e26ce721c217dcvca::v0.11.pre
   3:        0x10e505358 - rt::unwind::begin_unwind::h17471810618184668886::v0.11.pre
   4:        0x10e6c03dc - middle::subst::ty..Region.Subst::subst_spanned::h061348fcc8a3ece3DkR::v0.11.pre
   5:        0x10e79e8e9 - middle::typeck::check::method::LookupContext<'a>::push_inherent_candidates_from_object::closure.66569
   6:        0x10e79fa3e - middle::typeck::check::method::LookupContext<'a>::push_inherent_candidates_from_bounds_inner::closure.66579
   7:        0x10e68d3de - middle::ty::each_bound_trait_and_supertraits::hfe28db8418c587ebo7P::v0.11.pre
   8:        0x10e79c776 - middle::typeck::check::method::LookupContext<'a>::push_inherent_candidates::closure.66552
   9:        0x10e79be16 - middle::typeck::check::autoderef::h10261356397395339900::v0.11.pre
  10:        0x10e797851 - middle::typeck::check::method::lookup::hd725f3793f7433cf0l5::v0.11.pre
  11:        0x10e7d199b - middle::typeck::check::check_expr_with_unifier::h8b77cb3547020c08rG9::v0.11.pre
  12:        0x10e7ed7fb - middle::typeck::check::check_decl_local::hc27d1d289641ca08TUb::v0.11.pre
  13:        0x10e7edac3 - middle::typeck::check::check_stmt::hcf77f7a6bd15142aPWb::v0.11.pre
  14:        0x10e7b2425 - middle::typeck::check::check_block_with_expected::hbcb129bd7100e89bM0b::v0.11.pre
  15:        0x10e7ae0ca - middle::typeck::check::check_fn::h8078ea7062877f68fB7::v0.11.pre
  16:        0x10e7ad972 - middle::typeck::check::check_bare_fn::hbde6662db750db647q7::v0.11.pre
  17:        0x10e7a8ffa - middle::typeck::check::check_item::hdfd70bc46b3ec36f2R7::v0.11.pre
  18:        0x10e7ad7ee - middle::typeck::check::check_item_types::hca42b4c9848153d9Hq7::v0.11.pre
  19:        0x10e8eceef - util::common::time::h5322048705425395158::v0.11.pre
  20:        0x10e8ebc3b - middle::typeck::check_crate::h9726397e87c26b8daKu::v0.11.pre
  21:        0x10ed06ce6 - driver::driver::phase_3_run_analysis_passes::h1ad14d2902c72a9eIgf::v0.11.pre
  22:        0x10ed0dfab - driver::driver::compile_input::hc30f45f225ac1fabDFf::v0.11.pre
  23:        0x10ed33220 - run_compiler::hb59372a05e576d1e3en::v0.11.pre
  24:        0x10ed4709d - main_args::closure.92250
  25:        0x10ed45432 - monitor::closure.92128
  26:        0x10ed40f7b - task::TaskBuilder::try::closure.91894
  27:        0x110f4164c - task::spawn_opts::closure.7784
  28:        0x1111dfca8 - rt::task::Task::run::closure.40002
  29:        0x1111ea8bc - rust_try
  30:        0x1111dfb27 - rt::task::Task::run::hc3d881f8ed4cd962x37::v0.11.pre
  31:        0x110f414cf - task::spawn_opts::closure.7756
  32:        0x1111e3576 - rt::thread::thread_start::h8d4bbdacad652bfeiI8::v0.11.pre
  33:     0x7fff87863899 - _pthread_body
  34:     0x7fff8786372a - _pthread_struct_init

cc @pnkfelix @nikomatsakis

Metadata

Metadata

Assignees

No one assigned

    Labels

    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