Skip to content

Commit b9b5d69

Browse files
committed
Move 'force-unstable-if-unmarked' to the bootstrapping chapter
1 parent d88726c commit b9b5d69

File tree

2 files changed

+30
-31
lines changed

2 files changed

+30
-31
lines changed

src/building/bootstrapping.md

+30
Original file line numberDiff line numberDiff line change
@@ -313,12 +313,42 @@ of the public API of the standard library, but are used to implement it.
313313
`rustlib` is part of the search path for linkers, but `lib` will never be part
314314
of the search path.
315315

316+
#### -Z force-unstable-if-unmarked
317+
316318
Since `rustlib` is part of the search path, it means we have to be careful
317319
about which crates are included in it. In particular, all crates except for
318320
the standard library are built with the flag `-Z force-unstable-if-unmarked`,
319321
which means that you have to use `#![feature(rustc_private)]` in order to
320322
load it (as opposed to the standard library, which is always available).
321323

324+
The `-Z force-unstable-if-unmarked` flag has a variety of purposes to help
325+
enforce that the correct crates are marked as unstable. It was introduced
326+
primarily to allow rustc and the standard library to link to arbitrary crates
327+
on crates.io which do not themselves use `staged_api`. `rustc` also relies on
328+
this flag to mark all of its crates as unstable with the `rustc_private`
329+
feature so that each crate does not need to be carefully marked with
330+
`unstable`.
331+
332+
This flag is automatically applied to all of `rustc` and the standard library
333+
by the bootstrap scripts. This is needed because the compiler and all of its
334+
dependencies are shipped in the sysroot to all users.
335+
336+
This flag has the following effects:
337+
338+
- Marks the crate as "unstable" with the `rustc_private` feature if it is not
339+
itself marked as stable or unstable.
340+
- Allows these crates to access other forced-unstable crates without any need
341+
for attributes. Normally a crate would need a `#![feature(rustc_private)]`
342+
attribute to use other unstable crates. However, that would make it
343+
impossible for a crate from crates.io to access its own dependencies since
344+
that crate won't have a `feature(rustc_private)` attribute, but *everything*
345+
is compiled with `-Z force-unstable-if-unmarked`.
346+
347+
Code which does not use `-Z force-unstable-if-unmarked` should include the
348+
`#![feature(rustc_private)]` crate attribute to access these force-unstable
349+
crates. This is needed for things that link `rustc`, such as `miri`, `rls`, or
350+
`clippy`.
351+
322352
You can find more discussion about sysroots in:
323353
- The [rustdoc PR] explaining why it uses `extern crate` for dependencies loaded from sysroot
324354
- [Discussions about sysroot on Zulip](https://rust-lang.zulipchat.com/#narrow/stream/182449-t-compiler.2Fhelp/topic/deps.20in.20sysroot/)

src/stability.md

-31
Original file line numberDiff line numberDiff line change
@@ -130,35 +130,4 @@ default `allow`, but most of the standard library raises it to a warning with
130130
`#![warn(deprecated_in_future)]`.
131131

132132
[`deprecated` attribute]: https://doc.rust-lang.org/reference/attributes/diagnostics.html#the-deprecated-attribute
133-
134-
## -Z force-unstable-if-unmarked
135-
136-
The `-Z force-unstable-if-unmarked` flag has a variety of purposes to help
137-
enforce that the correct crates are marked as unstable. It was introduced
138-
primarily to allow rustc and the standard library to link to arbitrary crates
139-
on crates.io which do not themselves use `staged_api`. `rustc` also relies on
140-
this flag to mark all of its crates as unstable with the `rustc_private`
141-
feature so that each crate does not need to be carefully marked with
142-
`unstable`.
143-
144-
This flag is automatically applied to all of `rustc` and the standard library
145-
by the bootstrap scripts. This is needed because the compiler and all of its
146-
dependencies are shipped in the sysroot to all users.
147-
148-
This flag has the following effects:
149-
150-
- Marks the crate as "unstable" with the `rustc_private` feature if it is not
151-
itself marked as stable or unstable.
152-
- Allows these crates to access other forced-unstable crates without any need
153-
for attributes. Normally a crate would need a `#![feature(rustc_private)]`
154-
attribute to use other unstable crates. However, that would make it
155-
impossible for a crate from crates.io to access its own dependencies since
156-
that crate won't have a `feature(rustc_private)` attribute, but *everything*
157-
is compiled with `-Z force-unstable-if-unmarked`.
158-
159-
Code which does not use `-Z force-unstable-if-unmarked` should include the
160-
`#![feature(rustc_private)]` crate attribute to access these force-unstable
161-
crates. This is needed for things that link `rustc`, such as `miri`, `rls`, or
162-
`clippy`.
163-
164133
[blog]: https://www.ralfj.de/blog/2018/07/19/const.html

0 commit comments

Comments
 (0)