mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 06:44:35 +00:00
Rollup merge of #127535 - spastorino:unsafe_code-unsafe_extern_blocks, r=oli-obk
Fire unsafe_code lint on unsafe extern blocks Fixes #126738
This commit is contained in:
commit
2e0591b1e9
@ -159,6 +159,8 @@ lint_builtin_unreachable_pub = unreachable `pub` {$what}
|
|||||||
|
|
||||||
lint_builtin_unsafe_block = usage of an `unsafe` block
|
lint_builtin_unsafe_block = usage of an `unsafe` block
|
||||||
|
|
||||||
|
lint_builtin_unsafe_extern_block = usage of an `unsafe extern` block
|
||||||
|
|
||||||
lint_builtin_unsafe_impl = implementation of an `unsafe` trait
|
lint_builtin_unsafe_impl = implementation of an `unsafe` trait
|
||||||
|
|
||||||
lint_builtin_unsafe_trait = declaration of an `unsafe` trait
|
lint_builtin_unsafe_trait = declaration of an `unsafe` trait
|
||||||
|
@ -325,6 +325,12 @@ impl EarlyLintPass for UnsafeCode {
|
|||||||
self.report_unsafe(cx, it.span, BuiltinUnsafe::GlobalAsm);
|
self.report_unsafe(cx, it.span, BuiltinUnsafe::GlobalAsm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ast::ItemKind::ForeignMod(ForeignMod { safety, .. }) => {
|
||||||
|
if let Safety::Unsafe(_) = safety {
|
||||||
|
self.report_unsafe(cx, it.span, BuiltinUnsafe::UnsafeExternBlock);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -81,6 +81,8 @@ pub enum BuiltinUnsafe {
|
|||||||
AllowInternalUnsafe,
|
AllowInternalUnsafe,
|
||||||
#[diag(lint_builtin_unsafe_block)]
|
#[diag(lint_builtin_unsafe_block)]
|
||||||
UnsafeBlock,
|
UnsafeBlock,
|
||||||
|
#[diag(lint_builtin_unsafe_extern_block)]
|
||||||
|
UnsafeExternBlock,
|
||||||
#[diag(lint_builtin_unsafe_trait)]
|
#[diag(lint_builtin_unsafe_trait)]
|
||||||
UnsafeTrait,
|
UnsafeTrait,
|
||||||
#[diag(lint_builtin_unsafe_impl)]
|
#[diag(lint_builtin_unsafe_impl)]
|
||||||
|
14
tests/ui/lint/unsafe_code/unsafe-extern-blocks.rs
Normal file
14
tests/ui/lint/unsafe_code/unsafe-extern-blocks.rs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
#![feature(unsafe_extern_blocks)]
|
||||||
|
#![deny(unsafe_code)]
|
||||||
|
|
||||||
|
#[allow(unsafe_code)]
|
||||||
|
unsafe extern "C" {
|
||||||
|
fn foo();
|
||||||
|
}
|
||||||
|
|
||||||
|
unsafe extern "C" {
|
||||||
|
//~^ ERROR usage of an `unsafe extern` block [unsafe_code]
|
||||||
|
fn bar();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
17
tests/ui/lint/unsafe_code/unsafe-extern-blocks.stderr
Normal file
17
tests/ui/lint/unsafe_code/unsafe-extern-blocks.stderr
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
error: usage of an `unsafe extern` block
|
||||||
|
--> $DIR/unsafe-extern-blocks.rs:9:1
|
||||||
|
|
|
||||||
|
LL | / unsafe extern "C" {
|
||||||
|
LL | |
|
||||||
|
LL | | fn bar();
|
||||||
|
LL | | }
|
||||||
|
| |_^
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/unsafe-extern-blocks.rs:2:9
|
||||||
|
|
|
||||||
|
LL | #![deny(unsafe_code)]
|
||||||
|
| ^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
Loading…
Reference in New Issue
Block a user