You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/abi.md
+53-10Lines changed: 53 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -65,22 +65,64 @@ r[abi.no_mangle]
65
65
## The `no_mangle` attribute
66
66
67
67
r[abi.no_mangle.intro]
68
-
The*`no_mangle` attribute* may be used on any [item] to disable standard symbol name mangling.The symbol for the item will be the identifier of the item's name.
68
+
The*`no_mangle` [attribute]* disables the standard symbol name mangling on a [function] or [static].The symbol for the item is the item's identifier.
69
69
70
-
r[abi.no_mangle.publicly-exported]
71
-
Additionally, the item will be publicly exported from the produced library or object file, similar to the [`used` attribute](#the-used-attribute).
70
+
> [!EXAMPLE]
71
+
> ```rust
72
+
> #[unsafe(no_mangle)]
73
+
> extern "C" fn foo() {}
74
+
> ```
72
75
73
-
r[abi.no_mangle.unsafe]
74
-
Thisattribute is unsafeas an unmangled symbol may collide with another symbol with the same name (or with a well-known symbol), leading to undefined behavior.
76
+
r[abi.no_mangle.syntax]
77
+
The `no_mangle` attribute uses the [MetaWord] syntax.
<!--TODO: should this clarify that external block items are already unmangled?, and thus the attribute does nothing?Currently it is "phased out" warning.-->
95
+
96
+
r[abi.no_mangle.closures]
97
+
The `no_mangle` attribute may not be used with a [closure].
98
+
99
+
r[abi.no_mangle.generics]
100
+
The `no_mangle` attribute may not be used on an item with generic parameters.
101
+
102
+
r[abi.no_mangle.duplicates]
103
+
Only the first use of `no_mangle` on an item has effect.
104
+
105
+
> [!NOTE]
106
+
> `rustc` lints against any use following the first.
107
+
108
+
r[abi.no_mangle.export_name]
109
+
When the `no_mangle` and [`export_name`][abi.export_name] attributes are both applied to the same item, the symbol name from `export_name` is used, and `no_mangle` has no effect.
110
+
111
+
> [!NOTE]
112
+
> `rustc` lints against this combination.
113
+
114
+
r[abi.no_mangle.unsafe]
115
+
The `no_mangle` attribute must be marked with [`unsafe`][attributes.safety] because an unmangled symbol may collide with another symbol with the same name (or with a well-known symbol), leading to undefined behavior.
80
116
81
117
r[abi.no_mangle.edition2024]
82
118
> [!EDITION-2024]
83
-
> Before the 2024 edition it is allowed to use the `no_mangle` attribute without the `unsafe` qualification.
119
+
> Before the 2024 edition, it is allowed to use the `no_mangle` attribute without `unsafe`.
120
+
121
+
r[abi.no_mangle.publicly-exported]
122
+
In addition to disabling name mangling, the `no_mangle` attribute causes the symbol to be publicly exported from the produced library or object file, similar to the [`used`][abi.used] attribute.
123
+
124
+
r[abi.no_mangle.ascii-only]
125
+
The `no_mangle` attribute may only be used on items with a name that contains only ASCII characters.
0 commit comments