Skip to content

Commit

Permalink
Rollup merge of rust-lang#39602 - estebank:fix-39544, r=eddyb
Browse files Browse the repository at this point in the history
Fix ICE when accessing mutably an immutable enum

Fix rust-lang#39544.
  • Loading branch information
frewsxcv authored Feb 9, 2017
2 parents f447c2b + df73bc9 commit e32e2d4
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
4 changes: 3 additions & 1 deletion src/librustc/middle/mem_categorization.rs
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,9 @@ impl<'tcx> cmt_<'tcx> {
Categorization::Downcast(ref cmt, _) => {
if let Categorization::Local(_) = cmt.cat {
if let ty::TyAdt(def, _) = self.ty.sty {
return def.struct_variant().find_field_named(name).map(|x| x.did);
if def.is_struct() {
return def.struct_variant().find_field_named(name).map(|x| x.did);
}
}
None
} else {
Expand Down
22 changes: 22 additions & 0 deletions src/test/ui/did_you_mean/issue-39544.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

enum X {
Y
}

struct Z {
x: X
}

fn main() {
let z = Z { x: X::Y };
let _ = &mut z.x;
}
8 changes: 8 additions & 0 deletions src/test/ui/did_you_mean/issue-39544.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
error: cannot borrow immutable field `z.x` as mutable
--> $DIR/issue-39544.rs:21:18
|
21 | let _ = &mut z.x;
| ^^^

error: aborting due to previous error

0 comments on commit e32e2d4

Please sign in to comment.