diff options
| author | bors <bors@rust-lang.org> | 2024-03-20 02:36:37 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-03-20 02:36:37 +0000 |
| commit | b7dcabe55e3b915ba9488dc374f752404c2c8945 (patch) | |
| tree | 6fd536922e65b214c266139906b44bfbe378f044 /compiler/rustc_trait_selection/src | |
| parent | a77c20c4b987e74eb1a867d21d1edb8035a11660 (diff) | |
| parent | b1575b71d48a6452d2ff65b5fbb63858388b925b (diff) | |
| download | rust-b7dcabe55e3b915ba9488dc374f752404c2c8945.tar.gz rust-b7dcabe55e3b915ba9488dc374f752404c2c8945.zip | |
Auto merge of #122119 - estebank:issue-117846, r=Nadrieril
Silence unecessary !Sized binding error
When gathering locals, we introduce a `Sized` obligation for each
binding in the pattern. *After* doing so, we typecheck the init
expression. If this has a type failure, we store `{type error}`, for
both the expression and the pattern. But later we store an inference
variable for the pattern.
We now avoid any override of an existing type on a hir node when they've
already been marked as `{type error}`, and on E0277, when it comes from
`VariableType` we silence the error in support of the type error.
Fix https://github.com/rust-lang/rust/issues/117846
Diffstat (limited to 'compiler/rustc_trait_selection/src')
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs index ee390d9c9f0..c472f876e66 100644 --- a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs +++ b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs @@ -2953,6 +2953,16 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> { } } ObligationCauseCode::VariableType(hir_id) => { + if let Some(typeck_results) = &self.typeck_results + && let Some(ty) = typeck_results.node_type_opt(hir_id) + && let ty::Error(_) = ty.kind() + { + err.note(format!( + "`{predicate}` isn't satisfied, but the type of this pattern is \ + `{{type error}}`", + )); + err.downgrade_to_delayed_bug(); + } match tcx.parent_hir_node(hir_id) { Node::Local(hir::Local { ty: Some(ty), .. }) => { err.span_suggestion_verbose( |
