Skip to content

Rollup of 5 pull requests #135040

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
Jan 2, 2025
5 changes: 5 additions & 0 deletions .mailmap
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,9 @@ Eduardo Broto <ebroto@tutanota.com>
Edward Shen <code@eddie.sh> <xes@meta.com>
Jacob Finkelman <eh2406@wayne.edu>
Jacob Finkelman <eh2406@wayne.edu> <YeomanYaacov@gmail.com>
Jacob Finkelman <eh2406@wayne.edu> <jfinkelm@amazon.com>
Jacob Finkelman <eh2406@wayne.edu> <finkelman@semcog.org>
Jacob Finkelman <eh2406@wayne.edu> <Eh2406@users.noreply.github.com>
Elliott Slaughter <elliottslaughter@gmail.com> <eslaughter@mozilla.com>
Elly Fong-Jones <elly@leptoquark.net>
Eric Holk <eric.holk@gmail.com> <eholk@cs.indiana.edu>
Expand Down Expand Up @@ -654,6 +657,8 @@ Vitali Haravy <HumaneProgrammer@gmail.com> Vitali Haravy <humaneprogrammer@gmail
Vitaly Shukela <vi0oss@gmail.com>
Waffle Lapkin <waffle.lapkin@gmail.com>
Waffle Lapkin <waffle.lapkin@gmail.com> <waffle.lapkin@tasking.com>
Weihang Lo <me@weihanglo.tw>
Weihang Lo <me@weihanglo.tw> <weihanglo@users.noreply.github.com>
Wesley Wiser <wwiser@gmail.com> <wesleywiser@microsoft.com>
whitequark <whitequark@whitequark.org>
William Ting <io@williamting.com> <william.h.ting@gmail.com>
Expand Down
8 changes: 0 additions & 8 deletions compiler/rustc_codegen_llvm/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -610,14 +610,6 @@ impl<'a, 'll, 'tcx> BuilderMethods<'a, 'tcx> for Builder<'a, 'll, 'tcx> {
}

fn range_metadata(&mut self, load: &'ll Value, range: WrappingRange) {
if self.sess().target.arch == "amdgpu" {
// amdgpu/LLVM does something weird and thinks an i64 value is
// split into a v2i32, halving the bitwidth LLVM expects,
// tripping an assertion. So, for now, just disable this
// optimization.
return;
}

if self.cx.sess().opts.optimize == OptLevel::No {
// Don't emit metadata we're not going to use
return;
Expand Down
65 changes: 45 additions & 20 deletions src/bootstrap/src/core/build_steps/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,19 @@ use crate::core::builder::Builder;
use crate::utils::exec::command;
use crate::utils::helpers::{self, program_out_of_date, t};

fn rustfmt(src: &Path, rustfmt: &Path, paths: &[PathBuf], check: bool) -> impl FnMut(bool) -> bool {
#[must_use]
enum RustfmtStatus {
InProgress,
Ok,
Failed,
}

fn rustfmt(
src: &Path,
rustfmt: &Path,
paths: &[PathBuf],
check: bool,
) -> impl FnMut(bool) -> RustfmtStatus {
let mut cmd = Command::new(rustfmt);
// Avoid the submodule config paths from coming into play. We only allow a single global config
// for the workspace for now.
Expand All @@ -26,30 +38,20 @@ fn rustfmt(src: &Path, rustfmt: &Path, paths: &[PathBuf], check: bool) -> impl F
cmd.arg("--check");
}
cmd.args(paths);
let cmd_debug = format!("{cmd:?}");
let mut cmd = cmd.spawn().expect("running rustfmt");
// Poor man's async: return a closure that might wait for rustfmt's completion (depending on
// the value of the `block` argument).
move |block: bool| -> bool {
move |block: bool| -> RustfmtStatus {
let status = if !block {
match cmd.try_wait() {
Ok(Some(status)) => Ok(status),
Ok(None) => return false,
Ok(None) => return RustfmtStatus::InProgress,
Err(err) => Err(err),
}
} else {
cmd.wait()
};
if !status.unwrap().success() {
eprintln!(
"fmt error: Running `{}` failed.\nIf you're running `tidy`, \
try again with `--bless`. Or, if you just want to format \
code, run `./x.py fmt` instead.",
cmd_debug,
);
crate::exit!(1);
}
true
if status.unwrap().success() { RustfmtStatus::Ok } else { RustfmtStatus::Failed }
}
}

Expand Down Expand Up @@ -240,6 +242,8 @@ pub fn format(build: &Builder<'_>, check: bool, all: bool, paths: &[PathBuf]) {
// Spawn child processes on a separate thread so we can batch entries we have received from
// ignore.
let thread = std::thread::spawn(move || {
let mut result = Ok(());

let mut children = VecDeque::new();
while let Ok(path) = rx.recv() {
// Try getting more paths from the channel to amortize the overhead of spawning
Expand All @@ -251,22 +255,38 @@ pub fn format(build: &Builder<'_>, check: bool, all: bool, paths: &[PathBuf]) {

// Poll completion before waiting.
for i in (0..children.len()).rev() {
if children[i](false) {
children.swap_remove_back(i);
break;
match children[i](false) {
RustfmtStatus::InProgress => {}
RustfmtStatus::Failed => {
result = Err(());
children.swap_remove_back(i);
break;
}
RustfmtStatus::Ok => {
children.swap_remove_back(i);
break;
}
}
}

if children.len() >= max_processes {
// Await oldest child.
children.pop_front().unwrap()(true);
match children.pop_front().unwrap()(true) {
RustfmtStatus::InProgress | RustfmtStatus::Ok => {}
RustfmtStatus::Failed => result = Err(()),
}
}
}

// Await remaining children.
for mut child in children {
child(true);
match child(true) {
RustfmtStatus::InProgress | RustfmtStatus::Ok => {}
RustfmtStatus::Failed => result = Err(()),
}
}

result
});

let formatted_paths = Mutex::new(Vec::new());
Expand Down Expand Up @@ -299,7 +319,12 @@ pub fn format(build: &Builder<'_>, check: bool, all: bool, paths: &[PathBuf]) {

drop(tx);

thread.join().unwrap();
let result = thread.join().unwrap();

if result.is_err() {
crate::exit!(1);
}

if !check {
update_rustfmt_version(build);
}
Expand Down
2 changes: 1 addition & 1 deletion triagebot.toml
Original file line number Diff line number Diff line change
Expand Up @@ -1208,7 +1208,7 @@ project-exploit-mitigations = [
"/src/doc/nomicon" = ["@ehuss"]
"/src/doc/reference" = ["@ehuss"]
"/src/doc/rust-by-example" = ["@ehuss"]
"/src/doc/rustc-dev-guide" = ["@kobzol"]
"/src/doc/rustc-dev-guide" = ["@kobzol", "@jieyouxu"]
"/src/doc/rustdoc" = ["rustdoc"]
"/src/doc/style-guide" = ["style-team"]
"/src/etc" = ["@Mark-Simulacrum"]
Expand Down
Loading