Skip to content

Rollup of 4 pull requests #145254

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 9 commits into from
Aug 11, 2025
Merged
4 changes: 2 additions & 2 deletions Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5284,9 +5284,9 @@ dependencies = [

[[package]]
name = "sysinfo"
version = "0.36.1"
version = "0.37.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "252800745060e7b9ffb7b2badbd8b31cfa4aa2e61af879d0a3bf2a317c20217d"
checksum = "07cec4dc2d2e357ca1e610cfb07de2fa7a10fc3e9fe89f72545f3d244ea87753"
dependencies = [
"libc",
"objc2-core-foundation",
Expand Down
16 changes: 0 additions & 16 deletions compiler/rustc_borrowck/src/polonius/legacy/facts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -184,22 +184,6 @@ where
}
}

impl<A, B, C, D> FactRow for (A, B, C, D)
where
A: FactCell,
B: FactCell,
C: FactCell,
D: FactCell,
{
fn write(
&self,
out: &mut dyn Write,
location_table: &PoloniusLocationTable,
) -> Result<(), Box<dyn Error>> {
write_row(out, location_table, &[&self.0, &self.1, &self.2, &self.3])
}
}

fn write_row(
out: &mut dyn Write,
location_table: &PoloniusLocationTable,
Expand Down
50 changes: 44 additions & 6 deletions compiler/rustc_hir_typeck/src/fn_ctxt/checks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1589,26 +1589,64 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
// e.g. `reuse HasSelf::method;` should suggest `reuse HasSelf::method($args);`.
full_call_span.shrink_to_hi()
};

// Controls how the arguments should be listed in the suggestion.
enum ArgumentsFormatting {
SingleLine,
Multiline { fallback_indent: String, brace_indent: String },
}
let arguments_formatting = {
let mut provided_inputs = matched_inputs.iter().filter_map(|a| *a);
if let Some(brace_indent) = source_map.indentation_before(suggestion_span)
&& let Some(first_idx) = provided_inputs.by_ref().next()
&& let Some(last_idx) = provided_inputs.by_ref().next()
&& let (_, first_span) = provided_arg_tys[first_idx]
&& let (_, last_span) = provided_arg_tys[last_idx]
&& source_map.is_multiline(first_span.to(last_span))
&& let Some(fallback_indent) = source_map.indentation_before(first_span)
{
ArgumentsFormatting::Multiline { fallback_indent, brace_indent }
} else {
ArgumentsFormatting::SingleLine
}
};

let mut suggestion = "(".to_owned();
let mut needs_comma = false;
for (expected_idx, provided_idx) in matched_inputs.iter_enumerated() {
if needs_comma {
suggestion += ", ";
} else {
needs_comma = true;
suggestion += ",";
}
match &arguments_formatting {
ArgumentsFormatting::SingleLine if needs_comma => suggestion += " ",
ArgumentsFormatting::SingleLine => {}
ArgumentsFormatting::Multiline { .. } => suggestion += "\n",
}
let suggestion_text = if let Some(provided_idx) = provided_idx
needs_comma = true;
let (suggestion_span, suggestion_text) = if let Some(provided_idx) = provided_idx
&& let (_, provided_span) = provided_arg_tys[*provided_idx]
&& let Ok(arg_text) = source_map.span_to_snippet(provided_span)
{
arg_text
(Some(provided_span), arg_text)
} else {
// Propose a placeholder of the correct type
let (_, expected_ty) = formal_and_expected_inputs[expected_idx];
ty_to_snippet(expected_ty, expected_idx)
(None, ty_to_snippet(expected_ty, expected_idx))
};
if let ArgumentsFormatting::Multiline { fallback_indent, .. } =
&arguments_formatting
{
let indent = suggestion_span
.and_then(|span| source_map.indentation_before(span))
.unwrap_or_else(|| fallback_indent.clone());
suggestion += &indent;
}
suggestion += &suggestion_text;
}
if let ArgumentsFormatting::Multiline { brace_indent, .. } = arguments_formatting {
suggestion += ",\n";
suggestion += &brace_indent;
}
suggestion += ")";
err.span_suggestion_verbose(
suggestion_span,
Expand Down
9 changes: 1 addition & 8 deletions compiler/rustc_symbol_mangling/src/export.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ macro_rules! default_hash_impl {
};
}

default_hash_impl! { i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize, }
default_hash_impl! { u8, u64, usize, }

impl<'tcx> AbiHashStable<'tcx> for bool {
#[inline]
Expand All @@ -37,13 +37,6 @@ impl<'tcx> AbiHashStable<'tcx> for str {
}
}

impl<'tcx> AbiHashStable<'tcx> for String {
#[inline]
fn abi_hash(&self, tcx: TyCtxt<'tcx>, hasher: &mut StableHasher) {
self[..].abi_hash(tcx, hasher);
}
}

