diff options
| author | bors <bors@rust-lang.org> | 2023-03-08 22:48:17 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-03-08 22:48:17 +0000 |
| commit | 6a179026decb823e6ad8ba1c81729528bc5d695f (patch) | |
| tree | 98f20f23dde3d9aca52c76c0a783eb374c458115 /compiler/rustc_hir_analysis/src | |
| parent | 900c3540378c8422b8087ffa3db60fa6c8abfcad (diff) | |
| parent | 7732cccd993f6caeedad7b9c24850768705179ab (diff) | |
| download | rust-6a179026decb823e6ad8ba1c81729528bc5d695f.tar.gz rust-6a179026decb823e6ad8ba1c81729528bc5d695f.zip | |
Auto merge of #108919 - matthiaskrgr:rollup-g271pm2, r=matthiaskrgr
Rollup of 8 pull requests Successful merges: - #108686 (rustdoc: include link on all.html location header) - #108846 (StableMIR: Proof-of-concept implementation + test ) - #108873 (Simplify `sort_by` calls) - #108883 (Suppress copy impl error when post-normalized type references errors) - #108884 (Tweak illegal `Copy` impl message) - #108887 (Rename `MapInPlace` as `FlatMapInPlace`.) - #108901 (fix: evaluate with wrong obligation stack) - #108903 (Move Clippy tests back to their intended directory) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
Diffstat (limited to 'compiler/rustc_hir_analysis/src')
| -rw-r--r-- | compiler/rustc_hir_analysis/src/coherence/builtin.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/compiler/rustc_hir_analysis/src/coherence/builtin.rs b/compiler/rustc_hir_analysis/src/coherence/builtin.rs index ffb68abf978..8294d92c936 100644 --- a/compiler/rustc_hir_analysis/src/coherence/builtin.rs +++ b/compiler/rustc_hir_analysis/src/coherence/builtin.rs @@ -2,6 +2,7 @@ //! up data structures required by type-checking/codegen. use crate::errors::{CopyImplOnNonAdt, CopyImplOnTypeWithDtor, DropImplOnWrongItem}; +use rustc_data_structures::fx::FxHashSet; use rustc_errors::{struct_span_err, MultiSpan}; use rustc_hir as hir; use rustc_hir::def_id::{DefId, LocalDefId}; @@ -86,7 +87,7 @@ fn visit_implementation_of_copy(tcx: TyCtxt<'_>, impl_did: LocalDefId) { tcx.sess, span, E0204, - "the trait `Copy` may not be implemented for this type" + "the trait `Copy` cannot be implemented for this type" ); // We'll try to suggest constraining type parameters to fulfill the requirements of @@ -94,7 +95,14 @@ fn visit_implementation_of_copy(tcx: TyCtxt<'_>, impl_did: LocalDefId) { let mut errors: BTreeMap<_, Vec<_>> = Default::default(); let mut bounds = vec![]; + let mut seen_tys = FxHashSet::default(); + for (field, ty, reason) in fields { + // Only report an error once per type. + if !seen_tys.insert(ty) { + continue; + } + let field_span = tcx.def_span(field.did); err.span_label(field_span, "this field does not implement `Copy`"); |
