rust/compiler
Dylan DPC eb378d2015
Rollup merge of #99862 - WaffleLapkin:type_mismatch_fix, r=compiler-errors
Improve type mismatch w/ function signatures

This PR makes use of `note: expected/found` (instead of labeling types in labels) in type mismatch with function signatures. Pros: it's easier to compare the signatures, cons: the error is a little more verbose now.

This is especially nice when
- The signatures differ in a small subset of parameters (same parameters are elided)
- The difference is in details, for example `isize` vs `usize` (there is a better chance that the types align)

Also this PR fixes the inconsistency in variable names in the edited code (`expected` and `found`).

A zulip thread from which this pr started: [[link]](https://rust-lang.zulipchat.com/#narrow/stream/147480-t-compiler.2Fwg-diagnostics/topic/Type.20error.20regression.3F.2E.2E.2E/near/289756602).

An example diagnostic:

<table>
<tr>
<th>this pr</th>
<th>nightly</th>
</tr>
<tr>
<td>

```text
error[E0631]: type mismatch in function arguments
  --> ./t.rs:4:12
   |
4  |     expect(&f);
   |     ------ ^^ expected due to this
   |     |
   |     required by a bound introduced by this call
...
10 | fn f(_: isize, _: u8, _: Vec<u32>) {}
   | ---------------------------------- found signature defined here
   |
   = note: expected function signature `fn(usize, _, Vec<u64>) -> _`
              found function signature `fn(isize, _, Vec<u32>) -> _`
note: required because of the requirements on the impl of `Trait` for `fn(isize, u8, Vec<u32>) {f}`
  --> ./t.rs:8:9
   |
8  | impl<F> Trait for F where F: Fn(usize, u8, Vec<u64>) -> u8 {}
   |         ^^^^^     ^
   = note: required for the cast from `fn(isize, u8, Vec<u32>) {f}` to the object type `dyn Trait`
```

</td>
<td>

```text
error[E0631]: type mismatch in function arguments
  --> ./t.rs:4:12
   |
4  |     expect(&f);
   |     ------ ^^ expected signature of `fn(usize, u8, Vec<u64>) -> _`
   |     |
   |     required by a bound introduced by this call
...
10 | fn f(_: isize, _: u8, _: Vec<u32>) {}
   | ---------------------------------- found signature of `fn(isize, u8, Vec<u32>) -> _`
   |
note: required because of the requirements on the impl of `Trait` for `fn(isize, u8, Vec<u32>) {f}`
  --> ./t.rs:8:9
   |
8  | impl<F> Trait for F where F: Fn(usize, u8, Vec<u64>) -> u8 {}
   |         ^^^^^     ^
   = note: required for the cast to the object type `dyn Trait`
```

</td>
</tr>
</table>

<details><summary>code</summary>
<p>

```rust
fn main() {
    fn expect(_: &dyn Trait) {}

    expect(&f);
}

trait Trait {}
impl<F> Trait for F where F: Fn(usize, u8, Vec<u64>) -> u8 {}

fn f(_: isize, _: u8, _: Vec<u32>) {}
```

</p>
</details>

r? `@compiler-errors`
2022-07-30 20:39:47 +05:30
..
rustc Don't rerun the build script for the compiler each time on linux 2022-07-10 23:57:25 -05:00
rustc_apfloat Update smallvec to 1.8.1. 2022-06-27 08:48:55 +10:00
rustc_arena Rollup merge of #97711 - Nilstrieb:rustc-arena-ub, r=wesleywiser 2022-07-07 18:06:49 +05:30
rustc_ast Remove visit_name from the AST visitor. 2022-07-29 15:28:32 +10:00
rustc_ast_lowering Replace LifetimeRes::Anonymous by LifetimeRes::Infer. 2022-07-26 19:00:31 +02:00
rustc_ast_passes Remove visit_name from the AST visitor. 2022-07-29 15:28:32 +10:00
rustc_ast_pretty Parse closure binders 2022-07-12 16:25:16 +04:00
rustc_attr avoid embedding StabilityLevel::Unstable reason string into metadata multiple times 2022-07-21 22:53:02 +03:00
rustc_borrowck Change enclosing_body_owner to return LocalDefId 2022-07-29 18:26:10 -04:00
rustc_builtin_macros Use more idiomatic rust, comment for lint logic 2022-07-28 00:10:19 -06:00
rustc_codegen_cranelift Merge commit 'd3a2366ee877075c59b38bd8ced55f224fc7ef51' into sync_cg_clif-2022-07-26 2022-07-26 18:53:46 +02:00
rustc_codegen_gcc Auto merge of #98989 - dpaoliello:rawdylibbin, r=michaelwoerister 2022-07-26 01:47:34 +00:00
rustc_codegen_llvm Add elementtype attributes for llvm.arm.ldrex/strex intrinsics 2022-07-27 16:19:07 +02:00
rustc_codegen_ssa Auto merge of #99467 - BelovDV:add_option_link_arg, r=petrochenkov 2022-07-29 15:36:52 +00:00
rustc_const_eval Rollup merge of #99651 - compiler-errors:fn-and-raw-ptr-in-const-generics, r=oli-obk 2022-07-27 17:55:04 +02:00
rustc_data_structures Auto merge of #99251 - cuviper:hashbrown-0.12, r=Mark-Simulacrum 2022-07-24 04:03:29 +00:00
rustc_driver Rename local_did to def_id 2022-07-29 18:26:10 -04:00
rustc_error_codes region_outlives_predicate no snapshot 2022-07-21 13:09:01 +02:00
rustc_error_messages lint: add bad opt access internal lint 2022-07-27 11:24:27 +01:00
rustc_errors Auto merge of #99058 - michaelwoerister:remove-stable-set-and-map, r=nagisa 2022-07-20 22:19:30 +00:00
rustc_expand proc_macro: use crossbeam channels for the proc_macro cross-thread bridge 2022-07-29 17:38:12 -04:00
rustc_feature lint: add bad opt access internal lint 2022-07-27 11:24:27 +01:00
rustc_fs_util
rustc_graphviz
rustc_hir Replace LifetimeRes::Anonymous by LifetimeRes::Infer. 2022-07-26 19:00:31 +02:00
rustc_hir_pretty use rustc_hir_pretty::qpath_to_string to avoid span_to_snippet when rendering path 2022-07-17 04:58:38 +00:00
rustc_incremental Remove unused StableMap and StableSet types from rustc_data_structures 2022-07-20 13:11:39 +02:00
rustc_index Edit rustc_index::vec::IndexVec::pick3_mut docs 2022-07-21 08:52:18 -05:00
rustc_infer Rollup merge of #99311 - kckeiks:clean-up-body-owner-methods, r=cjgillot 2022-07-30 20:39:46 +05:30
rustc_interface proc_macro: use crossbeam channels for the proc_macro cross-thread bridge 2022-07-29 17:38:12 -04:00
rustc_lexer fix typo in comment 2022-06-28 19:59:09 +05:30
rustc_lint Rollup merge of #99888 - nnethercote:streamline-visitors, r=cjgillot 2022-07-30 07:39:54 +09:00
rustc_lint_defs Generate correct suggestion with named arguments used positionally 2022-07-25 00:00:27 -06:00
rustc_llvm Add elementtype attributes for llvm.arm.ldrex/strex intrinsics 2022-07-27 16:19:07 +02:00
rustc_log
rustc_macros clippy::perf fixes 2022-07-20 11:48:11 +02:00
rustc_metadata Rename local_did to def_id 2022-07-29 18:26:10 -04:00
rustc_middle Rollup merge of #99311 - kckeiks:clean-up-body-owner-methods, r=cjgillot 2022-07-30 20:39:46 +05:30
rustc_mir_build Rollup merge of #99311 - kckeiks:clean-up-body-owner-methods, r=cjgillot 2022-07-30 20:39:46 +05:30
rustc_mir_dataflow Auto merge of #99667 - ouz-a:some_branch, r=oli-obk 2022-07-29 07:11:50 +00:00
rustc_mir_transform Change maybe_body_owned_by to take local def id 2022-07-29 18:25:58 -04:00
rustc_monomorphize Rollup merge of #98868 - tmiasko:unreachable-coverage, r=wesleywiser 2022-07-22 11:53:40 +05:30
rustc_parse remove an unnecessary line break 2022-07-28 18:28:29 +09:00
rustc_parse_format Generate correct suggestion with named arguments used positionally 2022-07-25 00:00:27 -06:00
rustc_passes Rename local_did to def_id 2022-07-29 18:26:10 -04:00
rustc_plugin_impl remove currently unused deps 2022-06-13 22:20:51 +03:00
rustc_privacy clippy::perf fixes 2022-07-20 11:48:11 +02:00
rustc_query_impl consistently use VTable over Vtable (matching stable stdlib API RawWakerVTable) 2022-07-20 17:12:07 -04:00
rustc_query_system consistently use VTable over Vtable (matching stable stdlib API RawWakerVTable) 2022-07-20 17:12:07 -04:00
rustc_resolve change the type of note field to Option<String> 2022-07-28 18:17:55 +09:00
rustc_save_analysis Rollup merge of #98705 - WaffleLapkin:closure_binder, r=cjgillot 2022-07-14 14:14:21 +05:30
rustc_serialize Upgrade indexmap and thorin-dwp to use hashbrown 0.12 2022-07-17 07:05:58 -07:00
rustc_session Auto merge of #99123 - mystor:crossbeam_bridge, r=eddyb 2022-07-30 04:05:28 +00:00
rustc_smir
rustc_span Use line numbers relative to function in mir opt tests 2022-07-28 11:59:54 +02:00
rustc_symbol_mangling Auto merge of #95548 - rcvalle:rust-cfi-2, r=nagisa 2022-07-24 01:22:36 +00:00
rustc_target Rollup merge of #99227 - Lokathor:fix-thumbv4t-none-eabi-frame-pointer, r=davidtwco 2022-07-30 07:39:48 +09:00
rustc_trait_selection Rollup merge of #99862 - WaffleLapkin:type_mismatch_fix, r=compiler-errors 2022-07-30 20:39:47 +05:30
rustc_traits Rollup merge of #99714 - ouz-a:issue_57961, r=oli-obk 2022-07-28 16:38:30 +05:30
rustc_ty_utils Rename local_did to def_id 2022-07-29 18:26:10 -04:00
rustc_type_ir Inline DebruijnIndex methods 2022-07-22 17:00:49 +02:00
rustc_typeck Rollup merge of #99311 - kckeiks:clean-up-body-owner-methods, r=cjgillot 2022-07-30 20:39:46 +05:30