about summary refs log tree commit diff
diff options
context:
space:
mode:
authoriDawer <ilnur.iskhakov.oss@outlook.com>2022-08-31 21:41:24 +0500
committeriDawer <ilnur.iskhakov.oss@outlook.com>2022-08-31 21:41:24 +0500
commit1fa9d5e07b1b2035be2eca70d0e2bb81f10edd8a (patch)
treec83390b78282688804ed5c7e64d9671f6a9c25d8
parent1a580a3396ea11c3cf186af8ec5c563d906b7127 (diff)
downloadrust-1fa9d5e07b1b2035be2eca70d0e2bb81f10edd8a.tar.gz
rust-1fa9d5e07b1b2035be2eca70d0e2bb81f10edd8a.zip
Correct visibility check
-rw-r--r--crates/hir-ty/src/inhabitedness.rs14
1 files changed, 4 insertions, 10 deletions
diff --git a/crates/hir-ty/src/inhabitedness.rs b/crates/hir-ty/src/inhabitedness.rs
index f4d822b9c70..f3fe10c8575 100644
--- a/crates/hir-ty/src/inhabitedness.rs
+++ b/crates/hir-ty/src/inhabitedness.rs
@@ -149,17 +149,11 @@ impl UninhabitedFrom<'_> {
         subst: &Substitution,
         is_enum: bool,
     ) -> ControlFlow<VisiblyUninhabited> {
-        let target_mod = self.target_mod;
-        let mut data_uninhabitedness =
-            || ty.clone().substitute(Interner, subst).visit_with(self, DebruijnIndex::INNERMOST);
-        if is_enum {
-            data_uninhabitedness()
+        if is_enum || vis.is_visible_from(self.db.upcast(), self.target_mod) {
+            let ty = ty.clone().substitute(Interner, subst);
+            ty.visit_with(self, DebruijnIndex::INNERMOST)
         } else {
-            match vis {
-                Visibility::Module(mod_id) if mod_id == target_mod => data_uninhabitedness(),
-                Visibility::Module(_) => CONTINUE_OPAQUELY_INHABITED,
-                Visibility::Public => data_uninhabitedness(),
-            }
+            CONTINUE_OPAQUELY_INHABITED
         }
     }
 }