Skip to content

Commit 984c19d

Browse files
committed
Auto merge of #154001 - Zalathar:rollup-6iruefK, r=Zalathar
Rollup of 7 pull requests Successful merges: - #153801 (Add the option to run UI tests with the parallel frontend) - #153967 (Tweak wording of failed predicate in inference error) - #152968 (Flip "region lattice" in RegionKind doc comment) - #153531 (Fix LegacyKeyValueFormat report from docker build: various) - #153709 (Fix hypothetical ICE in `variances_of`) - #153884 (test `classify-runtime-const` for `f16`) - #153946 (dissolve `tests/ui/cross`)
2 parents b711f95 + e3848c7 commit 984c19d

154 files changed

Lines changed: 431 additions & 330 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

compiler/rustc_query_impl/src/from_cycle_error.rs

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ use rustc_errors::codes::*;
88
use rustc_errors::{Applicability, Diag, MultiSpan, pluralize, struct_span_code_err};
99
use rustc_hir as hir;
1010
use rustc_hir::def::{DefKind, Res};
11+
use rustc_middle::bug;
1112
use rustc_middle::queries::{QueryVTables, TaggedQueryKey};
1213
use rustc_middle::query::CycleError;
1314
use rustc_middle::query::erase::erase_val;
1415
use rustc_middle::ty::layout::LayoutError;
1516
use rustc_middle::ty::{self, Ty, TyCtxt};
16-
use rustc_middle::{bug, span_bug};
1717
use rustc_span::def_id::{DefId, LocalDefId};
1818
use rustc_span::{ErrorGuaranteed, Span};
1919

