about summary refs log tree commit diff
diff options
context:
space:
mode:
authorDylan DPC <dylan.dpc@gmail.com>2020-05-19 13:53:45 +0200
committerGitHub <noreply@github.com>2020-05-19 13:53:45 +0200
commit817880842c268ecedc2ce997dbc158f8722ba4e2 (patch)
tree9dc829adef62741bf3df6e20b4bfeef415769d66
parent79ac73a3fc7364409ae261db024f535c10ebc9a7 (diff)
parentef3f2c0a7c153f3a50ee3a884900d46cb99c67be (diff)
downloadrust-817880842c268ecedc2ce997dbc158f8722ba4e2.tar.gz
rust-817880842c268ecedc2ce997dbc158f8722ba4e2.zip
Rollup merge of #72338 - doctorn:trait-object-ice, r=ecstatic-morse
Fix ICE in -Zsave-analysis

Puts a short-circuit in to avoid an ICE in `-Zsave-analysis`.

r? @ecstatic-morse

Resolves #72267
-rw-r--r--src/librustc_save_analysis/lib.rs6
-rw-r--r--src/test/ui/save-analysis/issue-72267.rs7
-rw-r--r--src/test/ui/save-analysis/issue-72267.stderr15
3 files changed, 27 insertions, 1 deletions
diff --git a/src/librustc_save_analysis/lib.rs b/src/librustc_save_analysis/lib.rs
index 8ae6853210f..43fd2b18530 100644
--- a/src/librustc_save_analysis/lib.rs
+++ b/src/librustc_save_analysis/lib.rs
@@ -620,7 +620,11 @@ impl<'l, 'tcx> SaveContext<'l, 'tcx> {
     }
 
     pub fn get_path_res(&self, id: NodeId) -> Res {
-        let hir_id = self.tcx.hir().node_id_to_hir_id(id);
+        // FIXME(#71104)
+        let hir_id = match self.tcx.hir().opt_node_id_to_hir_id(id) {
+            Some(id) => id,
+            None => return Res::Err,
+        };
         match self.tcx.hir().get(hir_id) {
             Node::TraitRef(tr) => tr.path.res,
 
diff --git a/src/test/ui/save-analysis/issue-72267.rs b/src/test/ui/save-analysis/issue-72267.rs
new file mode 100644
index 00000000000..eea0a7fea0c
--- /dev/null
+++ b/src/test/ui/save-analysis/issue-72267.rs
@@ -0,0 +1,7 @@
+// compile-flags: -Z save-analysis
+
+fn main() {
+    let _: Box<(dyn ?Sized)>;
+    //~^ ERROR `?Trait` is not permitted in trait object types
+    //~| ERROR at least one trait is required for an object type
+}
diff --git a/src/test/ui/save-analysis/issue-72267.stderr b/src/test/ui/save-analysis/issue-72267.stderr
new file mode 100644
index 00000000000..76fc6c57cbc
--- /dev/null
+++ b/src/test/ui/save-analysis/issue-72267.stderr
@@ -0,0 +1,15 @@
+error: `?Trait` is not permitted in trait object types
+  --> $DIR/issue-72267.rs:4:21
+   |
+LL |     let _: Box<(dyn ?Sized)>;
+   |                     ^^^^^^
+
+error[E0224]: at least one trait is required for an object type
+  --> $DIR/issue-72267.rs:4:17
+   |
+LL |     let _: Box<(dyn ?Sized)>;
+   |                 ^^^^^^^^^^
+
+error: aborting due to 2 previous errors
+
+For more information about this error, try `rustc --explain E0224`.