Skip to content

ICE: deref invoked on expr of illegal type #13044

Closed
@alexcrichton

Description

@alexcrichton
// baz.rs

pub struct Foo<T> {
    t: T,
}
pub struct Bar<'a, T> {
    other: &'a Foo<T>,
}

impl<T:Clone> Foo<T> {
    pub fn get(&self) -> T {
        self.borrow().clone() // this causes the bug, (*self.borrow()).clone() does not cause the bug
    }
}

impl<T> Foo<T> {
    pub fn borrow<'a>(&'a self) -> Bar<'a, T> {
        Bar { other: self }
    }
}

impl<'a, T> Deref<T> for Bar<'a, T> {
    fn deref<'a>(&'a self) -> &'a T { &self.other.t }
}
// bar.rs
extern crate baz;

pub fn main() {
    let a = baz::Foo { t: 3 };
    a.get();
}
$ rustc baz.rs --crate-type=lib
$ rustc bar.rs -L. --crate-type=lib
bar.rs:1:1: 1:1 error: internal compiler error: deref invoked on expr of illegal type baz::Bar<,int>
bar.rs:1 extern crate baz;
         ^
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 '~Any', /home/alex/code/rust2/src/libsyntax/diagnostic.rs:67
stack backtrace:
   1:     0x7fc477b70600 - rt::backtrace::imp::write::h0a3da0d1a2b69852CFb::v0.10.pre
   2:     0x7fc477ad5e10 - rt::unwind::begin_unwind_inner::h47835116a042632f6fb::v0.10.pre
   3:     0x7fc4769936d0 - rt::unwind::begin_unwind::h0455dc0cf4617207WJY::v0.10.pre
   4:     0x7fc476993600 - diagnostic::SpanHandler::span_bug::h87a637929a2ba539J2b::v0.10.pre
   5:     0x7fc4787d0db0 - driver::session::Session::span_bug::h3e329875996d4503iNg::v0.10.pre
   6:     0x7fc4787fd180 - middle::trans::expr::deref_once::hfc675e5cf83d870djNg::v0.10.pre
   7:     0x7fc4787adc20 - middle::trans::expr::trans::hb9d355dc1389919b3re::v0.10.pre
   8:     0x7fc4787df4a0 - middle::trans::callee::trans_args::h801ef5329faee7b88Yd::v0.10.pre
   9:     0x7fc4787dbad0 - middle::trans::callee::trans_call_inner::hf880ecf3afa1b9e3cMd::v0.10.pre
  10:     0x7fc4787dd310 - middle::trans::callee::trans_method_call::h4181e13357fc6c884Ed::v0.10.pre
  11:     0x7fc4787e5330 - middle::trans::expr::trans_rvalue_dps_unadjusted::h7fce2857982094dd0ef::v0.10.pre
  12:     0x7fc4787ab170 - middle::trans::expr::trans_into::h875b09228cc9c1bd0ne::v0.10.pre
  13:     0x7fc4787ac220 - middle::trans::controlflow::trans_block::hac82528c93237c1e43a::v0.10.pre
  14:     0x7fc47884ee90 - middle::trans::base::trans_closure::h5d95a9706f2fbe34nwo::v0.10.pre
  15:     0x7fc47877df00 - middle::trans::base::trans_fn::h89bd72d9d81085f7bEo::v0.10.pre
  16:     0x7fc47877e400 - middle::trans::monomorphize::monomorphic_fn::h1a20bed6a8247e12hma::v0.10.pre
  17:     0x7fc4787d4030 - middle::trans::callee::trans_fn_ref_with_vtables::hdd0050d098541e109ld::v0.10.pre
  18:     0x7fc4787d0e80 - middle::trans::callee::trans_fn_ref::h118979777dc53710kfd::v0.10.pre
  19:     0x7fc4787dda50 - middle::trans::meth::trans_method_callee::h18e3f0a6a2686880Muv::v0.10.pre
  20:     0x7fc4787dd9e0 - middle::trans::callee::trans_method_call::closure.56544
  21:     0x7fc4787dbad0 - middle::trans::callee::trans_call_inner::hf880ecf3afa1b9e3cMd::v0.10.pre
  22:     0x7fc4787dd310 - middle::trans::callee::trans_method_call::h4181e13357fc6c884Ed::v0.10.pre
  23:     0x7fc4787e5330 - middle::trans::expr::trans_rvalue_dps_unadjusted::h7fce2857982094dd0ef::v0.10.pre
  24:     0x7fc4787ab170 - middle::trans::expr::trans_into::h875b09228cc9c1bd0ne::v0.10.pre
  25:     0x7fc4787aa670 - middle::trans::controlflow::trans_stmt::hf5d8676d4091ff500Za::v0.10.pre
  26:     0x7fc4787ac220 - middle::trans::controlflow::trans_block::hac82528c93237c1e43a::v0.10.pre
  27:     0x7fc47884ee90 - middle::trans::base::trans_closure::h5d95a9706f2fbe34nwo::v0.10.pre
  28:     0x7fc47877df00 - middle::trans::base::trans_fn::h89bd72d9d81085f7bEo::v0.10.pre
  29:     0x7fc478778e40 - middle::trans::base::trans_item::hc3e103cd7fd45af3MPo::v0.10.pre
  30:     0x7fc4788538f0 - middle::trans::base::trans_mod::h8284b7b2a3c44204XUo::v0.10.pre
  31:     0x7fc47885d560 - middle::trans::base::trans_crate::h06075c2881b3db50Rvq::v0.10.pre
  32:     0x7fc478ea9a20 - driver::driver::phase_4_translate_to_llvm::h0e9ee050f04a37a04bf::v0.10.pre
  33:     0x7fc478eabbf0 - driver::driver::compile_input::h25694f7d6d3db52c2rf::v0.10.pre
  34:     0x7fc478ecf9c0 - run_compiler::h29c4ca08e9ca1aa715m::v0.10.pre
  35:     0x7fc478ee2ca0 - main_args::closure.91093
  36:     0x7fc478ee15d0 - monitor::closure.90978
  37:     0x7fc478edcfa0 - task::TaskBuilder::try::closure.90789
  38:     0x7fc478207340 - task::spawn_opts::closure.7482
  39:     0x7fc477b6bd20 - rt::task::Task::run::closure.40664
  40:     0x7fc477b77110 - rust_try
  41:     0x7fc477b6bb60 - rt::task::Task::run::h62fd53fd1182d536d58::v0.10.pre
  42:     0x7fc4782070e0 - task::spawn_opts::closure.7455
  43:     0x7fc477b6f0c0 - rt::thread::thread_start::h3097fcbfdebaed97FL9::v0.10.pre
  44:     0x7fc4750fcea0 - start_thread
  45:     0x7fc477795999 - __clone
  46:                0x0 - <unknown>

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