Skip to content

Commit

Permalink
Rollup merge of rust-lang#106072 - eopb:dyn-derive, r=estebank
Browse files Browse the repository at this point in the history
fix: misleading "add dyn keyword before derive macro" suggestion

Fixes rust-lang#106071
  • Loading branch information
matthiaskrgr authored Jan 14, 2023
2 parents b82df7c + 41ee87c commit 037b512
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 1 deletion.
8 changes: 7 additions & 1 deletion compiler/rustc_hir_analysis/src/astconv/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3307,7 +3307,13 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o {
let label = "add `dyn` keyword before this trait";
let mut diag =
rustc_errors::struct_span_err!(tcx.sess, self_ty.span, E0782, "{}", msg);
diag.multipart_suggestion_verbose(label, sugg, Applicability::MachineApplicable);
if self_ty.span.can_be_used_for_suggestions() {
diag.multipart_suggestion_verbose(
label,
sugg,
Applicability::MachineApplicable,
);
}
// check if the impl trait that we are considering is a impl of a local trait
self.maybe_lint_blanket_trait_impl(&self_ty, &mut diag);
diag.emit();
Expand Down
5 changes: 5 additions & 0 deletions src/test/ui/traits/issue-106072.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#[derive(Clone)] //~ trait objects must include the `dyn` keyword
//~| trait objects must include the `dyn` keyword
struct Foo;
trait Foo {} //~ the name `Foo` is defined multiple times
fn main() {}
30 changes: 30 additions & 0 deletions src/test/ui/traits/issue-106072.stderr
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
error[E0428]: the name `Foo` is defined multiple times
--> $DIR/issue-106072.rs:4:1
|
LL | struct Foo;
| ----------- previous definition of the type `Foo` here
LL | trait Foo {}
| ^^^^^^^^^ `Foo` redefined here
|
= note: `Foo` must be defined only once in the type namespace of this module

error[E0782]: trait objects must include the `dyn` keyword
--> $DIR/issue-106072.rs:1:10
|
LL | #[derive(Clone)]
| ^^^^^
|
= note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)

error[E0782]: trait objects must include the `dyn` keyword
--> $DIR/issue-106072.rs:1:10
|
LL | #[derive(Clone)]
| ^^^^^
|
= note: this error originates in the derive macro `Clone` (in Nightly builds, run with -Z macro-backtrace for more info)

error: aborting due to 3 previous errors

Some errors have detailed explanations: E0428, E0782.
For more information about an error, try `rustc --explain E0428`.

0 comments on commit 037b512

Please sign in to comment.