about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2020-02-24 18:06:42 +0900
committerYuki Okushi <huyuumi.dev@gmail.com>2020-02-24 18:06:42 +0900
commitf85b0c456f763a70a8eae0e4a9daf6a4005ef87a (patch)
tree39ac5e4955176f4904790796edbfffd66ccbbd2b
parent79cd224e758f603898b64308e849fbb9be6e6f4d (diff)
downloadrust-f85b0c456f763a70a8eae0e4a9daf6a4005ef87a.tar.gz
rust-f85b0c456f763a70a8eae0e4a9daf6a4005ef87a.zip
Remove use of `unwrap()` from save-analysis
-rw-r--r--src/librustc_save_analysis/lib.rs19
-rw-r--r--src/test/ui/assign-to-method.rs2
-rw-r--r--src/test/ui/assign-to-method.stderr4
-rw-r--r--src/test/ui/issues/issue-3763.rs2
-rw-r--r--src/test/ui/issues/issue-3763.stderr10
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;
    |                ^^^^^^^^^^^^^^^^^^^^