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() {}