rust/compiler
Matthias Krüger 35f6eee51a
Rollup merge of #121826 - estebank:e0277-root-obligation-2, r=oli-obk
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), cc #121398 (doesn't fix the underlying issue).
2024-03-05 06:40:31 +01:00
..
rustc
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 Rollup merge of #121664 - compiler-errors:adjust-error-yield-lowering, r=spastorino 2024-03-05 06:40:30 +01:00
rustc_ast_passes Rename BuiltinLintDiagnostics as BuiltinLintDiag. 2024-03-05 12:15:10 +11: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 BuiltinLintDiagnostics as BuiltinLintDiag. 2024-03-05 12:15:10 +11:00
rustc_baked_icu_data
rustc_borrowck Return a struct from query intrinsic to be able to add another field in the next commit 2024-03-04 16:13:50 +00:00
rustc_builtin_macros Rename BuiltinLintDiagnostics as BuiltinLintDiag. 2024-03-05 12:15:10 +11:00
rustc_codegen_cranelift Add a scheme for moving away from extern "rust-intrinsic" entirely 2024-03-04 16:13:50 +00:00
rustc_codegen_gcc Auto merge of #121665 - erikdesjardins:ptradd, r=nikic 2024-03-03 22:21:53 +00:00
rustc_codegen_llvm Auto merge of #121665 - erikdesjardins:ptradd, r=nikic 2024-03-03 22:21:53 +00:00
rustc_codegen_ssa Auto merge of #121780 - nnethercote:diag-renaming2, r=davidtwco 2024-03-05 02:58:34 +00:00
rustc_const_eval Rename DiagnosticMessage as DiagMessage. 2024-03-05 12:14:49 +11:00
rustc_data_structures Rollup merge of #120976 - matthiaskrgr:constify_TL_statics, r=lcnr 2024-03-04 22:16:30 +01:00
rustc_driver
rustc_driver_impl Rename all ParseSess variables/fields/lifetimes as psess. 2024-03-05 08:11:45 +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 Rename SubdiagnosticMessage as SubdiagMessage. 2024-03-05 12:14:49 +11:00
rustc_errors Adjust Diag::new signature. 2024-03-05 12:15:13 +11:00
rustc_expand Rename BuiltinLintDiagnostics as BuiltinLintDiag. 2024-03-05 12:15:10 +11:00
rustc_feature Add a scheme for moving away from extern "rust-intrinsic" entirely 2024-03-04 16:13:50 +00:00
rustc_fluent_macro Rename SubdiagnosticMessage as SubdiagMessage. 2024-03-05 12:14:49 +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 #121780 - nnethercote:diag-renaming2, r=davidtwco 2024-03-05 02:58:34 +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 #121826 - estebank:e0277-root-obligation-2, r=oli-obk 2024-03-05 06:40:31 +01:00
rustc_incremental Rename all ParseSess variables/fields/lifetimes as psess. 2024-03-05 08:11:45 +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 Rename SubdiagnosticMessageOp as SubdiagMessageOp. 2024-03-05 12:14:49 +11:00
rustc_interface Rename BuiltinLintDiagnostics as BuiltinLintDiag. 2024-03-05 12:15:10 +11:00
rustc_lexer Invert diagnostic lints. 2024-02-06 13:12:33 +11:00
rustc_lint Auto merge of #121780 - nnethercote:diag-renaming2, r=davidtwco 2024-03-05 02:58:34 +00:00
rustc_lint_defs Rename BuiltinLintDiagnostics as BuiltinLintDiag. 2024-03-05 12:15:10 +11: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 SubdiagnosticMessageOp as SubdiagMessageOp. 2024-03-05 12:14:49 +11:00
rustc_metadata Auto merge of #120675 - oli-obk:intrinsics3.0, r=pnkfelix 2024-03-05 00:13:01 +00:00
rustc_middle Auto merge of #121780 - nnethercote:diag-renaming2, r=davidtwco 2024-03-05 02:58:34 +00:00
rustc_mir_build Rename SubdiagnosticMessageOp as SubdiagMessageOp. 2024-03-05 12:14:49 +11:00
rustc_mir_dataflow Return a struct from query intrinsic to be able to add another field in the next commit 2024-03-04 16:13:50 +00:00
rustc_mir_transform Auto merge of #121780 - nnethercote:diag-renaming2, r=davidtwco 2024-03-05 02:58:34 +00:00
rustc_monomorphize Remove some depgraph edges on the HIR by invoking the intrinsic query instead of checking the attribute 2024-03-04 16:13:51 +00:00
rustc_next_trait_solver Allow a way to add constructors for rustc_type_ir types 2024-03-04 15:39:59 +00:00
rustc_parse Rename BuiltinLintDiagnostics as BuiltinLintDiag. 2024-03-05 12:15:10 +11:00
rustc_parse_format remove a couple of redundant clones 2024-02-17 12:46:18 +01:00
rustc_passes Rename SubdiagnosticMessageOp as SubdiagMessageOp. 2024-03-05 12:14:49 +11:00
rustc_pattern_analysis Rename SubdiagnosticMessageOp as SubdiagMessageOp. 2024-03-05 12:14:49 +11:00
rustc_privacy Mark some once-again-unreachable paths as unreachable. 2024-02-29 11:08:29 +11:00
rustc_query_impl Add a proper with_no_queries to printing 2024-03-03 21:12:04 +01:00
rustc_query_system Overhaul how stashed diagnostics work, again. 2024-02-29 11:08:27 +11:00
rustc_resolve Rename DiagnosticMetadata as DiagMetadata. 2024-03-05 12:15:13 +11:00
rustc_serialize Replace NonZero::<_>::new with NonZero::new. 2024-02-15 08:09:42 +01:00
rustc_session Rename BuiltinLintDiagnostics as BuiltinLintDiag. 2024-03-05 12:15:10 +11:00
rustc_smir Add support to new float types 2024-03-01 11:16:35 -08:00
rustc_span Auto merge of #121780 - nnethercote:diag-renaming2, r=davidtwco 2024-03-05 02:58:34 +00: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 #120468 - alexcrichton:start-wasm32-wasi-rename, r=wesleywiser 2024-03-04 18:55:14 +00:00
rustc_trait_selection Rollup merge of #121826 - estebank:e0277-root-obligation-2, r=oli-obk 2024-03-05 06:40:31 +01: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 make intrinsic query legal for any DefId 2024-03-04 16:28:33 +00:00
rustc_type_ir Allow a way to add constructors for rustc_type_ir types 2024-03-04 15:39:59 +00:00
stable_mir Add support to new float types 2024-03-01 11:16:35 -08:00