mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-22 23:04:33 +00:00
37d56daac6
Stabilize `unsafe_attributes` # Stabilization report ## Summary This is a tracking issue for the RFC 3325: unsafe attributes We are stabilizing `#![feature(unsafe_attributes)]`, which makes certain attributes considered 'unsafe', meaning that they must be surrounded by an `unsafe(...)`, as in `#[unsafe(no_mangle)]`. RFC: rust-lang/rfcs#3325 Tracking issue: #123757 ## What is stabilized ### Summary of stabilization Certain attributes will now be designated as unsafe attributes, namely, `no_mangle`, `export_name`, and `link_section` (stable only), and these attributes will need to be called by surrounding them in `unsafe(...)` syntax. On editions prior to 2024, this is simply an edition lint, but it will become a hard error in 2024. This also works in `cfg_attr`, but `unsafe` is not allowed for any other attributes, including proc-macros ones. ```rust #[unsafe(no_mangle)] fn a() {} #[cfg_attr(any(), unsafe(export_name = "c"))] fn b() {} ``` For a table showing the attributes that were considered to be included in the list to require unsafe, and subsequent reasoning about why each such attribute was or was not included, see [this comment here](https://github.com/rust-lang/rust/pull/124214#issuecomment-2124753464) ## Tests The relevant tests are in `tests/ui/rust-2024/unsafe-attributes` and `tests/ui/attributes/unsafe`. |
||
---|---|---|
.. | ||
prelude-migration | ||
unsafe-attributes | ||
unsafe-extern-blocks | ||
box-slice-into-iter-ambiguous.fixed | ||
box-slice-into-iter-ambiguous.rs | ||
box-slice-into-iter-ambiguous.stderr | ||
gen-kw-in-macro.rs | ||
gen-kw.e2015.stderr | ||
gen-kw.e2018.stderr | ||
gen-kw.rs | ||
prelude2024.rs | ||
safe-outside-extern.gated.stderr | ||
safe-outside-extern.rs | ||
safe-outside-extern.stderr | ||
safe-outside-extern.ungated.stderr | ||
unsafe-before_exec.e2024.stderr | ||
unsafe-before_exec.rs | ||
unsafe-env-suggestion.fixed | ||
unsafe-env-suggestion.rs | ||
unsafe-env-suggestion.stderr | ||
unsafe-env.e2021.stderr | ||
unsafe-env.e2024.stderr | ||
unsafe-env.rs |