impl<'tcx> AbiHashStable<'tcx> for Symbol {
#[inline]
fn abi_hash(&self, tcx: TyCtxt<'tcx>, hasher: &mut StableHasher) {
Expand Down
4 changes: 2 additions & 2 deletions src/bootstrap/Cargo.lock
Original file line number Diff line number Diff line change
Expand Up @@ -730,9 +730,9 @@ dependencies = [

[[package]]
name = "sysinfo"
version = "0.36.0"
version = "0.37.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aab138f5c1bb35231de19049060a87977ad23e04f2303e953bc5c2947ac7dec4"
checksum = "07cec4dc2d2e357ca1e610cfb07de2fa7a10fc3e9fe89f72545f3d244ea87753"
dependencies = [
"libc",
"memchr",
Expand Down
2 changes: 1 addition & 1 deletion src/bootstrap/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ walkdir = "2.4"
xz2 = "0.1"

# Dependencies needed by the build-metrics feature
sysinfo = { version = "0.36.0", default-features = false, optional = true, features = ["system"] }
sysinfo = { version = "0.37.0", default-features = false, optional = true, features = ["system"] }

# Dependencies needed by the `tracing` feature
tracing = { version = "0.1", optional = true, features = ["attributes"] }
Expand Down
2 changes: 2 additions & 0 deletions src/bootstrap/src/core/build_steps/tool.rs
Original file line number Diff line number Diff line change
Expand Up @@ -857,7 +857,9 @@ impl Step for Cargo {
fn run(self, builder: &Builder<'_>) -> ToolBuildResult {
builder.build.require_submodule("src/tools/cargo", None);

builder.std(self.build_compiler, builder.host_target);
builder.std(self.build_compiler, self.target);

builder.ensure(ToolBuild {
build_compiler: self.build_compiler,
target: self.target,
Expand Down
2 changes: 1 addition & 1 deletion src/tools/opt-dist/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ log = "0.4"
anyhow = "1"
humantime = "2"
humansize = "2"
sysinfo = { version = "0.36.0", default-features = false, features = ["disk"] }
sysinfo = { version = "0.37.0", default-features = false, features = ["disk"] }
fs_extra = "1"
camino = "1"
tar = "0.4"
Expand Down
16 changes: 10 additions & 6 deletions tests/ui/argument-suggestions/issue-100478.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,16 @@ LL | fn foo(p1: T1, p2: Arc<T2>, p3: T3, p4: Arc<T4>, p5: T5, p6: T6, p7: T7, p8
| ^^^ -----------
help: provide the argument
|
LL - foo(
LL -
LL - p1, //p2,
LL - p3, p4, p5, p6, p7, p8,
LL - );
LL + foo(p1, /* Arc<T2> */, p3, p4, p5, p6, p7, p8);
LL ~ foo(
LL + p1,
LL + /* Arc<T2> */,
LL + p3,
LL + p4,
LL + p5,
LL + p6,
LL + p7,
LL + p8,
LL ~ );
|

error: aborting due to 4 previous errors
Expand Down
12 changes: 12 additions & 0 deletions tests/ui/fn/fn-arg-count-mismatch-diagnostics.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,21 @@ impl Bar {
}
}

fn function_with_lots_of_arguments(a: i32, b: char, c: i32, d: i32, e: i32, f: i32) {}

fn main() {
foo(1, 2, 3);
//~^ ERROR function takes 4 arguments but 3
bar(1, 2, 3);
//~^ ERROR function takes 6 arguments but 3

let variable_name = 42;
function_with_lots_of_arguments(
variable_name,
variable_name,
variable_name,
variable_name,
variable_name,
);
//~^^^^^^^ ERROR this function takes 6 arguments but 5 arguments were supplied [E0061]
}
28 changes: 25 additions & 3 deletions tests/ui/fn/fn-arg-count-mismatch-diagnostics.stderr
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ LL | <$from>::$method(8, /* u8 */)
| ++++++++++

error[E0061]: this function takes 4 arguments but 3 arguments were supplied
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:50:5
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:52:5
|
LL | foo(1, 2, 3);
| ^^^--------- argument #4 of type `isize` is missing
Expand All @@ -68,7 +68,7 @@ LL | foo(1, 2, 3, /* isize */);
| +++++++++++++

error[E0061]: this function takes 6 arguments but 3 arguments were supplied
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:52:5
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:54:5
|
LL | bar(1, 2, 3);
| ^^^--------- three arguments of type `i32`, `i32`, and `i32` are missing
Expand All @@ -83,6 +83,28 @@ help: provide the arguments
LL | bar(1, 2, 3, /* i32 */, /* i32 */, /* i32 */);
| +++++++++++++++++++++++++++++++++

error: aborting due to 5 previous errors
error[E0061]: this function takes 6 arguments but 5 arguments were supplied
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:58:5
|
LL | function_with_lots_of_arguments(
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LL | variable_name,
LL | variable_name,
| ------------- argument #2 of type `char` is missing
|
note: function defined here
--> $DIR/fn-arg-count-mismatch-diagnostics.rs:49:4
|
LL | fn function_with_lots_of_arguments(a: i32, b: char, c: i32, d: i32, e: i32, f: i32) {}
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -------
help: provide the argument
|
LL | function_with_lots_of_arguments(
LL | variable_name,
LL ~ /* char */,
LL ~ variable_name,
|

error: aborting due to 6 previous errors

For more information about this error, try `rustc --explain E0061`.
Loading