diff options
| author | LeSeulArtichaut <leseulartichaut@gmail.com> | 2021-05-17 00:29:54 +0200 |
|---|---|---|
| committer | LeSeulArtichaut <leseulartichaut@gmail.com> | 2021-05-21 19:51:53 +0200 |
| commit | 0e1afc4501eae89862a50ab24961a8d12ece0a37 (patch) | |
| tree | 280a9ef31e7231cdbbf38a25a073b88ea2dc7615 /compiler | |
| parent | 6b327aaa08aea817e51640585b4d63cf4017965f (diff) | |
| download | rust-0e1afc4501eae89862a50ab24961a8d12ece0a37.tar.gz rust-0e1afc4501eae89862a50ab24961a8d12ece0a37.zip | |
Check for use of mutable/extern statics in THIR unsafeck
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/rustc_mir_build/src/check_unsafety.rs | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/compiler/rustc_mir_build/src/check_unsafety.rs b/compiler/rustc_mir_build/src/check_unsafety.rs index 66b30679ccb..aa8193dab5d 100644 --- a/compiler/rustc_mir_build/src/check_unsafety.rs +++ b/compiler/rustc_mir_build/src/check_unsafety.rs @@ -169,14 +169,20 @@ impl<'a, 'tcx> Visitor<'a, 'tcx> for UnsafetyVisitor<'a, 'tcx> { } } } - ExprKind::InlineAsm { .. } | ExprKind::LlvmInlineAsm { .. } => { - self.requires_unsafe(expr.span, UseOfInlineAssembly); - } ExprKind::Deref { arg } => { - if self.thir[arg].ty.is_unsafe_ptr() { + if let ExprKind::StaticRef { def_id, .. } = self.thir[arg].kind { + if self.tcx.is_mutable_static(def_id) { + self.requires_unsafe(expr.span, UseOfMutableStatic); + } else if self.tcx.is_foreign_item(def_id) { + self.requires_unsafe(expr.span, UseOfExternStatic); + } + } else if self.thir[arg].ty.is_unsafe_ptr() { self.requires_unsafe(expr.span, DerefOfRawPointer); } } + ExprKind::InlineAsm { .. } | ExprKind::LlvmInlineAsm { .. } => { + self.requires_unsafe(expr.span, UseOfInlineAssembly); + } ExprKind::Adt { adt_def, variant_index: _, @@ -242,9 +248,7 @@ enum UnsafeOpKind { UseOfInlineAssembly, InitializingTypeWith, CastOfPointerToInt, - #[allow(dead_code)] // FIXME UseOfMutableStatic, - #[allow(dead_code)] // FIXME UseOfExternStatic, DerefOfRawPointer, #[allow(dead_code)] // FIXME |