@@ -31,9 +31,9 @@ pub(crate) fn specialize_query_vtables<'tcx>(vtables: &mut QueryVTables<'tcx>) {
3131
vtables.check_representability_adt_ty.value_from_cycle_error =
3232
|tcx, _, cycle, _err| check_representability(tcx, cycle);
3333

34-
vtables.variances_of.value_from_cycle_error = |tcx, _, cycle, err| {
34+
vtables.variances_of.value_from_cycle_error = |tcx, key, _, err| {
3535
let _guar = err.delay_as_bug();
36-
erase_val(variances_of(tcx, cycle))
36+
erase_val(variances_of(tcx, key))
3737
};
3838

3939
vtables.layout_of.value_from_cycle_error = |tcx, _, cycle, err| {
@@ -103,26 +103,9 @@ fn check_representability<'tcx>(tcx: TyCtxt<'tcx>, cycle_error: CycleError<'tcx>
103103
guar.raise_fatal()
104104
}
105105

106-
fn variances_of<'tcx>(tcx: TyCtxt<'tcx>, cycle_error: CycleError<'tcx>) -> &'tcx [ty::Variance] {
107-
search_for_cycle_permutation(
108-
&cycle_error.cycle,
109-
|cycle| {
110-
if let Some(frame) = cycle.get(0)
111-
&& let TaggedQueryKey::variances_of(def_id) = frame.node.tagged_key
112-
{
113-
let n = tcx.generics_of(def_id).own_params.len();
114-
ControlFlow::Break(tcx.arena.alloc_from_iter(iter::repeat_n(ty::Bivariant, n)))
115-
} else {
116-
ControlFlow::Continue(())
117-
}
118-
},
119-
|| {
120-
span_bug!(
121-
cycle_error.usage.as_ref().unwrap().span,
122-
"only `variances_of` returns `&[ty::Variance]`"
123-
)
124-
},
125-
)
106+
fn variances_of<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId) -> &'tcx [ty::Variance] {
107+
let n = tcx.generics_of(def_id).own_params.len();
108+
tcx.arena.alloc_from_iter(iter::repeat_n(ty::Bivariant, n))
126109
}
127110

128111
// Take a cycle of `Q` and try `try_cycle` on every permutation, falling back to `otherwise`.

compiler/rustc_trait_selection/src/error_reporting/traits/ambiguity.rs

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ use rustc_infer::traits::util::elaborate;
1111
use rustc_infer::traits::{
1212
Obligation, ObligationCause, ObligationCauseCode, PolyTraitObligation, PredicateObligation,
1313
};
14+
use rustc_middle::ty::print::PrintPolyTraitPredicateExt;
1415
use rustc_middle::ty::{self, Ty, TyCtxt, TypeVisitable as _, TypeVisitableExt as _};
1516
use rustc_session::parse::feature_err_unstable_feature_bound;
1617
use rustc_span::{DUMMY_SP, ErrorGuaranteed, Span};
@@ -306,8 +307,18 @@ impl<'a, 'tcx> TypeErrCtxt<'a, 'tcx> {
306307
err.cancel();
307308
return e;
308309
}
309-
let pred = self.tcx.short_string(predicate, &mut err.long_ty_path());
310-
err.note(format!("cannot satisfy `{pred}`"));
310+
if let Some(clause) = predicate.as_trait_clause()
311+
&& let ty::Infer(_) = clause.self_ty().skip_binder().kind()
312+
{
313+
let tr = self.tcx.short_string(
314+
clause.print_modifiers_and_trait_path(),
315+
&mut err.long_ty_path(),
316+
);
317+
err.note(format!("the type must implement `{tr}`"));
318+
} else {
319+
let pred = self.tcx.short_string(predicate, &mut err.long_ty_path());
320+
err.note(format!("cannot satisfy `{pred}`"));
321+
}
311322
let impl_candidates =
312323
self.find_similar_impl_candidates(predicate.as_trait_clause().unwrap());
313324
if impl_candidates.len() < 40 {

compiler/rustc_type_ir/src/region_kind.rs

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -34,26 +34,26 @@ rustc_index::newtype_index! {
3434
/// In general, the region lattice looks like
3535
///
3636
/// ```text
37-
/// static ----------+-----...------+ (greatest)
37+
/// empty(Un) -------- (smallest)
38+
/// | \
39+
/// ... \
40+
/// | \
41+
/// empty(U1) -- \
42+
/// | \ placeholder(Un)
43+
/// | \ |
44+
/// empty(root) placeholder(U1) |
3845
/// | | |
39-
/// param regions | |
4046
/// | | |
4147
/// | | |
48+
/// param regions | |
4249
/// | | |
43-
/// empty(root) placeholder(U1) |
44-
/// | / |
45-
/// | / placeholder(Un)
46-
/// empty(U1) -- /
47-
/// | /
48-
/// ... /
49-
/// | /
50-
/// empty(Un) -------- (smallest)
50+
/// static ----------+-----...------+ (greatest)
5151
/// ```
5252
///
53-
/// Early-bound/free regions are the named lifetimes in scope from the
54-
/// function declaration. They have relationships to one another
55-
/// determined based on the declared relationships from the
56-
/// function.
53+
/// Lifetimes in scope from a function declaration are represented via
54+
/// [`RegionKind::ReEarlyParam`]/[`RegionKind::ReLateParam`]. They
55+
/// have relationships to one another and `'static` based on the
56+
/// declared relationships from the function.
5757
///
5858
/// Note that inference variables and bound regions are not included
5959
/// in this diagram. In the case of inference variables, they should
@@ -62,29 +62,36 @@ rustc_index::newtype_index! {
6262
/// include -- the diagram indicates the relationship between free
6363
/// regions.
6464
///
65+
/// You can read more about the distinction between early and late bound
66+
/// parameters in the rustc dev guide: [Early vs Late bound parameters].
67+
///
68+
/// A note on subtyping: If we assume that references take their region
69+
/// covariantly, and use that to define the subtyping relationship of regions,
70+
/// it may be somewhat surprising that `'empty` is Top and `'static` is Bottom,
71+
/// and that "`'a` is a subtype of `'b`" is defined as "`'a` is bigger than
72+
/// `'b`" - good to keep in mind.
73+
///
6574
/// ## Inference variables
6675
///
6776
/// During region inference, we sometimes create inference variables,
68-
/// represented as `ReVar`. These will be inferred by the code in
69-
/// `infer::lexical_region_resolve` to some free region from the
70-
/// lattice above (the minimal region that meets the
77+
/// represented as [`RegionKind::ReVar`]. These will be inferred by
78+
/// the code in `infer::lexical_region_resolve` to some free region
79+
/// from the lattice above (the minimal region that meets the
7180
/// constraints).
7281
///
7382
/// During NLL checking, where regions are defined differently, we
74-
/// also use `ReVar` -- in that case, the index is used to index into
75-
/// the NLL region checker's data structures. The variable may in fact
76-
/// represent either a free region or an inference variable, in that
77-
/// case.
83+
/// also use [`RegionKind::ReVar`] -- in that case, the index is used
84+
/// to index into the NLL region checker's data structures. The
85+
/// variable may in fact represent either a free region or an
86+
/// inference variable, in that case.
7887
///
7988
/// ## Bound Regions
8089
///
8190
/// These are regions that are stored behind a binder and must be instantiated
82-
/// with some concrete region before being used. There are two kind of
83-
/// bound regions: early-bound, which are bound in an item's `Generics`,
84-
/// and are instantiated by an `GenericArgs`, and late-bound, which are part of
85-
/// higher-ranked types (e.g., `for<'a> fn(&'a ())`), and are instantiated by
86-
/// the likes of `liberate_late_bound_regions`. The distinction exists
87-
/// because higher-ranked lifetimes aren't supported in all places. See [1][2].
91+
/// with some concrete region before being used. A type can be wrapped in a
92+
/// `Binder`, which introduces new type/const/lifetime variables (e.g., `for<'a>
93+
/// fn(&'a ())`). These parameters are referred to via [`RegionKind::ReBound`].
94+
/// You can instantiate them by the likes of `liberate_late_bound_regions`.
8895
///
8996
/// Unlike `Param`s, bound regions are not supposed to exist "in the wild"
9097
/// outside their binder, e.g., in types passed to type inference, and
@@ -123,8 +130,7 @@ rustc_index::newtype_index! {
123130
/// happen, you can use `leak_check`. This is more clearly explained
124131
/// by the [rustc dev guide].
125132
///
126-
/// [1]: https://smallcultfollowing.com/babysteps/blog/2013/10/29/intermingled-parameter-lists/
127-
/// [2]: https://smallcultfollowing.com/babysteps/blog/2013/11/04/intermingled-parameter-lists/
133+
/// [Early vs Late bound parameters]: https://rustc-dev-guide.rust-lang.org/early-late-parameters.html
128134
/// [rustc dev guide]: https://rustc-dev-guide.rust-lang.org/traits/hrtb.html
129135
#[derive_where(Clone, Copy, Hash, PartialEq; I: Interner)]
130136
#[derive(GenericTypeVisitable)]
@@ -160,7 +166,7 @@ pub enum RegionKind<I: Interner> {
160166
/// more info about early and late bound lifetime parameters.
161167
ReLateParam(I::LateParamRegion),
162168

163-
/// Static data that has an "infinite" lifetime. Top in the region lattice.
169+
/// Static data that has an "infinite" lifetime. Bottom in the region lattice.
164170
ReStatic,
165171

166172
/// A region variable. Should not exist outside of type inference.

src/ci/docker/host-x86_64/dist-various-1/Dockerfile

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -152,16 +152,14 @@ ENV CFLAGS_armv5te_unknown_linux_musleabi="-march=armv5te -marm -mfloat-abi=soft
152152
CC_riscv64gc_unknown_none_elf=riscv64-unknown-elf-gcc \
153153
CFLAGS_riscv64gc_unknown_none_elf=-march=rv64gc -mabi=lp64
154154

155-
ENV RUST_CONFIGURE_ARGS \
156-
--musl-root-armv5te=/musl-armv5te \
155+
ENV RUST_CONFIGURE_ARGS="--musl-root-armv5te=/musl-armv5te \
157156
--musl-root-arm=/musl-arm \
158157
--musl-root-armhf=/musl-armhf \
159158
--musl-root-armv7hf=/musl-armv7hf \
160-
--disable-docs
159+
--disable-docs"
161160

162-
ENV SCRIPT \
163-
python3 ../x.py --stage 2 test --host='' --target $RUN_MAKE_TARGETS tests/run-make tests/run-make-cargo && \
164-
python3 ../x.py dist --host='' --target $TARGETS
161+
ENV SCRIPT="python3 ../x.py --stage 2 test --host= --target $RUN_MAKE_TARGETS tests/run-make tests/run-make-cargo && \
162+
python3 ../x.py dist --host= --target $TARGETS"
165163

166164
# sccache
167165
COPY scripts/sccache.sh /scripts/

src/ci/docker/host-x86_64/dist-various-2/Dockerfile

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -95,16 +95,14 @@ RUN /tmp/freebsd-toolchain.sh i686
9595
COPY scripts/sccache.sh /scripts/
9696
RUN sh /scripts/sccache.sh
9797

98-
ENV CARGO_TARGET_X86_64_UNKNOWN_FUCHSIA_AR /usr/local/bin/llvm-ar
99-
ENV CARGO_TARGET_X86_64_UNKNOWN_FUCHSIA_RUSTFLAGS \
100-
-C link-arg=--sysroot=/usr/local/core-linux-amd64-fuchsia-sdk/arch/x64/sysroot \
98+
ENV CARGO_TARGET_X86_64_UNKNOWN_FUCHSIA_AR="/usr/local/bin/llvm-ar"
99+
ENV CARGO_TARGET_X86_64_UNKNOWN_FUCHSIA_RUSTFLAGS="-C link-arg=--sysroot=/usr/local/core-linux-amd64-fuchsia-sdk/arch/x64/sysroot \
101100
-Lnative=/usr/local/core-linux-amd64-fuchsia-sdk/arch/x64/sysroot/lib \
102-
-Lnative=/usr/local/core-linux-amd64-fuchsia-sdk/arch/x64/lib
103-
ENV CARGO_TARGET_AARCH64_UNKNOWN_FUCHSIA_AR /usr/local/bin/llvm-ar
104-
ENV CARGO_TARGET_AARCH64_UNKNOWN_FUCHSIA_RUSTFLAGS \
105-
-C link-arg=--sysroot=/usr/local/core-linux-amd64-fuchsia-sdk/arch/arm64/sysroot \
101+
-Lnative=/usr/local/core-linux-amd64-fuchsia-sdk/arch/x64/lib"
102+
ENV CARGO_TARGET_AARCH64_UNKNOWN_FUCHSIA_AR="/usr/local/bin/llvm-ar"
103+
ENV CARGO_TARGET_AARCH64_UNKNOWN_FUCHSIA_RUSTFLAGS="-C link-arg=--sysroot=/usr/local/core-linux-amd64-fuchsia-sdk/arch/arm64/sysroot \
106104
-Lnative=/usr/local/core-linux-amd64-fuchsia-sdk/arch/arm64/sysroot/lib \
107-
-Lnative=/usr/local/core-linux-amd64-fuchsia-sdk/arch/arm64/lib
105+
-Lnative=/usr/local/core-linux-amd64-fuchsia-sdk/arch/arm64/lib"
108106

109107
ENV TARGETS=x86_64-unknown-fuchsia
110108
ENV TARGETS=$TARGETS,aarch64-unknown-fuchsia
@@ -136,8 +134,8 @@ RUN ln -s /usr/include/x86_64-linux-gnu/asm /usr/local/include/asm
136134
# musl-gcc can't find libgcc_s.so.1 since it doesn't use the standard search paths.
137135
RUN ln -s /usr/riscv64-linux-gnu/lib/libgcc_s.so.1 /usr/lib/gcc-cross/riscv64-linux-gnu/11/
138136

139-
ENV RUST_CONFIGURE_ARGS --enable-extended --enable-lld --enable-llvm-bitcode-linker --disable-docs \
137+
ENV RUST_CONFIGURE_ARGS="--enable-extended --enable-lld --enable-llvm-bitcode-linker --disable-docs \
140138
--musl-root-armv7=/musl-armv7 \
141-
--musl-root-riscv64gc=/musl-riscv64gc
139+
--musl-root-riscv64gc=/musl-riscv64gc"
142140

143-
ENV SCRIPT python3 ../x.py dist --host='' --target $TARGETS && python3 ../x.py dist --host='' --set build.sanitizers=true --target $TARGETS_SANITIZERS
141+
ENV SCRIPT="python3 ../x.py dist --host= --target $TARGETS && python3 ../x.py dist --host= --set build.sanitizers=true --target $TARGETS_SANITIZERS"

src/ci/docker/host-x86_64/test-various/Dockerfile

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,8 @@ RUN curl -L https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-3
4545
tar -xz
4646
ENV WASI_SDK_PATH=/wasi-sdk-30.0-x86_64-linux
4747

48-
ENV RUST_CONFIGURE_ARGS \
49-
--musl-root-x86_64=/usr/local/x86_64-linux-musl \
50-
--set rust.lld
48+
ENV RUST_CONFIGURE_ARGS="--musl-root-x86_64=/usr/local/x86_64-linux-musl \
49+
--set rust.lld"
5150

5251
# Some run-make tests have assertions about code size, and enabling debug
5352
# assertions in libstd causes the binary to be much bigger than it would
@@ -58,29 +57,29 @@ ENV NO_OVERFLOW_CHECKS=1
5857

5958
RUN curl -L https://github.com/bytecodealliance/wasmtime/releases/download/v38.0.4/wasmtime-v38.0.4-x86_64-linux.tar.xz | \
6059
tar -xJ
61-
ENV PATH "$PATH:/wasmtime-v38.0.4-x86_64-linux"
60+
ENV PATH="$PATH:/wasmtime-v38.0.4-x86_64-linux"
6261

6362
ENV WASM_WASIP_TARGET=wasm32-wasip1
64-
ENV WASM_WASIP_SCRIPT python3 /checkout/x.py --stage 2 test --host='' --target $WASM_WASIP_TARGET \
63+
ENV WASM_WASIP_SCRIPT="python3 /checkout/x.py --stage 2 test --host= --target $WASM_WASIP_TARGET \
6564
tests/run-make \
6665
tests/run-make-cargo \
6766
tests/ui \
6867
tests/mir-opt \
6968
tests/codegen-units \
7069
tests/codegen-llvm \
7170
tests/assembly-llvm \
72-
library/core
71+
library/core"
7372

7473
ENV NVPTX_TARGETS=nvptx64-nvidia-cuda
75-
ENV NVPTX_SCRIPT python3 /checkout/x.py --stage 2 test --host='' --target $NVPTX_TARGETS \
74+
ENV NVPTX_SCRIPT="python3 /checkout/x.py --stage 2 test --host= --target $NVPTX_TARGETS \
7675
tests/run-make \
7776
tests/run-make-cargo \
78-
tests/assembly-llvm
77+
tests/assembly-llvm"
7978

8079
ENV MUSL_TARGETS=x86_64-unknown-linux-musl \
8180
CC_x86_64_unknown_linux_musl=x86_64-linux-musl-gcc \
8281
CXX_x86_64_unknown_linux_musl=x86_64-linux-musl-g++
83-
ENV MUSL_SCRIPT python3 /checkout/x.py --stage 2 test --host='' --target $MUSL_TARGETS
82+
ENV MUSL_SCRIPT="python3 /checkout/x.py --stage 2 test --host= --target $MUSL_TARGETS"
8483

8584
ENV UEFI_TARGETS=aarch64-unknown-uefi,i686-unknown-uefi,x86_64-unknown-uefi \
8685
CC_aarch64_unknown_uefi=clang-11 \
@@ -89,9 +88,9 @@ ENV UEFI_TARGETS=aarch64-unknown-uefi,i686-unknown-uefi,x86_64-unknown-uefi \
8988
CXX_i686_unknown_uefi=clang++-11 \
9089
CC_x86_64_unknown_uefi=clang-11 \
9190
CXX_x86_64_unknown_uefi=clang++-11
92-
ENV UEFI_SCRIPT python3 /checkout/x.py --stage 2 build --host='' --target $UEFI_TARGETS && \
91+
ENV UEFI_SCRIPT="python3 /checkout/x.py --stage 2 build --host= --target $UEFI_TARGETS && \
9392
python3 /checkout/x.py --stage 2 test tests/run-make-cargo/uefi-qemu/rmake.rs --target aarch64-unknown-uefi && \
9493
python3 /checkout/x.py --stage 2 test tests/run-make-cargo/uefi-qemu/rmake.rs --target i686-unknown-uefi && \
95-
python3 /checkout/x.py --stage 2 test tests/run-make-cargo/uefi-qemu/rmake.rs --target x86_64-unknown-uefi
94+
python3 /checkout/x.py --stage 2 test tests/run-make-cargo/uefi-qemu/rmake.rs --target x86_64-unknown-uefi"
9695

97-
ENV SCRIPT $WASM_WASIP_SCRIPT && $NVPTX_SCRIPT && $MUSL_SCRIPT && $UEFI_SCRIPT
96+
ENV SCRIPT="$WASM_WASIP_SCRIPT && $NVPTX_SCRIPT && $MUSL_SCRIPT && $UEFI_SCRIPT"

src/doc/rustc-dev-guide/src/early-late-parameters.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,12 @@
33

44
> **NOTE**: This chapter largely talks about early/late bound as being solely relevant when discussing function item types/function definitions. This is potentially not completely true, async blocks and closures should likely be discussed somewhat in this chapter.
55
6+
See also these blog posts from when the distinction between early and late bound parameters was
7+
introduced: [Intermingled parameter lists] and [Intermingled parameter lists, take 2].
8+
9+
[Intermingled parameter lists]: https://smallcultfollowing.com/babysteps/blog/2013/10/29/intermingled-parameter-lists/
10+
[Intermingled parameter lists, take 2]: https://smallcultfollowing.com/babysteps/blog/2013/11/04/intermingled-parameter-lists/
11+
612
## What does it mean to be "early" bound or "late" bound
713

814
Every function definition has a corresponding ZST that implements the `Fn*` traits known as a [function item type][function_item_type]. This part of the chapter will talk a little bit about the "desugaring" of function item types as it is useful context for explaining the difference between early bound and late bound generic parameters.

src/doc/rustc-dev-guide/src/tests/compiletest.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -836,3 +836,20 @@ In CI, compare modes are only used in one Linux builder, and only with the follo
836836
Note that compare modes are separate to [revisions](#revisions).
837837
All revisions are tested when running `./x test tests/ui`, however compare-modes must be
838838
manually run individually via the `--compare-mode` flag.
839+
840+
## Parallel frontend
841+
842+
Compiletest can be run with the `--parallel-frontend-threads` flag to run the compiler in parallel mode.
843+
This can be used to check that the compiler produces the same output in parallel mode as in non-parallel mode, and to check for any issues that might arise in parallel mode.
844+
845+
To run the tests in parallel mode, you need to pass the `--parallel-frontend-threads` CLI flag:
846+
847+
```bash
848+
./x test tests/ui -- --parallel-frontend-threads=N --iteration-count=M
849+
```
850+
851+
Where `N` is the number of threads to use for the parallel frontend, and `M` is the number of times to run each test in parallel mode (to increase the chances of catching any non-determinism).
852+
853+
Also, when running with `--parallel-frontend-threads`, the `compare-output-by-lines` directive would be implied for all tests, since the output from the parallel frontend can be non-deterministic in terms of the order of lines.
854+
855+
The parallel frontend is available in UI tests only at the moment, and is not currently supported in other test suites.

src/doc/rustc-dev-guide/src/tests/directives.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ Some examples of `X` in `ignore-X` or `only-X`:
148148
- When [remote testing] is used: `remote`
149149
- When particular debuggers are being tested: `cdb`, `gdb`, `lldb`
150150
- When particular debugger versions are matched: `ignore-gdb-version`
151+
- When the [parallel frontend] is enabled: `ignore-parallel-frontend`
151152
- Specific [compare modes]: `compare-mode-polonius`, `compare-mode-chalk`,
152153
`compare-mode-split-dwarf`, `compare-mode-split-dwarf-single`
153154
- The two different test modes used by coverage tests:
@@ -233,6 +234,7 @@ The following directives will check LLVM support:
233234
See also [Debuginfo tests](compiletest.md#debuginfo-tests) for directives for ignoring debuggers.
234235

235236
[remote testing]: running.md#running-tests-on-a-remote-machine
237+
[parallel frontend]: compiletest.md#parallel-frontend
236238
[compare modes]: ui.md#compare-modes
237239
[`x86_64-gnu-debug`]: https://github.com/rust-lang/rust/blob/ab3dba92db355b8d97db915a2dca161a117e959c/src/ci/docker/host-x86_64/x86_64-gnu-debug/Dockerfile#L32
238240
[`aarch64-gnu-debug`]: https://github.com/rust-lang/rust/blob/20c909ff9cdd88d33768a4ddb8952927a675b0ad/src/ci/docker/host-aarch64/aarch64-gnu-debug/Dockerfile#L32

0 commit comments

Comments
 (0)