diff options
| author | Urgau <urgau@numericable.fr> | 2023-08-01 11:50:06 +0200 |
|---|---|---|
| committer | Urgau <urgau@numericable.fr> | 2023-08-01 12:34:31 +0200 |
| commit | 87e8feaf507054a2403cd983e444c9de5ec1ca64 (patch) | |
| tree | 2f76f982e9871af647d3f37b7822317f348124ce /compiler/rustc_trait_selection | |
| parent | 04411507bef1d2db441acdc1d89268f0cbaaccbc (diff) | |
| download | rust-87e8feaf507054a2403cd983e444c9de5ec1ca64.tar.gz rust-87e8feaf507054a2403cd983e444c9de5ec1ca64.zip | |
Fix invalid slice coercion suggestion reported in turbofish
Diffstat (limited to 'compiler/rustc_trait_selection')
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs | 1 | ||||
| -rw-r--r-- | compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs | 8 |
2 files changed, 9 insertions, 0 deletions
diff --git a/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs b/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs index cbd81cae989..a74b70704c9 100644 --- a/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs @@ -3034,6 +3034,7 @@ impl<'tcx> InferCtxtPrivExt<'tcx> for TypeErrCtxt<'_, 'tcx> { self.maybe_suggest_convert_to_slice( err, + obligation, trait_ref, impl_candidates.as_slice(), span, 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 1eb4447ae4e..f139a795174 100644 --- a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs +++ b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs @@ -401,6 +401,7 @@ pub trait TypeErrCtxtExt<'tcx> { fn maybe_suggest_convert_to_slice( &self, err: &mut Diagnostic, + obligation: &PredicateObligation<'tcx>, trait_ref: ty::PolyTraitRef<'tcx>, candidate_impls: &[ImplCandidate<'tcx>], span: Span, @@ -3957,10 +3958,17 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> { fn maybe_suggest_convert_to_slice( &self, err: &mut Diagnostic, + obligation: &PredicateObligation<'tcx>, trait_ref: ty::PolyTraitRef<'tcx>, candidate_impls: &[ImplCandidate<'tcx>], span: Span, ) { + // We can only suggest the slice coersion for function arguments since the suggestion + // would make no sense in turbofish or call + let ObligationCauseCode::FunctionArgumentObligation { .. } = obligation.cause.code() else { + return; + }; + // Three cases where we can make a suggestion: // 1. `[T; _]` (array of T) // 2. `&[T; _]` (reference to array of T) |
