Auto merge of #146610 - matthiaskrgr:rollup-xkt5kjz, r=matthiaskrgr

Rollup of 9 pull requests

Successful merges:

 - rust-lang/rust#146344 (tests/codegen-llvm: Make rust-abi-arch-specific-adjustment portable)
 - rust-lang/rust#146530 (rustc_codegen_llvm: Adjust RISC-V inline assembly's clobber list)
 - rust-lang/rust#146533 (Note some previous attempts to change the Default impl for `[T; 0]`)
 - rust-lang/rust#146539 (fix 404 MCP link)
 - rust-lang/rust#146546 (Switch `std::vec::PeekMut::pop` from self to this parameter.)
 - rust-lang/rust#146549 (On FreeBSD, use readdir instead of readdir_r)
 - rust-lang/rust#146559 (Fix typo in error message)
 - rust-lang/rust#146563 (bootstrap.py: disable incremental build for bootstrap in CI)
 - rust-lang/rust#146576 (opt-dist: don't set `RUST_LOG=collector=debug`)

r? `@ghost`
`@rustbot` modify labels: rollup
This commit is contained in:
bors 2025-09-15 23:12:06 +00:00
commit 9d82de19df
16 changed files with 107 additions and 88 deletions

View file

@ -609,6 +609,7 @@ Shohei Wada <pc@wada314.jp>
Shotaro Yamada <sinkuu@sinkuu.xyz>
Shotaro Yamada <sinkuu@sinkuu.xyz> <sinkuu@users.noreply.github.com>
Shyam Sundar B <shyambaskaran@outlook.com>
Sidney Cammeresi <sac@cheesecake.org> <sac@readyset.io>
Simon Barber-Dueck <sbarberdueck@gmail.com> Simon BD <simon@server>
Simon Sapin <simon@exyr.org> <simon.sapin@exyr.org>
Simonas Kazlauskas <git@kazlauskas.me> Simonas Kazlauskas <github@kazlauskas.me>

View file

