From 646f58a7e1985ca935c3d95a003f23fb81831dd3 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Sat, 10 Jul 2021 10:00:54 +0200 Subject: [PATCH 1/6] Lint bare traits in AstConv. --- compiler/rustc_ast_lowering/src/lib.rs | 48 +------------- compiler/rustc_lint/src/context.rs | 10 --- compiler/rustc_lint_defs/src/lib.rs | 1 - compiler/rustc_typeck/src/astconv/mod.rs | 64 +++++++++++++++++-- .../rustc_typeck/src/check/fn_ctxt/_impl.rs | 58 +---------------- ...const-expression-suggest-missing-braces.rs | 2 - ...t-expression-suggest-missing-braces.stderr | 32 ++++------ src/test/ui/did_you_mean/bad-assoc-ty.rs | 2 + src/test/ui/did_you_mean/bad-assoc-ty.stderr | 38 +++++++---- .../ui/dyn-keyword/dyn-2018-edition-lint.rs | 2 - .../dyn-keyword/dyn-2018-edition-lint.stderr | 11 +--- .../ui/dyn-keyword/dyn-2021-edition-error.rs | 1 - .../dyn-keyword/dyn-2021-edition-error.stderr | 17 +---- .../ui/dyn-keyword/dyn-angle-brackets.fixed | 2 - src/test/ui/dyn-keyword/dyn-angle-brackets.rs | 2 - .../ui/dyn-keyword/dyn-angle-brackets.stderr | 11 +--- src/test/ui/editions/dyn-trait-sugg-2021.rs | 4 +- .../ui/editions/dyn-trait-sugg-2021.stderr | 9 ++- .../gat-trait-path-parenthesised-args.rs | 2 - .../gat-trait-path-parenthesised-args.stderr | 12 +--- src/test/ui/issues/issue-28344.rs | 4 ++ src/test/ui/issues/issue-28344.stderr | 25 +++++++- src/test/ui/issues/issue-58734.rs | 2 + src/test/ui/issues/issue-58734.stderr | 12 +++- src/test/ui/lint/bare-trait-objects-path.rs | 2 + .../ui/lint/bare-trait-objects-path.stderr | 13 +++- .../allowed-group-warn-by-default-lint.rs | 4 ++ .../allowed-group-warn-by-default-lint.stderr | 20 +++++- .../ui/lint/force-warn/cap-lints-allow.rs | 4 ++ .../ui/lint/force-warn/cap-lints-allow.stderr | 20 +++++- ...-group-allowed-cli-warn-by-default-lint.rs | 4 ++ ...up-allowed-cli-warn-by-default-lint.stderr | 20 +++++- .../lint-group-allowed-lint-group.rs | 4 ++ .../lint-group-allowed-lint-group.stderr | 20 +++++- ...lint-group-allowed-warn-by-default-lint.rs | 4 ++ ...-group-allowed-warn-by-default-lint.stderr | 20 +++++- src/test/ui/parser/issues/issue-68890-2.rs | 2 - .../ui/parser/issues/issue-68890-2.stderr | 12 +--- .../issues/issue-73568-lifetime-after-mut.rs | 4 -- .../issue-73568-lifetime-after-mut.stderr | 23 +------ .../macro/trait-object-macro-matcher.rs | 2 - .../macro/trait-object-macro-matcher.stderr | 12 +--- .../parser/trait-object-trait-parens.stderr | 36 +++++------ src/test/ui/unspecified-self-in-trait-ref.rs | 10 +++ .../ui/unspecified-self-in-trait-ref.stderr | 56 ++++++++++++++-- 45 files changed, 366 insertions(+), 297 deletions(-) diff --git a/compiler/rustc_ast_lowering/src/lib.rs b/compiler/rustc_ast_lowering/src/lib.rs index 1a4f0a26f2bd5..8c6d2eac51e5a 100644 --- a/compiler/rustc_ast_lowering/src/lib.rs +++ b/compiler/rustc_ast_lowering/src/lib.rs @@ -47,7 +47,7 @@ use rustc_data_structures::fx::FxHashSet; use rustc_data_structures::sorted_map::SortedMap; use rustc_data_structures::stable_hasher::{HashStable, StableHasher}; use rustc_data_structures::sync::Lrc; -use rustc_errors::{struct_span_err, Applicability}; +use rustc_errors::struct_span_err; use rustc_hir as hir; use rustc_hir::def::{DefKind, Namespace, PartialRes, PerNS, Res}; use rustc_hir::def_id::{DefId, DefPathHash, LocalDefId, CRATE_DEF_ID}; @@ -56,11 +56,9 @@ use rustc_hir::intravisit; use rustc_hir::{ConstArg, GenericArg, InferKind, ParamName}; use rustc_index::vec::{Idx, IndexVec}; use rustc_query_system::ich::StableHashingContext; -use rustc_session::lint::builtin::BARE_TRAIT_OBJECTS; -use rustc_session::lint::{BuiltinLintDiagnostics, LintBuffer}; +use rustc_session::lint::LintBuffer; use rustc_session::utils::{FlattenNonterminals, NtToTokenstream}; use rustc_session::Session; -use rustc_span::edition::Edition; use rustc_span::hygiene::ExpnId; use rustc_span::source_map::{respan, DesugaringKind}; use rustc_span::symbol::{kw, sym, Ident, Symbol}; @@ -1190,11 +1188,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { ) -> hir::Ty<'hir> { let id = self.lower_node_id(t.id); let qpath = self.lower_qpath(t.id, qself, path, param_mode, itctx); - let ty = self.ty_path(id, t.span, qpath); - if let hir::TyKind::TraitObject(..) = ty.kind { - self.maybe_lint_bare_trait(t.span, t.id, qself.is_none() && path.is_global()); - } - ty + self.ty_path(id, t.span, qpath) } fn ty(&mut self, span: Span, kind: hir::TyKind<'hir>) -> hir::Ty<'hir> { @@ -1291,9 +1285,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { lifetime_bound.unwrap_or_else(|| this.elided_dyn_bound(t.span)); (bounds, lifetime_bound) }); - if kind != TraitObjectSyntax::Dyn { - self.maybe_lint_bare_trait(t.span, t.id, false); - } hir::TyKind::TraitObject(bounds, lifetime_bound, kind) } TyKind::ImplTrait(def_node_id, ref bounds) => { @@ -2395,39 +2386,6 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { name: hir::LifetimeName::Implicit(missing), } } - - fn maybe_lint_bare_trait(&mut self, span: Span, id: NodeId, is_global: bool) { - // FIXME(davidtwco): This is a hack to detect macros which produce spans of the - // call site which do not have a macro backtrace. See #61963. - let is_macro_callsite = self - .sess - .source_map() - .span_to_snippet(span) - .map(|snippet| snippet.starts_with("#[")) - .unwrap_or(true); - if !is_macro_callsite { - if span.edition() < Edition::Edition2021 { - self.resolver.lint_buffer().buffer_lint_with_diagnostic( - BARE_TRAIT_OBJECTS, - id, - span, - "trait objects without an explicit `dyn` are deprecated", - BuiltinLintDiagnostics::BareTraitObject(span, is_global), - ) - } else { - let msg = "trait objects must include the `dyn` keyword"; - let label = "add `dyn` keyword before this trait"; - let mut err = struct_span_err!(self.sess, span, E0782, "{}", msg,); - err.span_suggestion_verbose( - span.shrink_to_lo(), - label, - String::from("dyn "), - Applicability::MachineApplicable, - ); - err.emit(); - } - } - } } /// Helper struct for delayed construction of GenericArgs. diff --git a/compiler/rustc_lint/src/context.rs b/compiler/rustc_lint/src/context.rs index 4c936dec6f2cd..d434549ed8587 100644 --- a/compiler/rustc_lint/src/context.rs +++ b/compiler/rustc_lint/src/context.rs @@ -635,16 +635,6 @@ pub trait LintContext: Sized { } }, BuiltinLintDiagnostics::Normal => (), - BuiltinLintDiagnostics::BareTraitObject(span, is_global) => { - let (sugg, app) = match sess.source_map().span_to_snippet(span) { - Ok(s) if is_global => { - (format!("dyn ({})", s), Applicability::MachineApplicable) - } - Ok(s) => (format!("dyn {}", s), Applicability::MachineApplicable), - Err(_) => ("dyn ".to_string(), Applicability::HasPlaceholders), - }; - db.span_suggestion(span, "use `dyn`", sugg, app); - } BuiltinLintDiagnostics::AbsPathWithModule(span) => { let (sugg, app) = match sess.source_map().span_to_snippet(span) { Ok(ref s) => { diff --git a/compiler/rustc_lint_defs/src/lib.rs b/compiler/rustc_lint_defs/src/lib.rs index feac2a7cfa48a..efc0cecb8244c 100644 --- a/compiler/rustc_lint_defs/src/lib.rs +++ b/compiler/rustc_lint_defs/src/lib.rs @@ -285,7 +285,6 @@ pub enum ExternDepSpec { #[derive(PartialEq, Debug)] pub enum BuiltinLintDiagnostics { Normal, - BareTraitObject(Span, /* is_global */ bool), AbsPathWithModule(Span), ProcMacroDeriveResolutionFallback(Span), MacroExpandedMacroExportsAccessedByAbsolutePaths(Span), diff --git a/compiler/rustc_typeck/src/astconv/mod.rs b/compiler/rustc_typeck/src/astconv/mod.rs index da751f2075399..bc271fac68fd6 100644 --- a/compiler/rustc_typeck/src/astconv/mod.rs +++ b/compiler/rustc_typeck/src/astconv/mod.rs @@ -13,6 +13,7 @@ use crate::errors::{ }; use crate::middle::resolve_lifetime as rl; use crate::require_c_abi_if_c_variadic; +use rustc_ast::TraitObjectSyntax; use rustc_data_structures::fx::{FxHashMap, FxHashSet}; use rustc_errors::{struct_span_err, Applicability, ErrorReported, FatalError}; use rustc_hir as hir; @@ -24,7 +25,8 @@ use rustc_hir::{GenericArg, GenericArgs}; use rustc_middle::ty::subst::{self, GenericArgKind, InternalSubsts, Subst, SubstsRef}; use rustc_middle::ty::GenericParamDefKind; use rustc_middle::ty::{self, Const, DefIdTree, Ty, TyCtxt, TypeFoldable}; -use rustc_session::lint::builtin::AMBIGUOUS_ASSOCIATED_ITEMS; +use rustc_session::lint::builtin::{AMBIGUOUS_ASSOCIATED_ITEMS, BARE_TRAIT_OBJECTS}; +use rustc_span::edition::Edition; use rustc_span::lev_distance::find_best_match_for_name; use rustc_span::symbol::{Ident, Symbol}; use rustc_span::{Span, DUMMY_SP}; @@ -2289,13 +2291,19 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { /// Parses the programmer's textual representation of a type into our /// internal notion of a type. pub fn ast_ty_to_ty(&self, ast_ty: &hir::Ty<'_>) -> Ty<'tcx> { - self.ast_ty_to_ty_inner(ast_ty, false) + self.ast_ty_to_ty_inner(ast_ty, false, false) + } + + /// Parses the programmer's textual representation of a type into our + /// internal notion of a type. This is meant to be used within a path. + pub fn ast_ty_to_ty_in_path(&self, ast_ty: &hir::Ty<'_>) -> Ty<'tcx> { + self.ast_ty_to_ty_inner(ast_ty, false, true) } /// Turns a `hir::Ty` into a `Ty`. For diagnostics' purposes we keep track of whether trait /// objects are borrowed like `&dyn Trait` to avoid emitting redundant errors. #[tracing::instrument(level = "debug", skip(self))] - fn ast_ty_to_ty_inner(&self, ast_ty: &hir::Ty<'_>, borrowed: bool) -> Ty<'tcx> { + fn ast_ty_to_ty_inner(&self, ast_ty: &hir::Ty<'_>, borrowed: bool, in_path: bool) -> Ty<'tcx> { let tcx = self.tcx(); let result_ty = match ast_ty.kind { @@ -2306,7 +2314,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { hir::TyKind::Rptr(ref region, ref mt) => { let r = self.ast_region_to_region(region, None); debug!(?r); - let t = self.ast_ty_to_ty_inner(mt.ty, true); + let t = self.ast_ty_to_ty_inner(mt.ty, true, false); tcx.mk_ref(r, ty::TypeAndMut { ty: t, mutbl: mt.mutbl }) } hir::TyKind::Never => tcx.types.never, @@ -2325,6 +2333,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { )) } hir::TyKind::TraitObject(bounds, ref lifetime, _) => { + self.maybe_lint_bare_trait(ast_ty, in_path); self.conv_object_ty_poly_trait_ref(ast_ty.span, bounds, lifetime, borrowed) } hir::TyKind::Path(hir::QPath::Resolved(ref maybe_qself, ref path)) => { @@ -2345,7 +2354,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { } hir::TyKind::Path(hir::QPath::TypeRelative(ref qself, ref segment)) => { debug!(?qself, ?segment); - let ty = self.ast_ty_to_ty(qself); + let ty = self.ast_ty_to_ty_inner(qself, false, true); let res = if let hir::TyKind::Path(hir::QPath::Resolved(_, path)) = qself.kind { path.res @@ -2602,4 +2611,49 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { } Some(r) } + + fn maybe_lint_bare_trait(&self, self_ty: &hir::Ty<'_>, in_path: bool) { + let tcx = self.tcx(); + if let hir::TyKind::TraitObject([poly_trait_ref, ..], _, TraitObjectSyntax::None) = + self_ty.kind + { + let (mut sugg, app) = match tcx.sess.source_map().span_to_snippet(self_ty.span) { + Ok(s) if poly_trait_ref.trait_ref.path.is_global() => { + (format!("dyn ({})", s), Applicability::MachineApplicable) + } + Ok(s) => (format!("dyn {}", s), Applicability::MachineApplicable), + Err(_) => ("dyn ".to_string(), Applicability::HasPlaceholders), + }; + if in_path { + let has_bracket = tcx + .sess + .source_map() + .span_to_prev_source(self_ty.span) + .ok() + .map_or(false, |s| s.trim_end().ends_with('<')); + if !has_bracket { + sugg = format!("<{}>", sugg); + } + } + if tcx.sess.edition() >= Edition::Edition2021 { + let msg = "trait objects must include the `dyn` keyword"; + let label = "add `dyn` keyword before this trait"; + let mut err = + rustc_errors::struct_span_err!(tcx.sess, self_ty.span, E0782, "{}", msg); + err.span_suggestion_verbose(self_ty.span, label, sugg, app).emit(); + } else { + let msg = "trait objects without an explicit `dyn` are deprecated"; + tcx.struct_span_lint_hir( + BARE_TRAIT_OBJECTS, + self_ty.hir_id, + self_ty.span, + |lint| { + let mut db = lint.build(msg); + db.span_suggestion(self_ty.span, "use `dyn`", sugg, app); + db.emit() + }, + ); + } + } + } } diff --git a/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs b/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs index a02a7d7cbfeb2..66546b36aa1cc 100644 --- a/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs +++ b/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs @@ -6,7 +6,6 @@ use crate::check::callee::{self, DeferredCallResolution}; use crate::check::method::{self, MethodCallee, SelfSource}; use crate::check::{BreakableCtxt, Diverges, Expectation, FnCtxt, LocalTy}; -use rustc_ast::TraitObjectSyntax; use rustc_data_structures::captures::Captures; use rustc_data_structures::fx::FxHashSet; use rustc_errors::{Applicability, DiagnosticBuilder, ErrorReported}; @@ -14,7 +13,7 @@ use rustc_hir as hir; use rustc_hir::def::{CtorOf, DefKind, Res}; use rustc_hir::def_id::DefId; use rustc_hir::lang_items::LangItem; -use rustc_hir::{ExprKind, GenericArg, Node, QPath, TyKind}; +use rustc_hir::{ExprKind, GenericArg, Node, QPath}; use rustc_infer::infer::canonical::{Canonical, OriginalQueryValues, QueryResponse}; use rustc_infer::infer::error_reporting::TypeAnnotationNeeded::E0282; use rustc_infer::infer::{InferOk, InferResult}; @@ -28,8 +27,6 @@ use rustc_middle::ty::{ Ty, UserType, }; use rustc_session::lint; -use rustc_session::lint::builtin::BARE_TRAIT_OBJECTS; -use rustc_span::edition::Edition; use rustc_span::hygiene::DesugaringKind; use rustc_span::source_map::{original_sp, DUMMY_SP}; use rustc_span::symbol::{kw, sym, Ident}; @@ -844,7 +841,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { // to be object-safe. // We manually call `register_wf_obligation` in the success path // below. - (>::ast_ty_to_ty(self, qself), qself, segment) + (>::ast_ty_to_ty_in_path(self, qself), qself, segment) } QPath::LangItem(..) => { bug!("`resolve_ty_and_res_fully_qualified_call` called on `LangItem`") @@ -890,7 +887,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { }); if result.is_ok() { - self.maybe_lint_bare_trait(qpath, hir_id, span); self.register_wf_obligation(ty.into(), qself.span, traits::WellFormed(None)); } @@ -903,56 +899,6 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { ) } - fn maybe_lint_bare_trait(&self, qpath: &QPath<'_>, hir_id: hir::HirId, span: Span) { - if let QPath::TypeRelative(self_ty, _) = qpath { - if let TyKind::TraitObject([poly_trait_ref, ..], _, TraitObjectSyntax::None) = - self_ty.kind - { - let msg = "trait objects without an explicit `dyn` are deprecated"; - let (sugg, app) = match self.tcx.sess.source_map().span_to_snippet(self_ty.span) { - Ok(s) if poly_trait_ref.trait_ref.path.is_global() => { - (format!("dyn ({})", s), Applicability::MachineApplicable) - } - Ok(s) => (format!("dyn {}", s), Applicability::MachineApplicable), - Err(_) => ("dyn ".to_string(), Applicability::HasPlaceholders), - }; - // Wrap in `<..>` if it isn't already. - let sugg = match self.tcx.sess.source_map().span_to_snippet(span) { - Ok(s) if s.starts_with('<') => sugg, - _ => format!("<{}>", sugg), - }; - let sugg_label = "use `dyn`"; - if self.sess().edition() >= Edition::Edition2021 { - let mut err = rustc_errors::struct_span_err!( - self.sess(), - self_ty.span, - E0782, - "{}", - msg, - ); - err.span_suggestion( - self_ty.span, - sugg_label, - sugg, - Applicability::MachineApplicable, - ) - .emit(); - } else { - self.tcx.struct_span_lint_hir( - BARE_TRAIT_OBJECTS, - hir_id, - self_ty.span, - |lint| { - let mut db = lint.build(msg); - db.span_suggestion(self_ty.span, sugg_label, sugg, app); - db.emit() - }, - ); - } - } - } - } - /// Given a function `Node`, return its `FnDecl` if it exists, or `None` otherwise. pub(in super::super) fn get_node_fn_decl( &self, diff --git a/src/test/ui/const-generics/min_const_generics/const-expression-suggest-missing-braces.rs b/src/test/ui/const-generics/min_const_generics/const-expression-suggest-missing-braces.rs index ae8863c567d0f..e12e07a28e763 100644 --- a/src/test/ui/const-generics/min_const_generics/const-expression-suggest-missing-braces.rs +++ b/src/test/ui/const-generics/min_const_generics/const-expression-suggest-missing-braces.rs @@ -12,8 +12,6 @@ fn b() { //~^ ERROR expected trait, found constant `BAR` //~| ERROR expected trait, found constant `BAR` //~| ERROR type provided when a constant was expected - //~| WARN trait objects without an explicit `dyn` are deprecated - //~| WARN this is accepted in the current edition } fn c() { foo::<3 + 3>(); //~ ERROR expressions must be enclosed in braces diff --git a/src/test/ui/const-generics/min_const_generics/const-expression-suggest-missing-braces.stderr b/src/test/ui/const-generics/min_const_generics/const-expression-suggest-missing-braces.stderr index 380c17c8e62bb..d9bcc523b1fc4 100644 --- a/src/test/ui/const-generics/min_const_generics/const-expression-suggest-missing-braces.stderr +++ b/src/test/ui/const-generics/min_const_generics/const-expression-suggest-missing-braces.stderr @@ -10,7 +10,7 @@ LL | foo::<{ BAR + 3 }>(); | + + error: expressions must be enclosed in braces to be used as const generic arguments - --> $DIR/const-expression-suggest-missing-braces.rs:19:11 + --> $DIR/const-expression-suggest-missing-braces.rs:17:11 | LL | foo::<3 + 3>(); | ^^^^^ @@ -21,7 +21,7 @@ LL | foo::<{ 3 + 3 }>(); | + + error: expected one of `,` or `>`, found `-` - --> $DIR/const-expression-suggest-missing-braces.rs:22:15 + --> $DIR/const-expression-suggest-missing-braces.rs:20:15 | LL | foo::(); | ^ expected one of `,` or `>` @@ -32,7 +32,7 @@ LL | foo::<{ BAR - 3 }>(); | + + error: expected one of `,` or `>`, found `-` - --> $DIR/const-expression-suggest-missing-braces.rs:25:15 + --> $DIR/const-expression-suggest-missing-braces.rs:23:15 | LL | foo::(); | ^ expected one of `,` or `>` @@ -43,7 +43,7 @@ LL | foo::<{ BAR - BAR }>(); | + + error: expressions must be enclosed in braces to be used as const generic arguments - --> $DIR/const-expression-suggest-missing-braces.rs:28:11 + --> $DIR/const-expression-suggest-missing-braces.rs:26:11 | LL | foo::<100 - BAR>(); | ^^^^^^^^^ @@ -54,7 +54,7 @@ LL | foo::<{ 100 - BAR }>(); | + + error: expected one of `,` or `>`, found `(` - --> $DIR/const-expression-suggest-missing-braces.rs:31:19 + --> $DIR/const-expression-suggest-missing-braces.rs:29:19 | LL | foo::()>(); | ^ expected one of `,` or `>` @@ -65,7 +65,7 @@ LL | foo::<{ bar() }>(); | + + error: expected one of `,` or `>`, found `(` - --> $DIR/const-expression-suggest-missing-braces.rs:34:21 + --> $DIR/const-expression-suggest-missing-braces.rs:32:21 | LL | foo::()>(); | ^ expected one of `,` or `>` @@ -76,7 +76,7 @@ LL | foo::<{ bar::() }>(); | + + error: expected one of `,` or `>`, found `(` - --> $DIR/const-expression-suggest-missing-braces.rs:37:21 + --> $DIR/const-expression-suggest-missing-braces.rs:35:21 | LL | foo::() + BAR>(); | ^ expected one of `,` or `>` @@ -87,7 +87,7 @@ LL | foo::<{ bar::() + BAR }>(); | + + error: expected one of `,` or `>`, found `(` - --> $DIR/const-expression-suggest-missing-braces.rs:40:21 + --> $DIR/const-expression-suggest-missing-braces.rs:38:21 | LL | foo::() - BAR>(); | ^ expected one of `,` or `>` @@ -98,7 +98,7 @@ LL | foo::<{ bar::() - BAR }>(); | + + error: expected one of `,` or `>`, found `-` - --> $DIR/const-expression-suggest-missing-braces.rs:43:15 + --> $DIR/const-expression-suggest-missing-braces.rs:41:15 | LL | foo::()>(); | ^ expected one of `,` or `>` @@ -109,7 +109,7 @@ LL | foo::<{ BAR - bar::() }>(); | + + error: expected one of `,` or `>`, found `-` - --> $DIR/const-expression-suggest-missing-braces.rs:46:15 + --> $DIR/const-expression-suggest-missing-braces.rs:44:15 | LL | foo::()>(); | ^ expected one of `,` or `>` @@ -131,23 +131,13 @@ error[E0404]: expected trait, found constant `BAR` LL | foo::(); | ^^^ not a trait -warning: trait objects without an explicit `dyn` are deprecated - --> $DIR/const-expression-suggest-missing-braces.rs:11:11 - | -LL | foo::(); - | ^^^^^^^^^ help: use `dyn`: `dyn BAR + BAR` - | - = note: `#[warn(bare_trait_objects)]` on by default - = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! - = note: for more information, see - error[E0747]: type provided when a constant was expected --> $DIR/const-expression-suggest-missing-braces.rs:11:11 | LL | foo::(); | ^^^^^^^^^ -error: aborting due to 14 previous errors; 1 warning emitted +error: aborting due to 14 previous errors Some errors have detailed explanations: E0404, E0747. For more information about an error, try `rustc --explain E0404`. diff --git a/src/test/ui/did_you_mean/bad-assoc-ty.rs b/src/test/ui/did_you_mean/bad-assoc-ty.rs index 1b6bcfbb9fcde..609a5b0de6b7e 100644 --- a/src/test/ui/did_you_mean/bad-assoc-ty.rs +++ b/src/test/ui/did_you_mean/bad-assoc-ty.rs @@ -32,6 +32,8 @@ type G = dyn 'static + (Send)::AssocTy; // Recovery should not apply in this context. type H = Fn(u8) -> (u8)::Output; //~^ ERROR ambiguous associated type +//~| WARN trait objects without an explicit `dyn` are deprecated +//~| WARN this is accepted in the current edition macro_rules! ty { ($ty: ty) => ($ty::AssocTy); diff --git a/src/test/ui/did_you_mean/bad-assoc-ty.stderr b/src/test/ui/did_you_mean/bad-assoc-ty.stderr index 0e2fdf9f6c2bf..0d37220bc828d 100644 --- a/src/test/ui/did_you_mean/bad-assoc-ty.stderr +++ b/src/test/ui/did_you_mean/bad-assoc-ty.stderr @@ -41,13 +41,13 @@ LL | type G = dyn 'static + (Send)::AssocTy; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `::AssocTy` error: missing angle brackets in associated item path - --> $DIR/bad-assoc-ty.rs:44:10 + --> $DIR/bad-assoc-ty.rs:46:10 | LL | type I = ty!()::AssocTy; | ^^^^^^^^^^^^^^ help: try: `::AssocTy` error: missing angle brackets in associated item path - --> $DIR/bad-assoc-ty.rs:37:19 + --> $DIR/bad-assoc-ty.rs:39:19 | LL | ($ty: ty) => ($ty::AssocTy); | ^^^^^^^^^^^^ help: try: `<$ty>::AssocTy` @@ -99,6 +99,16 @@ error[E0223]: ambiguous associated type LL | type G = dyn 'static + (Send)::AssocTy; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use fully-qualified syntax: `<(dyn Send + 'static) as Trait>::AssocTy` +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/bad-assoc-ty.rs:33:10 + | +LL | type H = Fn(u8) -> (u8)::Output; + | ^^^^^^ help: use `dyn`: `` + | + = note: `#[warn(bare_trait_objects)]` on by default + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0223]: ambiguous associated type --> $DIR/bad-assoc-ty.rs:33:10 | @@ -106,7 +116,7 @@ LL | type H = Fn(u8) -> (u8)::Output; | ^^^^^^^^^^^^^^^^^^^^^^ help: use fully-qualified syntax: `<(dyn Fn(u8) -> u8 + 'static) as Trait>::Output` error[E0223]: ambiguous associated type - --> $DIR/bad-assoc-ty.rs:37:19 + --> $DIR/bad-assoc-ty.rs:39:19 | LL | ($ty: ty) => ($ty::AssocTy); | ^^^^^^^^^^^^ help: use fully-qualified syntax: `::AssocTy` @@ -117,13 +127,13 @@ LL | type J = ty!(u8); = note: this error originates in the macro `ty` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0223]: ambiguous associated type - --> $DIR/bad-assoc-ty.rs:44:10 + --> $DIR/bad-assoc-ty.rs:46:10 | LL | type I = ty!()::AssocTy; | ^^^^^^^^^^^^^^ help: use fully-qualified syntax: `::AssocTy` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/bad-assoc-ty.rs:49:13 + --> $DIR/bad-assoc-ty.rs:51:13 | LL | fn foo>(x: X) {} | ^ ^ not allowed in type signatures @@ -136,7 +146,7 @@ LL | fn foo, T>(x: X) {} | ~ ~ +++ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/bad-assoc-ty.rs:52:34 + --> $DIR/bad-assoc-ty.rs:54:34 | LL | fn bar(_: F) where F: Fn() -> _ {} | ^ not allowed in type signatures @@ -147,7 +157,7 @@ LL | fn bar(_: F) where F: Fn() -> T {} | +++ ~ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/bad-assoc-ty.rs:55:19 + --> $DIR/bad-assoc-ty.rs:57:19 | LL | fn baz _>(_: F) {} | ^ not allowed in type signatures @@ -158,7 +168,7 @@ LL | fn baz T, T>(_: F) {} | ~+++ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/bad-assoc-ty.rs:58:33 + --> $DIR/bad-assoc-ty.rs:60:33 | LL | struct L(F) where F: Fn() -> _; | ^ not allowed in type signatures @@ -169,7 +179,7 @@ LL | struct L(F) where F: Fn() -> T; | +++ ~ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/bad-assoc-ty.rs:60:30 + --> $DIR/bad-assoc-ty.rs:62:30 | LL | struct M where F: Fn() -> _ { | ^ not allowed in type signatures @@ -180,7 +190,7 @@ LL | struct M where F: Fn() -> T { | +++ ~ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for enums - --> $DIR/bad-assoc-ty.rs:64:28 + --> $DIR/bad-assoc-ty.rs:66:28 | LL | enum N where F: Fn() -> _ { | ^ not allowed in type signatures @@ -191,7 +201,7 @@ LL | enum N where F: Fn() -> T { | +++ ~ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for unions - --> $DIR/bad-assoc-ty.rs:69:29 + --> $DIR/bad-assoc-ty.rs:71:29 | LL | union O where F: Fn() -> _ { | ^ not allowed in type signatures @@ -202,7 +212,7 @@ LL | union O where F: Fn() -> T { | +++ ~ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for traits - --> $DIR/bad-assoc-ty.rs:74:29 + --> $DIR/bad-assoc-ty.rs:76:29 | LL | trait P where F: Fn() -> _ { | ^ not allowed in type signatures @@ -213,7 +223,7 @@ LL | trait P where F: Fn() -> T { | +++ ~ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/bad-assoc-ty.rs:79:38 + --> $DIR/bad-assoc-ty.rs:81:38 | LL | fn foo(_: F) where F: Fn() -> _ {} | ^ not allowed in type signatures @@ -223,7 +233,7 @@ help: use type parameters instead LL | fn foo(_: F) where F: Fn() -> T {} | +++ ~ -error: aborting due to 28 previous errors +error: aborting due to 28 previous errors; 1 warning emitted Some errors have detailed explanations: E0121, E0223. For more information about an error, try `rustc --explain E0121`. diff --git a/src/test/ui/dyn-keyword/dyn-2018-edition-lint.rs b/src/test/ui/dyn-keyword/dyn-2018-edition-lint.rs index 23ca36b71e00f..d8b3b9c7deba5 100644 --- a/src/test/ui/dyn-keyword/dyn-2018-edition-lint.rs +++ b/src/test/ui/dyn-keyword/dyn-2018-edition-lint.rs @@ -7,8 +7,6 @@ fn function(x: &SomeTrait, y: Box) { //~| ERROR trait objects without an explicit `dyn` are deprecated //~| WARN this is accepted in the current edition let _x: &SomeTrait = todo!(); - //~^ ERROR trait objects without an explicit `dyn` are deprecated - //~| WARN this is accepted in the current edition } trait SomeTrait {} diff --git a/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr b/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr index c9bb08cf35c1d..13d7185041aa2 100644 --- a/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr +++ b/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr @@ -21,14 +21,5 @@ LL | fn function(x: &SomeTrait, y: Box) { = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! = note: for more information, see -error: trait objects without an explicit `dyn` are deprecated - --> $DIR/dyn-2018-edition-lint.rs:9:14 - | -LL | let _x: &SomeTrait = todo!(); - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` - | - = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! - = note: for more information, see - -error: aborting due to 3 previous errors +error: aborting due to 2 previous errors diff --git a/src/test/ui/dyn-keyword/dyn-2021-edition-error.rs b/src/test/ui/dyn-keyword/dyn-2021-edition-error.rs index bc1bed8a9a4c6..0f05d8753eaa5 100644 --- a/src/test/ui/dyn-keyword/dyn-2021-edition-error.rs +++ b/src/test/ui/dyn-keyword/dyn-2021-edition-error.rs @@ -4,7 +4,6 @@ fn function(x: &SomeTrait, y: Box) { //~^ ERROR trait objects must include the `dyn` keyword //~| ERROR trait objects must include the `dyn` keyword let _x: &SomeTrait = todo!(); - //~^ ERROR trait objects must include the `dyn` keyword } trait SomeTrait {} diff --git a/src/test/ui/dyn-keyword/dyn-2021-edition-error.stderr b/src/test/ui/dyn-keyword/dyn-2021-edition-error.stderr index 730bc691bf886..ea1baf01ed44b 100644 --- a/src/test/ui/dyn-keyword/dyn-2021-edition-error.stderr +++ b/src/test/ui/dyn-keyword/dyn-2021-edition-error.stderr @@ -1,14 +1,3 @@ -error[E0782]: trait objects must include the `dyn` keyword - --> $DIR/dyn-2021-edition-error.rs:6:14 - | -LL | let _x: &SomeTrait = todo!(); - | ^^^^^^^^^ - | -help: add `dyn` keyword before this trait - | -LL | let _x: &dyn SomeTrait = todo!(); - | +++ - error[E0782]: trait objects must include the `dyn` keyword --> $DIR/dyn-2021-edition-error.rs:3:17 | @@ -18,7 +7,7 @@ LL | fn function(x: &SomeTrait, y: Box) { help: add `dyn` keyword before this trait | LL | fn function(x: &dyn SomeTrait, y: Box) { - | +++ + | ~~~~~~~~~~~~~ error[E0782]: trait objects must include the `dyn` keyword --> $DIR/dyn-2021-edition-error.rs:3:35 @@ -29,8 +18,8 @@ LL | fn function(x: &SomeTrait, y: Box) { help: add `dyn` keyword before this trait | LL | fn function(x: &SomeTrait, y: Box) { - | +++ + | ~~~~~~~~~~~~~ -error: aborting due to 3 previous errors +error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0782`. diff --git a/src/test/ui/dyn-keyword/dyn-angle-brackets.fixed b/src/test/ui/dyn-keyword/dyn-angle-brackets.fixed index 25caa6a8030ff..00069a3e7adb1 100644 --- a/src/test/ui/dyn-keyword/dyn-angle-brackets.fixed +++ b/src/test/ui/dyn-keyword/dyn-angle-brackets.fixed @@ -15,8 +15,6 @@ impl fmt::Display for Foo { ::fmt(self, f) //~^ ERROR trait objects without an explicit `dyn` are deprecated //~| WARNING this is accepted in the current edition - //~| ERROR trait objects without an explicit `dyn` are deprecated - //~| WARNING this is accepted in the current edition } } diff --git a/src/test/ui/dyn-keyword/dyn-angle-brackets.rs b/src/test/ui/dyn-keyword/dyn-angle-brackets.rs index cf72da2b61ec2..ee5fee4cfb8b4 100644 --- a/src/test/ui/dyn-keyword/dyn-angle-brackets.rs +++ b/src/test/ui/dyn-keyword/dyn-angle-brackets.rs @@ -15,8 +15,6 @@ impl fmt::Display for Foo { ::fmt(self, f) //~^ ERROR trait objects without an explicit `dyn` are deprecated //~| WARNING this is accepted in the current edition - //~| ERROR trait objects without an explicit `dyn` are deprecated - //~| WARNING this is accepted in the current edition } } diff --git a/src/test/ui/dyn-keyword/dyn-angle-brackets.stderr b/src/test/ui/dyn-keyword/dyn-angle-brackets.stderr index ef0f5b7f59db9..1f5a10223f1dd 100644 --- a/src/test/ui/dyn-keyword/dyn-angle-brackets.stderr +++ b/src/test/ui/dyn-keyword/dyn-angle-brackets.stderr @@ -12,14 +12,5 @@ LL | #![deny(bare_trait_objects)] = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! = note: for more information, see -error: trait objects without an explicit `dyn` are deprecated - --> $DIR/dyn-angle-brackets.rs:15:10 - | -LL | ::fmt(self, f) - | ^^^^^^^^^^ help: use `dyn`: `dyn fmt::Debug` - | - = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! - = note: for more information, see - -error: aborting due to 2 previous errors +error: aborting due to previous error diff --git a/src/test/ui/editions/dyn-trait-sugg-2021.rs b/src/test/ui/editions/dyn-trait-sugg-2021.rs index 47c48e7ec9e8b..de0444b63e267 100644 --- a/src/test/ui/editions/dyn-trait-sugg-2021.rs +++ b/src/test/ui/editions/dyn-trait-sugg-2021.rs @@ -3,10 +3,10 @@ trait Foo {} impl dyn Foo { - fn hi(_x: T) {} + fn hi(_x: T) {} } fn main() { Foo::hi(123); - //~^ ERROR trait objects without an explicit `dyn` are deprecated + //~^ ERROR trait objects must include the `dyn` keyword } diff --git a/src/test/ui/editions/dyn-trait-sugg-2021.stderr b/src/test/ui/editions/dyn-trait-sugg-2021.stderr index a7119b073abfa..9d1d2d7c51ec4 100644 --- a/src/test/ui/editions/dyn-trait-sugg-2021.stderr +++ b/src/test/ui/editions/dyn-trait-sugg-2021.stderr @@ -1,8 +1,13 @@ -error[E0782]: trait objects without an explicit `dyn` are deprecated +error[E0782]: trait objects must include the `dyn` keyword --> $DIR/dyn-trait-sugg-2021.rs:10:5 | LL | Foo::hi(123); - | ^^^ help: use `dyn`: `` + | ^^^ + | +help: add `dyn` keyword before this trait + | +LL | ::hi(123); + | ~~~~~~~~~ error: aborting due to previous error diff --git a/src/test/ui/generic-associated-types/gat-trait-path-parenthesised-args.rs b/src/test/ui/generic-associated-types/gat-trait-path-parenthesised-args.rs index 48b4a4fc39377..f01da8c61ed1d 100644 --- a/src/test/ui/generic-associated-types/gat-trait-path-parenthesised-args.rs +++ b/src/test/ui/generic-associated-types/gat-trait-path-parenthesised-args.rs @@ -9,7 +9,5 @@ fn foo<'a>(arg: Box>) {} //~| ERROR: parenthesized generic arguments cannot be used //~| ERROR this associated type takes 0 generic arguments but 1 generic argument //~| ERROR this associated type takes 1 lifetime argument but 0 lifetime arguments - //~| WARNING: trait objects without an explicit `dyn` are deprecated - //~| WARNING: this is accepted in the current edition fn main() {} diff --git a/src/test/ui/generic-associated-types/gat-trait-path-parenthesised-args.stderr b/src/test/ui/generic-associated-types/gat-trait-path-parenthesised-args.stderr index 5e0f98c0bbf0a..6014a02c4d96f 100644 --- a/src/test/ui/generic-associated-types/gat-trait-path-parenthesised-args.stderr +++ b/src/test/ui/generic-associated-types/gat-trait-path-parenthesised-args.stderr @@ -10,16 +10,6 @@ error: parenthesized generic arguments cannot be used in associated type constra LL | fn foo<'a>(arg: Box>) {} | ^^^^^ -warning: trait objects without an explicit `dyn` are deprecated - --> $DIR/gat-trait-path-parenthesised-args.rs:7:29 - | -LL | fn foo<'a>(arg: Box>) {} - | ^^ help: use `dyn`: `dyn 'a` - | - = note: `#[warn(bare_trait_objects)]` on by default - = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! - = note: for more information, see - error[E0107]: this associated type takes 1 lifetime argument but 0 lifetime arguments were supplied --> $DIR/gat-trait-path-parenthesised-args.rs:7:27 | @@ -50,6 +40,6 @@ note: associated type defined here, with 0 generic parameters LL | type Y<'a>; | ^ -error: aborting due to 4 previous errors; 1 warning emitted +error: aborting due to 4 previous errors For more information about this error, try `rustc --explain E0107`. diff --git a/src/test/ui/issues/issue-28344.rs b/src/test/ui/issues/issue-28344.rs index 4da7ee21baa0f..1a6a7f46b2742 100644 --- a/src/test/ui/issues/issue-28344.rs +++ b/src/test/ui/issues/issue-28344.rs @@ -4,8 +4,12 @@ fn main() { let x: u8 = BitXor::bitor(0 as u8, 0 as u8); //~^ ERROR must be specified //~| no function or associated item named + //~| WARN trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition let g = BitXor::bitor; //~^ ERROR must be specified //~| no function or associated item named + //~| WARN trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition } diff --git a/src/test/ui/issues/issue-28344.stderr b/src/test/ui/issues/issue-28344.stderr index 4955dea564dd9..1582ef23731f6 100644 --- a/src/test/ui/issues/issue-28344.stderr +++ b/src/test/ui/issues/issue-28344.stderr @@ -1,3 +1,13 @@ +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/issue-28344.rs:4:17 + | +LL | let x: u8 = BitXor::bitor(0 as u8, 0 as u8); + | ^^^^^^ help: use `dyn`: `` + | + = note: `#[warn(bare_trait_objects)]` on by default + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0191]: the value of the associated type `Output` (from trait `BitXor`) must be specified --> $DIR/issue-28344.rs:4:17 | @@ -13,14 +23,23 @@ LL | let x: u8 = BitXor::bitor(0 as u8, 0 as u8); | function or associated item not found in `dyn BitXor<_>` | help: there is an associated function with a similar name: `bitxor` +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/issue-28344.rs:10:13 + | +LL | let g = BitXor::bitor; + | ^^^^^^ help: use `dyn`: `` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0191]: the value of the associated type `Output` (from trait `BitXor`) must be specified - --> $DIR/issue-28344.rs:8:13 + --> $DIR/issue-28344.rs:10:13 | LL | let g = BitXor::bitor; | ^^^^^^ help: specify the associated type: `BitXor` error[E0599]: no function or associated item named `bitor` found for trait object `dyn BitXor<_>` in the current scope - --> $DIR/issue-28344.rs:8:21 + --> $DIR/issue-28344.rs:10:21 | LL | let g = BitXor::bitor; | ^^^^^ @@ -28,7 +47,7 @@ LL | let g = BitXor::bitor; | function or associated item not found in `dyn BitXor<_>` | help: there is an associated function with a similar name: `bitxor` -error: aborting due to 4 previous errors +error: aborting due to 4 previous errors; 2 warnings emitted Some errors have detailed explanations: E0191, E0599. For more information about an error, try `rustc --explain E0191`. diff --git a/src/test/ui/issues/issue-58734.rs b/src/test/ui/issues/issue-58734.rs index b253c135b8c52..c838fde5d73b6 100644 --- a/src/test/ui/issues/issue-58734.rs +++ b/src/test/ui/issues/issue-58734.rs @@ -19,4 +19,6 @@ fn main() { // no object safety error Trait::nonexistent(()); //~^ ERROR no function or associated item named `nonexistent` found + //~| WARN trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition } diff --git a/src/test/ui/issues/issue-58734.stderr b/src/test/ui/issues/issue-58734.stderr index 5e98cfadf8ae7..61d0a2796e9cb 100644 --- a/src/test/ui/issues/issue-58734.stderr +++ b/src/test/ui/issues/issue-58734.stderr @@ -1,9 +1,19 @@ +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/issue-58734.rs:20:5 + | +LL | Trait::nonexistent(()); + | ^^^^^ help: use `dyn`: `` + | + = note: `#[warn(bare_trait_objects)]` on by default + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0599]: no function or associated item named `nonexistent` found for trait object `dyn Trait` in the current scope --> $DIR/issue-58734.rs:20:12 | LL | Trait::nonexistent(()); | ^^^^^^^^^^^ function or associated item not found in `dyn Trait` -error: aborting due to previous error +error: aborting due to previous error; 1 warning emitted For more information about this error, try `rustc --explain E0599`. diff --git a/src/test/ui/lint/bare-trait-objects-path.rs b/src/test/ui/lint/bare-trait-objects-path.rs index 0a7c5a8dbd10b..0e2294715cd8b 100644 --- a/src/test/ui/lint/bare-trait-objects-path.rs +++ b/src/test/ui/lint/bare-trait-objects-path.rs @@ -21,4 +21,6 @@ fn main() { //~^ WARN trait objects without an explicit `dyn` are deprecated //~| WARN this is accepted in the current edition let _: Dyn::Ty; //~ ERROR ambiguous associated type + //~^ WARN trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition } diff --git a/src/test/ui/lint/bare-trait-objects-path.stderr b/src/test/ui/lint/bare-trait-objects-path.stderr index 3477b01b6b567..cbc0fada65a44 100644 --- a/src/test/ui/lint/bare-trait-objects-path.stderr +++ b/src/test/ui/lint/bare-trait-objects-path.stderr @@ -1,3 +1,13 @@ +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/bare-trait-objects-path.rs:23:12 + | +LL | let _: Dyn::Ty; + | ^^^ help: use `dyn`: `` + | + = note: `#[warn(bare_trait_objects)]` on by default + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0223]: ambiguous associated type --> $DIR/bare-trait-objects-path.rs:23:12 | @@ -10,7 +20,6 @@ warning: trait objects without an explicit `dyn` are deprecated LL | Dyn::func(); | ^^^ help: use `dyn`: `` | - = note: `#[warn(bare_trait_objects)]` on by default = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see @@ -32,6 +41,6 @@ LL | Dyn::CONST; = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see -error: aborting due to previous error; 3 warnings emitted +error: aborting due to previous error; 4 warnings emitted For more information about this error, try `rustc --explain E0223`. diff --git a/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.rs b/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.rs index 9b1edba41aafe..631a8cb2f08cc 100644 --- a/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.rs +++ b/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.rs @@ -10,5 +10,9 @@ pub trait SomeTrait {} pub fn function(_x: Box) {} //~^ WARN trait objects without an explicit `dyn` are deprecated //~| WARN this is accepted in the current edition +//~| WARN trait objects without an explicit `dyn` are deprecated +//~| WARN this is accepted in the current edition +//~| WARN trait objects without an explicit `dyn` are deprecated +//~| WARN this is accepted in the current edition fn main() {} diff --git a/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.stderr b/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.stderr index d945cc3347aab..4ad8306d00c5e 100644 --- a/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.stderr +++ b/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.stderr @@ -8,5 +8,23 @@ LL | pub fn function(_x: Box) {} = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see -warning: 1 warning emitted +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/allowed-group-warn-by-default-lint.rs:10:25 + | +LL | pub fn function(_x: Box) {} + | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/allowed-group-warn-by-default-lint.rs:10:25 + | +LL | pub fn function(_x: Box) {} + | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + +warning: 3 warnings emitted diff --git a/src/test/ui/lint/force-warn/cap-lints-allow.rs b/src/test/ui/lint/force-warn/cap-lints-allow.rs index 9609ea994312f..fdba7f4105e73 100644 --- a/src/test/ui/lint/force-warn/cap-lints-allow.rs +++ b/src/test/ui/lint/force-warn/cap-lints-allow.rs @@ -8,5 +8,9 @@ pub trait SomeTrait {} pub fn function(_x: Box) {} //~^ WARN trait objects without an explicit `dyn` are deprecated //~| WARN this is accepted in the current edition +//~| WARN trait objects without an explicit `dyn` are deprecated +//~| WARN this is accepted in the current edition +//~| WARN trait objects without an explicit `dyn` are deprecated +//~| WARN this is accepted in the current edition fn main() {} diff --git a/src/test/ui/lint/force-warn/cap-lints-allow.stderr b/src/test/ui/lint/force-warn/cap-lints-allow.stderr index f3ae16b5657f2..3d850cdf94aac 100644 --- a/src/test/ui/lint/force-warn/cap-lints-allow.stderr +++ b/src/test/ui/lint/force-warn/cap-lints-allow.stderr @@ -8,5 +8,23 @@ LL | pub fn function(_x: Box) {} = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see -warning: 1 warning emitted +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/cap-lints-allow.rs:8:25 + | +LL | pub fn function(_x: Box) {} + | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/cap-lints-allow.rs:8:25 + | +LL | pub fn function(_x: Box) {} + | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + +warning: 3 warnings emitted diff --git a/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.rs b/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.rs index 9736027452a8d..7ad7462ddc550 100644 --- a/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.rs +++ b/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.rs @@ -8,5 +8,9 @@ pub trait SomeTrait {} pub fn function(_x: Box) {} //~^ WARN trait objects without an explicit `dyn` are deprecated //~| WARN this is accepted in the current edition +//~| WARN trait objects without an explicit `dyn` are deprecated +//~| WARN this is accepted in the current edition +//~| WARN trait objects without an explicit `dyn` are deprecated +//~| WARN this is accepted in the current edition fn main() {} diff --git a/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.stderr b/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.stderr index dc62521bf898b..ad61da95df125 100644 --- a/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.stderr +++ b/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.stderr @@ -8,5 +8,23 @@ LL | pub fn function(_x: Box) {} = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see -warning: 1 warning emitted +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/lint-group-allowed-cli-warn-by-default-lint.rs:8:25 + | +LL | pub fn function(_x: Box) {} + | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/lint-group-allowed-cli-warn-by-default-lint.rs:8:25 + | +LL | pub fn function(_x: Box) {} + | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + +warning: 3 warnings emitted diff --git a/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.rs b/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.rs index 99cad614c25cd..ee5a18c38292b 100644 --- a/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.rs +++ b/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.rs @@ -10,5 +10,9 @@ pub trait SomeTrait {} pub fn function(_x: Box) {} //~^ WARN trait objects without an explicit `dyn` are deprecated //~| WARN this is accepted in the current edition +//~| WARN trait objects without an explicit `dyn` are deprecated +//~| WARN this is accepted in the current edition +//~| WARN trait objects without an explicit `dyn` are deprecated +//~| WARN this is accepted in the current edition fn main() {} diff --git a/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.stderr b/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.stderr index fcbae024eb60f..9e00384a23d4c 100644 --- a/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.stderr +++ b/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.stderr @@ -8,5 +8,23 @@ LL | pub fn function(_x: Box) {} = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see -warning: 1 warning emitted +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/lint-group-allowed-lint-group.rs:10:25 + | +LL | pub fn function(_x: Box) {} + | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/lint-group-allowed-lint-group.rs:10:25 + | +LL | pub fn function(_x: Box) {} + | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + +warning: 3 warnings emitted diff --git a/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.rs b/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.rs index f0aacd773401f..248aece6fe77c 100644 --- a/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.rs +++ b/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.rs @@ -10,5 +10,9 @@ pub trait SomeTrait {} pub fn function(_x: Box) {} //~^ WARN trait objects without an explicit `dyn` are deprecated //~| WARN this is accepted in the current edition +//~| WARN trait objects without an explicit `dyn` are deprecated +//~| WARN this is accepted in the current edition +//~| WARN trait objects without an explicit `dyn` are deprecated +//~| WARN this is accepted in the current edition fn main() {} diff --git a/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.stderr b/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.stderr index 1212ae083c23b..ed042609d1541 100644 --- a/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.stderr +++ b/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.stderr @@ -8,5 +8,23 @@ LL | pub fn function(_x: Box) {} = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see -warning: 1 warning emitted +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/lint-group-allowed-warn-by-default-lint.rs:10:25 + | +LL | pub fn function(_x: Box) {} + | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/lint-group-allowed-warn-by-default-lint.rs:10:25 + | +LL | pub fn function(_x: Box) {} + | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + +warning: 3 warnings emitted diff --git a/src/test/ui/parser/issues/issue-68890-2.rs b/src/test/ui/parser/issues/issue-68890-2.rs index 0a6e26acfc77f..29c12352146b5 100644 --- a/src/test/ui/parser/issues/issue-68890-2.rs +++ b/src/test/ui/parser/issues/issue-68890-2.rs @@ -3,5 +3,3 @@ fn main() {} type X<'a> = (?'a) +; //~^ ERROR `?` may only modify trait bounds, not lifetime bounds //~| ERROR at least one trait is required for an object type -//~| WARN trait objects without an explicit `dyn` are deprecated -//~| WARN this is accepted in the current edition diff --git a/src/test/ui/parser/issues/issue-68890-2.stderr b/src/test/ui/parser/issues/issue-68890-2.stderr index 1a64b9a017d51..d9fb7beebdb69 100644 --- a/src/test/ui/parser/issues/issue-68890-2.stderr +++ b/src/test/ui/parser/issues/issue-68890-2.stderr @@ -4,22 +4,12 @@ error: `?` may only modify trait bounds, not lifetime bounds LL | type X<'a> = (?'a) +; | ^ -warning: trait objects without an explicit `dyn` are deprecated - --> $DIR/issue-68890-2.rs:3:14 - | -LL | type X<'a> = (?'a) +; - | ^^^^^^^ help: use `dyn`: `dyn (?'a) +` - | - = note: `#[warn(bare_trait_objects)]` on by default - = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! - = note: for more information, see - error[E0224]: at least one trait is required for an object type --> $DIR/issue-68890-2.rs:3:14 | LL | type X<'a> = (?'a) +; | ^^^^^^^ -error: aborting due to 2 previous errors; 1 warning emitted +error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0224`. diff --git a/src/test/ui/parser/issues/issue-73568-lifetime-after-mut.rs b/src/test/ui/parser/issues/issue-73568-lifetime-after-mut.rs index e68ee747cfdb5..5f731f8db775b 100644 --- a/src/test/ui/parser/issues/issue-73568-lifetime-after-mut.rs +++ b/src/test/ui/parser/issues/issue-73568-lifetime-after-mut.rs @@ -13,11 +13,7 @@ mac!('a); // avoid false positives fn y<'a>(y: &mut 'a + Send) { //~^ ERROR expected a path on the left-hand side of `+`, not `&mut 'a` - //~| WARNING trait objects without an explicit `dyn` are deprecated - //~| WARN this is accepted in the current edition //~| ERROR at least one trait is required for an object type let z = y as &mut 'a + Send; //~^ ERROR expected value, found trait `Send` - //~| WARNING trait objects without an explicit `dyn` are deprecated - //~| WARN this is accepted in the current edition } diff --git a/src/test/ui/parser/issues/issue-73568-lifetime-after-mut.stderr b/src/test/ui/parser/issues/issue-73568-lifetime-after-mut.stderr index 48c2b2a19d414..799bc16bd6abf 100644 --- a/src/test/ui/parser/issues/issue-73568-lifetime-after-mut.stderr +++ b/src/test/ui/parser/issues/issue-73568-lifetime-after-mut.stderr @@ -22,37 +22,18 @@ LL | mac!('a); = note: this error originates in the macro `mac` (in Nightly builds, run with -Z macro-backtrace for more info) error[E0423]: expected value, found trait `Send` - --> $DIR/issue-73568-lifetime-after-mut.rs:19:28 + --> $DIR/issue-73568-lifetime-after-mut.rs:17:28 | LL | let z = y as &mut 'a + Send; | ^^^^ not a value -warning: trait objects without an explicit `dyn` are deprecated - --> $DIR/issue-73568-lifetime-after-mut.rs:14:18 - | -LL | fn y<'a>(y: &mut 'a + Send) { - | ^^ help: use `dyn`: `dyn 'a` - | - = note: `#[warn(bare_trait_objects)]` on by default - = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! - = note: for more information, see - -warning: trait objects without an explicit `dyn` are deprecated - --> $DIR/issue-73568-lifetime-after-mut.rs:19:23 - | -LL | let z = y as &mut 'a + Send; - | ^^ help: use `dyn`: `dyn 'a` - | - = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! - = note: for more information, see - error[E0224]: at least one trait is required for an object type --> $DIR/issue-73568-lifetime-after-mut.rs:14:18 | LL | fn y<'a>(y: &mut 'a + Send) { | ^^ -error: aborting due to 5 previous errors; 2 warnings emitted +error: aborting due to 5 previous errors Some errors have detailed explanations: E0178, E0224, E0423. For more information about an error, try `rustc --explain E0178`. diff --git a/src/test/ui/parser/macro/trait-object-macro-matcher.rs b/src/test/ui/parser/macro/trait-object-macro-matcher.rs index 663739f235a43..560195977d03a 100644 --- a/src/test/ui/parser/macro/trait-object-macro-matcher.rs +++ b/src/test/ui/parser/macro/trait-object-macro-matcher.rs @@ -11,6 +11,4 @@ fn main() { m!('static); //~^ ERROR lifetime in trait object type must be followed by `+` //~| ERROR at least one trait is required for an object type - //~| WARN trait objects without an explicit `dyn` are deprecated - //~| WARN this is accepted in the current edition } diff --git a/src/test/ui/parser/macro/trait-object-macro-matcher.stderr b/src/test/ui/parser/macro/trait-object-macro-matcher.stderr index 876bfd389cb5d..40082564bad4c 100644 --- a/src/test/ui/parser/macro/trait-object-macro-matcher.stderr +++ b/src/test/ui/parser/macro/trait-object-macro-matcher.stderr @@ -4,22 +4,12 @@ error: lifetime in trait object type must be followed by `+` LL | m!('static); | ^^^^^^^ -warning: trait objects without an explicit `dyn` are deprecated - --> $DIR/trait-object-macro-matcher.rs:11:8 - | -LL | m!('static); - | ^^^^^^^ help: use `dyn`: `dyn 'static` - | - = note: `#[warn(bare_trait_objects)]` on by default - = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! - = note: for more information, see - error[E0224]: at least one trait is required for an object type --> $DIR/trait-object-macro-matcher.rs:11:8 | LL | m!('static); | ^^^^^^^ -error: aborting due to 2 previous errors; 1 warning emitted +error: aborting due to 2 previous errors For more information about this error, try `rustc --explain E0224`. diff --git a/src/test/ui/parser/trait-object-trait-parens.stderr b/src/test/ui/parser/trait-object-trait-parens.stderr index 657288c70f387..bce40edfcd275 100644 --- a/src/test/ui/parser/trait-object-trait-parens.stderr +++ b/src/test/ui/parser/trait-object-trait-parens.stderr @@ -26,24 +26,6 @@ LL | let _: Box<(Obj) + (?Sized) + (for<'a> Trait<'a>)>; = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see -warning: trait objects without an explicit `dyn` are deprecated - --> $DIR/trait-object-trait-parens.rs:13:16 - | -LL | let _: Box Trait<'a>) + (Obj)>; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `dyn`: `dyn ?Sized + (for<'a> Trait<'a>) + (Obj)` - | - = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! - = note: for more information, see - -warning: trait objects without an explicit `dyn` are deprecated - --> $DIR/trait-object-trait-parens.rs:18:16 - | -LL | let _: Box Trait<'a> + (Obj) + (?Sized)>; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `dyn`: `dyn for<'a> Trait<'a> + (Obj) + (?Sized)` - | - = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! - = note: for more information, see - error[E0225]: only auto traits can be used as additional traits in a trait object --> $DIR/trait-object-trait-parens.rs:8:35 | @@ -55,6 +37,15 @@ LL | let _: Box<(Obj) + (?Sized) + (for<'a> Trait<'a>)>; = help: consider creating a new trait with all of these as supertraits and using that trait here instead: `trait NewTrait: Obj + for<'a> Trait<'a> {}` = note: auto-traits like `Send` and `Sync` are traits that have special properties; for more information on them, visit +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/trait-object-trait-parens.rs:13:16 + | +LL | let _: Box Trait<'a>) + (Obj)>; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `dyn`: `dyn ?Sized + (for<'a> Trait<'a>) + (Obj)` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0225]: only auto traits can be used as additional traits in a trait object --> $DIR/trait-object-trait-parens.rs:13:47 | @@ -66,6 +57,15 @@ LL | let _: Box Trait<'a>) + (Obj)>; = help: consider creating a new trait with all of these as supertraits and using that trait here instead: `trait NewTrait: for<'a> Trait<'a> + Obj {}` = note: auto-traits like `Send` and `Sync` are traits that have special properties; for more information on them, visit +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/trait-object-trait-parens.rs:18:16 + | +LL | let _: Box Trait<'a> + (Obj) + (?Sized)>; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `dyn`: `dyn for<'a> Trait<'a> + (Obj) + (?Sized)` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0225]: only auto traits can be used as additional traits in a trait object --> $DIR/trait-object-trait-parens.rs:18:36 | diff --git a/src/test/ui/unspecified-self-in-trait-ref.rs b/src/test/ui/unspecified-self-in-trait-ref.rs index 74a9af84cae85..158b5a9855752 100644 --- a/src/test/ui/unspecified-self-in-trait-ref.rs +++ b/src/test/ui/unspecified-self-in-trait-ref.rs @@ -9,12 +9,22 @@ pub trait Bar { fn main() { let a = Foo::lol(); //~^ ERROR no function or associated item named + //~| WARN trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition let b = Foo::<_>::lol(); //~^ ERROR no function or associated item named + //~| WARN trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition let c = Bar::lol(); //~^ ERROR no function or associated item named + //~| WARN trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition let d = Bar::::lol(); //~^ ERROR no function or associated item named + //~| WARN trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition let e = Bar::::lol(); //~^ ERROR must be explicitly specified + //~| WARN trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition } diff --git a/src/test/ui/unspecified-self-in-trait-ref.stderr b/src/test/ui/unspecified-self-in-trait-ref.stderr index c9518170222c0..e6e824ec5dcff 100644 --- a/src/test/ui/unspecified-self-in-trait-ref.stderr +++ b/src/test/ui/unspecified-self-in-trait-ref.stderr @@ -1,29 +1,75 @@ +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/unspecified-self-in-trait-ref.rs:10:13 + | +LL | let a = Foo::lol(); + | ^^^ help: use `dyn`: `` + | + = note: `#[warn(bare_trait_objects)]` on by default + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0599]: no function or associated item named `lol` found for trait object `dyn Foo<_>` in the current scope --> $DIR/unspecified-self-in-trait-ref.rs:10:18 | LL | let a = Foo::lol(); | ^^^ function or associated item not found in `dyn Foo<_>` +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/unspecified-self-in-trait-ref.rs:14:13 + | +LL | let b = Foo::<_>::lol(); + | ^^^^^^^^ help: use `dyn`: `>` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0599]: no function or associated item named `lol` found for trait object `dyn Foo<_>` in the current scope - --> $DIR/unspecified-self-in-trait-ref.rs:12:23 + --> $DIR/unspecified-self-in-trait-ref.rs:14:23 | LL | let b = Foo::<_>::lol(); | ^^^ function or associated item not found in `dyn Foo<_>` +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/unspecified-self-in-trait-ref.rs:18:13 + | +LL | let c = Bar::lol(); + | ^^^ help: use `dyn`: `` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0599]: no function or associated item named `lol` found for trait object `dyn Bar<_, _>` in the current scope - --> $DIR/unspecified-self-in-trait-ref.rs:14:18 + --> $DIR/unspecified-self-in-trait-ref.rs:18:18 | LL | let c = Bar::lol(); | ^^^ function or associated item not found in `dyn Bar<_, _>` +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/unspecified-self-in-trait-ref.rs:22:13 + | +LL | let d = Bar::::lol(); + | ^^^^^^^^^^^^^^^ help: use `dyn`: `>` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0599]: no function or associated item named `lol` found for trait object `dyn Bar` in the current scope - --> $DIR/unspecified-self-in-trait-ref.rs:16:30 + --> $DIR/unspecified-self-in-trait-ref.rs:22:30 | LL | let d = Bar::::lol(); | ^^^ function or associated item not found in `dyn Bar` +warning: trait objects without an explicit `dyn` are deprecated + --> $DIR/unspecified-self-in-trait-ref.rs:26:13 + | +LL | let e = Bar::::lol(); + | ^^^^^^^^^^^^ help: use `dyn`: `>` + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see + error[E0393]: the type parameter `A` must be explicitly specified - --> $DIR/unspecified-self-in-trait-ref.rs:18:13 + --> $DIR/unspecified-self-in-trait-ref.rs:26:13 | LL | / pub trait Bar { LL | | fn foo(&self); @@ -35,7 +81,7 @@ LL | let e = Bar::::lol(); | = note: because of the default `Self` reference, type parameters must be specified on object types -error: aborting due to 5 previous errors +error: aborting due to 5 previous errors; 5 warnings emitted Some errors have detailed explanations: E0393, E0599. For more information about an error, try `rustc --explain E0393`. From 95fb9ee3cda483f9b3112ec64c2fafd34096da22 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Sun, 10 Oct 2021 22:18:30 +0200 Subject: [PATCH 2/6] Include output type in fn trait bounds. --- src/test/ui/did_you_mean/bad-assoc-ty.stderr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/ui/did_you_mean/bad-assoc-ty.stderr b/src/test/ui/did_you_mean/bad-assoc-ty.stderr index 0d37220bc828d..fc63e379eb8c2 100644 --- a/src/test/ui/did_you_mean/bad-assoc-ty.stderr +++ b/src/test/ui/did_you_mean/bad-assoc-ty.stderr @@ -103,7 +103,7 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/bad-assoc-ty.rs:33:10 | LL | type H = Fn(u8) -> (u8)::Output; - | ^^^^^^ help: use `dyn`: `` + | ^^^^^^^^^^^^^^ help: use `dyn`: ` (u8)>` | = note: `#[warn(bare_trait_objects)]` on by default = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! From 6152b1d7225a45c7814ea6c9e3ea09304268c499 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Sun, 17 Oct 2021 19:10:21 +0200 Subject: [PATCH 3/6] Filter error by span edition. --- compiler/rustc_typeck/src/astconv/mod.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/rustc_typeck/src/astconv/mod.rs b/compiler/rustc_typeck/src/astconv/mod.rs index bc271fac68fd6..3d449578eb06c 100644 --- a/compiler/rustc_typeck/src/astconv/mod.rs +++ b/compiler/rustc_typeck/src/astconv/mod.rs @@ -2635,7 +2635,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { sugg = format!("<{}>", sugg); } } - if tcx.sess.edition() >= Edition::Edition2021 { + if self_ty.span.edition() >= Edition::Edition2021 { let msg = "trait objects must include the `dyn` keyword"; let label = "add `dyn` keyword before this trait"; let mut err = From d3a6d4b1a00806797d8588e9efd3e133a7e55003 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Mon, 1 Nov 2021 10:01:42 +0100 Subject: [PATCH 4/6] Use multipart suggestions. --- compiler/rustc_typeck/src/astconv/mod.rs | 51 ++++++++++++------- src/test/ui/did_you_mean/bad-assoc-ty.stderr | 6 ++- .../dyn-keyword/dyn-2018-edition-lint.stderr | 14 ++++- .../dyn-keyword/dyn-2021-edition-error.stderr | 10 ++-- .../ui/dyn-keyword/dyn-angle-brackets.stderr | 7 ++- .../ui/editions/dyn-trait-sugg-2021.stderr | 2 +- src/test/ui/issues/issue-28344.stderr | 12 ++++- src/test/ui/issues/issue-58734.stderr | 6 ++- src/test/ui/issues/issue-86756.stderr | 7 ++- .../ui/lint/bare-trait-objects-path.stderr | 24 +++++++-- .../allowed-group-warn-by-default-lint.stderr | 21 ++++++-- .../ui/lint/force-warn/cap-lints-allow.stderr | 21 ++++++-- ...up-allowed-cli-warn-by-default-lint.stderr | 21 ++++++-- .../lint-group-allowed-lint-group.stderr | 21 ++++++-- ...-group-allowed-warn-by-default-lint.stderr | 21 ++++++-- .../parser/trait-object-trait-parens.stderr | 21 ++++++-- src/test/ui/suggestions/issue-61963.stderr | 14 ++++- .../ui/traits/bound/not-on-bare-trait.stderr | 7 ++- .../ui/unspecified-self-in-trait-ref.stderr | 30 +++++++++-- 19 files changed, 254 insertions(+), 62 deletions(-) diff --git a/compiler/rustc_typeck/src/astconv/mod.rs b/compiler/rustc_typeck/src/astconv/mod.rs index 3d449578eb06c..73face2b270e3 100644 --- a/compiler/rustc_typeck/src/astconv/mod.rs +++ b/compiler/rustc_typeck/src/astconv/mod.rs @@ -2617,30 +2617,39 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { if let hir::TyKind::TraitObject([poly_trait_ref, ..], _, TraitObjectSyntax::None) = self_ty.kind { - let (mut sugg, app) = match tcx.sess.source_map().span_to_snippet(self_ty.span) { - Ok(s) if poly_trait_ref.trait_ref.path.is_global() => { - (format!("dyn ({})", s), Applicability::MachineApplicable) - } - Ok(s) => (format!("dyn {}", s), Applicability::MachineApplicable), - Err(_) => ("dyn ".to_string(), Applicability::HasPlaceholders), - }; - if in_path { - let has_bracket = tcx + let needs_bracket = in_path + && !tcx .sess .source_map() .span_to_prev_source(self_ty.span) .ok() .map_or(false, |s| s.trim_end().ends_with('<')); - if !has_bracket { - sugg = format!("<{}>", sugg); - } - } + + let is_global = poly_trait_ref.trait_ref.path.is_global(); + let sugg = Vec::from_iter([ + ( + self_ty.span.shrink_to_lo(), + format!( + "{}dyn {}", + if needs_bracket { "<" } else { "" }, + if is_global { "(" } else { "" }, + ), + ), + ( + self_ty.span.shrink_to_hi(), + format!( + "{}{}", + if is_global { ")" } else { "" }, + if needs_bracket { ">" } else { "" }, + ), + ), + ]); if self_ty.span.edition() >= Edition::Edition2021 { let msg = "trait objects must include the `dyn` keyword"; let label = "add `dyn` keyword before this trait"; - let mut err = - rustc_errors::struct_span_err!(tcx.sess, self_ty.span, E0782, "{}", msg); - err.span_suggestion_verbose(self_ty.span, label, sugg, app).emit(); + rustc_errors::struct_span_err!(tcx.sess, self_ty.span, E0782, "{}", msg) + .multipart_suggestion_verbose(label, sugg, Applicability::MachineApplicable) + .emit(); } else { let msg = "trait objects without an explicit `dyn` are deprecated"; tcx.struct_span_lint_hir( @@ -2648,9 +2657,13 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { self_ty.hir_id, self_ty.span, |lint| { - let mut db = lint.build(msg); - db.span_suggestion(self_ty.span, "use `dyn`", sugg, app); - db.emit() + lint.build(msg) + .multipart_suggestion_verbose( + "use `dyn`", + sugg, + Applicability::MachineApplicable, + ) + .emit() }, ); } diff --git a/src/test/ui/did_you_mean/bad-assoc-ty.stderr b/src/test/ui/did_you_mean/bad-assoc-ty.stderr index fc63e379eb8c2..11514a28b2ca5 100644 --- a/src/test/ui/did_you_mean/bad-assoc-ty.stderr +++ b/src/test/ui/did_you_mean/bad-assoc-ty.stderr @@ -103,11 +103,15 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/bad-assoc-ty.rs:33:10 | LL | type H = Fn(u8) -> (u8)::Output; - | ^^^^^^^^^^^^^^ help: use `dyn`: ` (u8)>` + | ^^^^^^^^^^^^^^ | = note: `#[warn(bare_trait_objects)]` on by default = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | type H = (u8)>::Output; + | ++++ + error[E0223]: ambiguous associated type --> $DIR/bad-assoc-ty.rs:33:10 diff --git a/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr b/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr index 13d7185041aa2..7e9435efb08d2 100644 --- a/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr +++ b/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr @@ -2,7 +2,7 @@ error: trait objects without an explicit `dyn` are deprecated --> $DIR/dyn-2018-edition-lint.rs:4:17 | LL | fn function(x: &SomeTrait, y: Box) { - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | note: the lint level is defined here --> $DIR/dyn-2018-edition-lint.rs:2:8 @@ -11,15 +11,25 @@ LL | #[deny(bare_trait_objects)] | ^^^^^^^^^^^^^^^^^^ = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - fn function(x: &SomeTrait, y: Box) { +LL + fn function(x: &dyn SomeTrait, y: Box) { + | error: trait objects without an explicit `dyn` are deprecated --> $DIR/dyn-2018-edition-lint.rs:4:35 | LL | fn function(x: &SomeTrait, y: Box) { - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - fn function(x: &SomeTrait, y: Box) { +LL + fn function(x: &SomeTrait, y: Box) { + | error: aborting due to 2 previous errors diff --git a/src/test/ui/dyn-keyword/dyn-2021-edition-error.stderr b/src/test/ui/dyn-keyword/dyn-2021-edition-error.stderr index ea1baf01ed44b..b5bc359d7166d 100644 --- a/src/test/ui/dyn-keyword/dyn-2021-edition-error.stderr +++ b/src/test/ui/dyn-keyword/dyn-2021-edition-error.stderr @@ -6,8 +6,9 @@ LL | fn function(x: &SomeTrait, y: Box) { | help: add `dyn` keyword before this trait | -LL | fn function(x: &dyn SomeTrait, y: Box) { - | ~~~~~~~~~~~~~ +LL - fn function(x: &SomeTrait, y: Box) { +LL + fn function(x: &dyn SomeTrait, y: Box) { + | error[E0782]: trait objects must include the `dyn` keyword --> $DIR/dyn-2021-edition-error.rs:3:35 @@ -17,8 +18,9 @@ LL | fn function(x: &SomeTrait, y: Box) { | help: add `dyn` keyword before this trait | -LL | fn function(x: &SomeTrait, y: Box) { - | ~~~~~~~~~~~~~ +LL - fn function(x: &SomeTrait, y: Box) { +LL + fn function(x: &SomeTrait, y: Box) { + | error: aborting due to 2 previous errors diff --git a/src/test/ui/dyn-keyword/dyn-angle-brackets.stderr b/src/test/ui/dyn-keyword/dyn-angle-brackets.stderr index 1f5a10223f1dd..fd4030e96226b 100644 --- a/src/test/ui/dyn-keyword/dyn-angle-brackets.stderr +++ b/src/test/ui/dyn-keyword/dyn-angle-brackets.stderr @@ -2,7 +2,7 @@ error: trait objects without an explicit `dyn` are deprecated --> $DIR/dyn-angle-brackets.rs:15:10 | LL | ::fmt(self, f) - | ^^^^^^^^^^ help: use `dyn`: `dyn fmt::Debug` + | ^^^^^^^^^^ | note: the lint level is defined here --> $DIR/dyn-angle-brackets.rs:4:9 @@ -11,6 +11,11 @@ LL | #![deny(bare_trait_objects)] | ^^^^^^^^^^^^^^^^^^ = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - ::fmt(self, f) +LL + ::fmt(self, f) + | error: aborting due to previous error diff --git a/src/test/ui/editions/dyn-trait-sugg-2021.stderr b/src/test/ui/editions/dyn-trait-sugg-2021.stderr index 9d1d2d7c51ec4..8c68dec1df7e4 100644 --- a/src/test/ui/editions/dyn-trait-sugg-2021.stderr +++ b/src/test/ui/editions/dyn-trait-sugg-2021.stderr @@ -7,7 +7,7 @@ LL | Foo::hi(123); help: add `dyn` keyword before this trait | LL | ::hi(123); - | ~~~~~~~~~ + | ++++ + error: aborting due to previous error diff --git a/src/test/ui/issues/issue-28344.stderr b/src/test/ui/issues/issue-28344.stderr index 1582ef23731f6..b1d1c01b27a3c 100644 --- a/src/test/ui/issues/issue-28344.stderr +++ b/src/test/ui/issues/issue-28344.stderr @@ -2,11 +2,15 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/issue-28344.rs:4:17 | LL | let x: u8 = BitXor::bitor(0 as u8, 0 as u8); - | ^^^^^^ help: use `dyn`: `` + | ^^^^^^ | = note: `#[warn(bare_trait_objects)]` on by default = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | let x: u8 = ::bitor(0 as u8, 0 as u8); + | ++++ + error[E0191]: the value of the associated type `Output` (from trait `BitXor`) must be specified --> $DIR/issue-28344.rs:4:17 @@ -27,10 +31,14 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/issue-28344.rs:10:13 | LL | let g = BitXor::bitor; - | ^^^^^^ help: use `dyn`: `` + | ^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | let g = ::bitor; + | ++++ + error[E0191]: the value of the associated type `Output` (from trait `BitXor`) must be specified --> $DIR/issue-28344.rs:10:13 diff --git a/src/test/ui/issues/issue-58734.stderr b/src/test/ui/issues/issue-58734.stderr index 61d0a2796e9cb..a91a1b3778edb 100644 --- a/src/test/ui/issues/issue-58734.stderr +++ b/src/test/ui/issues/issue-58734.stderr @@ -2,11 +2,15 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/issue-58734.rs:20:5 | LL | Trait::nonexistent(()); - | ^^^^^ help: use `dyn`: `` + | ^^^^^ | = note: `#[warn(bare_trait_objects)]` on by default = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | ::nonexistent(()); + | ++++ + error[E0599]: no function or associated item named `nonexistent` found for trait object `dyn Trait` in the current scope --> $DIR/issue-58734.rs:20:12 diff --git a/src/test/ui/issues/issue-86756.stderr b/src/test/ui/issues/issue-86756.stderr index 0d576909a3569..5b2f04ffa8309 100644 --- a/src/test/ui/issues/issue-86756.stderr +++ b/src/test/ui/issues/issue-86756.stderr @@ -18,11 +18,16 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/issue-86756.rs:5:15 | LL | eq:: - | ^^^ help: use `dyn`: `dyn Foo` + | ^^^ | = note: `#[warn(bare_trait_objects)]` on by default = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - eq:: +LL + eq:: + | error[E0107]: missing generics for trait `Foo` --> $DIR/issue-86756.rs:5:15 diff --git a/src/test/ui/lint/bare-trait-objects-path.stderr b/src/test/ui/lint/bare-trait-objects-path.stderr index cbc0fada65a44..4b8c2b539d55a 100644 --- a/src/test/ui/lint/bare-trait-objects-path.stderr +++ b/src/test/ui/lint/bare-trait-objects-path.stderr @@ -2,11 +2,15 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/bare-trait-objects-path.rs:23:12 | LL | let _: Dyn::Ty; - | ^^^ help: use `dyn`: `` + | ^^^ | = note: `#[warn(bare_trait_objects)]` on by default = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | let _: ::Ty; + | ++++ + error[E0223]: ambiguous associated type --> $DIR/bare-trait-objects-path.rs:23:12 @@ -18,28 +22,40 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/bare-trait-objects-path.rs:14:5 | LL | Dyn::func(); - | ^^^ help: use `dyn`: `` + | ^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | ::func(); + | ++++ + warning: trait objects without an explicit `dyn` are deprecated --> $DIR/bare-trait-objects-path.rs:17:5 | LL | ::Dyn::func(); - | ^^^^^ help: use `dyn`: `` + | ^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | ::func(); + | ++++++ ++ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/bare-trait-objects-path.rs:20:5 | LL | Dyn::CONST; - | ^^^ help: use `dyn`: `` + | ^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | ::CONST; + | ++++ + error: aborting due to previous error; 4 warnings emitted diff --git a/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.stderr b/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.stderr index 4ad8306d00c5e..99d97ba52a0f2 100644 --- a/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.stderr +++ b/src/test/ui/lint/force-warn/allowed-group-warn-by-default-lint.stderr @@ -2,29 +2,44 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/allowed-group-warn-by-default-lint.rs:10:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = note: requested on the command line with `--force-warn bare-trait-objects` = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: trait objects without an explicit `dyn` are deprecated --> $DIR/allowed-group-warn-by-default-lint.rs:10:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: trait objects without an explicit `dyn` are deprecated --> $DIR/allowed-group-warn-by-default-lint.rs:10:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: 3 warnings emitted diff --git a/src/test/ui/lint/force-warn/cap-lints-allow.stderr b/src/test/ui/lint/force-warn/cap-lints-allow.stderr index 3d850cdf94aac..90496ca7d2078 100644 --- a/src/test/ui/lint/force-warn/cap-lints-allow.stderr +++ b/src/test/ui/lint/force-warn/cap-lints-allow.stderr @@ -2,29 +2,44 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/cap-lints-allow.rs:8:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = note: requested on the command line with `--force-warn bare-trait-objects` = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: trait objects without an explicit `dyn` are deprecated --> $DIR/cap-lints-allow.rs:8:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: trait objects without an explicit `dyn` are deprecated --> $DIR/cap-lints-allow.rs:8:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: 3 warnings emitted diff --git a/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.stderr b/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.stderr index ad61da95df125..b6d36eaac4448 100644 --- a/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.stderr +++ b/src/test/ui/lint/force-warn/lint-group-allowed-cli-warn-by-default-lint.stderr @@ -2,29 +2,44 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/lint-group-allowed-cli-warn-by-default-lint.rs:8:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = note: `--force-warn bare-trait-objects` implied by `--force-warn rust-2018-idioms` = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: trait objects without an explicit `dyn` are deprecated --> $DIR/lint-group-allowed-cli-warn-by-default-lint.rs:8:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: trait objects without an explicit `dyn` are deprecated --> $DIR/lint-group-allowed-cli-warn-by-default-lint.rs:8:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: 3 warnings emitted diff --git a/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.stderr b/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.stderr index 9e00384a23d4c..e8fdaa72cc0f6 100644 --- a/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.stderr +++ b/src/test/ui/lint/force-warn/lint-group-allowed-lint-group.stderr @@ -2,29 +2,44 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/lint-group-allowed-lint-group.rs:10:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = note: `--force-warn bare-trait-objects` implied by `--force-warn rust-2018-idioms` = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: trait objects without an explicit `dyn` are deprecated --> $DIR/lint-group-allowed-lint-group.rs:10:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: trait objects without an explicit `dyn` are deprecated --> $DIR/lint-group-allowed-lint-group.rs:10:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: 3 warnings emitted diff --git a/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.stderr b/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.stderr index ed042609d1541..2de30d0c2f43d 100644 --- a/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.stderr +++ b/src/test/ui/lint/force-warn/lint-group-allowed-warn-by-default-lint.stderr @@ -2,29 +2,44 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/lint-group-allowed-warn-by-default-lint.rs:10:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = note: `--force-warn bare-trait-objects` implied by `--force-warn rust-2018-idioms` = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: trait objects without an explicit `dyn` are deprecated --> $DIR/lint-group-allowed-warn-by-default-lint.rs:10:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: trait objects without an explicit `dyn` are deprecated --> $DIR/lint-group-allowed-warn-by-default-lint.rs:10:25 | LL | pub fn function(_x: Box) {} - | ^^^^^^^^^ help: use `dyn`: `dyn SomeTrait` + | ^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub fn function(_x: Box) {} +LL + pub fn function(_x: Box) {} + | warning: 3 warnings emitted diff --git a/src/test/ui/parser/trait-object-trait-parens.stderr b/src/test/ui/parser/trait-object-trait-parens.stderr index bce40edfcd275..a852337b6fe45 100644 --- a/src/test/ui/parser/trait-object-trait-parens.stderr +++ b/src/test/ui/parser/trait-object-trait-parens.stderr @@ -20,11 +20,16 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/trait-object-trait-parens.rs:8:16 | LL | let _: Box<(Obj) + (?Sized) + (for<'a> Trait<'a>)>; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `dyn`: `dyn (Obj) + (?Sized) + (for<'a> Trait<'a>)` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(bare_trait_objects)]` on by default = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - let _: Box<(Obj) + (?Sized) + (for<'a> Trait<'a>)>; +LL + let _: Box Trait<'a>)>; + | error[E0225]: only auto traits can be used as additional traits in a trait object --> $DIR/trait-object-trait-parens.rs:8:35 @@ -41,10 +46,15 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/trait-object-trait-parens.rs:13:16 | LL | let _: Box Trait<'a>) + (Obj)>; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `dyn`: `dyn ?Sized + (for<'a> Trait<'a>) + (Obj)` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - let _: Box Trait<'a>) + (Obj)>; +LL + let _: Box Trait<'a>) + (Obj)>; + | error[E0225]: only auto traits can be used as additional traits in a trait object --> $DIR/trait-object-trait-parens.rs:13:47 @@ -61,10 +71,15 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/trait-object-trait-parens.rs:18:16 | LL | let _: Box Trait<'a> + (Obj) + (?Sized)>; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: use `dyn`: `dyn for<'a> Trait<'a> + (Obj) + (?Sized)` + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - let _: Box Trait<'a> + (Obj) + (?Sized)>; +LL + let _: Box Trait<'a> + (Obj) + (?Sized)>; + | error[E0225]: only auto traits can be used as additional traits in a trait object --> $DIR/trait-object-trait-parens.rs:18:36 diff --git a/src/test/ui/suggestions/issue-61963.stderr b/src/test/ui/suggestions/issue-61963.stderr index bb487920e3bb6..7dfd8c3270857 100644 --- a/src/test/ui/suggestions/issue-61963.stderr +++ b/src/test/ui/suggestions/issue-61963.stderr @@ -2,7 +2,7 @@ error: trait objects without an explicit `dyn` are deprecated --> $DIR/issue-61963.rs:22:14 | LL | bar: Box, - | ^^^ help: use `dyn`: `dyn Bar` + | ^^^ | note: the lint level is defined here --> $DIR/issue-61963.rs:3:9 @@ -11,15 +11,25 @@ LL | #![deny(bare_trait_objects)] | ^^^^^^^^^^^^^^^^^^ = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - bar: Box, +LL + bar: Box, + | error: trait objects without an explicit `dyn` are deprecated --> $DIR/issue-61963.rs:18:1 | LL | pub struct Foo { - | ^^^ help: use `dyn`: `dyn pub` + | ^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - pub struct Foo { +LL + dyn pub struct Foo { + | error: aborting due to 2 previous errors diff --git a/src/test/ui/traits/bound/not-on-bare-trait.stderr b/src/test/ui/traits/bound/not-on-bare-trait.stderr index 0bbf1bffda510..08f6d166d226f 100644 --- a/src/test/ui/traits/bound/not-on-bare-trait.stderr +++ b/src/test/ui/traits/bound/not-on-bare-trait.stderr @@ -2,11 +2,16 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/not-on-bare-trait.rs:7:12 | LL | fn foo(_x: Foo + Send) { - | ^^^^^^^^^^ help: use `dyn`: `dyn Foo + Send` + | ^^^^^^^^^^ | = note: `#[warn(bare_trait_objects)]` on by default = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL - fn foo(_x: Foo + Send) { +LL + fn foo(_x: dyn Foo + Send) { + | error[E0277]: the size for values of type `(dyn Foo + Send + 'static)` cannot be known at compilation time --> $DIR/not-on-bare-trait.rs:7:8 diff --git a/src/test/ui/unspecified-self-in-trait-ref.stderr b/src/test/ui/unspecified-self-in-trait-ref.stderr index e6e824ec5dcff..2ba9218715773 100644 --- a/src/test/ui/unspecified-self-in-trait-ref.stderr +++ b/src/test/ui/unspecified-self-in-trait-ref.stderr @@ -2,11 +2,15 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/unspecified-self-in-trait-ref.rs:10:13 | LL | let a = Foo::lol(); - | ^^^ help: use `dyn`: `` + | ^^^ | = note: `#[warn(bare_trait_objects)]` on by default = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | let a = ::lol(); + | ++++ + error[E0599]: no function or associated item named `lol` found for trait object `dyn Foo<_>` in the current scope --> $DIR/unspecified-self-in-trait-ref.rs:10:18 @@ -18,10 +22,14 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/unspecified-self-in-trait-ref.rs:14:13 | LL | let b = Foo::<_>::lol(); - | ^^^^^^^^ help: use `dyn`: `>` + | ^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | let b = >::lol(); + | ++++ + error[E0599]: no function or associated item named `lol` found for trait object `dyn Foo<_>` in the current scope --> $DIR/unspecified-self-in-trait-ref.rs:14:23 @@ -33,10 +41,14 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/unspecified-self-in-trait-ref.rs:18:13 | LL | let c = Bar::lol(); - | ^^^ help: use `dyn`: `` + | ^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | let c = ::lol(); + | ++++ + error[E0599]: no function or associated item named `lol` found for trait object `dyn Bar<_, _>` in the current scope --> $DIR/unspecified-self-in-trait-ref.rs:18:18 @@ -48,10 +60,14 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/unspecified-self-in-trait-ref.rs:22:13 | LL | let d = Bar::::lol(); - | ^^^^^^^^^^^^^^^ help: use `dyn`: `>` + | ^^^^^^^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | let d = >::lol(); + | ++++ + error[E0599]: no function or associated item named `lol` found for trait object `dyn Bar` in the current scope --> $DIR/unspecified-self-in-trait-ref.rs:22:30 @@ -63,10 +79,14 @@ warning: trait objects without an explicit `dyn` are deprecated --> $DIR/unspecified-self-in-trait-ref.rs:26:13 | LL | let e = Bar::::lol(); - | ^^^^^^^^^^^^ help: use `dyn`: `>` + | ^^^^^^^^^^^^ | = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! = note: for more information, see +help: use `dyn` + | +LL | let e = >::lol(); + | ++++ + error[E0393]: the type parameter `A` must be explicitly specified --> $DIR/unspecified-self-in-trait-ref.rs:26:13 From 748e95b568ee315dfcd0c584323d261973e18111 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Sat, 20 Nov 2021 11:54:12 +0100 Subject: [PATCH 5/6] Bless tests. --- .../ui/dyn-keyword/dyn-2018-edition-lint.rs | 10 +++ .../dyn-keyword/dyn-2018-edition-lint.stderr | 72 +++++++++++++++++- src/test/ui/suggestions/issue-61963.rs | 10 +++ src/test/ui/suggestions/issue-61963.stderr | 74 ++++++++++++++++++- 4 files changed, 163 insertions(+), 3 deletions(-) diff --git a/src/test/ui/dyn-keyword/dyn-2018-edition-lint.rs b/src/test/ui/dyn-keyword/dyn-2018-edition-lint.rs index d8b3b9c7deba5..a074b5fa5f7aa 100644 --- a/src/test/ui/dyn-keyword/dyn-2018-edition-lint.rs +++ b/src/test/ui/dyn-keyword/dyn-2018-edition-lint.rs @@ -6,7 +6,17 @@ fn function(x: &SomeTrait, y: Box) { //~| WARN this is accepted in the current edition //~| ERROR trait objects without an explicit `dyn` are deprecated //~| WARN this is accepted in the current edition + //~| ERROR trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition + //~| ERROR trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition + //~| ERROR trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition + //~| ERROR trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition let _x: &SomeTrait = todo!(); + //~^ ERROR trait objects without an explicit `dyn` are deprecated + //~| WARN this is accepted in the current edition } trait SomeTrait {} diff --git a/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr b/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr index 7e9435efb08d2..b8e4942dfefb2 100644 --- a/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr +++ b/src/test/ui/dyn-keyword/dyn-2018-edition-lint.stderr @@ -31,5 +31,75 @@ LL - fn function(x: &SomeTrait, y: Box) { LL + fn function(x: &SomeTrait, y: Box) { | -error: aborting due to 2 previous errors +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/dyn-2018-edition-lint.rs:17:14 + | +LL | let _x: &SomeTrait = todo!(); + | ^^^^^^^^^ + | + = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! + = note: for more information, see +help: use `dyn` + | +LL - let _x: &SomeTrait = todo!(); +LL + let _x: &dyn SomeTrait = todo!(); + | + +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/dyn-2018-edition-lint.rs:4:17 + | +LL | fn function(x: &SomeTrait, y: Box) { + | ^^^^^^^^^ + | + = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! + = note: for more information, see +help: use `dyn` + | +LL - fn function(x: &SomeTrait, y: Box) { +LL + fn function(x: &dyn SomeTrait, y: Box) { + | + +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/dyn-2018-edition-lint.rs:4:17 + | +LL | fn function(x: &SomeTrait, y: Box) { + | ^^^^^^^^^ + | + = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! + = note: for more information, see +help: use `dyn` + | +LL - fn function(x: &SomeTrait, y: Box) { +LL + fn function(x: &dyn SomeTrait, y: Box) { + | + +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/dyn-2018-edition-lint.rs:4:35 + | +LL | fn function(x: &SomeTrait, y: Box) { + | ^^^^^^^^^ + | + = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! + = note: for more information, see +help: use `dyn` + | +LL - fn function(x: &SomeTrait, y: Box) { +LL + fn function(x: &SomeTrait, y: Box) { + | + +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/dyn-2018-edition-lint.rs:4:35 + | +LL | fn function(x: &SomeTrait, y: Box) { + | ^^^^^^^^^ + | + = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! + = note: for more information, see +help: use `dyn` + | +LL - fn function(x: &SomeTrait, y: Box) { +LL + fn function(x: &SomeTrait, y: Box) { + | + +error: aborting due to 7 previous errors diff --git a/src/test/ui/suggestions/issue-61963.rs b/src/test/ui/suggestions/issue-61963.rs index d31ed01b1916b..a27c38452539c 100644 --- a/src/test/ui/suggestions/issue-61963.rs +++ b/src/test/ui/suggestions/issue-61963.rs @@ -18,10 +18,20 @@ pub struct Qux(T); pub struct Foo { //~^ ERROR trait objects without an explicit `dyn` are deprecated [bare_trait_objects] //~| WARN this is accepted in the current edition + //~| ERROR trait objects without an explicit `dyn` are deprecated [bare_trait_objects] + //~| WARN this is accepted in the current edition + //~| ERROR trait objects without an explicit `dyn` are deprecated [bare_trait_objects] + //~| WARN this is accepted in the current edition + //~| ERROR trait objects without an explicit `dyn` are deprecated [bare_trait_objects] + //~| WARN this is accepted in the current edition qux: Qux>, bar: Box, //~^ ERROR trait objects without an explicit `dyn` are deprecated [bare_trait_objects] //~| WARN this is accepted in the current edition + //~| ERROR trait objects without an explicit `dyn` are deprecated [bare_trait_objects] + //~| WARN this is accepted in the current edition + //~| ERROR trait objects without an explicit `dyn` are deprecated [bare_trait_objects] + //~| WARN this is accepted in the current edition } fn main() {} diff --git a/src/test/ui/suggestions/issue-61963.stderr b/src/test/ui/suggestions/issue-61963.stderr index 7dfd8c3270857..1eebd8d60ca90 100644 --- a/src/test/ui/suggestions/issue-61963.stderr +++ b/src/test/ui/suggestions/issue-61963.stderr @@ -1,5 +1,5 @@ error: trait objects without an explicit `dyn` are deprecated - --> $DIR/issue-61963.rs:22:14 + --> $DIR/issue-61963.rs:28:14 | LL | bar: Box, | ^^^ @@ -31,5 +31,75 @@ LL - pub struct Foo { LL + dyn pub struct Foo { | -error: aborting due to 2 previous errors +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/issue-61963.rs:28:14 + | +LL | bar: Box, + | ^^^ + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see +help: use `dyn` + | +LL - bar: Box, +LL + bar: Box, + | + +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/issue-61963.rs:28:14 + | +LL | bar: Box, + | ^^^ + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see +help: use `dyn` + | +LL - bar: Box, +LL + bar: Box, + | + +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/issue-61963.rs:18:1 + | +LL | pub struct Foo { + | ^^^ + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see +help: use `dyn` + | +LL - pub struct Foo { +LL + dyn pub struct Foo { + | + +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/issue-61963.rs:18:1 + | +LL | pub struct Foo { + | ^^^ + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see +help: use `dyn` + | +LL - pub struct Foo { +LL + dyn pub struct Foo { + | + +error: trait objects without an explicit `dyn` are deprecated + --> $DIR/issue-61963.rs:18:1 + | +LL | pub struct Foo { + | ^^^ + | + = warning: this is accepted in the current edition (Rust 2015) but is a hard error in Rust 2021! + = note: for more information, see +help: use `dyn` + | +LL - pub struct Foo { +LL + dyn pub struct Foo { + | + +error: aborting due to 7 previous errors From 6fcbc3a3238ac6f914b788fc49876a0becd31969 Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Sun, 5 Dec 2021 10:10:59 +0100 Subject: [PATCH 6/6] Do not warn in rustdoc test. --- src/test/rustdoc-ui/display-output.rs | 2 +- src/test/rustdoc-ui/display-output.stdout | 16 +++------------- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/test/rustdoc-ui/display-output.rs b/src/test/rustdoc-ui/display-output.rs index 30b32c511b5fa..c40d99c9d4c3d 100644 --- a/src/test/rustdoc-ui/display-output.rs +++ b/src/test/rustdoc-ui/display-output.rs @@ -10,6 +10,6 @@ /// #![warn(unused)] /// let x = 12; /// -/// fn foo(x: &std::fmt::Display) {} +/// fn foo(x: &dyn std::fmt::Display) {} /// ``` pub fn foo() {} diff --git a/src/test/rustdoc-ui/display-output.stdout b/src/test/rustdoc-ui/display-output.stdout index f76dec1c85008..41c1f41f2cfc8 100644 --- a/src/test/rustdoc-ui/display-output.stdout +++ b/src/test/rustdoc-ui/display-output.stdout @@ -5,16 +5,6 @@ test $DIR/display-output.rs - foo (line 9) ... ok successes: ---- $DIR/display-output.rs - foo (line 9) stdout ---- -warning: trait objects without an explicit `dyn` are deprecated - --> $DIR/display-output.rs:13:12 - | -LL | fn foo(x: &std::fmt::Display) {} - | ^^^^^^^^^^^^^^^^^ help: use `dyn`: `dyn std::fmt::Display` - | - = note: `#[warn(bare_trait_objects)]` on by default - = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021! - = note: for more information, see - warning: unused variable: `x` --> $DIR/display-output.rs:11:5 | @@ -31,13 +21,13 @@ LL | #![warn(unused)] warning: unused variable: `x` --> $DIR/display-output.rs:13:8 | -LL | fn foo(x: &std::fmt::Display) {} +LL | fn foo(x: &dyn std::fmt::Display) {} | ^ help: if this is intentional, prefix it with an underscore: `_x` warning: function is never used: `foo` --> $DIR/display-output.rs:13:4 | -LL | fn foo(x: &std::fmt::Display) {} +LL | fn foo(x: &dyn std::fmt::Display) {} | ^^^ | note: the lint level is defined here @@ -47,7 +37,7 @@ LL | #![warn(unused)] | ^^^^^^ = note: `#[warn(dead_code)]` implied by `#[warn(unused)]` -warning: 4 warnings emitted +warning: 3 warnings emitted