diff options
| author | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-02-24 18:06:42 +0900 |
|---|---|---|
| committer | Yuki Okushi <huyuumi.dev@gmail.com> | 2020-02-24 18:06:42 +0900 |
| commit | f85b0c456f763a70a8eae0e4a9daf6a4005ef87a (patch) | |
| tree | 39ac5e4955176f4904790796edbfffd66ccbbd2b | |
| parent | 79cd224e758f603898b64308e849fbb9be6e6f4d (diff) | |
| download | rust-f85b0c456f763a70a8eae0e4a9daf6a4005ef87a.tar.gz rust-f85b0c456f763a70a8eae0e4a9daf6a4005ef87a.zip | |
Remove use of `unwrap()` from save-analysis
| -rw-r--r-- | src/librustc_save_analysis/lib.rs | 19 | ||||
| -rw-r--r-- | src/test/ui/assign-to-method.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/assign-to-method.stderr | 4 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-3763.rs | 2 | ||||
| -rw-r--r-- | src/test/ui/issues/issue-3763.stderr | 10 |
5 files changed, 22 insertions, 15 deletions
diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs index b253559dd5c..a46be2dcd82 100644 --- a/src/librustc_save_analysis/lib.rs +++ b/src/librustc_save_analysis/lib.rs @@ -533,14 +533,17 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> { match self.tables.expr_ty_adjusted(&hir_node).kind { ty::Adt(def, _) if !def.is_enum() => { let variant = &def.non_enum_variant(); - let index = self.tcx.find_field_index(ident, variant).unwrap(); - filter!(self.span_utils, ident.span); - let span = self.span_from_span(ident.span); - return Some(Data::RefData(Ref { - kind: RefKind::Variable, - span, - ref_id: id_from_def_id(variant.fields[index].did), - })); + if let Some(index) = self.tcx.find_field_index(ident, variant) { + filter!(self.span_utils, ident.span); + let span = self.span_from_span(ident.span); + return Some(Data::RefData(Ref { + kind: RefKind::Variable, + span, + ref_id: id_from_def_id(variant.fields[index].did), + })); + } + + None } ty::Tuple(..) => None, _ => { diff --git a/src/test/ui/assign-to-method.rs b/src/test/ui/assign-to-method.rs index 95f066c382c..dec09625225 100644 --- a/src/test/ui/assign-to-method.rs +++ b/src/test/ui/assign-to-method.rs @@ -1,3 +1,5 @@ +// compile-flags: -Zsave-analysis + struct Cat { meows : usize, diff --git a/src/test/ui/assign-to-method.stderr b/src/test/ui/assign-to-method.stderr index feceadb6722..b9ef49acd6d 100644 --- a/src/test/ui/assign-to-method.stderr +++ b/src/test/ui/assign-to-method.stderr @@ -1,5 +1,5 @@ error[E0615]: attempted to take value of method `speak` on type `Cat` - --> $DIR/assign-to-method.rs:20:8 + --> $DIR/assign-to-method.rs:22:8 | LL | nyan.speak = || println!("meow"); | ^^^^^ @@ -7,7 +7,7 @@ LL | nyan.speak = || println!("meow"); = help: methods are immutable and cannot be assigned to error[E0615]: attempted to take value of method `speak` on type `Cat` - --> $DIR/assign-to-method.rs:21:8 + --> $DIR/assign-to-method.rs:23:8 | LL | nyan.speak += || println!("meow"); | ^^^^^ diff --git a/src/test/ui/issues/issue-3763.rs b/src/test/ui/issues/issue-3763.rs index 5d17a30ab36..a220151c416 100644 --- a/src/test/ui/issues/issue-3763.rs +++ b/src/test/ui/issues/issue-3763.rs @@ -1,3 +1,5 @@ +// compile-flags: -Zsave-analysis + mod my_mod { pub struct MyStruct { priv_field: isize diff --git a/src/test/ui/issues/issue-3763.stderr b/src/test/ui/issues/issue-3763.stderr index 50169286b1c..3db962142b5 100644 --- a/src/test/ui/issues/issue-3763.stderr +++ b/src/test/ui/issues/issue-3763.stderr @@ -1,29 +1,29 @@ error[E0616]: field `priv_field` of struct `my_mod::MyStruct` is private - --> $DIR/issue-3763.rs:15:19 + --> $DIR/issue-3763.rs:17:19 | LL | let _woohoo = (&my_struct).priv_field; | ^^^^^^^^^^^^^^^^^^^^^^^ error[E0616]: field `priv_field` of struct `my_mod::MyStruct` is private - --> $DIR/issue-3763.rs:18:19 + --> $DIR/issue-3763.rs:20:19 | LL | let _woohoo = (Box::new(my_struct)).priv_field; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0624]: method `happyfun` is private - --> $DIR/issue-3763.rs:21:18 + --> $DIR/issue-3763.rs:23:18 | LL | (&my_struct).happyfun(); | ^^^^^^^^ error[E0624]: method `happyfun` is private - --> $DIR/issue-3763.rs:23:27 + --> $DIR/issue-3763.rs:25:27 | LL | (Box::new(my_struct)).happyfun(); | ^^^^^^^^ error[E0616]: field `priv_field` of struct `my_mod::MyStruct` is private - --> $DIR/issue-3763.rs:24:16 + --> $DIR/issue-3763.rs:26:16 | LL | let nope = my_struct.priv_field; | ^^^^^^^^^^^^^^^^^^^^ |
