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
+14-11Lines changed: 14 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -65,7 +65,7 @@ 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 functions and statics 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
70
> [!EXAMPLE]
71
71
> ```rust
@@ -74,7 +74,7 @@ The *`no_mangle` attribute* may be used on functions and statics to disable stan
74
74
> ```
75
75
76
76
r[abi.no_mangle.syntax]
77
-
The `no_mangle` attribute uses the [MetaWord] syntax and thus does not take any inputs.
77
+
The `no_mangle` attribute uses the [MetaWord] syntax.
78
78
79
79
r[abi.no_mangle.allowed-positions]
80
80
The `no_mangle` attribute may only be applied to:
@@ -85,7 +85,7 @@ The `no_mangle` attribute may only be applied to:
85
85
- [Traitimpl functions][items.impl.trait]
86
86
87
87
> [!NOTE]
88
-
> `rustc` currently warns in other positions, but this may be rejectedin the future.
88
+
> `rustc` lints against usein other positions.Thismay become an errorin the future.
89
89
90
90
<!--TODO:Currently it works on a trait function with a body, but generates a warning about being phased out. how do we document that?
<!--TODO: should this clarify that external block items are already unmangled?, and thus the attribute does nothing?Currently it is "phased out" warning.-->
95
95
96
96
r[abi.no_mangle.closures]
97
-
`no_mangle` may not be used with a [closure].
97
+
The`no_mangle` attribute may not be used with a [closure].
98
98
99
99
r[abi.no_mangle.generics]
100
-
`no_mangle` may not be used on an item with generic parameters.
100
+
The`no_mangle` attribute may not be used on an item with generic parameters.
101
101
102
102
r[abi.no_mangle.duplicates]
103
-
Only the first instance of `no_mangle` on an item is honored.Subsequent `no_mangle` attributes are ignored.
103
+
Only the first use of `no_mangle` on an item has effect.
104
104
105
105
> [!NOTE]
106
-
> `rustc` currently warns on subsequent duplicate `no_mangle` attributes.
106
+
> `rustc` lints against any use following the first.
107
107
108
108
r[abi.no_mangle.export_name]
109
-
If `no_mangle` is used with [`export_name`][abi.export_name], then the `export_name` is used instead.
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.
110
113
111
114
r[abi.no_mangle.unsafe]
112
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.
113
116
114
117
r[abi.no_mangle.edition2024]
115
118
> [!EDITION-2024]
116
-
> 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`.
117
120
118
121
r[abi.no_mangle.publicly-exported]
119
-
In addition to disabling name mangling, the item will be publicly exported from the produced library or object file, similar to the [`used` attribute](#the-used-attribute).
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.
120
123
121
124
r[abi.no_mangle.ascii-only]
122
-
`no_mangle` may only be used on items with a name that only contains ASCII characters.
125
+
The`no_mangle` attribute may only be used on items with a name that contains onlyASCII characters.
0 commit comments