Fix ICE when accessing mutably an immutable enum

This commit is contained in:
Esteban Küber 2017-02-06 15:41:28 -08:00
parent 324b175174
commit df73bc9c9d
3 changed files with 33 additions and 1 deletions

View File

@ -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 {

View File

@ -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;
}

View File

@ -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