about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <huyuumi.dev@gmail.com>2020-02-02 06:39:50 +0900
committerYuki Okushi <huyuumi.dev@gmail.com>2020-02-02 06:39:50 +0900
commit9d8058fb423ff21a6c05945ef83f0d5eb4b33fb8 (patch)
tree77311836f104ade09407a270f3608e8247e8f3b8
parent64184a3288eca13ddfb7bc2e7b5231cbb8d5b88f (diff)
downloadrust-9d8058fb423ff21a6c05945ef83f0d5eb4b33fb8.tar.gz
rust-9d8058fb423ff21a6c05945ef83f0d5eb4b33fb8.zip
Do not ICE in `type-alias-impl-trait` with save-analysis
-rw-r--r--src/librustc_typeck/check/mod.rs7
-rw-r--r--src/test/ui/save-analysis/issue-68621.rs17
-rw-r--r--src/test/ui/save-analysis/issue-68621.stderr8
3 files changed, 30 insertions, 2 deletions
diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs
index 4d1f92d19ce..c87ef250dcf 100644
--- a/src/librustc_typeck/check/mod.rs
+++ b/src/librustc_typeck/check/mod.rs
@@ -837,8 +837,11 @@ fn has_typeck_tables(tcx: TyCtxt<'_>, def_id: DefId) -> bool {
         return tcx.has_typeck_tables(outer_def_id);
     }
 
-    let id = tcx.hir().as_local_hir_id(def_id).unwrap();
-    primary_body_of(tcx, id).is_some()
+    if let Some(id) = tcx.hir().as_local_hir_id(def_id) {
+        primary_body_of(tcx, id).is_some()
+    } else {
+        false
+    }
 }
 
 fn used_trait_imports(tcx: TyCtxt<'_>, def_id: DefId) -> &DefIdSet {
diff --git a/src/test/ui/save-analysis/issue-68621.rs b/src/test/ui/save-analysis/issue-68621.rs
new file mode 100644
index 00000000000..96af085c5b6
--- /dev/null
+++ b/src/test/ui/save-analysis/issue-68621.rs
@@ -0,0 +1,17 @@
+// compile-flags: -Zsave-analysis
+
+#![feature(type_alias_impl_trait)]
+
+trait Trait {}
+
+trait Service {
+    type Future: Trait;
+}
+
+struct Struct;
+
+impl Service for Struct {
+    type Future = impl Trait; //~ ERROR: could not find defining uses
+}
+
+fn main() {}
diff --git a/src/test/ui/save-analysis/issue-68621.stderr b/src/test/ui/save-analysis/issue-68621.stderr
new file mode 100644
index 00000000000..2c5bbd7782b
--- /dev/null
+++ b/src/test/ui/save-analysis/issue-68621.stderr
@@ -0,0 +1,8 @@
+error: could not find defining uses
+  --> $DIR/issue-68621.rs:14:5
+   |
+LL |     type Future = impl Trait;
+   |     ^^^^^^^^^^^^^^^^^^^^^^^^^
+
+error: aborting due to previous error
+