# Unsafe Attribute Syntax Finalization (Hopefully) The specific syntax for unsafe attributes has languished too long. The three basic proposals are: * `#[unsafe attr]` ("unsafe space") * `#[unsafe(attr)]` ("unsafe parens") * `#[unsafe { attr }]` ("unsafe braces") During the lang meeting on 2023-06-06, it was requested that a summary of how each option actually *looks* in practice be made, so that hopefully one of the proposals can be selected based on readability. When using an attribute, the attribute itself can be one of three basic forms: * lone token: `#[no_mangle]` * `#[unsafe no_mangle]` * `#[unsafe(no_mangle)]` * `#[unsafe { no_mangle }]` * key-val expression: `#[link_section = ".foo"]` * `#[unsafe link_section = ".foo"]` * `#[unsafe(link_section = ".foo")]` * `#[unsafe { link_section = ".foo" }]` * an attribute "call": `#[link_ordinal(15)]` * `#[unsafe link_ordinal(15)]` * `#[unsafe(link_ordinal(15))]` * `#[unsafe { link_ordinal(15) }]` There is also the issue of readability when mixed with `cfg_attr`. * Interior, around only the attribute: * `#[cfg_attr(cond, unsafe no_mangle)]` * `#[cfg_attr(cond, unsafe(no_mangle)]` * `#[cfg_attr(cond, unsafe { no_mangle } )]` * Exterior, around the `cfg_attr`: * `#[unsafe cfg_attr(cond, no_mangle)]` * `#[unsafe(cfg_attr(cond, no_mangle))]` * `#[unsafe { cfg_attr(cond, no_mangle ) }]`