about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2020-03-08 11:51:04 +0100
committerGitHub <noreply@github.com>2020-03-08 11:51:04 +0100
commitf459d2ed99f446a95dff044b980582895bd8782a (patch)
tree3f2ad7be617da853a0cdb7393c92896ec10510a4 /src
parentf943349eafaa75a60c05b0c84dcdb771d0eae8c9 (diff)
parent5307edce6faa5c675dc57a1dd3b4fdcbf1ebdc7d (diff)
downloadrust-f459d2ed99f446a95dff044b980582895bd8782a.tar.gz
rust-f459d2ed99f446a95dff044b980582895bd8782a.zip
Rollup merge of #69422 - JohnTitor:remove-unwrap, r=Xanewok
Remove use of `unwrap()` from save-analysis

Fix #69409, fix #69416
Diffstat (limited to 'src')
-rw-r--r--src/librustc_save_analysis/lib.rs7
-rw-r--r--src/test/ui/assign-to-method.rs22
-rw-r--r--src/test/ui/issues/issue-3763.rs3
-rw-r--r--src/test/ui/issues/issue-3763.stderr10
-rw-r--r--src/test/ui/methods/assign-to-method.rs24
-rw-r--r--src/test/ui/methods/assign-to-method.stderr (renamed from src/test/ui/assign-to-method.stderr)12
6 files changed, 43 insertions, 35 deletions
diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs
index ec251c224b6..88bfe7661e2 100644
--- a/src/librustc_save_analysis/lib.rs
+++ b/src/librustc_save_analysis/lib.rs
@@ -532,13 +532,16 @@ 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),
+                            ref_id: self
+                                .tcx
+                                .find_field_index(ident, variant)
+                                .map(|index| id_from_def_id(variant.fields[index].did))
+                                .unwrap_or_else(|| null_id()),
                         }));
                     }
                     ty::Tuple(..) => None,
diff --git a/src/test/ui/assign-to-method.rs b/src/test/ui/assign-to-method.rs
deleted file mode 100644
index 95f066c382c..00000000000
--- a/src/test/ui/assign-to-method.rs
+++ /dev/null
@@ -1,22 +0,0 @@
-struct Cat {
-  meows : usize,
-
-  how_hungry : isize,
-}
-
-impl Cat {
-    pub fn speak(&self) { self.meows += 1; }
-}
-
-fn cat(in_x : usize, in_y : isize) -> Cat {
-    Cat {
-        meows: in_x,
-        how_hungry: in_y
-    }
-}
-
-fn main() {
-  let nyan : Cat = cat(52, 99);
-  nyan.speak = || println!("meow"); //~ ERROR attempted to take value of method
-  nyan.speak += || println!("meow"); //~ ERROR attempted to take value of method
-}
diff --git a/src/test/ui/issues/issue-3763.rs b/src/test/ui/issues/issue-3763.rs
index 5d17a30ab36..3494df37fe7 100644
--- a/src/test/ui/issues/issue-3763.rs
+++ b/src/test/ui/issues/issue-3763.rs
@@ -1,3 +1,6 @@
+// compile-flags: -Zsave-analysis
+// Also regression test for #69416
+
 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..873f69d390e 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:18: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:21: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:24:18
    |
 LL |     (&my_struct).happyfun();
    |                  ^^^^^^^^
 
 error[E0624]: method `happyfun` is private
-  --> $DIR/issue-3763.rs:23:27
+  --> $DIR/issue-3763.rs:26: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:27:16
    |
 LL |     let nope = my_struct.priv_field;
    |                ^^^^^^^^^^^^^^^^^^^^
diff --git a/src/test/ui/methods/assign-to-method.rs b/src/test/ui/methods/assign-to-method.rs
new file mode 100644
index 00000000000..85beaee8df0
--- /dev/null
+++ b/src/test/ui/methods/assign-to-method.rs
@@ -0,0 +1,24 @@
+// compile-flags: -Zsave-analysis
+// Also regression test for #69409
+
+struct Cat {
+    meows : usize,
+    how_hungry : isize,
+}
+
+impl Cat {
+    pub fn speak(&self) { self.meows += 1; }
+}
+
+fn cat(in_x : usize, in_y : isize) -> Cat {
+    Cat {
+        meows: in_x,
+        how_hungry: in_y
+    }
+}
+
+fn main() {
+    let nyan : Cat = cat(52, 99);
+    nyan.speak = || println!("meow"); //~ ERROR attempted to take value of method
+    nyan.speak += || println!("meow"); //~ ERROR attempted to take value of method
+}
diff --git a/src/test/ui/assign-to-method.stderr b/src/test/ui/methods/assign-to-method.stderr
index feceadb6722..c0dd529b681 100644
--- a/src/test/ui/assign-to-method.stderr
+++ b/src/test/ui/methods/assign-to-method.stderr
@@ -1,16 +1,16 @@
 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:10
    |
-LL |   nyan.speak = || println!("meow");
-   |        ^^^^^
+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:10
    |
-LL |   nyan.speak += || println!("meow");
-   |        ^^^^^
+LL |     nyan.speak += || println!("meow");
+   |          ^^^^^
    |
    = help: methods are immutable and cannot be assigned to