Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ICE (failed assertion) when taking mutable references to enum contents #23175

Closed
bluecube opened this issue Mar 8, 2015 · 2 comments
Closed
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️

Comments

@bluecube
Copy link

bluecube commented Mar 8, 2015

I tried this code:

enum Foo {
    NotLast(Box<Foo>),
    Last(u32)
}

fn x(tree: &mut Foo) {
    let mut current = tree;

    loop {
        match current {
            &mut Foo::NotLast(ref mut inner) => {
                current = &mut *inner;
            },
            &mut Foo::Last(ref mut val) => {
                *val = 1;
            },
        }
    }
}

fn main() {}

And got the following message:

error.rs:11:31: 11:44 error: cannot borrow `current.0` as mutable more than once at a time
error.rs:11             &mut Foo::NotLast(ref mut inner) => {
                                          ^~~~~~~~~~~~~
error.rs:11:31: 11:44 note: previous borrow of `current.0` occurs here; the mutable borrow prevents subsequent moves, borrows, or modification of `current.0` until the borrow ends
error.rs:11             &mut Foo::NotLast(ref mut inner) => {
                                          ^~~~~~~~~~~~~
error.rs:19:2: 19:2 note: previous borrow ends here
error.rs:6 fn x(tree: &mut Foo) {
...
error.rs:19 }
            ^
error.rs:12:17: 12:38 error: cannot assign to `current` because it is borrowed
error.rs:12                 current = &mut *inner;
                            ^~~~~~~~~~~~~~~~~~~~~
error.rs:11:31: 11:44 note: borrow of `current` occurs here
error.rs:11             &mut Foo::NotLast(ref mut inner) => {
                                          ^~~~~~~~~~~~~
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: `(left == right) && (right == left)` (left: `TyS { sty: ty_uint(u32), flags: 0, region_depth: 0 }`, right: `TyS { sty: ty_uniq(TyS { sty: ty_enum(DefId { krate: 0, node: 4 }, Substs { types: VecPerParamSpace {TypeSpace: [], SelfSpace: [], FnSpace: [], }, regions: NonerasedRegions(VecPerParamSpace {TypeSpace: [], SelfSpace: [], FnSpace: [], }) }), flags: 0, region_depth: 0 }), flags: 0, region_depth: 0 }`)', /tmp/portage/dev-lang/rust-1.0.0_alpha2/work/rustc-1.0.0-alpha.2/src/librustc_borrowck/borrowck/mod.rs:402

The snippet is probably wrong, but the assert should not fail

Meta

rustc 1.0.0-dev (built 2015-02-28)
binary: rustc
commit-hash: unknown
commit-date: unknown
build-date: 2015-02-28
host: x86_64-unknown-linux-gnu
release: 1.0.0-dev

Backtrace:

   1:     0x7fe4742d3c20 - sys::backtrace::write::h6db1343660ca93a2KlC
   2:     0x7fe4742f9900 - <unknown>
   3:     0x7fe474244d80 - rt::unwind::begin_unwind_inner::h734e583390472682RBL
   4:     0x7fe474245220 - rt::unwind::begin_unwind_fmt::hdaef33c302b47274nAL
   5:     0x7fe473478670 - <unknown>
   6:     0x7fe473476f70 - <unknown>
   7:     0x7fe473476e90 - <unknown>
   8:     0x7fe473463640 - borrowck::check_loans::CheckLoanCtxt<'a, 'tcx>.euv..Delegate<'tcx>::borrow::h2a13ad241eee66d6cja
   9:     0x7fe47346e160 - <unknown>
  10:     0x7fe47346e160 - <unknown>
  11:     0x7fe47346e160 - <unknown>
  12:     0x7fe47346dff0 - <unknown>
  13:     0x7fe473472670 - <unknown>
  14:     0x7fe4734761d0 - <unknown>
  15:     0x7fe473472670 - <unknown>
  16:     0x7fe4734761d0 - <unknown>
  17:     0x7fe47348e560 - <unknown>
  18:     0x7fe47348fa00 - <unknown>
  19:     0x7fe47348f450 - borrowck::check_crate::hdf41b3c11cb3508fzRe
  20:     0x7fe4748df1b0 - driver::phase_3_run_analysis_passes::h025b35dbe058134fgHa
  21:     0x7fe4748c5610 - driver::compile_input::ha5d27daf21872ba2Gba
  22:     0x7fe474993b50 - run_compiler::he50deb5aedf688fcZbc
  23:     0x7fe474992480 - <unknown>
  24:     0x7fe474991370 - <unknown>
  25:     0x7fe474356bc0 - <unknown>
  26:     0x7fe474356bb0 - rust_try
  27:     0x7fe474991670 - <unknown>
  28:     0x7fe4742e7650 - <unknown>
  29:     0x7fe46ef4bf40 - <unknown>
  30:     0x7fe473eca7d9 - clone
  31:                0x0 - <unknown>
@steveklabnik steveklabnik added the I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️ label Mar 8, 2015
@frewsxcv
Copy link
Member

Visiting for triage: this is still an issue

wheals added a commit to wheals/glacier that referenced this issue Oct 26, 2015
@arielb1
Copy link
Contributor

arielb1 commented Jun 11, 2016

Duplicate of #27844.

@arielb1 arielb1 closed this as completed Jun 11, 2016
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
I-ICE Issue: The compiler panicked, giving an Internal Compilation Error (ICE) ❄️
Projects
None yet
Development

No branches or pull requests

4 participants