Skip to content

Commit

Permalink
Auto merge of #33859 - nrc:save-field-sub, r=pnkfelix
Browse files Browse the repository at this point in the history
save-analysis: be a bit more defensive with field sub-expressions

Prevents an ice with `(...).f` since the sub-expression is in the AST but not the HIR.

We could actually do better in this specific case, but it doesn't seem worth it.
  • Loading branch information
bors committed May 29, 2016
2 parents 8f3e8c7 + c8ee3f2 commit a2a8694
Showing 1 changed file with 9 additions and 3 deletions.
12 changes: 9 additions & 3 deletions src/librustc_save_analysis/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pub mod external_data;
pub mod span_utils;

use rustc::hir;
use rustc::hir::map::NodeItem;
use rustc::hir::map::{Node, NodeItem};
use rustc::hir::def::Def;
use rustc::hir::def_id::DefId;
use rustc::session::config::CrateType::CrateTypeExecutable;
Expand Down Expand Up @@ -391,7 +391,14 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
}
match expr.node {
ast::ExprKind::Field(ref sub_ex, ident) => {
let hir_node = self.tcx.map.expect_expr(sub_ex.id);
let hir_node = match self.tcx.map.find(sub_ex.id) {
Some(Node::NodeExpr(expr)) => expr,
_ => {
debug!("Missing or weird node for sub-expression {} in {:?}",
sub_ex.id, expr);
return None;
}
};
match self.tcx.expr_ty_adjusted(&hir_node).sty {
ty::TyStruct(def, _) => {
let f = def.struct_variant().field_named(ident.node.name);
Expand All @@ -411,7 +418,6 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
}
}
ast::ExprKind::Struct(ref path, _, _) => {
let hir_node = self.tcx.map.expect_expr(expr.id);
match self.tcx.expr_ty_adjusted(&hir_node).sty {
ty::TyStruct(def, _) => {
let sub_span = self.span_utils.span_for_last_ident(path.span);
Expand Down

0 comments on commit a2a8694

Please sign in to comment.