@@ -30,10 +30,11 @@ them. The stability scheme works similarly to how `pub` works. You can have
30
30
public functions of nonpublic modules and you can have stable functions in
31
31
unstable modules or vice versa.
32
32
33
- Note, however, that due to a [ rustc bug] , stable items inside unstable modules
34
- * are* available to stable code in that location! So, for example, stable code
35
- can import ` core::intrinsics::transmute ` even though ` intrinsics ` is an
36
- unstable module. Thus, this kind of nesting should be avoided when possible.
33
+ Previously, due to a [ rustc bug] , stable items inside unstable modules were
34
+ available to stable code in that location.
35
+ As of <!-- date-check --> September 2024, items with [ accidentally stabilized
36
+ paths] are marked with the ` #[rustc_allowed_through_unstable_modules] ` attribute
37
+ to prevent code dependent on those paths from breaking.
37
38
38
39
The ` unstable ` attribute may also have the ` soft ` value, which makes it a
39
40
future-incompatible deny-by-default lint instead of a hard error. This is used
@@ -42,6 +43,7 @@ prevents breaking dependencies by leveraging Cargo's lint capping.
42
43
43
44
[ issue number ] : https://github.com/rust-lang/rust/issues
44
45
[ rustc bug ] : https://github.com/rust-lang/rust/issues/15702
46
+ [ accidentally stabilized paths ] : https://github.com/rust-lang/rust/issues/113387
45
47
46
48
## stable
47
49
The ` #[stable(feature = "foo", since = "1.420.69")] ` attribute explicitly
0 commit comments