@ -240,6 +240,7 @@ impl<'ll, 'tcx> AsmBuilderMethods<'tcx> for Builder<'_, 'll, 'tcx> {
}
InlineAsmArch::RiscV32 | InlineAsmArch::RiscV64 => {
constraints.extend_from_slice(&[
"~{fflags}".to_string(),
"~{vtype}".to_string(),
"~{vl}".to_string(),
"~{vxsat}".to_string(),

View file

@ -84,7 +84,7 @@ middle_failed_writing_file =
# Note: We only mention patterns here since the error can only occur with references, and those
# are forbidden in const generics.
middle_invalid_const_in_valtree = constant {$global_const_id} cannot be used as pattern
.note = constants that reference mutable or external memory cannot be used as pattern
.note = constants that reference mutable or external memory cannot be used as patterns
middle_layout_cycle =
a cycle occurred during layout computation

View file

@ -29,9 +29,9 @@ impl<'a, T> PeekMut<'a, T> {
/// Removes the peeked value from the vector and returns it.
#[unstable(feature = "vec_peek_mut", issue = "122742")]
pub fn pop(self) -> T {
pub fn pop(this: Self) -> T {
// SAFETY: PeekMut is only constructed if the vec is non-empty
unsafe { self.vec.pop().unwrap_unchecked() }
unsafe { this.vec.pop().unwrap_unchecked() }
}
}

View file

@ -15,7 +15,7 @@ use std::ops::Bound::*;
use std::panic::{AssertUnwindSafe, catch_unwind};
use std::rc::Rc;
use std::sync::atomic::{AtomicU32, Ordering};
use std::vec::{Drain, IntoIter};
use std::vec::{Drain, IntoIter, PeekMut};
use crate::testing::macros::struct_with_counted_drop;
@ -2647,7 +2647,7 @@ fn test_peek_mut() {
assert_eq!(*p, 2);
*p = 0;
assert_eq!(*p, 0);
p.pop();
PeekMut::pop(p);
assert_eq!(vec.len(), 1);
} else {
unreachable!()

View file

@ -472,6 +472,11 @@ impl<T: Copy> SpecArrayClone for T {
// The Default impls cannot be done with const generics because `[T; 0]` doesn't
// require Default to be implemented, and having different impl blocks for
// different numbers isn't supported yet.
//
// Trying to improve the `[T; 0]` situation has proven to be difficult.
// Please see these issues for more context on past attempts and crater runs:
// - https://github.com/rust-lang/rust/issues/61415
// - https://github.com/rust-lang/rust/pull/145457
macro_rules! array_impl_default {
{$n:expr, $t:ident $($ts:ident)*} => {

View file

@ -21,29 +21,31 @@ use libc::fstatat as fstatat64;
#[cfg(any(all(target_os = "linux", not(target_env = "musl")), target_os = "hurd"))]
use libc::fstatat64;
#[cfg(any(
target_os = "android",
target_os = "solaris",
target_os = "fuchsia",
target_os = "redox",
target_os = "illumos",
target_os = "aix",
target_os = "android",
target_os = "freebsd",
target_os = "fuchsia",
target_os = "illumos",
target_os = "nto",
target_os = "redox",
target_os = "solaris",
target_os = "vita",
all(target_os = "linux", target_env = "musl"),
))]
use libc::readdir as readdir64;
#[cfg(not(any(
target_os = "aix",
target_os = "android",
target_os = "linux",
target_os = "solaris",
target_os = "freebsd",
target_os = "fuchsia",
target_os = "hurd",
target_os = "illumos",
target_os = "l4re",
target_os = "fuchsia",
target_os = "redox",
target_os = "aix",
target_os = "linux",
target_os = "nto",
target_os = "redox",
target_os = "solaris",
target_os = "vita",
target_os = "hurd",
)))]
use libc::readdir_r as readdir64_r;
#[cfg(any(all(target_os = "linux", not(target_env = "musl")), target_os = "hurd"))]
@ -271,16 +273,17 @@ unsafe impl Send for Dir {}
unsafe impl Sync for Dir {}
#[cfg(any(
target_os = "android",
target_os = "linux",
target_os = "solaris",
target_os = "illumos",
target_os = "fuchsia",
target_os = "redox",
target_os = "aix",
target_os = "nto",
target_os = "vita",
target_os = "android",
target_os = "freebsd",
target_os = "fuchsia",
target_os = "hurd",
target_os = "illumos",
target_os = "linux",
target_os = "nto",
target_os = "redox",
target_os = "solaris",
target_os = "vita",
))]
pub struct DirEntry {
dir: Arc<InnerReadDir>,
@ -295,16 +298,17 @@ pub struct DirEntry {
// we're not using the immediate `d_name` on these targets. Keeping this as an
// `entry` field in `DirEntry` helps reduce the `cfg` boilerplate elsewhere.
#[cfg(any(
target_os = "android",
target_os = "linux",
target_os = "solaris",
target_os = "illumos",
target_os = "fuchsia",
target_os = "redox",
target_os = "aix",
target_os = "nto",
target_os = "vita",
target_os = "android",
target_os = "freebsd",
target_os = "fuchsia",
target_os = "hurd",
target_os = "illumos",
target_os = "linux",
target_os = "nto",
target_os = "redox",
target_os = "solaris",
target_os = "vita",
))]
struct dirent64_min {
d_ino: u64,
@ -319,16 +323,17 @@ struct dirent64_min {
}
#[cfg(not(any(
target_os = "android",
target_os = "linux",
target_os = "solaris",
target_os = "illumos",
target_os = "fuchsia",
target_os = "redox",
target_os = "aix",
target_os = "nto",
target_os = "vita",
target_os = "android",
target_os = "freebsd",
target_os = "fuchsia",
target_os = "hurd",
target_os = "illumos",
target_os = "linux",
target_os = "nto",
target_os = "redox",
target_os = "solaris",
target_os = "vita",
)))]
pub struct DirEntry {
dir: Arc<InnerReadDir>,
@ -698,16 +703,17 @@ impl Iterator for ReadDir {
type Item = io::Result<DirEntry>;
#[cfg(any(
target_os = "android",
target_os = "linux",
target_os = "solaris",
target_os = "fuchsia",
target_os = "redox",
target_os = "illumos",
target_os = "aix",
target_os = "nto",
target_os = "vita",
target_os = "android",
target_os = "freebsd",
target_os = "fuchsia",
target_os = "hurd",
target_os = "illumos",
target_os = "linux",
target_os = "nto",
target_os = "redox",
target_os = "solaris",
target_os = "vita",
))]
fn next(&mut self) -> Option<io::Result<DirEntry>> {
use crate::sys::os::{errno, set_errno};
@ -768,6 +774,9 @@ impl Iterator for ReadDir {
// only access those bytes.
#[cfg(not(target_os = "vita"))]
let entry = dirent64_min {
#[cfg(target_os = "freebsd")]
d_ino: (*entry_ptr).d_fileno,
#[cfg(not(target_os = "freebsd"))]
d_ino: (*entry_ptr).d_ino as u64,
#[cfg(not(any(
target_os = "solaris",
@ -791,16 +800,17 @@ impl Iterator for ReadDir {
}
#[cfg(not(any(
target_os = "android",
target_os = "linux",
target_os = "solaris",
target_os = "fuchsia",
target_os = "redox",
target_os = "illumos",
target_os = "aix",
target_os = "nto",
target_os = "vita",
target_os = "android",
target_os = "freebsd",
target_os = "fuchsia",
target_os = "hurd",
target_os = "illumos",
target_os = "linux",
target_os = "nto",
target_os = "redox",
target_os = "solaris",
target_os = "vita",
)))]
fn next(&mut self) -> Option<io::Result<DirEntry>> {
if self.end_of_stream {
@ -970,36 +980,32 @@ impl DirEntry {
}
#[cfg(any(
target_os = "linux",
target_os = "aix",
target_os = "android",
target_os = "cygwin",
target_os = "emscripten",
target_os = "android",
target_os = "solaris",
target_os = "illumos",
target_os = "haiku",
target_os = "l4re",
target_os = "fuchsia",
target_os = "redox",
target_os = "vxworks",
target_os = "espidf",
target_os = "freebsd",
target_os = "fuchsia",
target_os = "haiku",
target_os = "horizon",
target_os = "vita",
target_os = "aix",
target_os = "nto",
target_os = "hurd",
target_os = "illumos",
target_os = "l4re",
target_os = "linux",
target_os = "nto",
target_os = "redox",
target_os = "rtems",
target_os = "solaris",
target_os = "vita",
target_os = "vxworks",
target_vendor = "apple",
))]
pub fn ino(&self) -> u64 {
self.entry.d_ino as u64
}
#[cfg(any(
target_os = "freebsd",
target_os = "openbsd",
target_os = "netbsd",
target_os = "dragonfly"
))]
#[cfg(any(target_os = "openbsd", target_os = "netbsd", target_os = "dragonfly"))]
pub fn ino(&self) -> u64 {
self.entry.d_fileno as u64
}
@ -1014,7 +1020,6 @@ impl DirEntry {
#[cfg(any(
target_os = "netbsd",
target_os = "openbsd",
target_os = "freebsd",
target_os = "dragonfly",
target_vendor = "apple",
))]
@ -1030,7 +1035,6 @@ impl DirEntry {
#[cfg(not(any(
target_os = "netbsd",
target_os = "openbsd",
target_os = "freebsd",
target_os = "dragonfly",
target_vendor = "apple",
)))]
@ -1040,6 +1044,7 @@ impl DirEntry {
#[cfg(not(any(
target_os = "android",
target_os = "freebsd",
target_os = "linux",
target_os = "solaris",
target_os = "illumos",
@ -1055,6 +1060,7 @@ impl DirEntry {
}
#[cfg(any(
target_os = "android",
target_os = "freebsd",
target_os = "linux",
target_os = "solaris",
target_os = "illumos",

View file

@ -1039,6 +1039,9 @@ class RustBuild(object):
# See also: <https://github.com/rust-lang/rust/issues/70208>.
if "CARGO_BUILD_TARGET" in env:
del env["CARGO_BUILD_TARGET"]
# if in CI, don't use incremental build when building bootstrap.
if "GITHUB_ACTIONS" in env:
env["CARGO_INCREMENTAL"] = "0"
env["CARGO_TARGET_DIR"] = build_dir
env["RUSTC"] = self.rustc()
env["LD_LIBRARY_PATH"] = (

View file

@ -701,4 +701,4 @@ RFC process, with approval by the compiler and infra teams. Any such proposal
will be communicated widely to the Rust community, both when initially proposed
and before being dropped from a stable release.
[MCP]: https://forge.rust-lang.org/compiler/mcp.html
[MCP]: https://forge.rust-lang.org/compiler/proposals-and-stabilization.html#how-do-i-submit-an-mcp

View file

@ -39,7 +39,6 @@ fn init_compiler_benchmarks(
"--exact-match",
crates.join(",").as_str(),
])
.env("RUST_LOG", "collector=debug")
.env("RUSTC", env.rustc_stage_0().as_str())
.env("RUSTC_BOOTSTRAP", "1")
.workdir(&env.rustc_perf_dir());

View file

@ -17,7 +17,7 @@ extern crate minicore;
use minicore::*;
// CHECK-LABEL: @flags_clobber
// CHECK: call void asm sideeffect "", "~{vtype},~{vl},~{vxsat},~{vxrm}"()
// CHECK: call void asm sideeffect "", "~{fflags},~{vtype},~{vl},~{vxsat},~{vxrm}"()
#[no_mangle]
pub unsafe fn flags_clobber() {
asm!("", options(nostack, nomem));

View file

@ -1,15 +1,19 @@
//@ add-core-stubs
//@ compile-flags: -Copt-level=3 -C no-prepopulate-passes
//@ revisions: riscv64 loongarch64
//@[riscv64] only-riscv64
//@[riscv64] compile-flags: --target riscv64gc-unknown-linux-gnu
//@[riscv64] needs-llvm-components: riscv
//@[loongarch64] only-loongarch64
//@[loongarch64] compile-flags: --target loongarch64-unknown-linux-gnu
//@[loongarch64] needs-llvm-components: loongarch
#![crate_type = "lib"]
#![feature(no_core)]
#![no_core]
extern crate minicore;
use minicore::*;
#[no_mangle]
// riscv64: define noundef i8 @arg_attr_u8(i8 noundef zeroext %x)

View file

@ -16,7 +16,7 @@ error: constant BAD_PATTERN cannot be used as pattern
LL | BAD_PATTERN => {},
| ^^^^^^^^^^^
|
= note: constants that reference mutable or external memory cannot be used as pattern
= note: constants that reference mutable or external memory cannot be used as patterns
error: aborting due to 3 previous errors

View file

@ -15,7 +15,7 @@ error: constant extern_::C cannot be used as pattern
LL | C => {}
| ^
|
= note: constants that reference mutable or external memory cannot be used as pattern
= note: constants that reference mutable or external memory cannot be used as patterns
error: constant mutable::C cannot be used as pattern
--> $DIR/const_refs_to_static_fail_invalid.rs:42:9
@ -23,7 +23,7 @@ error: constant mutable::C cannot be used as pattern
LL | C => {}
| ^
|
= note: constants that reference mutable or external memory cannot be used as pattern
= note: constants that reference mutable or external memory cannot be used as patterns
error: aborting due to 3 previous errors

View file

@ -22,7 +22,7 @@ error: constant REF_INTERIOR_MUT cannot be used as pattern
LL | REF_INTERIOR_MUT => {},
| ^^^^^^^^^^^^^^^^
|
= note: constants that reference mutable or external memory cannot be used as pattern
= note: constants that reference mutable or external memory cannot be used as patterns
warning: skipping const checks
|

View file

@ -10,7 +10,7 @@ error: constant SLICE_MUT cannot be used as pattern
LL | SLICE_MUT => true,
| ^^^^^^^^^
|
= note: constants that reference mutable or external memory cannot be used as pattern
= note: constants that reference mutable or external memory cannot be used as patterns
error: constant U8_MUT cannot be used as pattern
--> $DIR/const_refers_to_static_cross_crate.rs:44:9
@ -18,7 +18,7 @@ error: constant U8_MUT cannot be used as pattern
LL | U8_MUT => true,
| ^^^^^^
|
= note: constants that reference mutable or external memory cannot be used as pattern
= note: constants that reference mutable or external memory cannot be used as patterns
error: constant U8_MUT2 cannot be used as pattern
--> $DIR/const_refers_to_static_cross_crate.rs:53:9
@ -26,7 +26,7 @@ error: constant U8_MUT2 cannot be used as pattern
LL | U8_MUT2 => true,
| ^^^^^^^
|
= note: constants that reference mutable or external memory cannot be used as pattern
= note: constants that reference mutable or external memory cannot be used as patterns
error: aborting due to 4 previous errors