Skip to content

Commit f1eab64

Browse files
committed
Auto merge of #113769 - matthiaskrgr:rollup-p6i1rco, r=matthiaskrgr
Rollup of 7 pull requests Successful merges: - #113042 (Add Platform Support documentation for MIPS Release 6 targets) - #113539 (fixed typo) - #113614 (platform-support.md: It's now verified that NetBSD/riscv64 can self-h…) - #113750 (Add missing italicization to `sort_unstable_by_key` complexity ) - #113755 (Normalize lazy type aliases when probing for ADTs) - #113756 (fix wrong link) - #113762 (Fix typo) r? `@ghost` `@rustbot` modify labels: rollup
2 parents 0e8e857 + a7d31de commit f1eab64

File tree

11 files changed

+218
-17
lines changed

11 files changed

+218
-17
lines changed

RELEASES.md

+6-6
Original file line numberDiff line numberDiff line change
@@ -203,7 +203,7 @@ Stabilized APIs
203203
- [`Default for std::collections::binary_heap::IntoIter`](https://doc.rust-lang.org/stable/std/collections/binary_heap/struct.IntoIter.html)
204204
- [`Default for std::collections::btree_map::{IntoIter, Iter, IterMut}`](https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoIter.html)
205205
- [`Default for std::collections::btree_map::{IntoKeys, Keys}`](https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoKeys.html)
206-
- [`Default for std::collections::btree_map::{IntoValues, Values}`](https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoKeys.html)
206+
- [`Default for std::collections::btree_map::{IntoValues, Values}`](https://doc.rust-lang.org/stable/std/collections/btree_map/struct.IntoValues.html)
207207
- [`Default for std::collections::btree_map::Range`](https://doc.rust-lang.org/stable/std/collections/btree_map/struct.Range.html)
208208
- [`Default for std::collections::btree_set::{IntoIter, Iter}`](https://doc.rust-lang.org/stable/std/collections/btree_set/struct.IntoIter.html)
209209
- [`Default for std::collections::btree_set::Range`](https://doc.rust-lang.org/stable/std/collections/btree_set/struct.Range.html)
@@ -2618,7 +2618,7 @@ related tools.
26182618
[`OsStr::to_ascii_lowercase`]: https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.to_ascii_lowercase
26192619
[`OsStr::to_ascii_uppercase`]: https://doc.rust-lang.org/std/ffi/struct.OsStr.html#method.to_ascii_uppercase
26202620
[`Peekable::peek_mut`]: https://doc.rust-lang.org/std/iter/struct.Peekable.html#method.peek_mut
2621-
[`Rc::decrement_strong_count`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.increment_strong_count
2621+
[`Rc::decrement_strong_count`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.decrement_strong_count
26222622
[`Rc::increment_strong_count`]: https://doc.rust-lang.org/std/rc/struct.Rc.html#method.increment_strong_count
26232623
[`Vec::extend_from_within`]: https://doc.rust-lang.org/beta/std/vec/struct.Vec.html#method.extend_from_within
26242624
[`array::from_mut`]: https://doc.rust-lang.org/beta/std/array/fn.from_mut.html
@@ -2627,7 +2627,7 @@ related tools.
26272627
[`cmp::max_by`]: https://doc.rust-lang.org/beta/std/cmp/fn.max_by.html
26282628
[`cmp::min_by_key`]: https://doc.rust-lang.org/beta/std/cmp/fn.min_by_key.html
26292629
[`cmp::min_by`]: https://doc.rust-lang.org/beta/std/cmp/fn.min_by.html
2630-
[`f32::is_subnormal`]: https://doc.rust-lang.org/std/primitive.f64.html#method.is_subnormal
2630+
[`f32::is_subnormal`]: https://doc.rust-lang.org/std/primitive.f32.html#method.is_subnormal
26312631
[`f64::is_subnormal`]: https://doc.rust-lang.org/std/primitive.f64.html#method.is_subnormal
26322632
[ietf6943]: https://datatracker.ietf.org/doc/html/rfc6943#section-3.1.1
26332633

@@ -2963,7 +2963,7 @@ Internal Only
29632963
[`sync::OnceState`]: https://doc.rust-lang.org/stable/std/sync/struct.OnceState.html
29642964
[`panic::panic_any`]: https://doc.rust-lang.org/stable/std/panic/fn.panic_any.html
29652965
[`slice::strip_prefix`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.strip_prefix
2966-
[`slice::strip_suffix`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.strip_prefix
2966+
[`slice::strip_suffix`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.strip_suffix
29672967
[`Arc::increment_strong_count`]: https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.increment_strong_count
29682968
[`Arc::decrement_strong_count`]: https://doc.rust-lang.org/nightly/std/sync/struct.Arc.html#method.decrement_strong_count
29692969
[`slice::fill_with`]: https://doc.rust-lang.org/nightly/std/primitive.slice.html#method.fill_with
@@ -8033,7 +8033,7 @@ Compatibility Notes
80338033
[39379]: https://github.com/rust-lang/rust/pull/39379
80348034
[41105]: https://github.com/rust-lang/rust/issues/41105
80358035
[`<*const T>::wrapping_offset`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_offset
8036-
[`<*mut T>::wrapping_offset`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_offset
8036+
[`<*mut T>::wrapping_offset`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_offset-1
80378037
[`Duration::checked_add`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_add
80388038
[`Duration::checked_div`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_div
80398039
[`Duration::checked_mul`]: https://doc.rust-lang.org/std/time/struct.Duration.html#method.checked_mul
@@ -9011,7 +9011,7 @@ Stabilized APIs
90119011
* [`f64::to_radians`](https://doc.rust-lang.org/std/primitive.f64.html#method.to_radians)
90129012
(in libcore - previously stabilized in libstd)
90139013
* [`Iterator::sum`](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.sum)
9014-
* [`Iterator::product`](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.sum)
9014+
* [`Iterator::product`](https://doc.rust-lang.org/std/iter/trait.Iterator.html#method.product)
90159015
* [`Cell::get_mut`](https://doc.rust-lang.org/std/cell/struct.Cell.html#method.get_mut)
90169016
* [`RefCell::get_mut`](https://doc.rust-lang.org/std/cell/struct.RefCell.html#method.get_mut)
90179017

compiler/rustc_hir_typeck/src/fn_ctxt/mod.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,9 @@ impl<'a, 'tcx> AstConv<'tcx> for FnCtxt<'a, 'tcx> {
302302
match ty.kind() {
303303
ty::Adt(adt_def, _) => Some(*adt_def),
304304
// FIXME(#104767): Should we handle bound regions here?
305-
ty::Alias(ty::Projection | ty::Inherent, _) if !ty.has_escaping_bound_vars() => {
305+
ty::Alias(ty::Projection | ty::Inherent | ty::Weak, _)
306+
if !ty.has_escaping_bound_vars() =>
307+
{
306308
self.normalize(span, ty).ty_adt_def()
307309
}
308310
_ => None,

compiler/rustc_middle/src/ty/consts/valtree.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ pub enum ValTree<'tcx> {
2424
Leaf(ScalarInt),
2525

2626
//SliceOrStr(ValSlice<'tcx>),
27-
// dont use SliceOrStr for now
27+
// don't use SliceOrStr for now
2828
/// The fields of any kind of aggregate. Structs, tuples and arrays are represented by
2929
/// listing their fields' values in order.
3030
///

compiler/rustc_trait_selection/src/traits/wf.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -570,7 +570,7 @@ impl<'a, 'tcx> WfPredicates<'a, 'tcx> {
570570
));
571571
}
572572
ty::ConstKind::Expr(_) => {
573-
// FIXME(generic_const_exprs): this doesnt verify that given `Expr(N + 1)` the
573+
// FIXME(generic_const_exprs): this doesn't verify that given `Expr(N + 1)` the
574574
// trait bound `typeof(N): Add<typeof(1)>` holds. This is currently unnecessary
575575
// as `ConstKind::Expr` is only produced via normalization of `ConstKind::Unevaluated`
576576
// which means that the `DefId` would have been typeck'd elsewhere. However in

compiler/rustc_ty_utils/src/consts.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ fn recurse_build<'tcx>(
174174
}
175175
// `ExprKind::Use` happens when a `hir::ExprKind::Cast` is a
176176
// "coercion cast" i.e. using a coercion or is a no-op.
177-
// This is important so that `N as usize as usize` doesnt unify with `N as usize`. (untested)
177+
// This is important so that `N as usize as usize` doesn't unify with `N as usize`. (untested)
178178
&ExprKind::Use { source } => {
179179
let arg = recurse_build(tcx, body, source, root_span)?;
180180
ty::Const::new_expr(tcx, Expr::Cast(CastKind::Use, arg, node.ty), node.ty)

library/core/src/result.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -749,7 +749,7 @@ impl<T, E> Result<T, E> {
749749
}
750750

751751
/// Returns the provided default (if [`Err`]), or
752-
/// applies a function to the contained value (if [`Ok`]),
752+
/// applies a function to the contained value (if [`Ok`]).
753753
///
754754
/// Arguments passed to `map_or` are eagerly evaluated; if you are passing
755755
/// the result of a function call, it is recommended to use [`map_or_else`],

library/core/src/slice/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2957,7 +2957,7 @@ impl<T> [T] {
29572957
/// elements.
29582958
///
29592959
/// This sort is unstable (i.e., may reorder equal elements), in-place
2960-
/// (i.e., does not allocate), and *O*(m \* *n* \* log(*n*)) worst-case, where the key function is
2960+
/// (i.e., does not allocate), and *O*(*m* \* *n* \* log(*n*)) worst-case, where the key function is
29612961
/// *O*(*m*).
29622962
///
29632963
/// # Current implementation

src/doc/rustc/src/SUMMARY.md

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
- [m68k-unknown-linux-gnu](platform-support/m68k-unknown-linux-gnu.md)
3737
- [mips64-openwrt-linux-musl](platform-support/mips64-openwrt-linux-musl.md)
3838
- [mipsel-sony-psx](platform-support/mipsel-sony-psx.md)
39+
- [mipsisa\*r6\*-unknown-linux-gnu\*](platform-support/mips-release-6.md)
3940
- [nvptx64-nvidia-cuda](platform-support/nvptx64-nvidia-cuda.md)
4041
- [riscv32imac-unknown-xous-elf](platform-support/riscv32imac-unknown-xous-elf.md)
4142
- [*-pc-windows-gnullvm](platform-support/pc-windows-gnullvm.md)

src/doc/rustc/src/platform-support.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -277,10 +277,10 @@ target | std | host | notes
277277
[`mipsel-sony-psx`](platform-support/mipsel-sony-psx.md) | * | | MIPS (LE) Sony PlayStation 1 (PSX)
278278
`mipsel-unknown-linux-uclibc` | ✓ | | MIPS (LE) Linux with uClibc
279279
`mipsel-unknown-none` | * | | Bare MIPS (LE) softfloat
280-
`mipsisa32r6-unknown-linux-gnu` | ? | |
281-
`mipsisa32r6el-unknown-linux-gnu` | ? | |
282-
`mipsisa64r6-unknown-linux-gnuabi64` | ? | |
283-
`mipsisa64r6el-unknown-linux-gnuabi64` | ? | |
280+
[`mipsisa32r6-unknown-linux-gnu`](platform-support/mips-release-6.md) | ? | | 32-bit MIPS Release 6 Big Endian
281+
[`mipsisa32r6el-unknown-linux-gnu`](platform-support/mips-release-6.md) | ? | | 32-bit MIPS Release 6 Little Endian
282+
[`mipsisa64r6-unknown-linux-gnuabi64`](platform-support/mips-release-6.md) | ? | | 64-bit MIPS Release 6 Big Endian
283+
[`mipsisa64r6el-unknown-linux-gnuabi64`](platform-support/mips-release-6.md) | | ✓ | 64-bit MIPS Release 6 Little Endian
284284
`msp430-none-elf` | * | | 16-bit MSP430 microcontrollers
285285
`powerpc-unknown-linux-gnuspe` | ✓ | | PowerPC SPE Linux
286286
`powerpc-unknown-linux-musl` | ? | |
@@ -305,7 +305,7 @@ target | std | host | notes
305305
`riscv64gc-unknown-freebsd` | | | RISC-V FreeBSD
306306
`riscv64gc-unknown-fuchsia` | | | RISC-V Fuchsia
307307
`riscv64gc-unknown-linux-musl` | | | RISC-V Linux (kernel 4.20, musl 1.2.0)
308-
[`riscv64gc-unknown-netbsd`](platform-support/netbsd.md) | ✓ | ? | RISC-V NetBSD
308+
[`riscv64gc-unknown-netbsd`](platform-support/netbsd.md) | ✓ | | RISC-V NetBSD
309309
[`riscv64gc-unknown-openbsd`](platform-support/openbsd.md) | ✓ | ✓ | OpenBSD/riscv64
310310
`s390x-unknown-linux-musl` | | | S390x Linux (kernel 3.2, MUSL)
311311
`sparc-unknown-linux-gnu` | ✓ | | 32-bit SPARC Linux
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
# mipsisa\*r6\*-unknown-linux-gnu\*
2+
3+
**Tier: 3**
4+
5+
[MIPS Release 6](https://s3-eu-west-1.amazonaws.com/downloads-mips/documents/MD00083-2B-MIPS64INT-AFP-06.01.pdf), or simply MIPS R6, is the latest iteration of the MIPS instruction set architecture (ISA).
6+
7+
MIPS R6 is experimental in nature, as there is not yet real hardware. However, Qemu emulation is available and we have two Linux distros maintained for development and evaluation purposes. This documentation describes the Rust support for MIPS R6 targets under `mipsisa*r6*-unknown-linux-gnu*`.
8+
9+
The target name follow this format: `<machine>-<vendor>-<os><abi_suffix>`, where `<machine>` specifies the CPU family/model, `<vendor>` specifies the vendor and `<os>` the operating system name. The `<abi_suffix>` denotes the base ABI (32/n32/64/o64).
10+
11+
| ABI suffix | Description |
12+
|------------|------------------------------------|
13+
| abi64 | Uses the 64-bit (64) ABI |
14+
| abin32 | Uses the n32 ABI |
15+
| N/A | Uses the (assumed) 32-bit (32) ABI |
16+
17+
## Target Maintainers
18+
19+
- [Xuan Chen](https://github.com/chenx97) <[email protected]>
20+
- [Walter Ji](https://github.com/709924470) <[email protected]>
21+
- [Xinhui Yang](https://github.com/Cyanoxygen) <[email protected]>
22+
- [Lain Yang](https://github.com/Fearyncess) <[email protected]>
23+
24+
## Requirements
25+
26+
### C/C++ Toolchain
27+
28+
A GNU toolchain for one of the MIPS R6 target is required. [AOSC OS](https://aosc.io/) provides working native and cross-compiling build environments. You may also supply your own a toolchain consisting of recent versions of GCC and Binutils.
29+
30+
### Target libraries
31+
32+
A minimum set of libraries is required to perform dynamic linking:
33+
34+
- GNU glibc
35+
- OpenSSL
36+
- Zlib
37+
- Linux API Headers
38+
39+
This set of libraries should be installed to make up minimal target sysroot.
40+
41+
For AOSC OS, You may install such a sysroot with the following commands:
42+
43+
```sh
44+
cd /tmp
45+
46+
# linux+api, glibc, and file system structure are included in the toolchain.
47+
sudo apt install gcc+cross-mips64r6el binutils+cross-mips64r6el
48+
49+
# Download and extract required libraries.
50+
wget https://repo.aosc.io/debs/pool/stable/main/z/zlib_1.2.13-0_mips64r6el.deb -O zlib.deb
51+
wget https://repo.aosc.io/debs/pool/stable/main/o/openssl_1.1.1q-1_mips64r6el.deb -O openssl.deb
52+
53+
# Extract them to your desired location.
54+
for i in zlib openssl ; do
55+
sudo dpkg-deb -vx $i.deb /var/ab/cross-root/mips64r6el
56+
done
57+
58+
# Workaround a possible ld bug when using -Wl,-Bdynamic.
59+
sudo sed -i 's|/usr|=/usr|g' /var/ab/cross-root/mips64r6el/usr/lib/libc.so
60+
```
61+
62+
For other distros, you may build them manually.
63+
64+
## Building
65+
66+
The following procedure outlines the build process for the MIPS64 R6 target with 64-bit (64) ABI (`mipsisa64r6el-unknown-linux-gnuabi64`).
67+
68+
### Prerequisite: Disable debuginfo
69+
70+
A LLVM bug makes rustc crash if debug or debug info generation is enabled. You need to edit `config.toml` to disable this:
71+
72+
```toml
73+
[rust]
74+
debug = false
75+
debug-info-level = 0
76+
```
77+
78+
### Prerequisite: Enable rustix's libc backend
79+
80+
The crate `rustix` may try to link itself against MIPS R2 assembly, resulting in linkage error. To avoid this, you may force `rustix` to use its fallback `libc` backend by setting relevant `RUSTFLAGS`:
81+
82+
```sh
83+
export RUSTFLAGS="--cfg rustix_use_libc"
84+
```
85+
86+
This will trigger warnings during build, as `-D warnings` is enabled by default. Disable `-D warnings` by editing `config.toml` to append the following:
87+
88+
```toml
89+
[rust]
90+
deny-warnings = false
91+
```
92+
93+
### Prerequisite: Supplying OpenSSL
94+
95+
As a Tier 3 target, `openssl_sys` lacks the vendored OpenSSL library for this target. You will need to provide a prebuilt OpenSSL library to link `cargo`. Since we have a pre-configured sysroot, we can point to it directly:
96+
97+
```sh
98+
export MIPSISA64R6EL_UNKNOWN_LINUX_GNUABI64_OPENSSL_NO_VENDOR=y
99+
export MIPSISA64R6EL_UNKNOWN_LINUX_GNUABI64_OPENSSL_DIR="/var/ab/cross-root/mips64r6el/usr"
100+
```
101+
102+
On Debian, you may need to provide library path and include path separately:
103+
104+
```sh
105+
export MIPSISA64R6EL_UNKNOWN_LINUX_GNUABI64_OPENSSL_NO_VENDOR=y
106+
export MIPSISA64R6EL_UNKNOWN_LINUX_GNUABI64_OPENSSL_LIB_DIR="/usr/lib/mipsisa64r6el-linux-gnuabi64/"
107+
export MIPSISA64R6EL_UNKNOWN_LINUX_GNUABI64_OPENSSL_INCLUDE_DIR="/usr/include"
108+
```
109+
110+
### Launching `x.py`
111+
112+
```toml
113+
[build]
114+
target = ["mipsisa64r6el-unknown-linux-gnuabi64"]
115+
```
116+
117+
Make sure that `mipsisa64r6el-unknown-linux-gnuabi64-gcc` is available from your executable search path (`$PATH`).
118+
119+
Alternatively, you can specify the directories to all necessary toolchain executables in `config.toml`:
120+
121+
```toml
122+
[target.mipsisa64r6el-unknown-linux-gnuabi64]
123+
# Adjust the paths below to point to your toolchain installation prefix.
124+
cc = "/toolchain_prefix/bin/mipsisa64r6el-unknown-linux-gnuabi64-gcc"
125+
cxx = "/toolchain_prefix/bin/mipsisa64r6el-unknown-linux-gnuabi64-g++"
126+
ar = "/toolchain_prefix/bin/mipsisa64r6el-unknown-linux-gnuabi64-gcc-ar"
127+
ranlib = "/toolchain_prefix/bin/mipsisa64r6el-unknown-linux-gnuabi64-ranlib"
128+
linker = "/toolchain_prefix/bin/mipsisa64r6el-unknown-linux-gnuabi64-gcc"
129+
```
130+
131+
Or, you can specify your cross compiler toolchain with an environment variable:
132+
133+
```sh
134+
export CROSS_COMPILE="/opt/abcross/mips64r6el/bin/mipsisa64r6el-aosc-linux-gnuabi64-"
135+
```
136+
137+
Finally, launch the build script:
138+
139+
```sh
140+
./x.py build
141+
```
142+
143+
### Tips
144+
145+
- Avoid setting `cargo-native-static` to `false`, as this will result in a redundant artifact error while building clippy:
146+
```text
147+
duplicate artifacts found when compiling a tool, this typically means that something was recompiled because a transitive dependency has different features activated than in a previous build:
148+
149+
the following dependencies have different features:
150+
syn 2.0.8 (registry+https://github.com/rust-lang/crates.io-index)
151+
`clippy-driver` additionally enabled features {"full"} at ...
152+
`cargo` additionally enabled features {} at ...
153+
154+
to fix this you will probably want to edit the local src/tools/rustc-workspace-hack/Cargo.toml crate, as that will update the dependency graph to ensure that these crates all share the same feature set
155+
thread 'main' panicked at 'tools should not compile multiple copies of the same crate', tool.rs:250:13
156+
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
157+
```
158+
159+
## Building Rust programs
160+
161+
To build Rust programs for MIPS R6 targets, for instance, the `mipsisa64r6el-unknown-linux-gnuabi64` target:
162+
163+
```bash
164+
cargo build --target mipsisa64r6el-unknown-linux-gnuabi64
165+
```
166+
167+
## Testing
168+
169+
To test a cross-compiled binary on your build system, install the Qemu user emulator that support the MIPS R6 architecture (`qemu-user-mipsel` or `qemu-user-mips64el`). GCC runtime libraries (`libgcc_s`) for the target architecture should be present in target sysroot to run the program.
170+
171+
```sh
172+
env \
173+
CARGO_TARGET_MIPSISA64R6EL_UNKNOWN_LINUX_GNUABI64_LINKER="/opt/abcross/mips64r6el/bin/mipsisa64r6el-aosc-linux-gnuabi64-gcc" \
174+
CARGO_TARGET_MIPSISA64R6EL_UNKNOWN_LINUX_GNUABI64_RUNNER="qemu-mips64el-static -L /var/ab/cross-root/mips64r6el" \
175+
cargo run --release \
176+
--target mipsisa64r6el-unknown-linux-gnuabi64
177+
```
178+
179+
## Tips for building Rust programs for MIPS R6
180+
181+
- Until we finalize a fix, please make sure the aforementioned workarounds for `rustix` crate and LLVM are always applied. This can be achieved by setting the relevant environment variables, and editing `Cargo.toml` before building.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// Regression test for issue #113736.
2+
// check-pass
3+
4+
#![feature(lazy_type_alias)]
5+
6+
enum Enum {
7+
Unit,
8+
Tuple(),
9+
Struct {},
10+
}
11+
12+
fn main() {
13+
type Alias = Enum;
14+
let _ = Alias::Unit;
15+
let _ = Alias::Tuple();
16+
let _ = Alias::Struct {};
17+
}

0 commit comments

Comments
 (0)