diff --git a/compiler/rustc_mir/src/transform/check_unsafety.rs b/compiler/rustc_mir/src/transform/check_unsafety.rs
index e64955c4986ce..4aa119e4da2e2 100644
--- a/compiler/rustc_mir/src/transform/check_unsafety.rs
+++ b/compiler/rustc_mir/src/transform/check_unsafety.rs
@@ -113,11 +113,18 @@ impl<'a, 'tcx> Visitor<'tcx> for UnsafetyChecker<'a, 'tcx> {
             | StatementKind::StorageLive(..)
             | StatementKind::StorageDead(..)
             | StatementKind::Retag { .. }
-            | StatementKind::AscribeUserType(..)
             | StatementKind::Coverage(..)
             | StatementKind::Nop => {
                 // safe (at least as emitted during MIR construction)
             }
+            StatementKind::AscribeUserType(..) => {
+                // safe (at least as emitted during MIR construction)
+                // This is handled separately because we don't want
+                // super_statement to be called.
+                // See this for more:
+                // https://github.com/rust-lang/rust/issues/80059#issuecomment-756968485
+                return;
+            }
 
             StatementKind::LlvmInlineAsm { .. } => self.require_unsafe(
                 UnsafetyViolationKind::General,
diff --git a/src/test/ui/unsafe/wildcard-type-ascription.rs b/src/test/ui/unsafe/wildcard-type-ascription.rs
new file mode 100644
index 0000000000000..260d80a352ff9
--- /dev/null
+++ b/src/test/ui/unsafe/wildcard-type-ascription.rs
@@ -0,0 +1,7 @@
+// check-pass
+
+fn foo(ptr: *const bool) {
+    let _: bool = *ptr;
+}
+
+fn main() {}