diff options
| author | bors <bors@rust-lang.org> | 2024-06-24 05:06:31 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-06-24 05:06:31 +0000 |
| commit | 2c243d957008f5909f7a4af19e486ea8a3814be7 (patch) | |
| tree | 0f504fdb9bfca03ccde3dbef5f5f4b4dfcabf6cb /compiler/rustc_lint_defs/src/builtin.rs | |
| parent | d49994b060684af423339b55769439b2f444a7b9 (diff) | |
| parent | b94d2754b595220167c7ab4b7e4b68f4efa8dc34 (diff) | |
| download | rust-2c243d957008f5909f7a4af19e486ea8a3814be7.tar.gz rust-2c243d957008f5909f7a4af19e486ea8a3814be7.zip | |
Auto merge of #126891 - matthiaskrgr:rollup-p6dl1gk, r=matthiaskrgr
Rollup of 9 pull requests Successful merges: - #126177 (Add hard error and migration lint for unsafe attrs) - #126298 (Promote loongarch64-unknown-linux-musl to Tier 2 with host tools) - #126455 (For [E0308]: mismatched types, when expr is in an arm's body, not add semicolon ';' at the end of it.) - #126754 (Implement `use<>` formatting in rustfmt) - #126807 (std::unix::fs: copy simplification for apple.) - #126845 (Weekly `cargo update`) - #126849 (Fix 32-bit Arm reg classes by hierarchically sorting them) - #126854 (std::unix::os::home_dir: fallback's optimisation.) - #126888 (Remove stray println from rustfmt's `rewrite_static`) r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_lint_defs/src/builtin.rs')
| -rw-r--r-- | compiler/rustc_lint_defs/src/builtin.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/compiler/rustc_lint_defs/src/builtin.rs b/compiler/rustc_lint_defs/src/builtin.rs index 1913b9d6a1c..265779c9374 100644 --- a/compiler/rustc_lint_defs/src/builtin.rs +++ b/compiler/rustc_lint_defs/src/builtin.rs @@ -115,6 +115,7 @@ declare_lint_pass! { UNNAMEABLE_TYPES, UNREACHABLE_CODE, UNREACHABLE_PATTERNS, + UNSAFE_ATTR_OUTSIDE_UNSAFE, UNSAFE_OP_IN_UNSAFE_FN, UNSTABLE_NAME_COLLISIONS, UNSTABLE_SYNTAX_PRE_EXPANSION, @@ -4902,3 +4903,45 @@ declare_lint! { reference: "issue #123743 <https://github.com/rust-lang/rust/issues/123743>", }; } + +declare_lint! { + /// The `unsafe_attr_outside_unsafe` lint detects a missing unsafe keyword + /// on attributes considered unsafe. + /// + /// ### Example + /// + /// ```rust + /// #![feature(unsafe_attributes)] + /// #![warn(unsafe_attr_outside_unsafe)] + /// + /// #[no_mangle] + /// extern "C" fn foo() {} + /// + /// fn main() {} + /// ``` + /// + /// {{produces}} + /// + /// ### Explanation + /// + /// Some attributes (e.g. `no_mangle`, `export_name`, `link_section` -- see + /// [issue #82499] for a more complete list) are considered "unsafe" attributes. + /// An unsafe attribute must only be used inside unsafe(...). + /// + /// This lint can automatically wrap the attributes in `unsafe(...)` , but this + /// obviously cannot verify that the preconditions of the `unsafe` + /// attributes are fulfilled, so that is still up to the user. + /// + /// The lint is currently "allow" by default, but that might change in the + /// future. + /// + /// [editions]: https://doc.rust-lang.org/edition-guide/ + /// [issue #82499]: https://github.com/rust-lang/rust/issues/82499 + pub UNSAFE_ATTR_OUTSIDE_UNSAFE, + Allow, + "detects unsafe attributes outside of unsafe", + @future_incompatible = FutureIncompatibleInfo { + reason: FutureIncompatibilityReason::EditionError(Edition::Edition2024), + reference: "issue #123757 <https://github.com/rust-lang/rust/issues/123757>", + }; +} |
