# 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 ) }]`