Skip to content

ICE: deref invoked on expr of illegal type #13044

Closed

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>

Activity

  1. alexcrichton commented on Mar 20, 2014

    @alexcrichton
    MemberAuthor

    minimized case posted.

  2. added a commit that references this issue on Aug 23, 2022
  3. added a commit that references this issue on Jul 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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