rust/compiler
Esteban Küber f0c93117ed Use root obligation on E0277 for some cases
When encountering trait bound errors that satisfy some heuristics that
tell us that the relevant trait for the user comes from the root
obligation and not the current obligation, we use the root predicate for
the main message.

This allows to talk about "X doesn't implement Pattern<'_>" over the
most specific case that just happened to fail, like  "char doesn't
implement Fn(&mut char)" in
`tests/ui/traits/suggest-dereferences/root-obligation.rs`

The heuristics are:

 - the type of the leaf predicate is (roughly) the same as the type
   from the root predicate, as a proxy for "we care about the root"
 - the leaf trait and the root trait are different, so as to avoid
   talking about `&mut T: Trait` and instead remain talking about
   `T: Trait` instead
 - the root trait is not `Unsize`, as to avoid talking about it in
   `tests/ui/coercion/coerce-issue-49593-box-never.rs`.

```
error[E0277]: the trait bound `&char: Pattern<'_>` is not satisfied
  --> $DIR/root-obligation.rs:6:38
   |
LL |         .filter(|c| "aeiou".contains(c))
   |                             -------- ^ the trait `Fn<(char,)>` is not implemented for `&char`, which is required by `&char: Pattern<'_>`
   |                             |
   |                             required by a bound introduced by this call
   |
   = note: required for `&char` to implement `FnOnce<(char,)>`
   = note: required for `&char` to implement `Pattern<'_>`
note: required by a bound in `core::str::<impl str>::contains`
  --> $SRC_DIR/core/src/str/mod.rs:LL:COL
help: consider dereferencing here
   |
LL |         .filter(|c| "aeiou".contains(*c))
   |                                      +
