diff options
| author | marmeladema <xademax@gmail.com> | 2020-06-06 00:38:39 +0100 |
|---|---|---|
| committer | marmeladema <xademax@gmail.com> | 2020-06-06 00:39:18 +0100 |
| commit | 84e4777ae203c0ce93faad89abf4ab1f0b006af2 (patch) | |
| tree | 221233f5facc21b2e817878ec00e5f266c6cf16d | |
| parent | 826cb062a659f7b719a8a0ab1497a78229318aab (diff) | |
| download | rust-84e4777ae203c0ce93faad89abf4ab1f0b006af2.tar.gz rust-84e4777ae203c0ce93faad89abf4ab1f0b006af2.zip | |
save_analysis: fix ice in `get_expr_data`
| -rw-r--r-- | src/librustc_save_analysis/lib.rs | 10 | ||||
| -rw-r--r-- | src/test/ui/save-analysis/issue-73022.rs | 13 |
2 files changed, 20 insertions, 3 deletions
diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index 8c7731c18e9..0341b542526 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -534,10 +534,14 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { } } } - hir::ExprKind::Struct(hir::QPath::Resolved(_, path), ..) => { + hir::ExprKind::Struct(qpath, ..) => { + let segment = match qpath { + hir::QPath::Resolved(_, path) => path.segments.last().unwrap(), + hir::QPath::TypeRelative(_, segment) => segment, + }; match self.tables.expr_ty_adjusted(&hir_node).kind { ty::Adt(def, _) if !def.is_enum() => { - let sub_span = path.segments.last().unwrap().ident.span; + let sub_span = segment.ident.span; filter!(self.span_utils, sub_span); let span = self.span_from_span(sub_span); Some(Data::RefData(Ref { @@ -580,7 +584,7 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { } _ => { // FIXME - bug!(); + bug!("invalid expression: {:?}", expr); } } } diff --git a/src/test/ui/save-analysis/issue-73022.rs b/src/test/ui/save-analysis/issue-73022.rs new file mode 100644 index 00000000000..9ad89a319ba --- /dev/null +++ b/src/test/ui/save-analysis/issue-73022.rs @@ -0,0 +1,13 @@ +// build-pass +// compile-flags: -Zsave-analysis +enum Enum2 { + Variant8 { _field: bool }, +} + +impl Enum2 { + fn new_variant8() -> Enum2 { + Self::Variant8 { _field: true } + } +} + +fn main() {} |
