Skip to content
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