@@ -115,6 +115,7 @@ declare_lint_pass! {
115115 UNNAMEABLE_TYPES ,
116116 UNREACHABLE_CODE ,
117117 UNREACHABLE_PATTERNS ,
118+ UNSAFE_ATTR_OUTSIDE_UNSAFE ,
118119 UNSAFE_OP_IN_UNSAFE_FN ,
119120 UNSTABLE_NAME_COLLISIONS ,
120121 UNSTABLE_SYNTAX_PRE_EXPANSION ,
@@ -4902,3 +4903,45 @@ declare_lint! {
49024903 reference: "issue #123743 <https://github.com/rust-lang/rust/issues/123743>" ,
49034904 } ;
49044905}
4906+
4907+ declare_lint ! {
4908+ /// The `unsafe_attr_outside_unsafe` lint detects a missing unsafe keyword
4909+ /// on attributes considered unsafe.
4910+ ///
4911+ /// ### Example
4912+ ///
4913+ /// ```rust
4914+ /// #![feature(unsafe_attributes)]
4915+ /// #![warn(unsafe_attr_outside_unsafe)]
4916+ ///
4917+ /// #[no_mangle]
4918+ /// extern "C" fn foo() {}
4919+ ///
4920+ /// fn main() {}
4921+ /// ```
4922+ ///
4923+ /// {{produces}}
4924+ ///
4925+ /// ### Explanation
4926+ ///
4927+ /// Some attributes (e.g. `no_mangle`, `export_name`, `link_section` -- see
4928+ /// [issue #82499] for a more complete list) are considered "unsafe" attributes.
4929+ /// An unsafe attribute must only be used inside unsafe(...).
4930+ ///
4931+ /// This lint can automatically wrap the attributes in `unsafe(...)` , but this
4932+ /// obviously cannot verify that the preconditions of the `unsafe`
4933+ /// attributes are fulfilled, so that is still up to the user.
4934+ ///
4935+ /// The lint is currently "allow" by default, but that might change in the
4936+ /// future.
4937+ ///
4938+ /// [editions]: https://doc.rust-lang.org/edition-guide/
4939+ /// [issue #82499]: https://github.com/rust-lang/rust/issues/82499
4940+ pub UNSAFE_ATTR_OUTSIDE_UNSAFE ,
4941+ Allow ,
4942+ "detects unsafe attributes outside of unsafe" ,
4943+ @future_incompatible = FutureIncompatibleInfo {
4944+ reason: FutureIncompatibilityReason :: EditionError ( Edition :: Edition2024 ) ,
4945+ reference: "issue #123757 <https://github.com/rust-lang/rust/issues/123757>" ,
4946+ } ;
4947+ }
0 commit comments