```

Fix #79359, fix #119983, fix #118779, cc #118415 (the suggestion needs
to change).
2024-03-03 18:53:35 +00:00
..
rustc Clean up rustc_*/Cargo.toml. 2023-10-30 08:46:02 +11:00
rustc_abi Add f16 and f128 to rustc_type_ir::FloatTy and rustc_abi::Primitive 2024-02-28 12:58:32 -05:00
rustc_arena rename ptr::invalid -> ptr::without_provenance 2024-02-21 20:15:52 +01:00
rustc_ast Rollup merge of #121841 - tgross35:f16-f128-step2-intrinsics, r=compiler-errors 2024-03-02 20:13:24 +01:00
rustc_ast_ir Split rustc_type_ir to avoid rustc_ast from depending on it 2024-02-27 18:11:23 +00:00
rustc_ast_lowering AST: Refactor type alias where clauses 2024-02-29 17:18:40 +01:00
rustc_ast_passes Detect empty leading where-clauses on type aliases 2024-02-29 17:20:04 +01:00
rustc_ast_pretty Rollup merge of #121815 - nnethercote:mv-gather_comments, r=est31 2024-03-02 10:09:36 +01:00
rustc_attr Rename DiagnosticBuilder as Diag. 2024-02-28 08:55:35 +11:00
rustc_baked_icu_data Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
rustc_borrowck Rollup merge of #120646 - clubby789:uninit-destructuring-sugg, r=michaelwoerister 2024-03-01 17:51:28 +01:00
rustc_builtin_macros Remove unused fluent messages 2024-03-01 09:59:44 +08:00
rustc_codegen_cranelift Add f16 and f128 to rustc_type_ir::FloatTy and rustc_abi::Primitive 2024-02-28 12:58:32 -05:00
rustc_codegen_gcc Auto merge of #121728 - tgross35:f16-f128-step1-ty-updates, r=compiler-errors 2024-03-01 03:36:11 +00:00
rustc_codegen_llvm Auto merge of #121914 - Nadrieril:rollup-ol98ncg, r=Nadrieril 2024-03-02 22:59:19 +00:00
rustc_codegen_ssa Add initial support for DataFlowSanitizer 2024-03-01 18:50:40 -08:00
rustc_const_eval Rollup merge of #121731 - oli-obk:eager_opaque_checks, r=compiler-errors 2024-03-02 20:13:23 +01:00
rustc_data_structures compiler: use addr_of! 2024-02-24 18:53:48 +03:00
rustc_driver Bump cfg(bootstrap)s 2023-11-15 19:41:28 -05:00
rustc_driver_impl Inline and remove HumanEmitter::stderr. 2024-02-29 17:50:23 +11:00
rustc_error_codes Rollup merge of #120684 - carschandler:patch-1, r=nnethercote 2024-03-02 10:09:35 +01:00
rustc_error_messages errors: only eagerly translate subdiagnostics 2024-02-15 10:34:41 +00:00
rustc_errors Rollup merge of #120305 - clubby789:unused-import-line, r=estebank 2024-03-01 22:38:45 +01:00
rustc_expand Auto merge of #121657 - estebank:issue-119665, r=davidtwco 2024-03-02 05:03:46 +00:00
rustc_feature Add new pattern_complexity attribute to add possibility to limit and check recursion in pattern matching 2024-03-03 13:10:15 +01:00
rustc_fluent_macro Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_fs_util Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_graphviz Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_hir Add f16 and f128 intrinsics to HIR 2024-03-01 13:59:06 -05:00
rustc_hir_analysis Auto merge of #121914 - Nadrieril:rollup-ol98ncg, r=Nadrieril 2024-03-02 22:59:19 +00:00
rustc_hir_pretty Lower anonymous structs or unions to HIR 2024-02-12 12:47:23 +08:00
rustc_hir_typeck Rollup merge of #121895 - matthiaskrgr:devec, r=fee1-dead 2024-03-02 16:53:17 +01:00
rustc_incremental Adjust the has_errors* methods. 2024-02-22 08:03:47 +11:00
rustc_index Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_index_macros Step all bootstrap cfgs forward 2024-02-08 07:44:34 -05:00
rustc_infer Auto merge of #121864 - compiler-errors:type-relating-variances, r=aliemjay 2024-03-02 08:52:26 +00:00
rustc_interface Add initial support for DataFlowSanitizer 2024-03-01 18:50:40 -08:00
rustc_lexer Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_lint Rollup merge of #121580 - Suyashtnt:issue-121502-fix, r=michaelwoerister 2024-03-01 17:51:29 +01:00
rustc_lint_defs Rollup merge of #111505 - GuillaumeGomez:turn-invalid-doc-attr-into-err, r=rustdoc 2024-03-01 22:38:45 +01:00
rustc_llvm Add initial support for DataFlowSanitizer 2024-03-01 18:50:40 -08:00
rustc_log rustc_log: expose tracing-tree "wraparound" in an env var 2024-03-03 12:33:26 +01:00
rustc_macros Rename DiagnosticBuilder as Diag. 2024-02-28 08:55:35 +11:00
rustc_metadata Rename DiagnosticArg{,Map,Name,Value} as DiagArg{,Map,Name,Value}. 2024-02-28 08:55:37 +11:00
rustc_middle Rollup merge of #121917 - GuillaumeGomez:pattern-complexity_limit.rs, r=Nadrieril 2024-03-03 14:07:43 +01:00
rustc_mir_build Rollup merge of #121917 - GuillaumeGomez:pattern-complexity_limit.rs, r=Nadrieril 2024-03-03 14:07:43 +01:00
rustc_mir_dataflow Auto merge of #120500 - oli-obk:intrinsics2.0, r=WaffleLapkin 2024-02-16 09:53:01 +00:00
rustc_mir_transform Fix typo in comment 2024-03-01 08:14:42 +05:30
rustc_monomorphize Rename DiagnosticBuilder as Diag. 2024-02-28 08:55:35 +11:00
rustc_next_trait_solver always emit AliasRelate goals when relating aliases 2024-02-26 10:17:43 +01:00
rustc_parse Auto merge of #121657 - estebank:issue-119665, r=davidtwco 2024-03-02 05:03:46 +00:00
rustc_parse_format remove a couple of redundant clones 2024-02-17 12:46:18 +01:00
rustc_passes Rollup merge of #121669 - nnethercote:count-stashed-errs-again, r=estebank 2024-02-29 17:08:38 +01:00
rustc_pattern_analysis Add new pattern_complexity attribute to add possibility to limit and check recursion in pattern matching 2024-03-03 13:10:15 +01:00
rustc_privacy Mark some once-again-unreachable paths as unreachable. 2024-02-29 11:08:29 +11:00
rustc_query_impl Rename Diagnostic as DiagInner. 2024-02-28 08:33:25 +11:00
rustc_query_system Overhaul how stashed diagnostics work, again. 2024-02-29 11:08:27 +11:00
rustc_resolve avoid collecting into vecs in some places 2024-03-02 14:18:47 +01:00
rustc_serialize Replace NonZero::<_>::new with NonZero::new. 2024-02-15 08:09:42 +01:00
rustc_session Add initial support for DataFlowSanitizer 2024-03-01 18:50:40 -08:00
rustc_smir Add support to new float types 2024-03-01 11:16:35 -08:00
rustc_span Rollup merge of #121917 - GuillaumeGomez:pattern-complexity_limit.rs, r=Nadrieril 2024-03-03 14:07:43 +01:00
rustc_symbol_mangling Rollup merge of #121841 - tgross35:f16-f128-step2-intrinsics, r=compiler-errors 2024-03-02 20:13:24 +01:00
rustc_target Auto merge of #121903 - Nilstrieb:rename-qnx-file, r=WaffleLapkin 2024-03-03 11:34:21 +00:00
rustc_trait_selection Use root obligation on E0277 for some cases 2024-03-03 18:53:35 +00:00
rustc_traits Rename some normalization-related items 2024-02-20 17:30:49 +01:00
rustc_transmute safe transmute: revise safety analysis 2024-02-27 16:22:32 +00:00
rustc_ty_utils Add f16 and f128 to rustc_type_ir::FloatTy and rustc_abi::Primitive 2024-02-28 12:58:32 -05:00
rustc_type_ir Auto merge of #121728 - tgross35:f16-f128-step1-ty-updates, r=compiler-errors 2024-03-01 03:36:11 +00:00
stable_mir Add support to new float types 2024-03-01 11:16:35 -08:00