From e8165e7f1bfdc7c82749e4bdaafec8ee1a161eb8 Mon Sep 17 00:00:00 2001 From: Smitty Date: Sat, 24 Jul 2021 17:18:15 -0400 Subject: [PATCH 01/34] Support -Z unpretty=thir-tree again --- Cargo.lock | 1 + compiler/rustc_driver/Cargo.toml | 1 + compiler/rustc_driver/src/pretty.rs | 16 +++++++++++++--- compiler/rustc_middle/src/query/mod.rs | 6 ++++++ compiler/rustc_mir_build/src/lib.rs | 1 + compiler/rustc_mir_build/src/thir/cx/mod.rs | 7 +++++++ 6 files changed, 29 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 553d9d05e57ba..f3ee3568dbcc6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3726,6 +3726,7 @@ dependencies = [ "rustc_session", "rustc_span", "rustc_target", + "rustc_typeck", "tracing", "tracing-subscriber", "tracing-tree", diff --git a/compiler/rustc_driver/Cargo.toml b/compiler/rustc_driver/Cargo.toml index 93c6ec04e4fd6..2bc163e784316 100644 --- a/compiler/rustc_driver/Cargo.toml +++ b/compiler/rustc_driver/Cargo.toml @@ -34,6 +34,7 @@ rustc_interface = { path = "../rustc_interface" } rustc_serialize = { path = "../rustc_serialize" } rustc_ast = { path = "../rustc_ast" } rustc_span = { path = "../rustc_span" } +rustc_typeck = { path = "../rustc_typeck" } [target.'cfg(windows)'.dependencies] winapi = { version = "0.3", features = ["consoleapi", "debugapi", "processenv"] } diff --git a/compiler/rustc_driver/src/pretty.rs b/compiler/rustc_driver/src/pretty.rs index bf131914b97cf..579ba43b6d8e7 100644 --- a/compiler/rustc_driver/src/pretty.rs +++ b/compiler/rustc_driver/src/pretty.rs @@ -14,6 +14,7 @@ use rustc_span::symbol::Ident; use rustc_span::FileName; use std::cell::Cell; +use std::fmt::Write; use std::path::Path; pub use self::PpMode::*; @@ -471,7 +472,6 @@ fn print_with_analysis( ofile: Option<&Path>, ) -> Result<(), ErrorReported> { tcx.analysis(())?; - let out = match ppm { Mir => { let mut out = Vec::new(); @@ -486,8 +486,18 @@ fn print_with_analysis( } ThirTree => { - // FIXME(rust-lang/project-thir-unsafeck#8) - todo!() + let mut out = String::new(); + abort_on_err(rustc_typeck::check_crate(tcx), tcx.sess); + debug!("pretty printing THIR tree"); + for did in tcx.body_owners() { + let _ = writeln!( + out, + "{:?}:\n{}\n", + did, + tcx.thir_tree(ty::WithOptConstParam::unknown(did)) + ); + } + out } _ => unreachable!(), diff --git a/compiler/rustc_middle/src/query/mod.rs b/compiler/rustc_middle/src/query/mod.rs index 0908b6a1763d5..2de836c058cf1 100644 --- a/compiler/rustc_middle/src/query/mod.rs +++ b/compiler/rustc_middle/src/query/mod.rs @@ -230,6 +230,12 @@ rustc_queries! { desc { |tcx| "building THIR for `{}`", tcx.def_path_str(key.did.to_def_id()) } } + /// Create a THIR tree for debugging. + query thir_tree(key: ty::WithOptConstParam) -> String { + no_hash + desc { |tcx| "constructing THIR tree for `{}`", tcx.def_path_str(key.did.to_def_id()) } + } + /// Set of all the `DefId`s in this crate that have MIR associated with /// them. This includes all the body owners, but also things like struct /// constructors. diff --git a/compiler/rustc_mir_build/src/lib.rs b/compiler/rustc_mir_build/src/lib.rs index d2992f0bf186e..d0dd5116b75e1 100644 --- a/compiler/rustc_mir_build/src/lib.rs +++ b/compiler/rustc_mir_build/src/lib.rs @@ -30,4 +30,5 @@ pub fn provide(providers: &mut Providers) { providers.thir_check_unsafety = check_unsafety::thir_check_unsafety; providers.thir_check_unsafety_for_const_arg = check_unsafety::thir_check_unsafety_for_const_arg; providers.thir_body = thir::cx::thir_body; + providers.thir_tree = thir::cx::thir_tree; } diff --git a/compiler/rustc_mir_build/src/thir/cx/mod.rs b/compiler/rustc_mir_build/src/thir/cx/mod.rs index 604e544286aef..5059dd939d92d 100644 --- a/compiler/rustc_mir_build/src/thir/cx/mod.rs +++ b/compiler/rustc_mir_build/src/thir/cx/mod.rs @@ -30,6 +30,13 @@ crate fn thir_body<'tcx>( (tcx.alloc_steal_thir(cx.thir), expr) } +crate fn thir_tree<'tcx>( + tcx: TyCtxt<'tcx>, + owner_def: ty::WithOptConstParam, +) -> String { + format!("{:#?}", thir_body(tcx, owner_def).0.steal()) +} + struct Cx<'tcx> { tcx: TyCtxt<'tcx>, thir: Thir<'tcx>, From 51df26eb5637ddd0012929fb21c3e51385434dd5 Mon Sep 17 00:00:00 2001 From: Smitty Date: Sat, 24 Jul 2021 17:33:43 -0400 Subject: [PATCH 02/34] Add test for -Z unpretty=thir-tree --- src/test/ui/thir-tree.rs | 4 +++ src/test/ui/thir-tree.stdout | 55 ++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/test/ui/thir-tree.rs create mode 100644 src/test/ui/thir-tree.stdout diff --git a/src/test/ui/thir-tree.rs b/src/test/ui/thir-tree.rs new file mode 100644 index 0000000000000..32df7905adbad --- /dev/null +++ b/src/test/ui/thir-tree.rs @@ -0,0 +1,4 @@ +// compile-flags: -Z unpretty=thir-tree +// check-pass + +pub fn main() {} diff --git a/src/test/ui/thir-tree.stdout b/src/test/ui/thir-tree.stdout new file mode 100644 index 0000000000000..389eaf5e715b2 --- /dev/null +++ b/src/test/ui/thir-tree.stdout @@ -0,0 +1,55 @@ +DefId(0:3 ~ thir_tree[348d]::main): +Thir { + arms: [], + exprs: [ + Expr { + ty: (), + temp_lifetime: Some( + Node(2), + ), + span: $DIR/thir-tree.rs:4:15: 4:17 (#0), + kind: Block { + body: Block { + targeted_by_break: false, + region_scope: Node(1), + opt_destruction_scope: None, + span: $DIR/thir-tree.rs:4:15: 4:17 (#0), + stmts: [], + expr: None, + safety_mode: Safe, + }, + }, + }, + Expr { + ty: (), + temp_lifetime: Some( + Node(2), + ), + span: $DIR/thir-tree.rs:4:15: 4:17 (#0), + kind: Scope { + region_scope: Node(2), + lint_level: Explicit( + HirId { + owner: DefId(0:3 ~ thir_tree[348d]::main), + local_id: 2, + }, + ), + value: e0, + }, + }, + Expr { + ty: (), + temp_lifetime: Some( + Node(2), + ), + span: $DIR/thir-tree.rs:4:15: 4:17 (#0), + kind: Scope { + region_scope: Destruction(2), + lint_level: Inherited, + value: e1, + }, + }, + ], + stmts: [], +} + From ec76b6eedddfd601a9684db945ff927e57f2aa03 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 25 Jul 2021 14:48:57 +0200 Subject: [PATCH 03/34] Add support for tuple structs' fields documentation --- src/librustdoc/html/render/mod.rs | 3 +++ src/librustdoc/html/render/print_item.rs | 18 +++++++++--------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/librustdoc/html/render/mod.rs b/src/librustdoc/html/render/mod.rs index 68c59612ccc44..5298a560627cb 100644 --- a/src/librustdoc/html/render/mod.rs +++ b/src/librustdoc/html/render/mod.rs @@ -2007,6 +2007,9 @@ fn sidebar_struct(cx: &Context<'_>, buf: &mut Buffer, it: &clean::Item, s: &clea } sidebar.push_str(""); + } else if let CtorKind::Fn = s.struct_type { + sidebar + .push_str("

Tuple Fields

"); } } diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs index 2dfbaff1cc995..8f7e84428956a 100644 --- a/src/librustdoc/html/render/print_item.rs +++ b/src/librustdoc/html/render/print_item.rs @@ -1176,21 +1176,21 @@ fn item_struct(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, s: &clean::St _ => None, }) .peekable(); - if let CtorKind::Fictive = s.struct_type { + if let CtorKind::Fictive | CtorKind::Fn = s.struct_type { if fields.peek().is_some() { write!( w, "

\ - Fields{}

", + {}{}\ + ", + if let CtorKind::Fictive = s.struct_type { "Fields" } else { "Tuple Fields" }, document_non_exhaustive_header(it) ); document_non_exhaustive(w, it); - for (field, ty) in fields { - let id = cx.derive_id(format!( - "{}.{}", - ItemType::StructField, - field.name.as_ref().unwrap() - )); + for (index, (field, ty)) in fields.enumerate() { + let field_name = + field.name.map_or_else(|| index.to_string(), |sym| (*sym.as_str()).to_string()); + let id = cx.derive_id(format!("{}.{}", ItemType::StructField, field_name)); write!( w, "\ @@ -1199,7 +1199,7 @@ fn item_struct(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, s: &clean::St ", item_type = ItemType::StructField, id = id, - name = field.name.as_ref().unwrap(), + name = field_name, ty = ty.print(cx) ); document(w, cx, field, Some(it)); From 19f30b72b30c7745d3ed126ebeaf3fe3d253677f Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 25 Jul 2021 14:57:45 +0200 Subject: [PATCH 04/34] Add test for tuple struct documentation fields --- src/test/rustdoc/tuple-struct-fields-doc.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/test/rustdoc/tuple-struct-fields-doc.rs diff --git a/src/test/rustdoc/tuple-struct-fields-doc.rs b/src/test/rustdoc/tuple-struct-fields-doc.rs new file mode 100644 index 0000000000000..ab3d4903b2b6e --- /dev/null +++ b/src/test/rustdoc/tuple-struct-fields-doc.rs @@ -0,0 +1,19 @@ +#![crate_name = "foo"] + +// @has foo/struct.Foo.html +// @has - '//h2[@id="fields"]' 'Tuple Fields' +// @has - '//h3[@class="sidebar-title"]/a[@href="#fields"]' 'Tuple Fields' +// @has - '//*[@id="structfield.0"]' '0: u32' +// @has - '//*[@id="main"]/div[@class="docblock"]' 'hello' +// @!has - '//*[@id="structfield.1"]' +// @has - '//*[@id="structfield.2"]' '2: char' +// @has - '//*[@id="structfield.3"]' '3: i8' +// @has - '//*[@id="main"]/div[@class="docblock"]' 'not hello' +pub struct Foo( + /// hello + pub u32, + char, + pub char, + /// not hello + pub i8, +); From 83505287f27716e0ed609eb01e319e1f1373985a Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Thu, 22 Jul 2021 21:56:07 +0800 Subject: [PATCH 05/34] move Constness into TraitPredicate --- compiler/rustc_hir/src/hir.rs | 9 +++++++ compiler/rustc_infer/src/traits/util.rs | 2 +- compiler/rustc_lint/src/traits.rs | 2 +- compiler/rustc_lint/src/unused.rs | 2 +- compiler/rustc_middle/src/ty/context.rs | 2 +- compiler/rustc_middle/src/ty/error.rs | 12 +++++++--- compiler/rustc_middle/src/ty/flags.rs | 2 +- compiler/rustc_middle/src/ty/mod.rs | 24 ++++++++++++------- compiler/rustc_middle/src/ty/print/pretty.rs | 7 ++---- compiler/rustc_middle/src/ty/relate.rs | 19 ++++++++++++++- .../rustc_middle/src/ty/structural_impls.rs | 18 +++++++------- compiler/rustc_middle/src/ty/sty.rs | 5 +++- .../src/borrow_check/type_check/mod.rs | 8 +++---- .../src/transform/check_consts/check.rs | 7 ++++-- .../src/transform/function_item_references.rs | 2 +- compiler/rustc_privacy/src/lib.rs | 2 +- compiler/rustc_resolve/src/late/lifetimes.rs | 2 +- .../src/traits/auto_trait.rs | 14 ++++------- .../src/traits/error_reporting/mod.rs | 13 +++++----- .../src/traits/error_reporting/suggestions.rs | 2 +- .../src/traits/fulfill.rs | 4 ++-- .../src/traits/object_safety.rs | 4 ++-- .../traits/query/type_op/prove_predicate.rs | 2 +- .../src/traits/select/mod.rs | 11 ++++----- .../rustc_trait_selection/src/traits/wf.rs | 4 ++-- compiler/rustc_traits/src/chalk/lowering.rs | 8 +++---- compiler/rustc_typeck/src/astconv/mod.rs | 2 +- compiler/rustc_typeck/src/check/_match.rs | 16 ++++++------- compiler/rustc_typeck/src/check/coercion.rs | 4 +--- compiler/rustc_typeck/src/check/dropck.rs | 2 +- .../rustc_typeck/src/check/fn_ctxt/_impl.rs | 2 +- .../rustc_typeck/src/check/fn_ctxt/checks.rs | 4 ++-- .../rustc_typeck/src/check/fn_ctxt/mod.rs | 2 +- .../rustc_typeck/src/check/method/confirm.rs | 2 +- .../rustc_typeck/src/check/method/probe.rs | 2 +- .../rustc_typeck/src/check/method/suggest.rs | 6 ++--- compiler/rustc_typeck/src/check/mod.rs | 2 +- compiler/rustc_typeck/src/collect.rs | 6 ++--- .../rustc_typeck/src/collect/item_bounds.rs | 2 +- .../src/impl_wf_check/min_specialization.rs | 16 ++++++++----- src/librustdoc/clean/auto_trait.rs | 4 ++-- src/librustdoc/clean/mod.rs | 8 +++---- src/librustdoc/clean/simplify.rs | 2 +- .../rfc-2632-const-trait-impl/assoc-type.rs | 2 +- .../clippy_lints/src/future_not_send.rs | 2 +- .../src/needless_pass_by_value.rs | 2 +- .../src/unit_return_expecting_ord.rs | 2 +- .../clippy_utils/src/qualify_min_const_fn.rs | 2 +- src/tools/clippy/clippy_utils/src/ty.rs | 2 +- 49 files changed, 157 insertions(+), 124 deletions(-) diff --git a/compiler/rustc_hir/src/hir.rs b/compiler/rustc_hir/src/hir.rs index 389d1e5899f70..0cdc5d88f53c3 100644 --- a/compiler/rustc_hir/src/hir.rs +++ b/compiler/rustc_hir/src/hir.rs @@ -2709,6 +2709,15 @@ pub enum Constness { NotConst, } +impl fmt::Display for Constness { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str(match *self { + Self::Const => "const", + Self::NotConst => "non-const", + }) + } +} + #[derive(Copy, Clone, Encodable, Debug, HashStable_Generic)] pub struct FnHeader { pub unsafety: Unsafety, diff --git a/compiler/rustc_infer/src/traits/util.rs b/compiler/rustc_infer/src/traits/util.rs index ce1445f8a4746..3139e12116373 100644 --- a/compiler/rustc_infer/src/traits/util.rs +++ b/compiler/rustc_infer/src/traits/util.rs @@ -124,7 +124,7 @@ impl Elaborator<'tcx> { let bound_predicate = obligation.predicate.kind(); match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(data, _) => { + ty::PredicateKind::Trait(data) => { // Get predicates declared on the trait. let predicates = tcx.super_predicates_of(data.def_id()); diff --git a/compiler/rustc_lint/src/traits.rs b/compiler/rustc_lint/src/traits.rs index e713ce7c71bec..2c039b6d05d29 100644 --- a/compiler/rustc_lint/src/traits.rs +++ b/compiler/rustc_lint/src/traits.rs @@ -87,7 +87,7 @@ impl<'tcx> LateLintPass<'tcx> for DropTraitConstraints { let predicates = cx.tcx.explicit_predicates_of(item.def_id); for &(predicate, span) in predicates.predicates { let trait_predicate = match predicate.kind().skip_binder() { - Trait(trait_predicate, _constness) => trait_predicate, + Trait(trait_predicate) => trait_predicate, _ => continue, }; let def_id = trait_predicate.trait_ref.def_id; diff --git a/compiler/rustc_lint/src/unused.rs b/compiler/rustc_lint/src/unused.rs index c431c048ca01c..f4191b883ba48 100644 --- a/compiler/rustc_lint/src/unused.rs +++ b/compiler/rustc_lint/src/unused.rs @@ -203,7 +203,7 @@ impl<'tcx> LateLintPass<'tcx> for UnusedResults { let mut has_emitted = false; for &(predicate, _) in cx.tcx.explicit_item_bounds(def) { // We only look at the `DefId`, so it is safe to skip the binder here. - if let ty::PredicateKind::Trait(ref poly_trait_predicate, _) = + if let ty::PredicateKind::Trait(ref poly_trait_predicate) = predicate.kind().skip_binder() { let def_id = poly_trait_predicate.trait_ref.def_id; diff --git a/compiler/rustc_middle/src/ty/context.rs b/compiler/rustc_middle/src/ty/context.rs index 4ce49032398bc..badf3eae301ca 100644 --- a/compiler/rustc_middle/src/ty/context.rs +++ b/compiler/rustc_middle/src/ty/context.rs @@ -2171,7 +2171,7 @@ impl<'tcx> TyCtxt<'tcx> { let generic_predicates = self.super_predicates_of(trait_did); for (predicate, _) in generic_predicates.predicates { - if let ty::PredicateKind::Trait(data, _) = predicate.kind().skip_binder() { + if let ty::PredicateKind::Trait(data) = predicate.kind().skip_binder() { if set.insert(data.def_id()) { stack.push(data.def_id()); } diff --git a/compiler/rustc_middle/src/ty/error.rs b/compiler/rustc_middle/src/ty/error.rs index f1c7c1ea852a2..3846d9ffdbae5 100644 --- a/compiler/rustc_middle/src/ty/error.rs +++ b/compiler/rustc_middle/src/ty/error.rs @@ -33,6 +33,7 @@ impl ExpectedFound { #[derive(Clone, Debug, TypeFoldable)] pub enum TypeError<'tcx> { Mismatch, + ConstnessMismatch(ExpectedFound), UnsafetyMismatch(ExpectedFound), AbiMismatch(ExpectedFound), Mutability, @@ -106,6 +107,9 @@ impl<'tcx> fmt::Display for TypeError<'tcx> { CyclicTy(_) => write!(f, "cyclic type of infinite size"), CyclicConst(_) => write!(f, "encountered a self-referencing constant"), Mismatch => write!(f, "types differ"), + ConstnessMismatch(values) => { + write!(f, "expected {} fn, found {} fn", values.expected, values.found) + } UnsafetyMismatch(values) => { write!(f, "expected {} fn, found {} fn", values.expected, values.found) } @@ -213,9 +217,11 @@ impl<'tcx> TypeError<'tcx> { pub fn must_include_note(&self) -> bool { use self::TypeError::*; match self { - CyclicTy(_) | CyclicConst(_) | UnsafetyMismatch(_) | Mismatch | AbiMismatch(_) - | FixedArraySize(_) | ArgumentSorts(..) | Sorts(_) | IntMismatch(_) - | FloatMismatch(_) | VariadicMismatch(_) | TargetFeatureCast(_) => false, + CyclicTy(_) | CyclicConst(_) | UnsafetyMismatch(_) | ConstnessMismatch(_) + | Mismatch | AbiMismatch(_) | FixedArraySize(_) | ArgumentSorts(..) | Sorts(_) + | IntMismatch(_) | FloatMismatch(_) | VariadicMismatch(_) | TargetFeatureCast(_) => { + false + } Mutability | ArgumentMutability(_) diff --git a/compiler/rustc_middle/src/ty/flags.rs b/compiler/rustc_middle/src/ty/flags.rs index 9faa172a4973f..391c8292bd542 100644 --- a/compiler/rustc_middle/src/ty/flags.rs +++ b/compiler/rustc_middle/src/ty/flags.rs @@ -216,7 +216,7 @@ impl FlagComputation { fn add_predicate_atom(&mut self, atom: ty::PredicateKind<'_>) { match atom { - ty::PredicateKind::Trait(trait_pred, _constness) => { + ty::PredicateKind::Trait(trait_pred) => { self.add_substs(trait_pred.trait_ref.substs); } ty::PredicateKind::RegionOutlives(ty::OutlivesPredicate(a, b)) => { diff --git a/compiler/rustc_middle/src/ty/mod.rs b/compiler/rustc_middle/src/ty/mod.rs index a6aff42479069..6ea44789c7a38 100644 --- a/compiler/rustc_middle/src/ty/mod.rs +++ b/compiler/rustc_middle/src/ty/mod.rs @@ -456,7 +456,7 @@ pub enum PredicateKind<'tcx> { /// A trait predicate will have `Constness::Const` if it originates /// from a bound on a `const fn` without the `?const` opt-out (e.g., /// `const fn foobar() {}`). - Trait(TraitPredicate<'tcx>, Constness), + Trait(TraitPredicate<'tcx>), /// `where 'a: 'b` RegionOutlives(RegionOutlivesPredicate<'tcx>), @@ -612,6 +612,11 @@ impl<'tcx> Predicate<'tcx> { #[derive(HashStable, TypeFoldable)] pub struct TraitPredicate<'tcx> { pub trait_ref: TraitRef<'tcx>, + + /// A trait predicate will have `Constness::Const` if it originates + /// from a bound on a `const fn` without the `?const` opt-out (e.g., + /// `const fn foobar() {}`). + pub constness: hir::Constness, } pub type PolyTraitPredicate<'tcx> = ty::Binder<'tcx, TraitPredicate<'tcx>>; @@ -745,8 +750,11 @@ impl ToPredicate<'tcx> for PredicateKind<'tcx> { impl<'tcx> ToPredicate<'tcx> for ConstnessAnd> { fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> { - PredicateKind::Trait(ty::TraitPredicate { trait_ref: self.value }, self.constness) - .to_predicate(tcx) + PredicateKind::Trait(ty::TraitPredicate { + trait_ref: self.value, + constness: self.constness, + }) + .to_predicate(tcx) } } @@ -754,15 +762,15 @@ impl<'tcx> ToPredicate<'tcx> for ConstnessAnd> { fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> { self.value .map_bound(|trait_ref| { - PredicateKind::Trait(ty::TraitPredicate { trait_ref }, self.constness) + PredicateKind::Trait(ty::TraitPredicate { trait_ref, constness: self.constness }) }) .to_predicate(tcx) } } -impl<'tcx> ToPredicate<'tcx> for ConstnessAnd> { +impl<'tcx> ToPredicate<'tcx> for PolyTraitPredicate<'tcx> { fn to_predicate(self, tcx: TyCtxt<'tcx>) -> Predicate<'tcx> { - self.value.map_bound(|value| PredicateKind::Trait(value, self.constness)).to_predicate(tcx) + self.map_bound(PredicateKind::Trait).to_predicate(tcx) } } @@ -788,8 +796,8 @@ impl<'tcx> Predicate<'tcx> { pub fn to_opt_poly_trait_ref(self) -> Option>> { let predicate = self.kind(); match predicate.skip_binder() { - PredicateKind::Trait(t, constness) => { - Some(ConstnessAnd { constness, value: predicate.rebind(t.trait_ref) }) + PredicateKind::Trait(t) => { + Some(ConstnessAnd { constness: t.constness, value: predicate.rebind(t.trait_ref) }) } PredicateKind::Projection(..) | PredicateKind::Subtype(..) diff --git a/compiler/rustc_middle/src/ty/print/pretty.rs b/compiler/rustc_middle/src/ty/print/pretty.rs index dc94124e62ab6..c96621338f574 100644 --- a/compiler/rustc_middle/src/ty/print/pretty.rs +++ b/compiler/rustc_middle/src/ty/print/pretty.rs @@ -630,7 +630,7 @@ pub trait PrettyPrinter<'tcx>: for (predicate, _) in bounds { let predicate = predicate.subst(self.tcx(), substs); let bound_predicate = predicate.kind(); - if let ty::PredicateKind::Trait(pred, _) = bound_predicate.skip_binder() { + if let ty::PredicateKind::Trait(pred) = bound_predicate.skip_binder() { let trait_ref = bound_predicate.rebind(pred.trait_ref); // Don't print +Sized, but rather +?Sized if absent. if Some(trait_ref.def_id()) == self.tcx().lang_items().sized_trait() { @@ -2264,10 +2264,7 @@ define_print_and_forward_display! { ty::PredicateKind<'tcx> { match *self { - ty::PredicateKind::Trait(ref data, constness) => { - if let hir::Constness::Const = constness { - p!("const "); - } + ty::PredicateKind::Trait(ref data) => { p!(print(data)) } ty::PredicateKind::Subtype(predicate) => p!(print(predicate)), diff --git a/compiler/rustc_middle/src/ty/relate.rs b/compiler/rustc_middle/src/ty/relate.rs index a4c36be21992b..8efb88d404063 100644 --- a/compiler/rustc_middle/src/ty/relate.rs +++ b/compiler/rustc_middle/src/ty/relate.rs @@ -200,6 +200,20 @@ impl<'tcx> Relate<'tcx> for ty::FnSig<'tcx> { } } +impl<'tcx> Relate<'tcx> for ast::Constness { + fn relate>( + relation: &mut R, + a: ast::Constness, + b: ast::Constness, + ) -> RelateResult<'tcx, ast::Constness> { + if a != b { + Err(TypeError::ConstnessMismatch(expected_found(relation, a, b))) + } else { + Ok(a) + } + } +} + impl<'tcx> Relate<'tcx> for ast::Unsafety { fn relate>( relation: &mut R, @@ -767,7 +781,10 @@ impl<'tcx> Relate<'tcx> for ty::TraitPredicate<'tcx> { a: ty::TraitPredicate<'tcx>, b: ty::TraitPredicate<'tcx>, ) -> RelateResult<'tcx, ty::TraitPredicate<'tcx>> { - Ok(ty::TraitPredicate { trait_ref: relation.relate(a.trait_ref, b.trait_ref)? }) + Ok(ty::TraitPredicate { + trait_ref: relation.relate(a.trait_ref, b.trait_ref)?, + constness: relation.relate(a.constness, b.constness)?, + }) } } diff --git a/compiler/rustc_middle/src/ty/structural_impls.rs b/compiler/rustc_middle/src/ty/structural_impls.rs index 7290c41d615df..62397752db2fc 100644 --- a/compiler/rustc_middle/src/ty/structural_impls.rs +++ b/compiler/rustc_middle/src/ty/structural_impls.rs @@ -155,6 +155,9 @@ impl fmt::Debug for ty::ParamConst { impl fmt::Debug for ty::TraitPredicate<'tcx> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + if let hir::Constness::Const = self.constness { + write!(f, "const ")?; + } write!(f, "TraitPredicate({:?})", self.trait_ref) } } @@ -174,12 +177,7 @@ impl fmt::Debug for ty::Predicate<'tcx> { impl fmt::Debug for ty::PredicateKind<'tcx> { fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { match *self { - ty::PredicateKind::Trait(ref a, constness) => { - if let hir::Constness::Const = constness { - write!(f, "const ")?; - } - a.fmt(f) - } + ty::PredicateKind::Trait(ref a) => a.fmt(f), ty::PredicateKind::Subtype(ref pair) => pair.fmt(f), ty::PredicateKind::RegionOutlives(ref pair) => pair.fmt(f), ty::PredicateKind::TypeOutlives(ref pair) => pair.fmt(f), @@ -366,7 +364,8 @@ impl<'a, 'tcx> Lift<'tcx> for ty::ExistentialPredicate<'a> { impl<'a, 'tcx> Lift<'tcx> for ty::TraitPredicate<'a> { type Lifted = ty::TraitPredicate<'tcx>; fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option> { - tcx.lift(self.trait_ref).map(|trait_ref| ty::TraitPredicate { trait_ref }) + tcx.lift(self.trait_ref) + .map(|trait_ref| ty::TraitPredicate { trait_ref, constness: self.constness }) } } @@ -419,9 +418,7 @@ impl<'a, 'tcx> Lift<'tcx> for ty::PredicateKind<'a> { type Lifted = ty::PredicateKind<'tcx>; fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option { match self { - ty::PredicateKind::Trait(data, constness) => { - tcx.lift(data).map(|data| ty::PredicateKind::Trait(data, constness)) - } + ty::PredicateKind::Trait(data) => tcx.lift(data).map(ty::PredicateKind::Trait), ty::PredicateKind::Subtype(data) => tcx.lift(data).map(ty::PredicateKind::Subtype), ty::PredicateKind::RegionOutlives(data) => { tcx.lift(data).map(ty::PredicateKind::RegionOutlives) @@ -584,6 +581,7 @@ impl<'a, 'tcx> Lift<'tcx> for ty::error::TypeError<'a> { Some(match self { Mismatch => Mismatch, + ConstnessMismatch(x) => ConstnessMismatch(x), UnsafetyMismatch(x) => UnsafetyMismatch(x), AbiMismatch(x) => AbiMismatch(x), Mutability => Mutability, diff --git a/compiler/rustc_middle/src/ty/sty.rs b/compiler/rustc_middle/src/ty/sty.rs index 6a7e349819afd..a1edb8071c459 100644 --- a/compiler/rustc_middle/src/ty/sty.rs +++ b/compiler/rustc_middle/src/ty/sty.rs @@ -876,7 +876,10 @@ impl<'tcx> PolyTraitRef<'tcx> { } pub fn to_poly_trait_predicate(&self) -> ty::PolyTraitPredicate<'tcx> { - self.map_bound(|trait_ref| ty::TraitPredicate { trait_ref }) + self.map_bound(|trait_ref| ty::TraitPredicate { + trait_ref, + constness: hir::Constness::NotConst, + }) } } diff --git a/compiler/rustc_mir/src/borrow_check/type_check/mod.rs b/compiler/rustc_mir/src/borrow_check/type_check/mod.rs index 3fb06cd2f5f44..f912f60e0df0a 100644 --- a/compiler/rustc_mir/src/borrow_check/type_check/mod.rs +++ b/compiler/rustc_mir/src/borrow_check/type_check/mod.rs @@ -2704,10 +2704,10 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> { category: ConstraintCategory, ) { self.prove_predicates( - Some(ty::PredicateKind::Trait( - ty::TraitPredicate { trait_ref }, - hir::Constness::NotConst, - )), + Some(ty::PredicateKind::Trait(ty::TraitPredicate { + trait_ref, + constness: hir::Constness::NotConst, + })), locations, category, ); diff --git a/compiler/rustc_mir/src/transform/check_consts/check.rs b/compiler/rustc_mir/src/transform/check_consts/check.rs index cff386f776beb..8b288c33fface 100644 --- a/compiler/rustc_mir/src/transform/check_consts/check.rs +++ b/compiler/rustc_mir/src/transform/check_consts/check.rs @@ -423,7 +423,7 @@ impl Checker<'mir, 'tcx> { ty::PredicateKind::Subtype(_) => { bug!("subtype predicate on function: {:#?}", predicate) } - ty::PredicateKind::Trait(pred, _constness) => { + ty::PredicateKind::Trait(pred) => { if Some(pred.def_id()) == tcx.lang_items().sized_trait() { continue; } @@ -822,7 +822,10 @@ impl Visitor<'tcx> for Checker<'mir, 'tcx> { let obligation = Obligation::new( ObligationCause::dummy(), param_env, - Binder::dummy(TraitPredicate { trait_ref }), + Binder::dummy(TraitPredicate { + trait_ref, + constness: hir::Constness::Const, + }), ); let implsrc = tcx.infer_ctxt().enter(|infcx| { diff --git a/compiler/rustc_mir/src/transform/function_item_references.rs b/compiler/rustc_mir/src/transform/function_item_references.rs index 8d02ac6d9b774..26fe796cb916f 100644 --- a/compiler/rustc_mir/src/transform/function_item_references.rs +++ b/compiler/rustc_mir/src/transform/function_item_references.rs @@ -132,7 +132,7 @@ impl<'a, 'tcx> FunctionItemRefChecker<'a, 'tcx> { /// If the given predicate is the trait `fmt::Pointer`, returns the bound parameter type. fn is_pointer_trait(&self, bound: &PredicateKind<'tcx>) -> Option> { - if let ty::PredicateKind::Trait(predicate, _) = bound { + if let ty::PredicateKind::Trait(predicate) = bound { if self.tcx.is_diagnostic_item(sym::pointer_trait, predicate.def_id()) { Some(predicate.trait_ref.self_ty()) } else { diff --git a/compiler/rustc_privacy/src/lib.rs b/compiler/rustc_privacy/src/lib.rs index d969f50c1d918..3fd5a51f98a47 100644 --- a/compiler/rustc_privacy/src/lib.rs +++ b/compiler/rustc_privacy/src/lib.rs @@ -122,7 +122,7 @@ where fn visit_predicate(&mut self, predicate: ty::Predicate<'tcx>) -> ControlFlow { match predicate.kind().skip_binder() { - ty::PredicateKind::Trait(ty::TraitPredicate { trait_ref }, _) => { + ty::PredicateKind::Trait(ty::TraitPredicate { trait_ref, constness: _ }) => { self.visit_trait(trait_ref) } ty::PredicateKind::Projection(ty::ProjectionPredicate { projection_ty, ty }) => { diff --git a/compiler/rustc_resolve/src/late/lifetimes.rs b/compiler/rustc_resolve/src/late/lifetimes.rs index 4329477404298..fe38fb364f648 100644 --- a/compiler/rustc_resolve/src/late/lifetimes.rs +++ b/compiler/rustc_resolve/src/late/lifetimes.rs @@ -2651,7 +2651,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> { let obligations = predicates.predicates.iter().filter_map(|&(pred, _)| { let bound_predicate = pred.kind(); match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(data, _) => { + ty::PredicateKind::Trait(data) => { // The order here needs to match what we would get from `subst_supertrait` let pred_bound_vars = bound_predicate.bound_vars(); let mut all_bound_vars = bound_vars.clone(); diff --git a/compiler/rustc_trait_selection/src/traits/auto_trait.rs b/compiler/rustc_trait_selection/src/traits/auto_trait.rs index f54eb0914a5a7..282502cfa0d3d 100644 --- a/compiler/rustc_trait_selection/src/traits/auto_trait.rs +++ b/compiler/rustc_trait_selection/src/traits/auto_trait.rs @@ -285,6 +285,7 @@ impl AutoTraitFinder<'tcx> { def_id: trait_did, substs: infcx.tcx.mk_substs_trait(ty, &[]), }, + constness: hir::Constness::NotConst, })); let computed_preds = param_env.caller_bounds().iter(); @@ -344,10 +345,7 @@ impl AutoTraitFinder<'tcx> { Err(SelectionError::Unimplemented) => { if self.is_param_no_infer(pred.skip_binder().trait_ref.substs) { already_visited.remove(&pred); - self.add_user_pred( - &mut user_computed_preds, - pred.without_const().to_predicate(self.tcx), - ); + self.add_user_pred(&mut user_computed_preds, pred.to_predicate(self.tcx)); predicates.push_back(pred); } else { debug!( @@ -414,10 +412,8 @@ impl AutoTraitFinder<'tcx> { ) { let mut should_add_new = true; user_computed_preds.retain(|&old_pred| { - if let ( - ty::PredicateKind::Trait(new_trait, _), - ty::PredicateKind::Trait(old_trait, _), - ) = (new_pred.kind().skip_binder(), old_pred.kind().skip_binder()) + if let (ty::PredicateKind::Trait(new_trait), ty::PredicateKind::Trait(old_trait)) = + (new_pred.kind().skip_binder(), old_pred.kind().skip_binder()) { if new_trait.def_id() == old_trait.def_id() { let new_substs = new_trait.trait_ref.substs; @@ -638,7 +634,7 @@ impl AutoTraitFinder<'tcx> { let bound_predicate = predicate.kind(); match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(p, _) => { + ty::PredicateKind::Trait(p) => { // Add this to `predicates` so that we end up calling `select` // with it. If this predicate ends up being unimplemented, // then `evaluate_predicates` will handle adding it the `ParamEnv` diff --git a/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs b/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs index 13a6733fb478a..1d3c808e119fd 100644 --- a/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/error_reporting/mod.rs @@ -276,7 +276,7 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> { let bound_predicate = obligation.predicate.kind(); match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(trait_predicate, _) => { + ty::PredicateKind::Trait(trait_predicate) => { let trait_predicate = bound_predicate.rebind(trait_predicate); let trait_predicate = self.resolve_vars_if_possible(trait_predicate); @@ -517,8 +517,7 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> { ); trait_pred }); - let unit_obligation = - obligation.with(predicate.without_const().to_predicate(tcx)); + let unit_obligation = obligation.with(predicate.to_predicate(tcx)); if self.predicate_may_hold(&unit_obligation) { err.note("this trait is implemented for `()`."); err.note( @@ -1147,7 +1146,7 @@ impl<'a, 'tcx> InferCtxtPrivExt<'tcx> for InferCtxt<'a, 'tcx> { // FIXME: It should be possible to deal with `ForAll` in a cleaner way. let bound_error = error.kind(); let (cond, error) = match (cond.kind().skip_binder(), bound_error.skip_binder()) { - (ty::PredicateKind::Trait(..), ty::PredicateKind::Trait(error, _)) => { + (ty::PredicateKind::Trait(..), ty::PredicateKind::Trait(error)) => { (cond, bound_error.rebind(error)) } _ => { @@ -1158,7 +1157,7 @@ impl<'a, 'tcx> InferCtxtPrivExt<'tcx> for InferCtxt<'a, 'tcx> { for obligation in super::elaborate_predicates(self.tcx, std::iter::once(cond)) { let bound_predicate = obligation.predicate.kind(); - if let ty::PredicateKind::Trait(implication, _) = bound_predicate.skip_binder() { + if let ty::PredicateKind::Trait(implication) = bound_predicate.skip_binder() { let error = error.to_poly_trait_ref(); let implication = bound_predicate.rebind(implication.trait_ref); // FIXME: I'm just not taking associated types at all here. @@ -1535,7 +1534,7 @@ impl<'a, 'tcx> InferCtxtPrivExt<'tcx> for InferCtxt<'a, 'tcx> { let bound_predicate = predicate.kind(); let mut err = match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(data, _) => { + ty::PredicateKind::Trait(data) => { let trait_ref = bound_predicate.rebind(data.trait_ref); debug!("trait_ref {:?}", trait_ref); @@ -1800,7 +1799,7 @@ impl<'a, 'tcx> InferCtxtPrivExt<'tcx> for InferCtxt<'a, 'tcx> { match (obligation.predicate.kind().skip_binder(), obligation.cause.code.peel_derives()) { ( - ty::PredicateKind::Trait(pred, _), + ty::PredicateKind::Trait(pred), &ObligationCauseCode::BindingObligation(item_def_id, span), ) => (pred, item_def_id, span), _ => return, diff --git a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs index 9a33875d6e493..5fab9d487e23a 100644 --- a/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs +++ b/compiler/rustc_trait_selection/src/traits/error_reporting/suggestions.rs @@ -1387,7 +1387,7 @@ impl<'a, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'a, 'tcx> { // bound was introduced. At least one generator should be present for this diagnostic to be // modified. let (mut trait_ref, mut target_ty) = match obligation.predicate.kind().skip_binder() { - ty::PredicateKind::Trait(p, _) => (Some(p.trait_ref), Some(p.self_ty())), + ty::PredicateKind::Trait(p) => (Some(p.trait_ref), Some(p.self_ty())), _ => (None, None), }; let mut generator = None; diff --git a/compiler/rustc_trait_selection/src/traits/fulfill.rs b/compiler/rustc_trait_selection/src/traits/fulfill.rs index 9ec1dd5c2ee3b..cf50c34530ed2 100644 --- a/compiler/rustc_trait_selection/src/traits/fulfill.rs +++ b/compiler/rustc_trait_selection/src/traits/fulfill.rs @@ -352,7 +352,7 @@ impl<'a, 'b, 'tcx> FulfillProcessor<'a, 'b, 'tcx> { // Evaluation will discard candidates using the leak check. // This means we need to pass it the bound version of our // predicate. - ty::PredicateKind::Trait(trait_ref, _constness) => { + ty::PredicateKind::Trait(trait_ref) => { let trait_obligation = obligation.with(binder.rebind(trait_ref)); self.process_trait_obligation( @@ -388,7 +388,7 @@ impl<'a, 'b, 'tcx> FulfillProcessor<'a, 'b, 'tcx> { } }, Some(pred) => match pred { - ty::PredicateKind::Trait(data, _) => { + ty::PredicateKind::Trait(data) => { let trait_obligation = obligation.with(Binder::dummy(data)); self.process_trait_obligation( diff --git a/compiler/rustc_trait_selection/src/traits/object_safety.rs b/compiler/rustc_trait_selection/src/traits/object_safety.rs index 7ebef7f8883ae..04bc689d51161 100644 --- a/compiler/rustc_trait_selection/src/traits/object_safety.rs +++ b/compiler/rustc_trait_selection/src/traits/object_safety.rs @@ -280,7 +280,7 @@ fn predicate_references_self( let self_ty = tcx.types.self_param; let has_self_ty = |arg: &GenericArg<'_>| arg.walk().any(|arg| arg == self_ty.into()); match predicate.kind().skip_binder() { - ty::PredicateKind::Trait(ref data, _) => { + ty::PredicateKind::Trait(ref data) => { // In the case of a trait predicate, we can skip the "self" type. if data.trait_ref.substs[1..].iter().any(has_self_ty) { Some(sp) } else { None } } @@ -331,7 +331,7 @@ fn generics_require_sized_self(tcx: TyCtxt<'_>, def_id: DefId) -> bool { let predicates = predicates.instantiate_identity(tcx).predicates; elaborate_predicates(tcx, predicates.into_iter()).any(|obligation| { match obligation.predicate.kind().skip_binder() { - ty::PredicateKind::Trait(ref trait_pred, _) => { + ty::PredicateKind::Trait(ref trait_pred) => { trait_pred.def_id() == sized_def_id && trait_pred.self_ty().is_param(0) } ty::PredicateKind::Projection(..) diff --git a/compiler/rustc_trait_selection/src/traits/query/type_op/prove_predicate.rs b/compiler/rustc_trait_selection/src/traits/query/type_op/prove_predicate.rs index de538c62c5e39..02e9b4d0f0e72 100644 --- a/compiler/rustc_trait_selection/src/traits/query/type_op/prove_predicate.rs +++ b/compiler/rustc_trait_selection/src/traits/query/type_op/prove_predicate.rs @@ -15,7 +15,7 @@ impl<'tcx> super::QueryTypeOp<'tcx> for ProvePredicate<'tcx> { // `&T`, accounts for about 60% percentage of the predicates // we have to prove. No need to canonicalize and all that for // such cases. - if let ty::PredicateKind::Trait(trait_ref, _) = key.value.predicate.kind().skip_binder() { + if let ty::PredicateKind::Trait(trait_ref) = key.value.predicate.kind().skip_binder() { if let Some(sized_def_id) = tcx.lang_items().sized_trait() { if trait_ref.def_id() == sized_def_id { if trait_ref.self_ty().is_trivially_sized(tcx) { diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index 95611ebc8188c..1aa4bc0a412ce 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -42,7 +42,7 @@ use rustc_middle::ty::print::with_no_trimmed_paths; use rustc_middle::ty::relate::TypeRelation; use rustc_middle::ty::subst::{GenericArgKind, Subst, SubstsRef}; use rustc_middle::ty::{self, PolyProjectionPredicate, ToPolyTraitRef, ToPredicate}; -use rustc_middle::ty::{Ty, TyCtxt, TypeFoldable, WithConstness}; +use rustc_middle::ty::{Ty, TyCtxt, TypeFoldable}; use rustc_span::symbol::sym; use std::cell::{Cell, RefCell}; @@ -454,7 +454,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { let result = ensure_sufficient_stack(|| { let bound_predicate = obligation.predicate.kind(); match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(t, _) => { + ty::PredicateKind::Trait(t) => { let t = bound_predicate.rebind(t); debug_assert!(!t.has_escaping_bound_vars()); let obligation = obligation.with(t); @@ -762,8 +762,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { // if the regions match exactly. let cycle = stack.iter().skip(1).take_while(|s| s.depth >= cycle_depth); let tcx = self.tcx(); - let cycle = - cycle.map(|stack| stack.obligation.predicate.without_const().to_predicate(tcx)); + let cycle = cycle.map(|stack| stack.obligation.predicate.to_predicate(tcx)); if self.coinductive_match(cycle) { debug!("evaluate_stack --> recursive, coinductive"); Some(EvaluatedToOk) @@ -873,7 +872,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { fn coinductive_predicate(&self, predicate: ty::Predicate<'tcx>) -> bool { let result = match predicate.kind().skip_binder() { - ty::PredicateKind::Trait(ref data, _) => self.tcx().trait_is_auto(data.def_id()), + ty::PredicateKind::Trait(ref data) => self.tcx().trait_is_auto(data.def_id()), _ => false, }; debug!(?predicate, ?result, "coinductive_predicate"); @@ -1213,7 +1212,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { .enumerate() .filter_map(|(idx, bound)| { let bound_predicate = bound.kind(); - if let ty::PredicateKind::Trait(pred, _) = bound_predicate.skip_binder() { + if let ty::PredicateKind::Trait(pred) = bound_predicate.skip_binder() { let bound = bound_predicate.rebind(pred.trait_ref); if self.infcx.probe(|_| { match self.match_normalize_trait_ref( diff --git a/compiler/rustc_trait_selection/src/traits/wf.rs b/compiler/rustc_trait_selection/src/traits/wf.rs index 27c8e00c5596c..9c9664d7b5e84 100644 --- a/compiler/rustc_trait_selection/src/traits/wf.rs +++ b/compiler/rustc_trait_selection/src/traits/wf.rs @@ -108,7 +108,7 @@ pub fn predicate_obligations<'a, 'tcx>( // It's ok to skip the binder here because wf code is prepared for it match predicate.kind().skip_binder() { - ty::PredicateKind::Trait(t, _) => { + ty::PredicateKind::Trait(t) => { wf.compute_trait_ref(&t.trait_ref, Elaborate::None); } ty::PredicateKind::RegionOutlives(..) => {} @@ -226,7 +226,7 @@ fn extend_cause_with_original_assoc_item_obligation<'tcx>( } } } - ty::PredicateKind::Trait(pred, _) => { + ty::PredicateKind::Trait(pred) => { // An associated item obligation born out of the `trait` failed to be met. An example // can be seen in `ui/associated-types/point-at-type-on-obligation-failure-2.rs`. debug!("extended_cause_with_original_assoc_item_obligation trait proj {:?}", pred); diff --git a/compiler/rustc_traits/src/chalk/lowering.rs b/compiler/rustc_traits/src/chalk/lowering.rs index a838172d664c3..974755e9e2669 100644 --- a/compiler/rustc_traits/src/chalk/lowering.rs +++ b/compiler/rustc_traits/src/chalk/lowering.rs @@ -87,7 +87,7 @@ impl<'tcx> LowerInto<'tcx, chalk_ir::InEnvironment { chalk_ir::DomainGoal::FromEnv(chalk_ir::FromEnv::Ty(ty.lower_into(interner))) } - ty::PredicateKind::Trait(predicate, _) => chalk_ir::DomainGoal::FromEnv( + ty::PredicateKind::Trait(predicate) => chalk_ir::DomainGoal::FromEnv( chalk_ir::FromEnv::Trait(predicate.trait_ref.lower_into(interner)), ), ty::PredicateKind::RegionOutlives(predicate) => chalk_ir::DomainGoal::Holds( @@ -137,7 +137,7 @@ impl<'tcx> LowerInto<'tcx, chalk_ir::GoalData>> for ty::Predi collect_bound_vars(interner, interner.tcx, self.kind()); let value = match predicate { - ty::PredicateKind::Trait(predicate, _) => { + ty::PredicateKind::Trait(predicate) => { chalk_ir::GoalData::DomainGoal(chalk_ir::DomainGoal::Holds( chalk_ir::WhereClause::Implemented(predicate.trait_ref.lower_into(interner)), )) @@ -569,7 +569,7 @@ impl<'tcx> LowerInto<'tcx, Option { + ty::PredicateKind::Trait(predicate) => { Some(chalk_ir::WhereClause::Implemented(predicate.trait_ref.lower_into(interner))) } ty::PredicateKind::RegionOutlives(predicate) => { @@ -702,7 +702,7 @@ impl<'tcx> LowerInto<'tcx, Option Some(chalk_ir::Binders::new( + ty::PredicateKind::Trait(predicate) => Some(chalk_ir::Binders::new( binders, chalk_solve::rust_ir::InlineBound::TraitBound( predicate.trait_ref.lower_into(interner), diff --git a/compiler/rustc_typeck/src/astconv/mod.rs b/compiler/rustc_typeck/src/astconv/mod.rs index f55e274ef8ea3..88a9270c6025d 100644 --- a/compiler/rustc_typeck/src/astconv/mod.rs +++ b/compiler/rustc_typeck/src/astconv/mod.rs @@ -1294,7 +1294,7 @@ impl<'o, 'tcx> dyn AstConv<'tcx> + 'o { let bound_predicate = obligation.predicate.kind(); match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(pred, _) => { + ty::PredicateKind::Trait(pred) => { let pred = bound_predicate.rebind(pred); associated_types.entry(span).or_default().extend( tcx.associated_items(pred.def_id()) diff --git a/compiler/rustc_typeck/src/check/_match.rs b/compiler/rustc_typeck/src/check/_match.rs index d056f2c90f988..cd12ab229e68a 100644 --- a/compiler/rustc_typeck/src/check/_match.rs +++ b/compiler/rustc_typeck/src/check/_match.rs @@ -603,16 +603,14 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { let mut suggest_box = !impl_trait_ret_ty.obligations.is_empty(); for o in impl_trait_ret_ty.obligations { match o.predicate.kind().skip_binder() { - ty::PredicateKind::Trait(t, constness) => { - let pred = ty::PredicateKind::Trait( - ty::TraitPredicate { - trait_ref: ty::TraitRef { - def_id: t.def_id(), - substs: self.infcx.tcx.mk_substs_trait(outer_ty, &[]), - }, + ty::PredicateKind::Trait(t) => { + let pred = ty::PredicateKind::Trait(ty::TraitPredicate { + trait_ref: ty::TraitRef { + def_id: t.def_id(), + substs: self.infcx.tcx.mk_substs_trait(outer_ty, &[]), }, - constness, - ); + constness: t.constness, + }); let obl = Obligation::new( o.cause.clone(), self.param_env, diff --git a/compiler/rustc_typeck/src/check/coercion.rs b/compiler/rustc_typeck/src/check/coercion.rs index ba76b9c8dd5a0..167c2ddbb3dca 100644 --- a/compiler/rustc_typeck/src/check/coercion.rs +++ b/compiler/rustc_typeck/src/check/coercion.rs @@ -586,9 +586,7 @@ impl<'f, 'tcx> Coerce<'f, 'tcx> { debug!("coerce_unsized resolve step: {:?}", obligation); let bound_predicate = obligation.predicate.kind(); let trait_pred = match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(trait_pred, _) - if traits.contains(&trait_pred.def_id()) => - { + ty::PredicateKind::Trait(trait_pred) if traits.contains(&trait_pred.def_id()) => { if unsize_did == trait_pred.def_id() { let unsize_ty = trait_pred.trait_ref.substs[1].expect_ty(); if let ty::Tuple(..) = unsize_ty.kind() { diff --git a/compiler/rustc_typeck/src/check/dropck.rs b/compiler/rustc_typeck/src/check/dropck.rs index 01276495c185a..9514e599538f7 100644 --- a/compiler/rustc_typeck/src/check/dropck.rs +++ b/compiler/rustc_typeck/src/check/dropck.rs @@ -229,7 +229,7 @@ fn ensure_drop_predicates_are_implied_by_item_defn<'tcx>( let predicate = predicate.kind(); let p = p.kind(); match (predicate.skip_binder(), p.skip_binder()) { - (ty::PredicateKind::Trait(a, _), ty::PredicateKind::Trait(b, _)) => { + (ty::PredicateKind::Trait(a), ty::PredicateKind::Trait(b)) => { relator.relate(predicate.rebind(a), p.rebind(b)).is_ok() } (ty::PredicateKind::Projection(a), ty::PredicateKind::Projection(b)) => { diff --git a/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs b/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs index 865e4ccc0b63f..fe1ad04d866c2 100644 --- a/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs +++ b/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs @@ -821,7 +821,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { bound_predicate.rebind(data).required_poly_trait_ref(self.tcx), obligation, )), - ty::PredicateKind::Trait(data, _) => { + ty::PredicateKind::Trait(data) => { Some((bound_predicate.rebind(data).to_poly_trait_ref(), obligation)) } ty::PredicateKind::Subtype(..) => None, diff --git a/compiler/rustc_typeck/src/check/fn_ctxt/checks.rs b/compiler/rustc_typeck/src/check/fn_ctxt/checks.rs index f65cc429fbd48..9952413353fa9 100644 --- a/compiler/rustc_typeck/src/check/fn_ctxt/checks.rs +++ b/compiler/rustc_typeck/src/check/fn_ctxt/checks.rs @@ -923,7 +923,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { continue; } - if let ty::PredicateKind::Trait(predicate, _) = + if let ty::PredicateKind::Trait(predicate) = error.obligation.predicate.kind().skip_binder() { // Collect the argument position for all arguments that could have caused this @@ -974,7 +974,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { if let hir::ExprKind::Path(qpath) = &path.kind { if let hir::QPath::Resolved(_, path) = &qpath { for error in errors { - if let ty::PredicateKind::Trait(predicate, _) = + if let ty::PredicateKind::Trait(predicate) = error.obligation.predicate.kind().skip_binder() { // If any of the type arguments in this path segment caused the diff --git a/compiler/rustc_typeck/src/check/fn_ctxt/mod.rs b/compiler/rustc_typeck/src/check/fn_ctxt/mod.rs index 13686cfec809a..75705e92e54bc 100644 --- a/compiler/rustc_typeck/src/check/fn_ctxt/mod.rs +++ b/compiler/rustc_typeck/src/check/fn_ctxt/mod.rs @@ -194,7 +194,7 @@ impl<'a, 'tcx> AstConv<'tcx> for FnCtxt<'a, 'tcx> { predicates: tcx.arena.alloc_from_iter( self.param_env.caller_bounds().iter().filter_map(|predicate| { match predicate.kind().skip_binder() { - ty::PredicateKind::Trait(data, _) if data.self_ty().is_param(index) => { + ty::PredicateKind::Trait(data) if data.self_ty().is_param(index) => { // HACK(eddyb) should get the original `Span`. let span = tcx.def_span(def_id); Some((predicate, span)) diff --git a/compiler/rustc_typeck/src/check/method/confirm.rs b/compiler/rustc_typeck/src/check/method/confirm.rs index 75299bae5ddfd..b4645c28868f2 100644 --- a/compiler/rustc_typeck/src/check/method/confirm.rs +++ b/compiler/rustc_typeck/src/check/method/confirm.rs @@ -500,7 +500,7 @@ impl<'a, 'tcx> ConfirmContext<'a, 'tcx> { traits::elaborate_predicates(self.tcx, predicates.predicates.iter().copied()) // We don't care about regions here. .filter_map(|obligation| match obligation.predicate.kind().skip_binder() { - ty::PredicateKind::Trait(trait_pred, _) if trait_pred.def_id() == sized_def_id => { + ty::PredicateKind::Trait(trait_pred) if trait_pred.def_id() == sized_def_id => { let span = iter::zip(&predicates.predicates, &predicates.spans) .find_map( |(p, span)| { diff --git a/compiler/rustc_typeck/src/check/method/probe.rs b/compiler/rustc_typeck/src/check/method/probe.rs index 9037ffe49a9a2..c6e6c8c5d70e2 100644 --- a/compiler/rustc_typeck/src/check/method/probe.rs +++ b/compiler/rustc_typeck/src/check/method/probe.rs @@ -832,7 +832,7 @@ impl<'a, 'tcx> ProbeContext<'a, 'tcx> { let bounds = self.param_env.caller_bounds().iter().filter_map(|predicate| { let bound_predicate = predicate.kind(); match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(trait_predicate, _) => { + ty::PredicateKind::Trait(trait_predicate) => { match *trait_predicate.trait_ref.self_ty().kind() { ty::Param(p) if p == param_ty => { Some(bound_predicate.rebind(trait_predicate.trait_ref)) diff --git a/compiler/rustc_typeck/src/check/method/suggest.rs b/compiler/rustc_typeck/src/check/method/suggest.rs index 77586ce48529c..a1386741a598c 100644 --- a/compiler/rustc_typeck/src/check/method/suggest.rs +++ b/compiler/rustc_typeck/src/check/method/suggest.rs @@ -683,7 +683,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { let mut collect_type_param_suggestions = |self_ty: Ty<'tcx>, parent_pred: &ty::Predicate<'tcx>, obligation: &str| { // We don't care about regions here, so it's fine to skip the binder here. - if let (ty::Param(_), ty::PredicateKind::Trait(p, _)) = + if let (ty::Param(_), ty::PredicateKind::Trait(p)) = (self_ty.kind(), parent_pred.kind().skip_binder()) { if let ty::Adt(def, _) = p.trait_ref.self_ty().kind() { @@ -763,7 +763,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { bound_span_label(projection_ty.self_ty(), &obligation, &quiet); Some((obligation, projection_ty.self_ty())) } - ty::PredicateKind::Trait(poly_trait_ref, _) => { + ty::PredicateKind::Trait(poly_trait_ref) => { let p = poly_trait_ref.trait_ref; let self_ty = p.self_ty(); let path = p.print_only_trait_path(); @@ -1200,7 +1200,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { match p.kind().skip_binder() { // Hide traits if they are present in predicates as they can be fixed without // having to implement them. - ty::PredicateKind::Trait(t, _) => t.def_id() == info.def_id, + ty::PredicateKind::Trait(t) => t.def_id() == info.def_id, ty::PredicateKind::Projection(p) => { p.projection_ty.item_def_id == info.def_id } diff --git a/compiler/rustc_typeck/src/check/mod.rs b/compiler/rustc_typeck/src/check/mod.rs index d30b057e26fe3..47ed6745c8eed 100644 --- a/compiler/rustc_typeck/src/check/mod.rs +++ b/compiler/rustc_typeck/src/check/mod.rs @@ -695,7 +695,7 @@ fn bounds_from_generic_predicates<'tcx>( debug!("predicate {:?}", predicate); let bound_predicate = predicate.kind(); match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(trait_predicate, _) => { + ty::PredicateKind::Trait(trait_predicate) => { let entry = types.entry(trait_predicate.self_ty()).or_default(); let def_id = trait_predicate.def_id(); if Some(def_id) != tcx.lang_items().sized_trait() { diff --git a/compiler/rustc_typeck/src/collect.rs b/compiler/rustc_typeck/src/collect.rs index 46b3ec5cf40c7..70eaf08f5777a 100644 --- a/compiler/rustc_typeck/src/collect.rs +++ b/compiler/rustc_typeck/src/collect.rs @@ -633,7 +633,7 @@ fn type_param_predicates( ) .into_iter() .filter(|(predicate, _)| match predicate.kind().skip_binder() { - ty::PredicateKind::Trait(data, _) => data.self_ty().is_param(index), + ty::PredicateKind::Trait(data) => data.self_ty().is_param(index), _ => false, }), ); @@ -1191,7 +1191,7 @@ fn super_predicates_that_define_assoc_type( // which will, in turn, reach indirect supertraits. for &(pred, span) in superbounds { debug!("superbound: {:?}", pred); - if let ty::PredicateKind::Trait(bound, _) = pred.kind().skip_binder() { + if let ty::PredicateKind::Trait(bound) = pred.kind().skip_binder() { tcx.at(span).super_predicates_of(bound.def_id()); } } @@ -2430,7 +2430,7 @@ fn explicit_predicates_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::GenericPredicat .iter() .copied() .filter(|(pred, _)| match pred.kind().skip_binder() { - ty::PredicateKind::Trait(tr, _) => !is_assoc_item_ty(tr.self_ty()), + ty::PredicateKind::Trait(tr) => !is_assoc_item_ty(tr.self_ty()), ty::PredicateKind::Projection(proj) => { !is_assoc_item_ty(proj.projection_ty.self_ty()) } diff --git a/compiler/rustc_typeck/src/collect/item_bounds.rs b/compiler/rustc_typeck/src/collect/item_bounds.rs index a5b36445aae2e..1d08c4450afcf 100644 --- a/compiler/rustc_typeck/src/collect/item_bounds.rs +++ b/compiler/rustc_typeck/src/collect/item_bounds.rs @@ -38,7 +38,7 @@ fn associated_type_bounds<'tcx>( let bounds_from_parent = trait_predicates.predicates.iter().copied().filter(|(pred, _)| { match pred.kind().skip_binder() { - ty::PredicateKind::Trait(tr, _) => tr.self_ty() == item_ty, + ty::PredicateKind::Trait(tr) => tr.self_ty() == item_ty, ty::PredicateKind::Projection(proj) => proj.projection_ty.self_ty() == item_ty, ty::PredicateKind::TypeOutlives(outlives) => outlives.0 == item_ty, _ => false, diff --git a/compiler/rustc_typeck/src/impl_wf_check/min_specialization.rs b/compiler/rustc_typeck/src/impl_wf_check/min_specialization.rs index 505d9a59d9c2f..d5d81603fc516 100644 --- a/compiler/rustc_typeck/src/impl_wf_check/min_specialization.rs +++ b/compiler/rustc_typeck/src/impl_wf_check/min_specialization.rs @@ -366,7 +366,10 @@ fn check_specialization_on<'tcx>(tcx: TyCtxt<'tcx>, predicate: ty::Predicate<'tc _ if predicate.is_global() => (), // We allow specializing on explicitly marked traits with no associated // items. - ty::PredicateKind::Trait(pred, hir::Constness::NotConst) => { + ty::PredicateKind::Trait(ty::TraitPredicate { + trait_ref, + constness: hir::Constness::NotConst, + }) => { if !matches!( trait_predicate_kind(tcx, predicate), Some(TraitSpecializationKind::Marker) @@ -376,7 +379,7 @@ fn check_specialization_on<'tcx>(tcx: TyCtxt<'tcx>, predicate: ty::Predicate<'tc span, &format!( "cannot specialize on trait `{}`", - tcx.def_path_str(pred.def_id()), + tcx.def_path_str(trait_ref.def_id), ), ) .emit() @@ -394,10 +397,11 @@ fn trait_predicate_kind<'tcx>( predicate: ty::Predicate<'tcx>, ) -> Option { match predicate.kind().skip_binder() { - ty::PredicateKind::Trait(pred, hir::Constness::NotConst) => { - Some(tcx.trait_def(pred.def_id()).specialization_kind) - } - ty::PredicateKind::Trait(_, hir::Constness::Const) + ty::PredicateKind::Trait(ty::TraitPredicate { + trait_ref, + constness: hir::Constness::NotConst, + }) => Some(tcx.trait_def(trait_ref.def_id).specialization_kind), + ty::PredicateKind::Trait(_) | ty::PredicateKind::RegionOutlives(_) | ty::PredicateKind::TypeOutlives(_) | ty::PredicateKind::Projection(_) diff --git a/src/librustdoc/clean/auto_trait.rs b/src/librustdoc/clean/auto_trait.rs index e479d162b8ffb..58a87673241f5 100644 --- a/src/librustdoc/clean/auto_trait.rs +++ b/src/librustdoc/clean/auto_trait.rs @@ -316,7 +316,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> { let bound_predicate = pred.kind(); let tcx = self.cx.tcx; let regions = match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(poly_trait_pred, _) => { + ty::PredicateKind::Trait(poly_trait_pred) => { tcx.collect_referenced_late_bound_regions(&bound_predicate.rebind(poly_trait_pred)) } ty::PredicateKind::Projection(poly_proj_pred) => { @@ -463,7 +463,7 @@ impl<'a, 'tcx> AutoTraitFinder<'a, 'tcx> { .filter(|p| { !orig_bounds.contains(p) || match p.kind().skip_binder() { - ty::PredicateKind::Trait(pred, _) => pred.def_id() == sized_trait, + ty::PredicateKind::Trait(pred) => pred.def_id() == sized_trait, _ => false, } }) diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 1a2852dc6c724..dc80c78910a04 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -323,7 +323,7 @@ impl<'a> Clean> for ty::Predicate<'a> { fn clean(&self, cx: &mut DocContext<'_>) -> Option { let bound_predicate = self.kind(); match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(pred, _) => Some(bound_predicate.rebind(pred).clean(cx)), + ty::PredicateKind::Trait(pred) => Some(bound_predicate.rebind(pred).clean(cx)), ty::PredicateKind::RegionOutlives(pred) => pred.clean(cx), ty::PredicateKind::TypeOutlives(pred) => pred.clean(cx), ty::PredicateKind::Projection(pred) => Some(pred.clean(cx)), @@ -629,7 +629,7 @@ impl<'a, 'tcx> Clean for (&'a ty::Generics, ty::GenericPredicates<'tcx let param_idx = (|| { let bound_p = p.kind(); match bound_p.skip_binder() { - ty::PredicateKind::Trait(pred, _constness) => { + ty::PredicateKind::Trait(pred) => { if let ty::Param(param) = pred.self_ty().kind() { return Some(param.index); } @@ -1548,9 +1548,7 @@ impl<'tcx> Clean for Ty<'tcx> { .filter_map(|bound| { let bound_predicate = bound.kind(); let trait_ref = match bound_predicate.skip_binder() { - ty::PredicateKind::Trait(tr, _constness) => { - bound_predicate.rebind(tr.trait_ref) - } + ty::PredicateKind::Trait(tr) => bound_predicate.rebind(tr.trait_ref), ty::PredicateKind::TypeOutlives(ty::OutlivesPredicate(_ty, reg)) => { if let Some(r) = reg.clean(cx) { regions.push(GenericBound::Outlives(r)); diff --git a/src/librustdoc/clean/simplify.rs b/src/librustdoc/clean/simplify.rs index 3ec0a22a2c09a..c0d52d349280f 100644 --- a/src/librustdoc/clean/simplify.rs +++ b/src/librustdoc/clean/simplify.rs @@ -139,7 +139,7 @@ fn trait_is_same_or_supertrait(cx: &DocContext<'_>, child: DefId, trait_: DefId) .predicates .iter() .filter_map(|(pred, _)| { - if let ty::PredicateKind::Trait(pred, _) = pred.kind().skip_binder() { + if let ty::PredicateKind::Trait(pred) = pred.kind().skip_binder() { if pred.trait_ref.self_ty() == self_ty { Some(pred.def_id()) } else { None } } else { None diff --git a/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs b/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs index 4a1bd5da98b8a..fe3ad24be2a94 100644 --- a/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs +++ b/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs @@ -1,5 +1,5 @@ // ignore-test - +// // FIXME: This test should fail since, within a const impl of `Foo`, the bound on `Foo::Bar` should // require a const impl of `Add` for the associated type. diff --git a/src/tools/clippy/clippy_lints/src/future_not_send.rs b/src/tools/clippy/clippy_lints/src/future_not_send.rs index 515b8887453b9..29bead8584e87 100644 --- a/src/tools/clippy/clippy_lints/src/future_not_send.rs +++ b/src/tools/clippy/clippy_lints/src/future_not_send.rs @@ -94,7 +94,7 @@ impl<'tcx> LateLintPass<'tcx> for FutureNotSend { cx.tcx.infer_ctxt().enter(|infcx| { for FulfillmentError { obligation, .. } in send_errors { infcx.maybe_note_obligation_cause_for_async_await(db, &obligation); - if let Trait(trait_pred, _) = obligation.predicate.kind().skip_binder() { + if let Trait(trait_pred) = obligation.predicate.kind().skip_binder() { db.note(&format!( "`{}` doesn't implement `{}`", trait_pred.self_ty(), diff --git a/src/tools/clippy/clippy_lints/src/needless_pass_by_value.rs b/src/tools/clippy/clippy_lints/src/needless_pass_by_value.rs index 57fd03f4e12a6..6e247fb99ea3d 100644 --- a/src/tools/clippy/clippy_lints/src/needless_pass_by_value.rs +++ b/src/tools/clippy/clippy_lints/src/needless_pass_by_value.rs @@ -120,7 +120,7 @@ impl<'tcx> LateLintPass<'tcx> for NeedlessPassByValue { .filter_map(|obligation| { // Note that we do not want to deal with qualified predicates here. match obligation.predicate.kind().no_bound_vars() { - Some(ty::PredicateKind::Trait(pred, _)) if pred.def_id() != sized_trait => Some(pred), + Some(ty::PredicateKind::Trait(pred)) if pred.def_id() != sized_trait => Some(pred), _ => None, } }) diff --git a/src/tools/clippy/clippy_lints/src/unit_return_expecting_ord.rs b/src/tools/clippy/clippy_lints/src/unit_return_expecting_ord.rs index 1c420a5042721..76b258ee62de9 100644 --- a/src/tools/clippy/clippy_lints/src/unit_return_expecting_ord.rs +++ b/src/tools/clippy/clippy_lints/src/unit_return_expecting_ord.rs @@ -43,7 +43,7 @@ fn get_trait_predicates_for_trait_id<'tcx>( let mut preds = Vec::new(); for (pred, _) in generics.predicates { if_chain! { - if let PredicateKind::Trait(poly_trait_pred, _) = pred.kind().skip_binder(); + if let PredicateKind::Trait(poly_trait_pred) = pred.kind().skip_binder(); let trait_pred = cx.tcx.erase_late_bound_regions(pred.kind().rebind(poly_trait_pred)); if let Some(trait_def_id) = trait_id; if trait_def_id == trait_pred.trait_ref.def_id; diff --git a/src/tools/clippy/clippy_utils/src/qualify_min_const_fn.rs b/src/tools/clippy/clippy_utils/src/qualify_min_const_fn.rs index 0e6ead675c247..dee9d487c78ea 100644 --- a/src/tools/clippy/clippy_utils/src/qualify_min_const_fn.rs +++ b/src/tools/clippy/clippy_utils/src/qualify_min_const_fn.rs @@ -36,7 +36,7 @@ pub fn is_min_const_fn(tcx: TyCtxt<'tcx>, body: &'a Body<'tcx>, msrv: Option<&Ru ty::PredicateKind::ObjectSafe(_) => panic!("object safe predicate on function: {:#?}", predicate), ty::PredicateKind::ClosureKind(..) => panic!("closure kind predicate on function: {:#?}", predicate), ty::PredicateKind::Subtype(_) => panic!("subtype predicate on function: {:#?}", predicate), - ty::PredicateKind::Trait(pred, _) => { + ty::PredicateKind::Trait(pred) => { if Some(pred.def_id()) == tcx.lang_items().sized_trait() { continue; } diff --git a/src/tools/clippy/clippy_utils/src/ty.rs b/src/tools/clippy/clippy_utils/src/ty.rs index 523d55219ab69..84229a3eefbe3 100644 --- a/src/tools/clippy/clippy_utils/src/ty.rs +++ b/src/tools/clippy/clippy_utils/src/ty.rs @@ -157,7 +157,7 @@ pub fn is_must_use_ty<'tcx>(cx: &LateContext<'tcx>, ty: Ty<'tcx>) -> bool { ty::Tuple(substs) => substs.types().any(|ty| is_must_use_ty(cx, ty)), ty::Opaque(ref def_id, _) => { for (predicate, _) in cx.tcx.explicit_item_bounds(*def_id) { - if let ty::PredicateKind::Trait(trait_predicate, _) = predicate.kind().skip_binder() { + if let ty::PredicateKind::Trait(trait_predicate) = predicate.kind().skip_binder() { if must_use_attr(cx.tcx.get_attrs(trait_predicate.trait_ref.def_id)).is_some() { return true; } From cae1898dd3c25cb32f1a629576d8dec183a1a1a7 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Fri, 23 Jul 2021 00:01:47 +0800 Subject: [PATCH 06/34] Filter non-const impls when we expect a const one --- .../src/traits/select/candidate_assembly.rs | 4 +-- .../src/traits/select/mod.rs | 25 ++++++++++++++++--- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/compiler/rustc_trait_selection/src/traits/select/candidate_assembly.rs b/compiler/rustc_trait_selection/src/traits/select/candidate_assembly.rs index 752f6a8debc9e..ddad2c430050e 100644 --- a/compiler/rustc_trait_selection/src/traits/select/candidate_assembly.rs +++ b/compiler/rustc_trait_selection/src/traits/select/candidate_assembly.rs @@ -144,7 +144,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { // Instead, we select the right impl now but report "`Bar` does // not implement `Clone`". if candidates.len() == 1 { - return self.filter_negative_and_reservation_impls(candidates.pop().unwrap()); + return self.filter_impls(candidates.pop().unwrap(), stack.obligation); } // Winnow, but record the exact outcome of evaluation, which @@ -217,7 +217,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { } // Just one candidate left. - self.filter_negative_and_reservation_impls(candidates.pop().unwrap().candidate) + self.filter_impls(candidates.pop().unwrap().candidate, stack.obligation) } pub(super) fn assemble_candidates<'o>( diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index 1aa4bc0a412ce..f334452a79126 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -1015,13 +1015,30 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { (result, dep_node) } - // Treat negative impls as unimplemented, and reservation impls as ambiguity. - fn filter_negative_and_reservation_impls( + fn filter_impls( &mut self, candidate: SelectionCandidate<'tcx>, + obligation: &TraitObligation<'tcx>, ) -> SelectionResult<'tcx, SelectionCandidate<'tcx>> { + let tcx = self.tcx(); + // Respect const trait obligations + if let hir::Constness::Const = obligation.predicate.skip_binder().constness { + match candidate { + // const impl + ImplCandidate(def_id) if tcx.impl_constness(def_id) == hir::Constness::Const => {} + // const param + ParamCandidate(ty::ConstnessAnd { constness: hir::Constness::Const, .. }) => {} + // auto trait impl + AutoImplCandidate(..) => {} + // FIXME check if this is right, but this would allow Sized impls + BuiltinCandidate { .. } => {} + _ => { // reject all other types of candidates + return Err(Unimplemented) + } + } + } + // Treat negative impls as unimplemented, and reservation impls as ambiguity. if let ImplCandidate(def_id) = candidate { - let tcx = self.tcx(); match tcx.impl_polarity(def_id) { ty::ImplPolarity::Negative if !self.allow_negative_impls => { return Err(Unimplemented); @@ -1035,7 +1052,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { let value = attr.and_then(|a| a.value_str()); if let Some(value) = value { debug!( - "filter_negative_and_reservation_impls: \ + "filter_impls: \ reservation impl ambiguity on {:?}", def_id ); From 3f5e5d64c9189eae5de6f820d5d00371bedf8227 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Fri, 23 Jul 2021 00:07:56 +0800 Subject: [PATCH 07/34] fmt --- compiler/rustc_trait_selection/src/traits/select/mod.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index f334452a79126..a158a37cd68cd 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -1032,8 +1032,9 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { AutoImplCandidate(..) => {} // FIXME check if this is right, but this would allow Sized impls BuiltinCandidate { .. } => {} - _ => { // reject all other types of candidates - return Err(Unimplemented) + _ => { + // reject all other types of candidates + return Err(Unimplemented); } } } From bfd44878c357233c4d6c86855709065d4666b465 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Sat, 24 Jul 2021 14:34:53 +0800 Subject: [PATCH 08/34] Inherited use constness and assoc change predicate --- compiler/rustc_middle/src/ty/assoc.rs | 9 ++++++ .../rustc_typeck/src/check/compare_method.rs | 26 ++++++++++++++-- compiler/rustc_typeck/src/check/inherited.rs | 30 +++++++++++++++++-- 3 files changed, 60 insertions(+), 5 deletions(-) diff --git a/compiler/rustc_middle/src/ty/assoc.rs b/compiler/rustc_middle/src/ty/assoc.rs index 2d177551664f6..994936351ff8c 100644 --- a/compiler/rustc_middle/src/ty/assoc.rs +++ b/compiler/rustc_middle/src/ty/assoc.rs @@ -16,6 +16,15 @@ pub enum AssocItemContainer { } impl AssocItemContainer { + /// Asserts that this is the `DefId` of an associated item declared + /// in an impl, and returns the trait `DefId`. + pub fn assert_impl(&self) -> DefId { + match *self { + ImplContainer(id) => id, + _ => bug!("associated item has wrong container type: {:?}", self), + } + } + /// Asserts that this is the `DefId` of an associated item declared /// in a trait, and returns the trait `DefId`. pub fn assert_trait(&self) -> DefId { diff --git a/compiler/rustc_typeck/src/check/compare_method.rs b/compiler/rustc_typeck/src/check/compare_method.rs index d35868881558e..01890f750263d 100644 --- a/compiler/rustc_typeck/src/check/compare_method.rs +++ b/compiler/rustc_typeck/src/check/compare_method.rs @@ -1292,7 +1292,24 @@ pub fn check_type_bounds<'tcx>( }; tcx.infer_ctxt().enter(move |infcx| { - let inh = Inherited::new(infcx, impl_ty.def_id.expect_local()); + // if the item is inside a const impl, we transform the predicates to be const. + let constness = tcx.impl_constness(impl_ty.container.assert_impl()); + let pred_map = match constness { + hir::Constness::NotConst => |p, _| p, + hir::Constness::Const => |p: ty::Predicate<'tcx>, tcx: TyCtxt<'tcx>| { + p.kind() + .map_bound(|kind| match kind { + ty::PredicateKind::Trait(mut tp) => { + tp.constness = hir::Constness::Const; + ty::PredicateKind::Trait(tp) + } + kind => kind, + }) + .to_predicate(tcx) + }, + }; + + let inh = Inherited::with_constness(infcx, impl_ty.def_id.expect_local(), constness); let infcx = &inh.infcx; let mut selcx = traits::SelectionContext::new(&infcx); @@ -1310,7 +1327,7 @@ pub fn check_type_bounds<'tcx>( .explicit_item_bounds(trait_ty.def_id) .iter() .map(|&(bound, span)| { - let concrete_ty_bound = bound.subst(tcx, rebased_substs); + let concrete_ty_bound = pred_map(bound.subst(tcx, rebased_substs), tcx); debug!("check_type_bounds: concrete_ty_bound = {:?}", concrete_ty_bound); traits::Obligation::new(mk_cause(span), param_env, concrete_ty_bound) @@ -1328,7 +1345,10 @@ pub fn check_type_bounds<'tcx>( debug!("compare_projection_bounds: normalized predicate = {:?}", normalized_predicate); obligation.predicate = normalized_predicate; - inh.register_predicates(obligations); + inh.register_predicates(obligations.into_iter().map(|mut o| { + o.predicate = pred_map(o.predicate, tcx); + o + })); inh.register_predicate(obligation); } diff --git a/compiler/rustc_typeck/src/check/inherited.rs b/compiler/rustc_typeck/src/check/inherited.rs index 7e43e36fe55c6..99e09b62b2643 100644 --- a/compiler/rustc_typeck/src/check/inherited.rs +++ b/compiler/rustc_typeck/src/check/inherited.rs @@ -9,7 +9,7 @@ use rustc_hir::HirIdMap; use rustc_infer::infer; use rustc_infer::infer::{InferCtxt, InferOk, TyCtxtInferExt}; use rustc_middle::ty::fold::TypeFoldable; -use rustc_middle::ty::{self, OpaqueTypeKey, Ty, TyCtxt}; +use rustc_middle::ty::{self, OpaqueTypeKey, ToPredicate, Ty, TyCtxt}; use rustc_span::{self, Span}; use rustc_trait_selection::infer::InferCtxtExt as _; use rustc_trait_selection::opaque_types::OpaqueTypeDecl; @@ -68,6 +68,9 @@ pub struct Inherited<'a, 'tcx> { /// opaque type. pub(super) opaque_types_vars: RefCell, Ty<'tcx>>>, + /// Reports whether this is in a const context. + pub(super) constness: hir::Constness, + pub(super) body_id: Option, } @@ -109,6 +112,12 @@ impl<'tcx> InheritedBuilder<'tcx> { impl Inherited<'a, 'tcx> { pub(super) fn new(infcx: InferCtxt<'a, 'tcx>, def_id: LocalDefId) -> Self { + let tcx = infcx.tcx; + let item_id = tcx.hir().local_def_id_to_hir_id(def_id); + Self::with_constness(infcx, def_id, tcx.hir().get(item_id).constness()) + } + + pub(super) fn with_constness(infcx: InferCtxt<'a, 'tcx>, def_id: LocalDefId, constness: hir::Constness) -> Self { let tcx = infcx.tcx; let item_id = tcx.hir().local_def_id_to_hir_id(def_id); let body_id = tcx.hir().maybe_body_owned_by(item_id); @@ -126,12 +135,29 @@ impl Inherited<'a, 'tcx> { deferred_generator_interiors: RefCell::new(Vec::new()), opaque_types: RefCell::new(Default::default()), opaque_types_vars: RefCell::new(Default::default()), + constness, body_id, } } - pub(super) fn register_predicate(&self, obligation: traits::PredicateObligation<'tcx>) { + #[instrument(level = "debug", skip(self))] + fn transform_predicate(&self, p: &mut ty::Predicate<'tcx>) { + // Don't transform non-const bounds into const bounds, + // but transform const bounds to non-const when we are + // not in a const context. + if let hir::Constness::NotConst = self.constness { + let kind = p.kind(); + if let ty::PredicateKind::Trait(pred) = kind.as_ref().skip_binder() { + let mut pred = *pred; + pred.constness = hir::Constness::NotConst; + *p = kind.rebind(ty::PredicateKind::Trait(pred)).to_predicate(self.tcx); + } + } + } + + pub(super) fn register_predicate(&self, mut obligation: traits::PredicateObligation<'tcx>) { debug!("register_predicate({:?})", obligation); + self.transform_predicate(&mut obligation.predicate); if obligation.has_escaping_bound_vars() { span_bug!(obligation.cause.span, "escaping bound vars in predicate {:?}", obligation); } From 4bdfb464fc0621b08f01d8f5e11ace2021e0221e Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Sat, 24 Jul 2021 15:48:51 +0800 Subject: [PATCH 09/34] fmt --- compiler/rustc_trait_selection/src/traits/select/mod.rs | 3 ++- compiler/rustc_typeck/src/check/inherited.rs | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index a158a37cd68cd..be5787cda03f7 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -1015,6 +1015,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { (result, dep_node) } + #[instrument(level = "debug", skip(self))] fn filter_impls( &mut self, candidate: SelectionCandidate<'tcx>, @@ -1031,7 +1032,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { // auto trait impl AutoImplCandidate(..) => {} // FIXME check if this is right, but this would allow Sized impls - BuiltinCandidate { .. } => {} + // BuiltinCandidate { .. } => {} _ => { // reject all other types of candidates return Err(Unimplemented); diff --git a/compiler/rustc_typeck/src/check/inherited.rs b/compiler/rustc_typeck/src/check/inherited.rs index 99e09b62b2643..cf4ac3011d8fb 100644 --- a/compiler/rustc_typeck/src/check/inherited.rs +++ b/compiler/rustc_typeck/src/check/inherited.rs @@ -117,7 +117,11 @@ impl Inherited<'a, 'tcx> { Self::with_constness(infcx, def_id, tcx.hir().get(item_id).constness()) } - pub(super) fn with_constness(infcx: InferCtxt<'a, 'tcx>, def_id: LocalDefId, constness: hir::Constness) -> Self { + pub(super) fn with_constness( + infcx: InferCtxt<'a, 'tcx>, + def_id: LocalDefId, + constness: hir::Constness, + ) -> Self { let tcx = infcx.tcx; let item_id = tcx.hir().local_def_id_to_hir_id(def_id); let body_id = tcx.hir().maybe_body_owned_by(item_id); From 71999467e1baf507d87aa83045b724bc9b2d6c35 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Sat, 24 Jul 2021 19:12:24 +0800 Subject: [PATCH 10/34] Make selection and evaluation caches use constness --- compiler/rustc_middle/src/traits/select.rs | 4 +- .../src/traits/select/mod.rs | 87 ++++++++++++------- 2 files changed, 59 insertions(+), 32 deletions(-) diff --git a/compiler/rustc_middle/src/traits/select.rs b/compiler/rustc_middle/src/traits/select.rs index ab085175762ab..924568a01a7de 100644 --- a/compiler/rustc_middle/src/traits/select.rs +++ b/compiler/rustc_middle/src/traits/select.rs @@ -12,12 +12,12 @@ use rustc_hir::def_id::DefId; use rustc_query_system::cache::Cache; pub type SelectionCache<'tcx> = Cache< - ty::ParamEnvAnd<'tcx, ty::TraitRef<'tcx>>, + ty::ConstnessAnd>>, SelectionResult<'tcx, SelectionCandidate<'tcx>>, >; pub type EvaluationCache<'tcx> = - Cache>, EvaluationResult>; + Cache>>, EvaluationResult>; /// The selection process begins by considering all impls, where /// clauses, and so forth that might resolve an obligation. Sometimes diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index be5787cda03f7..5321993f0ce8c 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -41,6 +41,7 @@ use rustc_middle::ty::fast_reject; use rustc_middle::ty::print::with_no_trimmed_paths; use rustc_middle::ty::relate::TypeRelation; use rustc_middle::ty::subst::{GenericArgKind, Subst, SubstsRef}; +use rustc_middle::ty::WithConstness; use rustc_middle::ty::{self, PolyProjectionPredicate, ToPolyTraitRef, ToPredicate}; use rustc_middle::ty::{Ty, TyCtxt, TypeFoldable}; use rustc_span::symbol::sym; @@ -141,7 +142,7 @@ struct TraitObligationStack<'prev, 'tcx> { /// The trait ref from `obligation` but "freshened" with the /// selection-context's freshener. Used to check for recursion. - fresh_trait_ref: ty::PolyTraitRef<'tcx>, + fresh_trait_ref: ty::ConstnessAnd>, /// Starts out equal to `depth` -- if, during evaluation, we /// encounter a cycle, then we will set this flag to the minimum @@ -804,7 +805,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { // terms of `Fn` etc, but we could probably make this more // precise still. let unbound_input_types = - stack.fresh_trait_ref.skip_binder().substs.types().any(|ty| ty.is_fresh()); + stack.fresh_trait_ref.value.skip_binder().substs.types().any(|ty| ty.is_fresh()); // This check was an imperfect workaround for a bug in the old // intercrate mode; it should be removed when that goes away. if unbound_input_types && self.intercrate { @@ -925,7 +926,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { fn check_evaluation_cache( &self, param_env: ty::ParamEnv<'tcx>, - trait_ref: ty::PolyTraitRef<'tcx>, + trait_ref: ty::ConstnessAnd>, ) -> Option { let tcx = self.tcx(); if self.can_use_global_caches(param_env) { @@ -939,7 +940,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { fn insert_evaluation_cache( &mut self, param_env: ty::ParamEnv<'tcx>, - trait_ref: ty::PolyTraitRef<'tcx>, + trait_ref: ty::ConstnessAnd>, dep_node: DepNodeIndex, result: EvaluationResult, ) { @@ -1024,18 +1025,26 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { let tcx = self.tcx(); // Respect const trait obligations if let hir::Constness::Const = obligation.predicate.skip_binder().constness { - match candidate { - // const impl - ImplCandidate(def_id) if tcx.impl_constness(def_id) == hir::Constness::Const => {} - // const param - ParamCandidate(ty::ConstnessAnd { constness: hir::Constness::Const, .. }) => {} - // auto trait impl - AutoImplCandidate(..) => {} - // FIXME check if this is right, but this would allow Sized impls - // BuiltinCandidate { .. } => {} - _ => { - // reject all other types of candidates - return Err(Unimplemented); + if Some(obligation.predicate.skip_binder().trait_ref.def_id) + != tcx.lang_items().sized_trait() + // const Sized bounds are skipped + { + match candidate { + // const impl + ImplCandidate(def_id) + if tcx.impl_constness(def_id) == hir::Constness::Const => {} + // const param + ParamCandidate(ty::ConstnessAnd { + constness: hir::Constness::Const, .. + }) => {} + // auto trait impl + AutoImplCandidate(..) => {} + // FIXME check if this is right, but this would allow Sized impls + // BuiltinCandidate { .. } => {} + _ => { + // reject all other types of candidates + return Err(Unimplemented); + } } } } @@ -1121,13 +1130,19 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { cache_fresh_trait_pred: ty::PolyTraitPredicate<'tcx>, ) -> Option>> { let tcx = self.tcx(); - let trait_ref = &cache_fresh_trait_pred.skip_binder().trait_ref; + let pred = &cache_fresh_trait_pred.skip_binder(); + let trait_ref = pred.trait_ref; if self.can_use_global_caches(param_env) { - if let Some(res) = tcx.selection_cache.get(¶m_env.and(*trait_ref), tcx) { + if let Some(res) = tcx + .selection_cache + .get(¶m_env.and(trait_ref).with_constness(pred.constness), tcx) + { return Some(res); } } - self.infcx.selection_cache.get(¶m_env.and(*trait_ref), tcx) + self.infcx + .selection_cache + .get(¶m_env.and(trait_ref).with_constness(pred.constness), tcx) } /// Determines whether can we safely cache the result @@ -1164,7 +1179,8 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { candidate: SelectionResult<'tcx, SelectionCandidate<'tcx>>, ) { let tcx = self.tcx(); - let trait_ref = cache_fresh_trait_pred.skip_binder().trait_ref; + let pred = cache_fresh_trait_pred.skip_binder(); + let trait_ref = pred.trait_ref; if !self.can_cache_candidate(&candidate) { debug!(?trait_ref, ?candidate, "insert_candidate_cache - candidate is not cacheable"); @@ -1178,14 +1194,22 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { if !candidate.needs_infer() { debug!(?trait_ref, ?candidate, "insert_candidate_cache global"); // This may overwrite the cache with the same value. - tcx.selection_cache.insert(param_env.and(trait_ref), dep_node, candidate); + tcx.selection_cache.insert( + param_env.and(trait_ref).with_constness(pred.constness), + dep_node, + candidate, + ); return; } } } debug!(?trait_ref, ?candidate, "insert_candidate_cache local"); - self.infcx.selection_cache.insert(param_env.and(trait_ref), dep_node, candidate); + self.infcx.selection_cache.insert( + param_env.and(trait_ref).with_constness(pred.constness), + dep_node, + candidate, + ); } /// Matches a predicate against the bounds of its self type. @@ -2015,8 +2039,8 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { fn match_fresh_trait_refs( &self, - previous: ty::PolyTraitRef<'tcx>, - current: ty::PolyTraitRef<'tcx>, + previous: ty::ConstnessAnd>, + current: ty::ConstnessAnd>, param_env: ty::ParamEnv<'tcx>, ) -> bool { let mut matcher = ty::_match::Match::new(self.tcx(), param_env); @@ -2028,8 +2052,11 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { previous_stack: TraitObligationStackList<'o, 'tcx>, obligation: &'o TraitObligation<'tcx>, ) -> TraitObligationStack<'o, 'tcx> { - let fresh_trait_ref = - obligation.predicate.to_poly_trait_ref().fold_with(&mut self.freshener); + let fresh_trait_ref = obligation + .predicate + .to_poly_trait_ref() + .fold_with(&mut self.freshener) + .with_constness(obligation.predicate.skip_binder().constness); let dfn = previous_stack.cache.next_dfn(); let depth = previous_stack.depth() + 1; @@ -2308,7 +2335,7 @@ struct ProvisionalEvaluationCache<'tcx> { /// - then we determine that `E` is in error -- we will then clear /// all cache values whose DFN is >= 4 -- in this case, that /// means the cached value for `F`. - map: RefCell, ProvisionalEvaluation>>, + map: RefCell>, ProvisionalEvaluation>>, } /// A cache value for the provisional cache: contains the depth-first @@ -2340,7 +2367,7 @@ impl<'tcx> ProvisionalEvaluationCache<'tcx> { /// `reached_depth` (from the returned value). fn get_provisional( &self, - fresh_trait_ref: ty::PolyTraitRef<'tcx>, + fresh_trait_ref: ty::ConstnessAnd>, ) -> Option { debug!( ?fresh_trait_ref, @@ -2358,7 +2385,7 @@ impl<'tcx> ProvisionalEvaluationCache<'tcx> { &self, from_dfn: usize, reached_depth: usize, - fresh_trait_ref: ty::PolyTraitRef<'tcx>, + fresh_trait_ref: ty::ConstnessAnd>, result: EvaluationResult, ) { debug!(?from_dfn, ?fresh_trait_ref, ?result, "insert_provisional"); @@ -2436,7 +2463,7 @@ impl<'tcx> ProvisionalEvaluationCache<'tcx> { fn on_completion( &self, dfn: usize, - mut op: impl FnMut(ty::PolyTraitRef<'tcx>, EvaluationResult), + mut op: impl FnMut(ty::ConstnessAnd>, EvaluationResult), ) { debug!(?dfn, "on_completion"); From fe2519b1dd1f940901e742c90851e7e1b9870246 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Sat, 24 Jul 2021 20:11:38 +0800 Subject: [PATCH 11/34] Relate impl --- compiler/rustc_middle/src/ty/relate.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/compiler/rustc_middle/src/ty/relate.rs b/compiler/rustc_middle/src/ty/relate.rs index 8efb88d404063..9c48f05617e09 100644 --- a/compiler/rustc_middle/src/ty/relate.rs +++ b/compiler/rustc_middle/src/ty/relate.rs @@ -214,6 +214,19 @@ impl<'tcx> Relate<'tcx> for ast::Constness { } } +impl<'tcx, T: Relate<'tcx>> Relate<'tcx> for ty::ConstnessAnd { + fn relate>( + relation: &mut R, + a: ty::ConstnessAnd, + b: ty::ConstnessAnd, + ) -> RelateResult<'tcx, ty::ConstnessAnd> { + Ok(ty::ConstnessAnd { + constness: relation.relate(a.constness, b.constness)?, + value: relation.relate(a.value, b.value)?, + }) + } +} + impl<'tcx> Relate<'tcx> for ast::Unsafety { fn relate>( relation: &mut R, From 3ef79975bfe3f379d3f51efc8e1cf1f68965e37b Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Sat, 24 Jul 2021 23:32:43 +0800 Subject: [PATCH 12/34] Try to fix problem --- .../rustc_mir/src/borrow_check/type_check/mod.rs | 5 +++-- compiler/rustc_traits/src/type_op.rs | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/compiler/rustc_mir/src/borrow_check/type_check/mod.rs b/compiler/rustc_mir/src/borrow_check/type_check/mod.rs index f912f60e0df0a..3d9d0b358a42e 100644 --- a/compiler/rustc_mir/src/borrow_check/type_check/mod.rs +++ b/compiler/rustc_mir/src/borrow_check/type_check/mod.rs @@ -1085,11 +1085,12 @@ impl<'a, 'tcx> TypeChecker<'a, 'tcx> { span_mirbug!( self, user_annotation, - "bad user type AscribeUserType({:?}, {:?} {:?}): {:?}", + "bad user type AscribeUserType({:?}, {:?} {:?}, type_of={:?}): {:?}", inferred_ty, def_id, user_substs, - terr + self.tcx().type_of(def_id), + terr, ); } } diff --git a/compiler/rustc_traits/src/type_op.rs b/compiler/rustc_traits/src/type_op.rs index 2c55ea7f5c14e..f4a0cc6767f09 100644 --- a/compiler/rustc_traits/src/type_op.rs +++ b/compiler/rustc_traits/src/type_op.rs @@ -6,7 +6,9 @@ use rustc_infer::infer::{InferCtxt, TyCtxtInferExt}; use rustc_infer::traits::TraitEngineExt as _; use rustc_middle::ty::query::Providers; use rustc_middle::ty::subst::{GenericArg, Subst, UserSelfTy, UserSubsts}; -use rustc_middle::ty::{self, FnSig, Lift, PolyFnSig, Ty, TyCtxt, TypeFoldable, Variance}; +use rustc_middle::ty::{ + self, FnSig, Lift, PolyFnSig, PredicateKind, Ty, TyCtxt, TypeFoldable, Variance, +}; use rustc_middle::ty::{ParamEnv, ParamEnvAnd, Predicate, ToPredicate}; use rustc_span::DUMMY_SP; use rustc_trait_selection::infer::InferCtxtBuilderExt; @@ -85,7 +87,16 @@ impl AscribeUserTypeCx<'me, 'tcx> { Ok(()) } - fn prove_predicate(&mut self, predicate: Predicate<'tcx>) { + fn prove_predicate(&mut self, mut predicate: Predicate<'tcx>) { + if let PredicateKind::Trait(mut tr) = predicate.kind().skip_binder() { + if let hir::Constness::Const = tr.constness { + // FIXME check if we actually want to prove const predicates inside AscribeUserType + tr.constness = hir::Constness::NotConst; + predicate = + predicate.kind().rebind(PredicateKind::Trait(tr)).to_predicate(self.tcx()); + } + } + self.fulfill_cx.register_predicate_obligation( self.infcx, Obligation::new(ObligationCause::dummy(), self.param_env, predicate), @@ -126,6 +137,7 @@ impl AscribeUserTypeCx<'me, 'tcx> { // outlives" error messages. let instantiated_predicates = self.tcx().predicates_of(def_id).instantiate(self.tcx(), substs); + debug!(?instantiated_predicates.predicates); for instantiated_predicate in instantiated_predicates.predicates { let instantiated_predicate = self.normalize(instantiated_predicate); self.prove_predicate(instantiated_predicate); From 25c3534225869de4dd06c5739f8432651a348aa3 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Mon, 26 Jul 2021 10:52:17 +0800 Subject: [PATCH 13/34] Pass constness to SelectionContext --- compiler/rustc_infer/src/traits/engine.rs | 18 +++++ .../src/traits/fulfill.rs | 26 ++++++++ .../src/traits/select/mod.rs | 65 +++++++++++++------ .../rustc_typeck/src/check/compare_method.rs | 4 +- .../rustc_typeck/src/check/fn_ctxt/_impl.rs | 11 +++- 5 files changed, 101 insertions(+), 23 deletions(-) diff --git a/compiler/rustc_infer/src/traits/engine.rs b/compiler/rustc_infer/src/traits/engine.rs index 2710debea9478..d60388b31c13c 100644 --- a/compiler/rustc_infer/src/traits/engine.rs +++ b/compiler/rustc_infer/src/traits/engine.rs @@ -1,5 +1,6 @@ use crate::infer::InferCtxt; use crate::traits::Obligation; +use rustc_hir as hir; use rustc_hir::def_id::DefId; use rustc_middle::ty::{self, ToPredicate, Ty, WithConstness}; @@ -49,11 +50,28 @@ pub trait TraitEngine<'tcx>: 'tcx { infcx: &InferCtxt<'_, 'tcx>, ) -> Result<(), Vec>>; + fn select_all_with_constness_or_error( + &mut self, + infcx: &InferCtxt<'_, 'tcx>, + _constness: hir::Constness, + ) -> Result<(), Vec>> { + self.select_all_or_error(infcx) + } + fn select_where_possible( &mut self, infcx: &InferCtxt<'_, 'tcx>, ) -> Result<(), Vec>>; + // FIXME this should not provide a default body for chalk as chalk should be updated + fn select_with_constness_where_possible( + &mut self, + infcx: &InferCtxt<'_, 'tcx>, + _constness: hir::Constness, + ) -> Result<(), Vec>> { + self.select_where_possible(infcx) + } + fn pending_obligations(&self) -> Vec>; } diff --git a/compiler/rustc_trait_selection/src/traits/fulfill.rs b/compiler/rustc_trait_selection/src/traits/fulfill.rs index cf50c34530ed2..4c5d8b5ec7978 100644 --- a/compiler/rustc_trait_selection/src/traits/fulfill.rs +++ b/compiler/rustc_trait_selection/src/traits/fulfill.rs @@ -3,6 +3,7 @@ use rustc_data_structures::obligation_forest::ProcessResult; use rustc_data_structures::obligation_forest::{Error, ForestObligation, Outcome}; use rustc_data_structures::obligation_forest::{ObligationForest, ObligationProcessor}; use rustc_errors::ErrorReported; +use rustc_hir as hir; use rustc_infer::traits::{SelectionError, TraitEngine, TraitEngineExt as _, TraitObligation}; use rustc_middle::mir::abstract_const::NotConstEvaluatable; use rustc_middle::mir::interpret::ErrorHandled; @@ -228,6 +229,22 @@ impl<'tcx> TraitEngine<'tcx> for FulfillmentContext<'tcx> { if errors.is_empty() { Ok(()) } else { Err(errors) } } + fn select_all_with_constness_or_error( + &mut self, + infcx: &InferCtxt<'_, 'tcx>, + constness: rustc_hir::Constness, + ) -> Result<(), Vec>> { + self.select_with_constness_where_possible(infcx, constness)?; + + let errors: Vec<_> = self + .predicates + .to_errors(CodeAmbiguity) + .into_iter() + .map(to_fulfillment_error) + .collect(); + if errors.is_empty() { Ok(()) } else { Err(errors) } + } + fn select_where_possible( &mut self, infcx: &InferCtxt<'_, 'tcx>, @@ -236,6 +253,15 @@ impl<'tcx> TraitEngine<'tcx> for FulfillmentContext<'tcx> { self.select(&mut selcx) } + fn select_with_constness_where_possible( + &mut self, + infcx: &InferCtxt<'_, 'tcx>, + constness: hir::Constness, + ) -> Result<(), Vec>> { + let mut selcx = SelectionContext::with_constness(infcx, constness); + self.select(&mut selcx) + } + fn pending_obligations(&self) -> Vec> { self.predicates.map_pending_obligations(|o| o.obligation.clone()) } diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index 5321993f0ce8c..f7c66f8b2849f 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -130,6 +130,9 @@ pub struct SelectionContext<'cx, 'tcx> { /// and a negative impl allow_negative_impls: bool, + /// Do we only want const impls when we have a const trait predicate? + const_impls_required: bool, + /// The mode that trait queries run in, which informs our error handling /// policy. In essence, canonicalized queries need their errors propagated /// rather than immediately reported because we do not have accurate spans. @@ -221,6 +224,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { intercrate: false, intercrate_ambiguity_causes: None, allow_negative_impls: false, + const_impls_required: false, query_mode: TraitQueryMode::Standard, } } @@ -232,6 +236,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { intercrate: true, intercrate_ambiguity_causes: None, allow_negative_impls: false, + const_impls_required: false, query_mode: TraitQueryMode::Standard, } } @@ -247,6 +252,7 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { intercrate: false, intercrate_ambiguity_causes: None, allow_negative_impls, + const_impls_required: false, query_mode: TraitQueryMode::Standard, } } @@ -262,10 +268,26 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { intercrate: false, intercrate_ambiguity_causes: None, allow_negative_impls: false, + const_impls_required: false, query_mode, } } + pub fn with_constness( + infcx: &'cx InferCtxt<'cx, 'tcx>, + constness: hir::Constness, + ) -> SelectionContext<'cx, 'tcx> { + SelectionContext { + infcx, + freshener: infcx.freshener_keep_static(), + intercrate: false, + intercrate_ambiguity_causes: None, + allow_negative_impls: false, + const_impls_required: matches!(constness, hir::Constness::Const), + query_mode: TraitQueryMode::Standard, + } + } + /// Enables tracking of intercrate ambiguity causes. These are /// used in coherence to give improved diagnostics. We don't do /// this until we detect a coherence error because it can lead to @@ -1024,26 +1046,29 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { ) -> SelectionResult<'tcx, SelectionCandidate<'tcx>> { let tcx = self.tcx(); // Respect const trait obligations - if let hir::Constness::Const = obligation.predicate.skip_binder().constness { - if Some(obligation.predicate.skip_binder().trait_ref.def_id) - != tcx.lang_items().sized_trait() - // const Sized bounds are skipped - { - match candidate { - // const impl - ImplCandidate(def_id) - if tcx.impl_constness(def_id) == hir::Constness::Const => {} - // const param - ParamCandidate(ty::ConstnessAnd { - constness: hir::Constness::Const, .. - }) => {} - // auto trait impl - AutoImplCandidate(..) => {} - // FIXME check if this is right, but this would allow Sized impls - // BuiltinCandidate { .. } => {} - _ => { - // reject all other types of candidates - return Err(Unimplemented); + if self.const_impls_required { + if let hir::Constness::Const = obligation.predicate.skip_binder().constness { + if Some(obligation.predicate.skip_binder().trait_ref.def_id) + != tcx.lang_items().sized_trait() + // const Sized bounds are skipped + { + match candidate { + // const impl + ImplCandidate(def_id) + if tcx.impl_constness(def_id) == hir::Constness::Const => {} + // const param + ParamCandidate(ty::ConstnessAnd { + constness: hir::Constness::Const, + .. + }) => {} + // auto trait impl + AutoImplCandidate(..) => {} + // FIXME check if this is right, but this would allow Sized impls + // BuiltinCandidate { .. } => {} + _ => { + // reject all other types of candidates + return Err(Unimplemented); + } } } } diff --git a/compiler/rustc_typeck/src/check/compare_method.rs b/compiler/rustc_typeck/src/check/compare_method.rs index 01890f750263d..0ce2746b128a8 100644 --- a/compiler/rustc_typeck/src/check/compare_method.rs +++ b/compiler/rustc_typeck/src/check/compare_method.rs @@ -1354,7 +1354,9 @@ pub fn check_type_bounds<'tcx>( // Check that all obligations are satisfied by the implementation's // version. - if let Err(ref errors) = inh.fulfillment_cx.borrow_mut().select_all_or_error(&infcx) { + if let Err(ref errors) = + inh.fulfillment_cx.borrow_mut().select_all_with_constness_or_error(&infcx, constness) + { infcx.report_fulfillment_errors(errors, None, false); return Err(ErrorReported); } diff --git a/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs b/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs index fe1ad04d866c2..b5b75183c4601 100644 --- a/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs +++ b/compiler/rustc_typeck/src/check/fn_ctxt/_impl.rs @@ -739,7 +739,11 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { pub(in super::super) fn select_all_obligations_or_error(&self) { debug!("select_all_obligations_or_error"); - if let Err(errors) = self.fulfillment_cx.borrow_mut().select_all_or_error(&self) { + if let Err(errors) = self + .fulfillment_cx + .borrow_mut() + .select_all_with_constness_or_error(&self, self.inh.constness) + { self.report_fulfillment_errors(&errors, self.inh.body_id, false); } } @@ -750,7 +754,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> { fallback_has_occurred: bool, mutate_fulfillment_errors: impl Fn(&mut Vec>), ) { - let result = self.fulfillment_cx.borrow_mut().select_where_possible(self); + let result = self + .fulfillment_cx + .borrow_mut() + .select_with_constness_where_possible(self, self.inh.constness); if let Err(mut errors) = result { mutate_fulfillment_errors(&mut errors); self.report_fulfillment_errors(&errors, self.inh.body_id, fallback_has_occurred); From 9ddb9585ec908a9ed1ff75f2ccfe0da4f7c2242c Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Mon, 26 Jul 2021 11:13:23 +0800 Subject: [PATCH 14/34] Fix assoc-type test --- .../src/traits/query/evaluate_obligation.rs | 9 +++++++++ .../ui/rfc-2632-const-trait-impl/assoc-type.rs | 7 ++----- .../assoc-type.stderr | 18 ++++++++++++++++++ 3 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 src/test/ui/rfc-2632-const-trait-impl/assoc-type.stderr diff --git a/compiler/rustc_trait_selection/src/traits/query/evaluate_obligation.rs b/compiler/rustc_trait_selection/src/traits/query/evaluate_obligation.rs index 2dc48e47efccd..8cc57f952ad4b 100644 --- a/compiler/rustc_trait_selection/src/traits/query/evaluate_obligation.rs +++ b/compiler/rustc_trait_selection/src/traits/query/evaluate_obligation.rs @@ -1,3 +1,6 @@ +use rustc_hir as hir; +use rustc_middle::ty::PredicateKind; + use crate::infer::canonical::OriginalQueryValues; use crate::infer::InferCtxt; use crate::traits::{ @@ -46,6 +49,12 @@ impl<'cx, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'cx, 'tcx> { &self, obligation: &PredicateObligation<'tcx>, ) -> bool { + if let PredicateKind::Trait(pred) = obligation.predicate.kind().skip_binder() { + if let hir::Constness::Const = pred.constness { + // do not evaluate to holds when we have a const predicate. + return false; + } + } self.evaluate_obligation_no_overflow(obligation).must_apply_considering_regions() } diff --git a/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs b/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs index fe3ad24be2a94..8d72adb6b61ed 100644 --- a/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs +++ b/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs @@ -1,8 +1,4 @@ -// ignore-test -// -// FIXME: This test should fail since, within a const impl of `Foo`, the bound on `Foo::Bar` should -// require a const impl of `Add` for the associated type. - +// FIXME(fee1-dead): this should have a better error message #![feature(const_trait_impl)] struct NonConstAdd(i32); @@ -21,6 +17,7 @@ trait Foo { impl const Foo for NonConstAdd { type Bar = NonConstAdd; + //~^ ERROR } fn main() {} diff --git a/src/test/ui/rfc-2632-const-trait-impl/assoc-type.stderr b/src/test/ui/rfc-2632-const-trait-impl/assoc-type.stderr new file mode 100644 index 0000000000000..1fdc963e7b2db --- /dev/null +++ b/src/test/ui/rfc-2632-const-trait-impl/assoc-type.stderr @@ -0,0 +1,18 @@ +error[E0277]: cannot add `NonConstAdd` to `NonConstAdd` + --> $DIR/assoc-type.rs:19:5 + | +LL | type Bar: std::ops::Add; + | ------------- required by this bound in `Foo::Bar` +... +LL | type Bar = NonConstAdd; + | ^^^^^^^^^^^^^^^^^^^^^^^ no implementation for `NonConstAdd + NonConstAdd` + | + = help: the trait `Add` is not implemented for `NonConstAdd` +help: consider introducing a `where` bound, but there might be an alternative better way to express this requirement + | +LL | impl const Foo for NonConstAdd where NonConstAdd: Add { + | ^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`. From 266efb5e22ce038359f26c3ab4111475870cadca Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Mon, 26 Jul 2021 11:34:43 +0800 Subject: [PATCH 15/34] handle the case when container is not impl --- compiler/rustc_middle/src/ty/assoc.rs | 8 +++----- compiler/rustc_typeck/src/check/compare_method.rs | 7 ++++++- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/compiler/rustc_middle/src/ty/assoc.rs b/compiler/rustc_middle/src/ty/assoc.rs index 994936351ff8c..5cb2b90fe1116 100644 --- a/compiler/rustc_middle/src/ty/assoc.rs +++ b/compiler/rustc_middle/src/ty/assoc.rs @@ -16,12 +16,10 @@ pub enum AssocItemContainer { } impl AssocItemContainer { - /// Asserts that this is the `DefId` of an associated item declared - /// in an impl, and returns the trait `DefId`. - pub fn assert_impl(&self) -> DefId { + pub fn impl_def_id(&self) -> Option { match *self { - ImplContainer(id) => id, - _ => bug!("associated item has wrong container type: {:?}", self), + ImplContainer(id) => Some(id), + _ => None, } } diff --git a/compiler/rustc_typeck/src/check/compare_method.rs b/compiler/rustc_typeck/src/check/compare_method.rs index 0ce2746b128a8..a2ffb30f43bd7 100644 --- a/compiler/rustc_typeck/src/check/compare_method.rs +++ b/compiler/rustc_typeck/src/check/compare_method.rs @@ -1293,7 +1293,12 @@ pub fn check_type_bounds<'tcx>( tcx.infer_ctxt().enter(move |infcx| { // if the item is inside a const impl, we transform the predicates to be const. - let constness = tcx.impl_constness(impl_ty.container.assert_impl()); + let constness = impl_ty + .container + .impl_def_id() + .map(|did| tcx.impl_constness(did)) + .unwrap_or(hir::Constness::NotConst); + let pred_map = match constness { hir::Constness::NotConst => |p, _| p, hir::Constness::Const => |p: ty::Predicate<'tcx>, tcx: TyCtxt<'tcx>| { From b1422daf915ee9c97c0c3dcbea0dbcc1bf6c72e7 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Mon, 26 Jul 2021 12:06:32 +0800 Subject: [PATCH 16/34] Don't transform predicates in Inherited --- compiler/rustc_typeck/src/check/inherited.rs | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) diff --git a/compiler/rustc_typeck/src/check/inherited.rs b/compiler/rustc_typeck/src/check/inherited.rs index cf4ac3011d8fb..d32b99c1197c6 100644 --- a/compiler/rustc_typeck/src/check/inherited.rs +++ b/compiler/rustc_typeck/src/check/inherited.rs @@ -9,7 +9,7 @@ use rustc_hir::HirIdMap; use rustc_infer::infer; use rustc_infer::infer::{InferCtxt, InferOk, TyCtxtInferExt}; use rustc_middle::ty::fold::TypeFoldable; -use rustc_middle::ty::{self, OpaqueTypeKey, ToPredicate, Ty, TyCtxt}; +use rustc_middle::ty::{self, OpaqueTypeKey, Ty, TyCtxt}; use rustc_span::{self, Span}; use rustc_trait_selection::infer::InferCtxtExt as _; use rustc_trait_selection::opaque_types::OpaqueTypeDecl; @@ -144,24 +144,8 @@ impl Inherited<'a, 'tcx> { } } - #[instrument(level = "debug", skip(self))] - fn transform_predicate(&self, p: &mut ty::Predicate<'tcx>) { - // Don't transform non-const bounds into const bounds, - // but transform const bounds to non-const when we are - // not in a const context. - if let hir::Constness::NotConst = self.constness { - let kind = p.kind(); - if let ty::PredicateKind::Trait(pred) = kind.as_ref().skip_binder() { - let mut pred = *pred; - pred.constness = hir::Constness::NotConst; - *p = kind.rebind(ty::PredicateKind::Trait(pred)).to_predicate(self.tcx); - } - } - } - - pub(super) fn register_predicate(&self, mut obligation: traits::PredicateObligation<'tcx>) { + pub(super) fn register_predicate(&self, obligation: traits::PredicateObligation<'tcx>) { debug!("register_predicate({:?})", obligation); - self.transform_predicate(&mut obligation.predicate); if obligation.has_escaping_bound_vars() { span_bug!(obligation.cause.span, "escaping bound vars in predicate {:?}", obligation); } From 6c5eae495d6dea10831940a326da0f9484bae65b Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Mon, 26 Jul 2021 12:06:55 +0800 Subject: [PATCH 17/34] Fix call-generic-method-nonconst test --- compiler/rustc_hir/src/hir.rs | 6 +++++- .../call-generic-method-nonconst.rs | 4 +--- .../call-generic-method-nonconst.stderr | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr diff --git a/compiler/rustc_hir/src/hir.rs b/compiler/rustc_hir/src/hir.rs index 0cdc5d88f53c3..1a6290b52e488 100644 --- a/compiler/rustc_hir/src/hir.rs +++ b/compiler/rustc_hir/src/hir.rs @@ -3216,7 +3216,7 @@ impl<'hir> Node<'hir> { } } - /// Returns `Constness::Const` when this node is a const fn/impl. + /// Returns `Constness::Const` when this node is a const fn/impl/item. pub fn constness(&self) -> Constness { match self { Node::Item(Item { @@ -3233,6 +3233,10 @@ impl<'hir> Node<'hir> { }) | Node::Item(Item { kind: ItemKind::Impl(Impl { constness, .. }), .. }) => *constness, + Node::Item(Item { kind: ItemKind::Const(..), .. }) + | Node::TraitItem(TraitItem { kind: TraitItemKind::Const(..), .. }) + | Node::ImplItem(ImplItem { kind: ImplItemKind::Const(..), .. }) => Constness::Const, + _ => Constness::NotConst, } } diff --git a/src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs b/src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs index 087f8fbdcd1ea..8343974f8c7e7 100644 --- a/src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs +++ b/src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.rs @@ -1,7 +1,5 @@ -// FIXME(jschievink): this is not rejected correctly (only when the non-const impl is actually used) -// ignore-test - #![feature(const_trait_impl)] +#![feature(const_fn_trait_bound)] struct S; diff --git a/src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr b/src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr new file mode 100644 index 0000000000000..75c7cab362147 --- /dev/null +++ b/src/test/ui/rfc-2632-const-trait-impl/call-generic-method-nonconst.stderr @@ -0,0 +1,14 @@ +error[E0277]: can't compare `S` with `S` + --> $DIR/call-generic-method-nonconst.rs:19:34 + | +LL | const fn equals_self(t: &T) -> bool { + | --------- required by this bound in `equals_self` +... +LL | pub const EQ: bool = equals_self(&S); + | ^^ no implementation for `S == S` + | + = help: the trait `PartialEq` is not implemented for `S` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`. From cdbe28ef6d4a103c596bcd9a286f079203a2e564 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Mon, 26 Jul 2021 12:29:18 +0800 Subject: [PATCH 18/34] Fix tests --- compiler/rustc_trait_selection/src/traits/select/mod.rs | 5 +++-- src/test/ui/consts/const-eval/issue-49296.rs | 4 +++- src/test/ui/consts/const-eval/issue-49296.stderr | 2 +- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index f7c66f8b2849f..4c7ee5382d013 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -1063,8 +1063,9 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { }) => {} // auto trait impl AutoImplCandidate(..) => {} - // FIXME check if this is right, but this would allow Sized impls - // BuiltinCandidate { .. } => {} + // generator, this will raise error in other places + // or ignore error with const_async_blocks feature + GeneratorCandidate => {} _ => { // reject all other types of candidates return Err(Unimplemented); diff --git a/src/test/ui/consts/const-eval/issue-49296.rs b/src/test/ui/consts/const-eval/issue-49296.rs index baa1848e9c31a..1b1ec5159f96a 100644 --- a/src/test/ui/consts/const-eval/issue-49296.rs +++ b/src/test/ui/consts/const-eval/issue-49296.rs @@ -2,8 +2,10 @@ #![feature(const_fn_union)] #![feature(const_fn_trait_bound)] +#![feature(const_trait_bound_opt_out)] +#![allow(incomplete_features)] -const unsafe fn transmute(t: T) -> U { +const unsafe fn transmute(t: T) -> U { #[repr(C)] union Transmute { from: T, diff --git a/src/test/ui/consts/const-eval/issue-49296.stderr b/src/test/ui/consts/const-eval/issue-49296.stderr index 4fd8e18909655..1823581e01181 100644 --- a/src/test/ui/consts/const-eval/issue-49296.stderr +++ b/src/test/ui/consts/const-eval/issue-49296.stderr @@ -1,5 +1,5 @@ error[E0080]: evaluation of constant value failed - --> $DIR/issue-49296.rs:19:16 + --> $DIR/issue-49296.rs:21:16 | LL | const X: u64 = *wat(42); | ^^^^^^^^ pointer to alloc2 was dereferenced after this allocation got freed From 5f19f120db5c226694cd3ea41a56dee9e0f00ffa Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Mon, 26 Jul 2021 14:04:55 +0800 Subject: [PATCH 19/34] Moved ui test --- .../alloc/src/collections/btree/map/tests.rs | 7 --- .../alloc/src/collections/btree/set/tests.rs | 7 --- library/alloc/tests/const_fns.rs | 53 +++++++++++++++++++ library/alloc/tests/lib.rs | 3 ++ src/test/ui/collections-const-new.rs | 20 ------- 5 files changed, 56 insertions(+), 34 deletions(-) create mode 100644 library/alloc/tests/const_fns.rs delete mode 100644 src/test/ui/collections-const-new.rs diff --git a/library/alloc/src/collections/btree/map/tests.rs b/library/alloc/src/collections/btree/map/tests.rs index 1e61692b7c63c..17e538483431c 100644 --- a/library/alloc/src/collections/btree/map/tests.rs +++ b/library/alloc/src/collections/btree/map/tests.rs @@ -1786,13 +1786,6 @@ fn test_ord_absence() { } } -#[allow(dead_code)] -fn test_const() { - const MAP: &'static BTreeMap<(), ()> = &BTreeMap::new(); - const LEN: usize = MAP.len(); - const IS_EMPTY: bool = MAP.is_empty(); -} - #[test] fn test_occupied_entry_key() { let mut a = BTreeMap::new(); diff --git a/library/alloc/src/collections/btree/set/tests.rs b/library/alloc/src/collections/btree/set/tests.rs index de7a10dca7b8c..5d590a26281d2 100644 --- a/library/alloc/src/collections/btree/set/tests.rs +++ b/library/alloc/src/collections/btree/set/tests.rs @@ -16,13 +16,6 @@ fn test_clone_eq() { assert_eq!(m.clone(), m); } -#[allow(dead_code)] -fn test_const() { - const SET: &'static BTreeSet<()> = &BTreeSet::new(); - const LEN: usize = SET.len(); - const IS_EMPTY: bool = SET.is_empty(); -} - #[test] fn test_iter_min_max() { let mut a = BTreeSet::new(); diff --git a/library/alloc/tests/const_fns.rs b/library/alloc/tests/const_fns.rs new file mode 100644 index 0000000000000..02e8f8f40228f --- /dev/null +++ b/library/alloc/tests/const_fns.rs @@ -0,0 +1,53 @@ +// Test several functions can be used for constants +// 1. Vec::new() +// 2. String::new() +// 3. BTreeMap::new() +// 4. BTreeSet::new() + +#[allow(dead_code)] +pub const MY_VEC: Vec = Vec::new(); + +#[allow(dead_code)] +pub const MY_STRING: String = String::new(); + +// FIXME remove this struct once we put `K: ?const Ord` on BTreeMap::new. +#[derive(PartialEq, Eq, PartialOrd)] +pub struct MyType; + +impl const Ord for MyType { + fn cmp(&self, _: &Self) -> Ordering { + Ordering::Equal + } + + fn max(self, _: Self) -> Self { + Self + } + + fn min(self, _: Self) -> Self { + Self + } + + fn clamp(self, _: Self, _: Self) -> Self { + Self + } +} + +use core::cmp::Ordering; +use std::collections::{BTreeMap, BTreeSet}; + +pub const MY_BTREEMAP: BTreeMap = BTreeMap::new(); +pub const MAP: &'static BTreeMap = &MY_BTREEMAP; +pub const MAP_LEN: usize = MAP.len(); +pub const MAP_IS_EMPTY: bool = MAP.is_empty(); + +pub const MY_BTREESET: BTreeSet = BTreeSet::new(); +pub const SET: &'static BTreeSet = &MY_BTREESET; +pub const SET_LEN: usize = SET.len(); +pub const SET_IS_EMPTY: bool = SET.is_empty(); + +#[test] +fn test_const() { + assert_eq!(MAP_LEN, 0); + assert_eq!(SET_LEN, 0); + assert!(MAP_IS_EMPTY && SET_IS_EMPTY) +} diff --git a/library/alloc/tests/lib.rs b/library/alloc/tests/lib.rs index 3143afa269dde..48884fa3df068 100644 --- a/library/alloc/tests/lib.rs +++ b/library/alloc/tests/lib.rs @@ -21,6 +21,8 @@ #![feature(slice_partition_dedup)] #![feature(vec_spare_capacity)] #![feature(string_remove_matches)] +#![feature(const_btree_new)] +#![feature(const_trait_impl)] use std::collections::hash_map::DefaultHasher; use std::hash::{Hash, Hasher}; @@ -30,6 +32,7 @@ mod binary_heap; mod borrow; mod boxed; mod btree_set_hash; +mod const_fns; mod cow_str; mod fmt; mod heap; diff --git a/src/test/ui/collections-const-new.rs b/src/test/ui/collections-const-new.rs deleted file mode 100644 index 978f25f9a9344..0000000000000 --- a/src/test/ui/collections-const-new.rs +++ /dev/null @@ -1,20 +0,0 @@ -// check-pass - -// Test several functions can be used for constants -// 1. Vec::new() -// 2. String::new() -// 3. BTreeMap::new() -// 4. BTreeSet::new() - -#![feature(const_btree_new)] - -const MY_VEC: Vec = Vec::new(); - -const MY_STRING: String = String::new(); - -use std::collections::{BTreeMap, BTreeSet}; -const MY_BTREEMAP: BTreeMap = BTreeMap::new(); - -const MY_BTREESET: BTreeSet = BTreeSet::new(); - -fn main() {} From 6b1c8d5b6faced43d193880eaade79a8fb6875d1 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Mon, 26 Jul 2021 16:53:36 +0800 Subject: [PATCH 20/34] allow incomplete features for now --- library/alloc/tests/lib.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/alloc/tests/lib.rs b/library/alloc/tests/lib.rs index 48884fa3df068..f2f5b595d02bf 100644 --- a/library/alloc/tests/lib.rs +++ b/library/alloc/tests/lib.rs @@ -23,6 +23,8 @@ #![feature(string_remove_matches)] #![feature(const_btree_new)] #![feature(const_trait_impl)] +// FIXME remove this when const_trait_impl is not incomplete anymore +#![allow(incomplete_features)] use std::collections::hash_map::DefaultHasher; use std::hash::{Hash, Hasher}; From 2b790944a010498dd25a3bb327f2560927442c69 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 25 Jul 2021 21:18:02 +0200 Subject: [PATCH 21/34] Add support for tuple struct fields documentation in enums as well --- src/librustdoc/clean/mod.rs | 4 +--- src/librustdoc/html/render/print_item.rs | 10 +++++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 1a2852dc6c724..a5ad8dfeb6b96 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -1730,9 +1730,7 @@ impl Clean for hir::VariantData<'_> { fn clean(&self, cx: &mut DocContext<'_>) -> Variant { match self { hir::VariantData::Struct(..) => Variant::Struct(self.clean(cx)), - hir::VariantData::Tuple(..) => { - Variant::Tuple(self.fields().iter().map(|x| x.ty.clean(cx)).collect()) - } + hir::VariantData::Tuple(..) => Variant::Struct(self.clean(cx)), hir::VariantData::Unit(..) => Variant::CLike, } } diff --git a/src/librustdoc/html/render/print_item.rs b/src/librustdoc/html/render/print_item.rs index 8f7e84428956a..ea1cc8eb2ad52 100644 --- a/src/librustdoc/html/render/print_item.rs +++ b/src/librustdoc/html/render/print_item.rs @@ -1037,8 +1037,9 @@ fn item_enum(w: &mut Buffer, cx: &Context<'_>, it: &clean::Item, e: &clean::Enum write!(w, "
", id = variant_id); write!( w, - "

Fields of {name}

", - name = variant.name.as_ref().unwrap() + "

{extra}Fields of {name}

", + extra = if s.struct_type == CtorKind::Fn { "Tuple " } else { "" }, + name = variant.name.as_ref().unwrap(), ); for field in &s.fields { use crate::clean::StructFieldItem; @@ -1509,7 +1510,10 @@ fn render_struct( if let Some(g) = g { write!(w, "{}", print_where_clause(g, cx, 0, false),) } - w.write_str(";"); + // We only want a ";" when we are displaying a tuple struct, not a variant tuple struct. + if structhead { + w.write_str(";"); + } } CtorKind::Const => { // Needed for PhantomData. From fbf78e1f9cc80ba5a68078c3cf2cb4d03aa7b00c Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sun, 25 Jul 2021 21:18:11 +0200 Subject: [PATCH 22/34] Add test for enum item tuple fields documentation --- src/test/rustdoc-ui/coverage/enums.stdout | 4 ++-- src/test/rustdoc/toggle-item-contents.rs | 4 ++-- src/test/rustdoc/tuple-struct-fields-doc.rs | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/test/rustdoc-ui/coverage/enums.stdout b/src/test/rustdoc-ui/coverage/enums.stdout index 64c012c1f66e3..414d60c86d308 100644 --- a/src/test/rustdoc-ui/coverage/enums.stdout +++ b/src/test/rustdoc-ui/coverage/enums.stdout @@ -1,7 +1,7 @@ +-------------------------------------+------------+------------+------------+------------+ | File | Documented | Percentage | Examples | Percentage | +-------------------------------------+------------+------------+------------+------------+ -| ...est/rustdoc-ui/coverage/enums.rs | 6 | 75.0% | 0 | 0.0% | +| ...est/rustdoc-ui/coverage/enums.rs | 6 | 66.7% | 0 | 0.0% | +-------------------------------------+------------+------------+------------+------------+ -| Total | 6 | 75.0% | 0 | 0.0% | +| Total | 6 | 66.7% | 0 | 0.0% | +-------------------------------------+------------+------------+------------+------------+ diff --git a/src/test/rustdoc/toggle-item-contents.rs b/src/test/rustdoc/toggle-item-contents.rs index 8d2046591d08a..ae871e79d7f6b 100644 --- a/src/test/rustdoc/toggle-item-contents.rs +++ b/src/test/rustdoc/toggle-item-contents.rs @@ -81,8 +81,8 @@ pub enum EnumStructVariant { } // @has 'toggle_item_contents/enum.LargeEnum.html' -// @count - '//details[@class="rustdoc-toggle type-contents-toggle"]' 1 -// @has - '//details[@class="rustdoc-toggle type-contents-toggle"]' 'Show 13 variants' +// @count - '//*[@class="rust enum"]//details[@class="rustdoc-toggle type-contents-toggle"]' 1 +// @has - '//*[@class="rust enum"]//details[@class="rustdoc-toggle type-contents-toggle"]' 'Show 13 variants' pub enum LargeEnum { A, B, C, D, E, F(u8), G, H, I, J, K, L, M } diff --git a/src/test/rustdoc/tuple-struct-fields-doc.rs b/src/test/rustdoc/tuple-struct-fields-doc.rs index ab3d4903b2b6e..f3d8e39ea2d26 100644 --- a/src/test/rustdoc/tuple-struct-fields-doc.rs +++ b/src/test/rustdoc/tuple-struct-fields-doc.rs @@ -17,3 +17,20 @@ pub struct Foo( /// not hello pub i8, ); + +// @has foo/enum.Bar.html +// @has - '//pre[@class="rust enum"]' 'BarVariant(String),' +// @matches - '//*[@id="variant.BarVariant.fields"]/h3' '^Tuple Fields of BarVariant$' +// @has - '//*[@id="variant.BarVariant.field.0"]' '0: String' +// @has - '//*[@id="variant.BarVariant.fields"]//*[@class="docblock"]' 'Hello docs' +// @matches - '//*[@id="variant.FooVariant.fields"]/h3' '^Fields of FooVariant$' +pub enum Bar { + BarVariant( + /// Hello docs + String + ), + FooVariant { + /// hello + x: u32, + }, +} From 829bf1d40b9b8efa3416f1f69bc0e4704b158293 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Mon, 26 Jul 2021 17:25:01 +0800 Subject: [PATCH 23/34] Make assoc types work with `?const `opt=out --- compiler/rustc_hir/src/hir.rs | 10 ++++++-- .../rustc_typeck/src/check/compare_method.rs | 23 ++----------------- .../rustc_typeck/src/check/fn_ctxt/mod.rs | 2 +- compiler/rustc_typeck/src/check/inherited.rs | 2 +- compiler/rustc_typeck/src/collect.rs | 2 +- .../rfc-2632-const-trait-impl/assoc-type.rs | 10 ++++++++ .../assoc-type.stderr | 2 +- 7 files changed, 24 insertions(+), 27 deletions(-) diff --git a/compiler/rustc_hir/src/hir.rs b/compiler/rustc_hir/src/hir.rs index 1a6290b52e488..438c77a07ecb7 100644 --- a/compiler/rustc_hir/src/hir.rs +++ b/compiler/rustc_hir/src/hir.rs @@ -3216,8 +3216,13 @@ impl<'hir> Node<'hir> { } } - /// Returns `Constness::Const` when this node is a const fn/impl/item. - pub fn constness(&self) -> Constness { + /// Returns `Constness::Const` when this node is a const fn/impl/item, + /// + /// HACK(fee1-dead): or an associated type in a trait. This works because + /// only typeck cares about const trait predicates, so although the predicates + /// query would return const predicates when it does not need to be const, + /// it wouldn't have any effect. + pub fn constness_for_typeck(&self) -> Constness { match self { Node::Item(Item { kind: ItemKind::Fn(FnSig { header: FnHeader { constness, .. }, .. }, ..), @@ -3235,6 +3240,7 @@ impl<'hir> Node<'hir> { Node::Item(Item { kind: ItemKind::Const(..), .. }) | Node::TraitItem(TraitItem { kind: TraitItemKind::Const(..), .. }) + | Node::TraitItem(TraitItem { kind: TraitItemKind::Type(..), .. }) | Node::ImplItem(ImplItem { kind: ImplItemKind::Const(..), .. }) => Constness::Const, _ => Constness::NotConst, diff --git a/compiler/rustc_typeck/src/check/compare_method.rs b/compiler/rustc_typeck/src/check/compare_method.rs index a2ffb30f43bd7..316a097556aec 100644 --- a/compiler/rustc_typeck/src/check/compare_method.rs +++ b/compiler/rustc_typeck/src/check/compare_method.rs @@ -1292,28 +1292,12 @@ pub fn check_type_bounds<'tcx>( }; tcx.infer_ctxt().enter(move |infcx| { - // if the item is inside a const impl, we transform the predicates to be const. let constness = impl_ty .container .impl_def_id() .map(|did| tcx.impl_constness(did)) .unwrap_or(hir::Constness::NotConst); - let pred_map = match constness { - hir::Constness::NotConst => |p, _| p, - hir::Constness::Const => |p: ty::Predicate<'tcx>, tcx: TyCtxt<'tcx>| { - p.kind() - .map_bound(|kind| match kind { - ty::PredicateKind::Trait(mut tp) => { - tp.constness = hir::Constness::Const; - ty::PredicateKind::Trait(tp) - } - kind => kind, - }) - .to_predicate(tcx) - }, - }; - let inh = Inherited::with_constness(infcx, impl_ty.def_id.expect_local(), constness); let infcx = &inh.infcx; let mut selcx = traits::SelectionContext::new(&infcx); @@ -1332,7 +1316,7 @@ pub fn check_type_bounds<'tcx>( .explicit_item_bounds(trait_ty.def_id) .iter() .map(|&(bound, span)| { - let concrete_ty_bound = pred_map(bound.subst(tcx, rebased_substs), tcx); + let concrete_ty_bound = bound.subst(tcx, rebased_substs); debug!("check_type_bounds: concrete_ty_bound = {:?}", concrete_ty_bound); traits::Obligation::new(mk_cause(span), param_env, concrete_ty_bound) @@ -1350,10 +1334,7 @@ pub fn check_type_bounds<'tcx>( debug!("compare_projection_bounds: normalized predicate = {:?}", normalized_predicate); obligation.predicate = normalized_predicate; - inh.register_predicates(obligations.into_iter().map(|mut o| { - o.predicate = pred_map(o.predicate, tcx); - o - })); + inh.register_predicates(obligations); inh.register_predicate(obligation); } diff --git a/compiler/rustc_typeck/src/check/fn_ctxt/mod.rs b/compiler/rustc_typeck/src/check/fn_ctxt/mod.rs index 75705e92e54bc..c0ecee155c6dd 100644 --- a/compiler/rustc_typeck/src/check/fn_ctxt/mod.rs +++ b/compiler/rustc_typeck/src/check/fn_ctxt/mod.rs @@ -174,7 +174,7 @@ impl<'a, 'tcx> AstConv<'tcx> for FnCtxt<'a, 'tcx> { } fn default_constness_for_trait_bounds(&self) -> hir::Constness { - self.tcx.hir().get(self.body_id).constness() + self.tcx.hir().get(self.body_id).constness_for_typeck() } fn get_type_parameter_bounds( diff --git a/compiler/rustc_typeck/src/check/inherited.rs b/compiler/rustc_typeck/src/check/inherited.rs index d32b99c1197c6..9c05b42f1b0cb 100644 --- a/compiler/rustc_typeck/src/check/inherited.rs +++ b/compiler/rustc_typeck/src/check/inherited.rs @@ -114,7 +114,7 @@ impl Inherited<'a, 'tcx> { pub(super) fn new(infcx: InferCtxt<'a, 'tcx>, def_id: LocalDefId) -> Self { let tcx = infcx.tcx; let item_id = tcx.hir().local_def_id_to_hir_id(def_id); - Self::with_constness(infcx, def_id, tcx.hir().get(item_id).constness()) + Self::with_constness(infcx, def_id, tcx.hir().get(item_id).constness_for_typeck()) } pub(super) fn with_constness( diff --git a/compiler/rustc_typeck/src/collect.rs b/compiler/rustc_typeck/src/collect.rs index 70eaf08f5777a..5a4409a8b776a 100644 --- a/compiler/rustc_typeck/src/collect.rs +++ b/compiler/rustc_typeck/src/collect.rs @@ -357,7 +357,7 @@ impl AstConv<'tcx> for ItemCtxt<'tcx> { } fn default_constness_for_trait_bounds(&self) -> hir::Constness { - self.node().constness() + self.node().constness_for_typeck() } fn get_type_parameter_bounds( diff --git a/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs b/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs index 8d72adb6b61ed..1dbd000afd73e 100644 --- a/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs +++ b/src/test/ui/rfc-2632-const-trait-impl/assoc-type.rs @@ -1,5 +1,7 @@ // FIXME(fee1-dead): this should have a better error message #![feature(const_trait_impl)] +#![feature(const_trait_bound_opt_out)] +#![allow(incomplete_features)] struct NonConstAdd(i32); @@ -20,4 +22,12 @@ impl const Foo for NonConstAdd { //~^ ERROR } +trait Baz { + type Qux: ?const std::ops::Add; +} + +impl const Baz for NonConstAdd { + type Qux = NonConstAdd; // OK +} + fn main() {} diff --git a/src/test/ui/rfc-2632-const-trait-impl/assoc-type.stderr b/src/test/ui/rfc-2632-const-trait-impl/assoc-type.stderr index 1fdc963e7b2db..0cbeb71d23538 100644 --- a/src/test/ui/rfc-2632-const-trait-impl/assoc-type.stderr +++ b/src/test/ui/rfc-2632-const-trait-impl/assoc-type.stderr @@ -1,5 +1,5 @@ error[E0277]: cannot add `NonConstAdd` to `NonConstAdd` - --> $DIR/assoc-type.rs:19:5 + --> $DIR/assoc-type.rs:21:5 | LL | type Bar: std::ops::Add; | ------------- required by this bound in `Foo::Bar` From 682139761a87070c87b0a10b7d3719736b769e57 Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Mon, 26 Jul 2021 18:02:18 +0800 Subject: [PATCH 24/34] Bless test --- .../projection-bound-cycle-generic.stderr | 4 ++-- .../ui/generic-associated-types/projection-bound-cycle.stderr | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/ui/generic-associated-types/projection-bound-cycle-generic.stderr b/src/test/ui/generic-associated-types/projection-bound-cycle-generic.stderr index d5e9caf9ecd4e..1900ac040039b 100644 --- a/src/test/ui/generic-associated-types/projection-bound-cycle-generic.stderr +++ b/src/test/ui/generic-associated-types/projection-bound-cycle-generic.stderr @@ -1,8 +1,8 @@ error[E0275]: overflow evaluating the requirement `::Item: Sized` --> $DIR/projection-bound-cycle-generic.rs:44:5 | -LL | struct OnlySized where T: Sized { f: T } - | - required by this bound in `OnlySized` +LL | type Item: Sized where ::Item: Sized; + | ----- required by this bound in `Foo::Item` ... LL | type Assoc = OnlySized<::Item>; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/generic-associated-types/projection-bound-cycle.stderr b/src/test/ui/generic-associated-types/projection-bound-cycle.stderr index fac62fef1ecff..7d560cb32135c 100644 --- a/src/test/ui/generic-associated-types/projection-bound-cycle.stderr +++ b/src/test/ui/generic-associated-types/projection-bound-cycle.stderr @@ -1,8 +1,8 @@ error[E0275]: overflow evaluating the requirement `::Item: Sized` --> $DIR/projection-bound-cycle.rs:46:5 | -LL | struct OnlySized where T: Sized { f: T } - | - required by this bound in `OnlySized` +LL | type Item: Sized where ::Item: Sized; + | ----- required by this bound in `Foo::Item` ... LL | type Assoc = OnlySized<::Item>; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From 624df182ea20fa64509b21998a8a758b7bd3dd58 Mon Sep 17 00:00:00 2001 From: Kornel Date: Mon, 26 Jul 2021 18:39:59 +0100 Subject: [PATCH 25/34] Track caller of Vec::remove() --- library/alloc/src/vec/mod.rs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/library/alloc/src/vec/mod.rs b/library/alloc/src/vec/mod.rs index 2b380c444b8ab..58dd0b7ebcc44 100644 --- a/library/alloc/src/vec/mod.rs +++ b/library/alloc/src/vec/mod.rs @@ -1372,9 +1372,11 @@ impl Vec { /// assert_eq!(v, [1, 3]); /// ``` #[stable(feature = "rust1", since = "1.0.0")] + #[track_caller] pub fn remove(&mut self, index: usize) -> T { #[cold] #[inline(never)] + #[track_caller] fn assert_failed(index: usize, len: usize) -> ! { panic!("removal index (is {}) should be < len (is {})", index, len); } From b5e781afb2fe30055a8a34fa5bb2f19f33985e6d Mon Sep 17 00:00:00 2001 From: Deadbeef Date: Tue, 27 Jul 2021 09:51:57 +0800 Subject: [PATCH 26/34] make check less conservative and add explanation --- .../rustc_trait_selection/src/traits/fulfill.rs | 14 ++++++++++++-- .../src/traits/query/evaluate_obligation.rs | 9 --------- .../rustc_trait_selection/src/traits/select/mod.rs | 12 ++++++++++++ 3 files changed, 24 insertions(+), 11 deletions(-) diff --git a/compiler/rustc_trait_selection/src/traits/fulfill.rs b/compiler/rustc_trait_selection/src/traits/fulfill.rs index 4c5d8b5ec7978..7048f0dbedcb6 100644 --- a/compiler/rustc_trait_selection/src/traits/fulfill.rs +++ b/compiler/rustc_trait_selection/src/traits/fulfill.rs @@ -649,7 +649,12 @@ impl<'a, 'b, 'tcx> FulfillProcessor<'a, 'b, 'tcx> { if obligation.predicate.is_global() { // no type variables present, can use evaluation for better caching. // FIXME: consider caching errors too. - if infcx.predicate_must_hold_considering_regions(obligation) { + // + // If the predicate is considered const, then we cannot use this because + // it will cause false negatives in the ui tests. + if !self.selcx.is_predicate_const(obligation.predicate) + && infcx.predicate_must_hold_considering_regions(obligation) + { debug!( "selecting trait at depth {} evaluated to holds", obligation.recursion_depth @@ -703,7 +708,12 @@ impl<'a, 'b, 'tcx> FulfillProcessor<'a, 'b, 'tcx> { if obligation.predicate.is_global() { // no type variables present, can use evaluation for better caching. // FIXME: consider caching errors too. - if self.selcx.infcx().predicate_must_hold_considering_regions(obligation) { + // + // If the predicate is considered const, then we cannot use this because + // it will cause false negatives in the ui tests. + if !self.selcx.is_predicate_const(obligation.predicate) + && self.selcx.infcx().predicate_must_hold_considering_regions(obligation) + { return ProcessResult::Changed(vec![]); } else { tracing::debug!("Does NOT hold: {:?}", obligation); diff --git a/compiler/rustc_trait_selection/src/traits/query/evaluate_obligation.rs b/compiler/rustc_trait_selection/src/traits/query/evaluate_obligation.rs index 8cc57f952ad4b..2dc48e47efccd 100644 --- a/compiler/rustc_trait_selection/src/traits/query/evaluate_obligation.rs +++ b/compiler/rustc_trait_selection/src/traits/query/evaluate_obligation.rs @@ -1,6 +1,3 @@ -use rustc_hir as hir; -use rustc_middle::ty::PredicateKind; - use crate::infer::canonical::OriginalQueryValues; use crate::infer::InferCtxt; use crate::traits::{ @@ -49,12 +46,6 @@ impl<'cx, 'tcx> InferCtxtExt<'tcx> for InferCtxt<'cx, 'tcx> { &self, obligation: &PredicateObligation<'tcx>, ) -> bool { - if let PredicateKind::Trait(pred) = obligation.predicate.kind().skip_binder() { - if let hir::Constness::Const = pred.constness { - // do not evaluate to holds when we have a const predicate. - return false; - } - } self.evaluate_obligation_no_overflow(obligation).must_apply_considering_regions() } diff --git a/compiler/rustc_trait_selection/src/traits/select/mod.rs b/compiler/rustc_trait_selection/src/traits/select/mod.rs index 4c7ee5382d013..dcf5ac63b78ea 100644 --- a/compiler/rustc_trait_selection/src/traits/select/mod.rs +++ b/compiler/rustc_trait_selection/src/traits/select/mod.rs @@ -316,6 +316,18 @@ impl<'cx, 'tcx> SelectionContext<'cx, 'tcx> { self.infcx.tcx } + /// returns `true` if the predicate is considered `const` to + /// this selection context. + pub fn is_predicate_const(&self, pred: ty::Predicate<'_>) -> bool { + match pred.kind().skip_binder() { + ty::PredicateKind::Trait(ty::TraitPredicate { + constness: hir::Constness::Const, + .. + }) if self.const_impls_required => true, + _ => false, + } + } + /////////////////////////////////////////////////////////////////////////// // Selection // From eb6f2d4be0ecb2f1091e1b6c9fda8f42e10a2328 Mon Sep 17 00:00:00 2001 From: Jethro Beekman Date: Tue, 27 Jul 2021 12:10:24 +0200 Subject: [PATCH 27/34] Revert "SGX mutex is movable" This reverts commit 30b82e0f96579d9f897c4e2a780af82662d89772. --- library/std/src/sys/sgx/mutex.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/library/std/src/sys/sgx/mutex.rs b/library/std/src/sys/sgx/mutex.rs index 1b5ced4178f6a..8874517dac60c 100644 --- a/library/std/src/sys/sgx/mutex.rs +++ b/library/std/src/sys/sgx/mutex.rs @@ -8,7 +8,7 @@ pub struct Mutex { inner: SpinMutex>, } -pub type MovableMutex = Mutex; +pub type MovableMutex = Box; // Implementation according to “Operating Systems: Three Easy Pieces”, chapter 28 impl Mutex { From b518dc7a316b172f474be97e2139cb36b1b15f2f Mon Sep 17 00:00:00 2001 From: Jethro Beekman Date: Tue, 27 Jul 2021 12:11:20 +0200 Subject: [PATCH 28/34] Add warning to SGX mutex implementation --- library/std/src/sys/sgx/mutex.rs | 1 + library/std/src/sys/sgx/waitqueue/unsafe_list.rs | 1 + 2 files changed, 2 insertions(+) diff --git a/library/std/src/sys/sgx/mutex.rs b/library/std/src/sys/sgx/mutex.rs index 8874517dac60c..0b2d1f4487f61 100644 --- a/library/std/src/sys/sgx/mutex.rs +++ b/library/std/src/sys/sgx/mutex.rs @@ -8,6 +8,7 @@ pub struct Mutex { inner: SpinMutex>, } +// not movable: see UnsafeList implementation pub type MovableMutex = Box; // Implementation according to “Operating Systems: Three Easy Pieces”, chapter 28 diff --git a/library/std/src/sys/sgx/waitqueue/unsafe_list.rs b/library/std/src/sys/sgx/waitqueue/unsafe_list.rs index cf2f0886c1546..c736cab576e4d 100644 --- a/library/std/src/sys/sgx/waitqueue/unsafe_list.rs +++ b/library/std/src/sys/sgx/waitqueue/unsafe_list.rs @@ -23,6 +23,7 @@ impl UnsafeListEntry { } } +// WARNING: self-referential struct! pub struct UnsafeList { head_tail: NonNull>, head_tail_entry: Option>, From c4aa73525bbfef6895612599170a5b297e1625ba Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Tue, 27 Jul 2021 13:52:15 +0200 Subject: [PATCH 29/34] Add explanations for why we use Variant::Struct instead of Variant::Tuple for tuple structs in enums --- src/librustdoc/clean/mod.rs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index a5ad8dfeb6b96..cf837024a8ed3 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -1730,6 +1730,12 @@ impl Clean for hir::VariantData<'_> { fn clean(&self, cx: &mut DocContext<'_>) -> Variant { match self { hir::VariantData::Struct(..) => Variant::Struct(self.clean(cx)), + // Important note here: `Variant::Tuple` is used on tuple structs which are not in an + // enum (so where converting from `ty::VariantDef`). In case we are in an enum, the kind + // is provided by the `Variant` wrapper directly, and since we need the fields' name + // (even for a tuple struct variant!), it's simpler to just store it as a + // `Variant::Struct` instead of a `Variant::Tuple` (otherwise it would force us to make + // a lot of changes when rendering them to generate the name as well). hir::VariantData::Tuple(..) => Variant::Struct(self.clean(cx)), hir::VariantData::Unit(..) => Variant::CLike, } From 12597428658fc7b72244e8717d0ca6fc83fca11c Mon Sep 17 00:00:00 2001 From: Hudson Ayers Date: Tue, 27 Jul 2021 13:54:51 +0000 Subject: [PATCH 30/34] bootstrap.py: remove unused `git log` option When determining which LLVM artifacts to download, bootstrap.py calls: `git log --author=bors --format=%H -n1 -m --first-parent -- src/llvm-project src/bootstrap/download-ci-llvm-stamp src/version`. However, the `-m` option has no effect, per the `git log` help: > -m > This option makes diff output for merge commits to be shown in the > default format. -m will produce the output only if -p is given as > well. The default format could be changed using log.diffMerges > configuration parameter, which default value is separate. Accordingly, this commit removes use of the -m option in favor of `--no-patch`, to make clear that this command should never output diff information, as the SHA-1 hash is the only desired output. Tested using git 2.32, this does not change the output of the command. The motivation for this change is that some patched versions of git change the behavior of the `-m` flag to imply `-p`, rather than to do nothing unless `-p` is passed. These patched versions of git lead to this script not working. Google's corp-provided git is one such example. --- src/bootstrap/bootstrap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bootstrap/bootstrap.py b/src/bootstrap/bootstrap.py index d2cf929aa266f..f2e38a7eab6bc 100644 --- a/src/bootstrap/bootstrap.py +++ b/src/bootstrap/bootstrap.py @@ -473,7 +473,7 @@ def download_toolchain(self, stage0=True, rustc_channel=None): ]).decode(sys.getdefaultencoding()).strip() llvm_sha = subprocess.check_output([ "git", "log", "--author=bors", "--format=%H", "-n1", - "-m", "--first-parent", + "--no-patch", "--first-parent", "--", "{}/src/llvm-project".format(top_level), "{}/src/bootstrap/download-ci-llvm-stamp".format(top_level), From 5bff8429a0655320c1aef0c16fb0fd2ec0184a9a Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Tue, 27 Jul 2021 09:14:21 -0300 Subject: [PATCH 31/34] Use type_alias_impl_trait instead of min in compiler and lib --- compiler/rustc_data_structures/src/lib.rs | 3 +- compiler/rustc_feature/src/active.rs | 2 +- library/alloc/src/lib.rs | 3 +- .../duplicate.full_tait.stderr | 365 +++++++++--------- .../duplicate.min_tait.stderr | 354 ++++++++--------- .../ui/associated-type-bounds/duplicate.rs | 259 +++++++++---- .../trait-alias-impl-trait.full_tait.stderr | 11 - .../trait-alias-impl-trait.rs | 54 ++- .../issue-63591.full_tait.stderr | 11 - src/test/ui/associated-types/issue-63591.rs | 1 - ...e-60655-latebound-regions.full_tait.stderr | 11 - .../issues/issue-60655-latebound-regions.rs | 1 - .../generator/layout-error.full_tait.stderr | 13 +- .../ui/generator/layout-error.min_tait.stderr | 4 +- src/test/ui/generator/layout-error.rs | 1 - ...ata-sufficient-for-layout.full_tait.stderr | 13 +- ...data-sufficient-for-layout.min_tait.stderr | 2 +- .../metadata-sufficient-for-layout.rs | 1 - ...-trait-type-generic-trait.full_tait.stderr | 11 - ...ssociated-impl-trait-type-generic-trait.rs | 1 - ...d-impl-trait-type-trivial.full_tait.stderr | 11 - .../associated-impl-trait-type-trivial.rs | 1 - ...ssociated-impl-trait-type.full_tait.stderr | 11 - .../impl-trait/associated-impl-trait-type.rs | 1 - .../ui/impl-trait/auto-trait.full_tait.stderr | 13 +- .../ui/impl-trait/auto-trait.min_tait.stderr | 2 +- src/test/ui/impl-trait/auto-trait.rs | 1 - .../impl-trait/issue-55872-1.full_tait.stderr | 19 +- .../impl-trait/issue-55872-1.min_tait.stderr | 8 +- src/test/ui/impl-trait/issue-55872-1.rs | 1 - .../impl-trait/issue-55872-2.full_tait.stderr | 15 +- .../impl-trait/issue-55872-2.min_tait.stderr | 4 +- src/test/ui/impl-trait/issue-55872-2.rs | 1 - .../impl-trait/issue-55872.full_tait.stderr | 13 +- .../ui/impl-trait/issue-55872.min_tait.stderr | 2 +- src/test/ui/impl-trait/issue-55872.rs | 3 +- .../issues/issue-53457.full_tait.stderr | 11 - src/test/ui/impl-trait/issues/issue-53457.rs | 1 - .../issues/issue-78722.full_tait.stderr | 15 +- .../issues/issue-78722.min_tait.stderr | 4 +- src/test/ui/impl-trait/issues/issue-78722.rs | 1 - .../error-handling-2.full_tait.stderr | 17 +- .../error-handling-2.min_tait.stderr | 6 +- .../multiple-lifetimes/error-handling-2.rs | 1 - .../error-handling.full_tait.stderr | 13 +- .../error-handling.min_tait.stderr | 2 +- .../multiple-lifetimes/error-handling.rs | 1 - .../negative-reasoning.full_tait.stderr | 13 +- .../negative-reasoning.min_tait.stderr | 2 +- src/test/ui/impl-trait/negative-reasoning.rs | 1 - .../type-alias-generic-param.full_tait.stderr | 11 - .../ui/impl-trait/type-alias-generic-param.rs | 4 +- ...ias-impl-trait-in-fn-body.full_tait.stderr | 11 - .../type-alias-impl-trait-in-fn-body.rs | 1 - .../ui/issues/issue-60662.full_tait.stderr | 11 - src/test/ui/issues/issue-60662.rs | 4 +- ...e-trait-and-foreign-items.full_tait.stderr | 29 +- ...ne-trait-and-foreign-items.min_tait.stderr | 18 +- .../ui/lint/inline-trait-and-foreign-items.rs | 1 - .../lint/lint-ctypes-73249-2.full_tait.stderr | 15 +- .../lint/lint-ctypes-73249-2.min_tait.stderr | 4 +- src/test/ui/lint/lint-ctypes-73249-2.rs | 5 +- .../lint/lint-ctypes-73249-3.full_tait.stderr | 15 +- .../lint/lint-ctypes-73249-3.min_tait.stderr | 4 +- src/test/ui/lint/lint-ctypes-73249-3.rs | 9 +- .../lint/lint-ctypes-73249-5.full_tait.stderr | 15 +- .../lint/lint-ctypes-73249-5.min_tait.stderr | 4 +- src/test/ui/lint/lint-ctypes-73249-5.rs | 9 +- .../lint/lint-ctypes-73251-1.full_tait.stderr | 15 +- .../lint/lint-ctypes-73251-1.min_tait.stderr | 4 +- src/test/ui/lint/lint-ctypes-73251-1.rs | 9 +- .../lint/lint-ctypes-73251-2.full_tait.stderr | 15 +- .../lint/lint-ctypes-73251-2.min_tait.stderr | 4 +- src/test/ui/lint/lint-ctypes-73251-2.rs | 14 +- .../lint/lint-ctypes-73251.full_tait.stderr | 11 - src/test/ui/lint/lint-ctypes-73251.rs | 1 - .../opaque-ty-ffi-unsafe.full_tait.stderr | 15 +- .../lint/opaque-ty-ffi-unsafe.min_tait.stderr | 4 +- src/test/ui/lint/opaque-ty-ffi-unsafe.rs | 3 +- src/test/ui/mir/issue-75053.full_tait.stderr | 13 +- src/test/ui/mir/issue-75053.min_tait.stderr | 2 +- src/test/ui/mir/issue-75053.rs | 1 - ...rivate-in-public-assoc-ty.full_tait.stderr | 25 +- ...private-in-public-assoc-ty.min_tait.stderr | 14 +- .../ui/privacy/private-in-public-assoc-ty.rs | 1 - ...lic-type-alias-impl-trait.full_tait.stderr | 11 - ...private-in-public-type-alias-impl-trait.rs | 5 +- .../issue-68621.full_tait.stderr | 13 +- .../save-analysis/issue-68621.min_tait.stderr | 2 +- src/test/ui/save-analysis/issue-68621.rs | 1 - .../assoc-type-const.full_tait.stderr | 14 +- .../assoc-type-const.min_tait.stderr | 2 +- .../type-alias-impl-trait/assoc-type-const.rs | 1 - ...pe-lifetime-unconstrained.full_tait.stderr | 13 +- ...ype-lifetime-unconstrained.min_tait.stderr | 2 +- .../assoc-type-lifetime-unconstrained.rs | 1 - .../assoc-type-lifetime.full_tait.stderr | 11 - .../assoc-type-lifetime.rs | 1 - ...ted-type-alias-impl-trait.full_tait.stderr | 11 - .../associated-type-alias-impl-trait.rs | 1 - .../auxiliary/cross_crate_ice.rs | 1 - .../auxiliary/cross_crate_ice2.rs | 3 +- .../bound_reduction2.full_tait.stderr | 15 +- .../bound_reduction2.min_tait.stderr | 4 +- .../type-alias-impl-trait/bound_reduction2.rs | 1 - .../bounds-are-checked-2.full_tait.stderr | 13 +- .../bounds-are-checked-2.min_tait.stderr | 2 +- .../bounds-are-checked-2.rs | 1 - .../bounds-are-checked.full_tait.stderr | 19 +- .../bounds-are-checked.min_tait.stderr | 8 +- .../bounds-are-checked.rs | 4 +- .../coherence.full_tait.stderr | 13 +- .../coherence.min_tait.stderr | 2 +- .../ui/type-alias-impl-trait/coherence.rs | 1 - ...eclared_but_never_defined.full_tait.stderr | 13 +- ...declared_but_never_defined.min_tait.stderr | 2 +- .../declared_but_never_defined.rs | 1 - ..._but_not_defined_in_scope.full_tait.stderr | 15 +- ...d_but_not_defined_in_scope.min_tait.stderr | 4 +- .../declared_but_not_defined_in_scope.rs | 1 - .../different_defining_uses.full_tait.stderr | 15 +- .../different_defining_uses.min_tait.stderr | 4 +- .../different_defining_uses.rs | 4 +- ..._defining_uses_never_type.full_tait.stderr | 17 +- ...t_defining_uses_never_type.min_tait.stderr | 6 +- .../different_defining_uses_never_type.rs | 7 +- ...defining_uses_never_type2.full_tait.stderr | 11 - .../different_defining_uses_never_type2.rs | 1 - .../fallback.full_tait.stderr | 11 - src/test/ui/type-alias-impl-trait/fallback.rs | 1 - ...c_different_defining_uses.full_tait.stderr | 15 +- ...ic_different_defining_uses.min_tait.stderr | 4 +- .../generic_different_defining_uses.rs | 4 +- ..._duplicate_lifetime_param.full_tait.stderr | 15 +- ...c_duplicate_lifetime_param.min_tait.stderr | 4 +- .../generic_duplicate_lifetime_param.rs | 4 +- ...ric_duplicate_param_use10.full_tait.stderr | 11 - .../generic_duplicate_param_use10.rs | 1 - ...eric_duplicate_param_use2.full_tait.stderr | 15 +- ...neric_duplicate_param_use2.min_tait.stderr | 4 +- .../generic_duplicate_param_use2.rs | 1 - ...eric_duplicate_param_use3.full_tait.stderr | 15 +- ...neric_duplicate_param_use3.min_tait.stderr | 4 +- .../generic_duplicate_param_use3.rs | 1 - ...eric_duplicate_param_use4.full_tait.stderr | 15 +- ...neric_duplicate_param_use4.min_tait.stderr | 4 +- .../generic_duplicate_param_use4.rs | 3 +- ...eric_duplicate_param_use5.full_tait.stderr | 19 +- ...neric_duplicate_param_use5.min_tait.stderr | 8 +- .../generic_duplicate_param_use5.rs | 1 - ...eric_duplicate_param_use6.full_tait.stderr | 17 +- ...neric_duplicate_param_use6.min_tait.stderr | 6 +- .../generic_duplicate_param_use6.rs | 1 - ...eric_duplicate_param_use7.full_tait.stderr | 11 - .../generic_duplicate_param_use7.rs | 1 - ...eric_duplicate_param_use8.full_tait.stderr | 17 +- ...neric_duplicate_param_use8.min_tait.stderr | 6 +- .../generic_duplicate_param_use8.rs | 1 - ...eric_duplicate_param_use9.full_tait.stderr | 21 +- ...neric_duplicate_param_use9.min_tait.stderr | 10 +- .../generic_duplicate_param_use9.rs | 1 - .../generic_lifetime_param.full_tait.stderr | 11 - .../generic_lifetime_param.rs | 1 - .../generic_not_used.full_tait.stderr | 15 +- .../generic_not_used.min_tait.stderr | 4 +- .../type-alias-impl-trait/generic_not_used.rs | 3 +- ...does_not_live_long_enough.full_tait.stderr | 17 +- ..._does_not_live_long_enough.min_tait.stderr | 6 +- .../generic_type_does_not_live_long_enough.rs | 1 - .../generic_underconstrained.full_tait.stderr | 15 +- .../generic_underconstrained.min_tait.stderr | 4 +- .../generic_underconstrained.rs | 1 - ...generic_underconstrained2.full_tait.stderr | 19 +- .../generic_underconstrained2.min_tait.stderr | 8 +- .../generic_underconstrained2.rs | 1 - ...-with-unconstrained-param.full_tait.stderr | 13 +- ...l-with-unconstrained-param.min_tait.stderr | 2 +- .../impl-with-unconstrained-param.rs | 1 - ...ncoherent-assoc-imp-trait.full_tait.stderr | 15 +- ...incoherent-assoc-imp-trait.min_tait.stderr | 4 +- .../incoherent-assoc-imp-trait.rs | 1 - ...e-52843-closure-constrain.full_tait.stderr | 15 +- ...ue-52843-closure-constrain.min_tait.stderr | 6 +- .../issue-52843-closure-constrain.rs | 1 - .../issue-52843.full_tait.stderr | 13 +- .../issue-52843.min_tait.stderr | 2 +- .../ui/type-alias-impl-trait/issue-52843.rs | 1 - .../issue-53096.full_tait.stderr | 13 +- .../issue-53096.min_tait.stderr | 2 +- .../ui/type-alias-impl-trait/issue-53096.rs | 1 - .../issue-53598.full_tait.stderr | 13 +- .../issue-53598.min_tait.stderr | 2 +- .../ui/type-alias-impl-trait/issue-53598.rs | 3 +- ...78-generator-and-const-fn.full_tait.stderr | 13 +- ...678-generator-and-const-fn.min_tait.stderr | 2 +- .../issue-53678-generator-and-const-fn.rs | 1 - ...-55099-lifetime-inference.full_tait.stderr | 11 - .../issue-55099-lifetime-inference.rs | 7 +- ...88-associate-impl-capture.full_tait.stderr | 11 - .../issue-57188-associate-impl-capture.rs | 1 - .../issue-57611-trait-alias.full_tait.stderr | 13 +- .../issue-57611-trait-alias.min_tait.stderr | 2 +- .../issue-57611-trait-alias.rs | 1 - .../issue-57700.full_tait.stderr | 13 +- .../issue-57700.min_tait.stderr | 2 +- .../ui/type-alias-impl-trait/issue-57700.rs | 3 +- ...sue-57807-associated-type.full_tait.stderr | 11 - .../issue-57807-associated-type.rs | 1 - .../issue-58887.full_tait.stderr | 11 - .../ui/type-alias-impl-trait/issue-58887.rs | 1 - .../issue-58951.full_tait.stderr | 11 - .../ui/type-alias-impl-trait/issue-58951.rs | 5 +- .../issue-60407.full_tait.stderr | 13 +- .../issue-60407.min_tait.stderr | 2 +- .../ui/type-alias-impl-trait/issue-60407.rs | 1 - .../issue-60564.full_tait.stderr | 15 +- .../issue-60564.min_tait.stderr | 4 +- .../ui/type-alias-impl-trait/issue-60564.rs | 1 - ...iate-impl-trait-lifetimes.full_tait.stderr | 11 - ...ue-62000-associate-impl-trait-lifetimes.rs | 1 - .../issue-63263-closure-return.rs | 1 - .../issue-63263-closure-return.stderr | 11 - .../issue-63279.full_tait.stderr | 15 +- .../issue-63279.min_tait.stderr | 6 +- .../ui/type-alias-impl-trait/issue-63279.rs | 1 - ...3677-type-alias-coherence.full_tait.stderr | 11 - .../issue-63677-type-alias-coherence.rs | 1 - ...-opaque-ty-from-val-twice.full_tait.stderr | 13 +- ...t-opaque-ty-from-val-twice.min_tait.stderr | 4 +- ...sue-65679-inst-opaque-ty-from-val-twice.rs | 1 - .../ui/type-alias-impl-trait/issue-65918.rs | 1 - ...e-66580-closure-coherence.full_tait.stderr | 11 - .../issue-66580-closure-coherence.rs | 5 +- ...issue-67844-nested-opaque.full_tait.stderr | 11 - .../issue-67844-nested-opaque.rs | 6 +- ...ue-68368-non-defining-use.full_tait.stderr | 15 +- ...sue-68368-non-defining-use.min_tait.stderr | 4 +- .../issue-68368-non-defining-use.rs | 1 - ...er-lifetime-resolve-error.full_tait.stderr | 13 +- ...ner-lifetime-resolve-error.min_tait.stderr | 2 +- ...ssue-69136-inner-lifetime-resolve-error.rs | 1 - ...inner-lifetime-resolve-ok.full_tait.stderr | 11 - .../issue-69136-inner-lifetime-resolve-ok.rs | 1 - .../issue-69323.full.stderr | 11 - .../ui/type-alias-impl-trait/issue-69323.rs | 1 - .../issue-70121.full_tait.stderr | 11 - .../ui/type-alias-impl-trait/issue-70121.rs | 1 - .../issue-74244.full_tait.stderr | 13 +- .../issue-74244.min_tait.stderr | 2 +- .../ui/type-alias-impl-trait/issue-74244.rs | 1 - .../ui/type-alias-impl-trait/issue-74761-2.rs | 1 - .../issue-74761-2.stderr | 17 +- .../issue-74761.full_tait.stderr | 15 +- .../issue-74761.min_tait.stderr | 4 +- .../ui/type-alias-impl-trait/issue-74761.rs | 1 - ...76202-trait-impl-for-tait.full_tait.stderr | 15 +- ...-76202-trait-impl-for-tait.min_tait.stderr | 4 +- .../issue-76202-trait-impl-for-tait.rs | 4 +- .../ui/type-alias-impl-trait/issue-78450.rs | 1 - .../type-alias-impl-trait/issue-78450.stderr | 11 - ...ted_type_alias_impl_trait.full_tait.stderr | 11 - .../nested_type_alias_impl_trait.rs | 19 +- ...ever_reveal_concrete_type.full_tait.stderr | 15 +- ...never_reveal_concrete_type.min_tait.stderr | 4 +- .../never_reveal_concrete_type.rs | 1 - ..._inferrable_concrete_type.full_tait.stderr | 13 +- ...o_inferrable_concrete_type.min_tait.stderr | 2 +- .../no_inferrable_concrete_type.rs | 1 - ...g_outside_defining_module.full_tait.stderr | 15 +- ...ng_outside_defining_module.min_tait.stderr | 4 +- .../no_revealing_outside_defining_module.rs | 1 - .../not_a_defining_use.full_tait.stderr | 15 +- .../not_a_defining_use.min_tait.stderr | 4 +- .../not_a_defining_use.rs | 1 - .../not_well_formed.full_tait.stderr | 13 +- .../not_well_formed.min_tait.stderr | 2 +- .../type-alias-impl-trait/not_well_formed.rs | 4 +- .../structural-match-no-leak.full_tait.stderr | 13 +- .../structural-match-no-leak.min_tait.stderr | 2 +- .../structural-match-no-leak.rs | 1 - .../structural-match.full_tait.stderr | 13 +- .../structural-match.min_tait.stderr | 2 +- .../type-alias-impl-trait/structural-match.rs | 1 - ...pe-alias-impl-trait-const.full_tait.stderr | 15 +- ...ype-alias-impl-trait-const.min_tait.stderr | 4 +- .../type-alias-impl-trait-const.rs | 1 - ...type-alias-impl-trait-fns.full_tait.stderr | 11 - .../type-alias-impl-trait-fns.rs | 6 +- ...pe-alias-impl-trait-sized.full_tait.stderr | 11 - .../type-alias-impl-trait-sized.rs | 17 +- ...pe-alias-impl-trait-tuple.full_tait.stderr | 11 - .../type-alias-impl-trait-tuple.rs | 1 - ...it-unconstrained-lifetime.full_tait.stderr | 13 +- ...ait-unconstrained-lifetime.min_tait.stderr | 2 +- ...alias-impl-trait-unconstrained-lifetime.rs | 1 - ...pl-trait-with-cycle-error.full_tait.stderr | 13 +- ...mpl-trait-with-cycle-error.min_tait.stderr | 2 +- .../type-alias-impl-trait-with-cycle-error.rs | 1 - ...l-trait-with-cycle-error2.full_tait.stderr | 13 +- ...pl-trait-with-cycle-error2.min_tait.stderr | 2 +- ...type-alias-impl-trait-with-cycle-error2.rs | 5 +- ...impl-trait-with-no-traits.full_tait.stderr | 15 +- ...-impl-trait-with-no-traits.min_tait.stderr | 4 +- .../type-alias-impl-trait-with-no-traits.rs | 1 - .../type-alias-impl-trait.full_tait.stderr | 11 - .../type-alias-impl-trait.rs | 1 - ...e-alias-nested-impl-trait.full_tait.stderr | 11 - .../type-alias-nested-impl-trait.rs | 1 - .../unused_generic_param.full_tait.stderr | 15 +- .../unused_generic_param.min_tait.stderr | 4 +- .../unused_generic_param.rs | 4 +- ...eck_type_placeholder_item.full_tait.stderr | 149 ++++--- ...peck_type_placeholder_item.min_tait.stderr | 138 +++---- .../ui/typeck/typeck_type_placeholder_item.rs | 1 - 314 files changed, 1192 insertions(+), 2255 deletions(-) delete mode 100644 src/test/ui/associated-type-bounds/trait-alias-impl-trait.full_tait.stderr delete mode 100644 src/test/ui/associated-types/issue-63591.full_tait.stderr delete mode 100644 src/test/ui/async-await/issues/issue-60655-latebound-regions.full_tait.stderr delete mode 100644 src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.full_tait.stderr delete mode 100644 src/test/ui/impl-trait/associated-impl-trait-type-trivial.full_tait.stderr delete mode 100644 src/test/ui/impl-trait/associated-impl-trait-type.full_tait.stderr delete mode 100644 src/test/ui/impl-trait/issues/issue-53457.full_tait.stderr delete mode 100644 src/test/ui/impl-trait/type-alias-generic-param.full_tait.stderr delete mode 100644 src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.full_tait.stderr delete mode 100644 src/test/ui/issues/issue-60662.full_tait.stderr delete mode 100644 src/test/ui/lint/lint-ctypes-73251.full_tait.stderr delete mode 100644 src/test/ui/privacy/private-in-public-type-alias-impl-trait.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/assoc-type-lifetime.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/fallback.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/generic_lifetime_param.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-57807-associated-type.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-58887.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-58951.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-63263-closure-return.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-69323.full.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-70121.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-78450.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/type-alias-impl-trait.full_tait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.full_tait.stderr diff --git a/compiler/rustc_data_structures/src/lib.rs b/compiler/rustc_data_structures/src/lib.rs index 041d52aa20abd..18bc2f896f2f2 100644 --- a/compiler/rustc_data_structures/src/lib.rs +++ b/compiler/rustc_data_structures/src/lib.rs @@ -21,7 +21,8 @@ #![feature(iter_map_while)] #![feature(maybe_uninit_uninit_array)] #![feature(min_specialization)] -#![feature(min_type_alias_impl_trait)] +#![cfg_attr(bootstrap, feature(min_type_alias_impl_trait))] +#![cfg_attr(not(bootstrap), feature(type_alias_impl_trait))] #![feature(new_uninit)] #![feature(nll)] #![feature(once_cell)] diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index a3e40daf6bf6d..27c08586f4fc8 100644 --- a/compiler/rustc_feature/src/active.rs +++ b/compiler/rustc_feature/src/active.rs @@ -489,7 +489,7 @@ declare_features! ( (active, async_closure, "1.37.0", Some(62290), None), /// Allows `impl Trait` to be used inside type aliases (RFC 2515). - (incomplete, type_alias_impl_trait, "1.38.0", Some(63063), None), + (active, type_alias_impl_trait, "1.38.0", Some(63063), None), /// Allows the definition of `const extern fn` and `const unsafe extern fn`. (active, const_extern_fn, "1.40.0", Some(64926), None), diff --git a/library/alloc/src/lib.rs b/library/alloc/src/lib.rs index fa1f361a5b6d1..999ca9b0ad095 100644 --- a/library/alloc/src/lib.rs +++ b/library/alloc/src/lib.rs @@ -141,7 +141,8 @@ #![feature(alloc_layout_extra)] #![feature(trusted_random_access)] #![feature(try_trait_v2)] -#![feature(min_type_alias_impl_trait)] +#![cfg_attr(bootstrap, feature(min_type_alias_impl_trait))] +#![cfg_attr(not(bootstrap), feature(type_alias_impl_trait))] #![feature(associated_type_bounds)] #![feature(slice_group_by)] #![feature(decl_macro)] diff --git a/src/test/ui/associated-type-bounds/duplicate.full_tait.stderr b/src/test/ui/associated-type-bounds/duplicate.full_tait.stderr index bffa5150fe1ce..81cd882e5d802 100644 --- a/src/test/ui/associated-type-bounds/duplicate.full_tait.stderr +++ b/src/test/ui/associated-type-bounds/duplicate.full_tait.stderr @@ -1,158 +1,149 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/duplicate.rs:4:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:10:36 + --> $DIR/duplicate.rs:9:36 | -LL | struct SI1> { f: T } +LL | struct SI1> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:12:36 + --> $DIR/duplicate.rs:13:36 | -LL | struct SI2> { f: T } +LL | struct SI2> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:14:39 + --> $DIR/duplicate.rs:17:39 | -LL | struct SI3> { f: T } +LL | struct SI3> { | ------------- ^^^^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:16:45 + --> $DIR/duplicate.rs:23:29 | -LL | struct SW1 where T: Iterator { f: T } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:18:45 + --> $DIR/duplicate.rs:30:29 | -LL | struct SW2 where T: Iterator { f: T } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:20:48 + --> $DIR/duplicate.rs:37:32 | -LL | struct SW3 where T: Iterator { f: T } - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:23:34 + --> $DIR/duplicate.rs:43:34 | -LL | enum EI1> { V(T) } +LL | enum EI1> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:25:34 + --> $DIR/duplicate.rs:47:34 | -LL | enum EI2> { V(T) } +LL | enum EI2> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:27:37 + --> $DIR/duplicate.rs:51:37 | -LL | enum EI3> { V(T) } +LL | enum EI3> { | ------------- ^^^^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:29:43 + --> $DIR/duplicate.rs:57:29 | -LL | enum EW1 where T: Iterator { V(T) } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:31:43 + --> $DIR/duplicate.rs:64:29 | -LL | enum EW2 where T: Iterator { V(T) } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:33:46 + --> $DIR/duplicate.rs:71:32 | -LL | enum EW3 where T: Iterator { V(T) } - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:36:35 + --> $DIR/duplicate.rs:77:35 | -LL | union UI1> { f: T } +LL | union UI1> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:38:35 + --> $DIR/duplicate.rs:81:35 | -LL | union UI2> { f: T } +LL | union UI2> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:40:38 + --> $DIR/duplicate.rs:85:38 | -LL | union UI3> { f: T } +LL | union UI3> { | ------------- ^^^^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:42:44 + --> $DIR/duplicate.rs:91:29 | -LL | union UW1 where T: Iterator { f: T } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:44:44 + --> $DIR/duplicate.rs:98:29 | -LL | union UW2 where T: Iterator { f: T } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:46:47 + --> $DIR/duplicate.rs:105:32 | -LL | union UW3 where T: Iterator { f: T } - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:49:32 + --> $DIR/duplicate.rs:111:32 | LL | fn FI1>() {} | ---------- ^^^^^^^^^^ re-bound here @@ -160,7 +151,7 @@ LL | fn FI1>() {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:51:32 + --> $DIR/duplicate.rs:113:32 | LL | fn FI2>() {} | ---------- ^^^^^^^^^^ re-bound here @@ -168,7 +159,7 @@ LL | fn FI2>() {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:53:35 + --> $DIR/duplicate.rs:115:35 | LL | fn FI3>() {} | ------------- ^^^^^^^^^^^^^ re-bound here @@ -176,31 +167,31 @@ LL | fn FI3>() {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:55:43 + --> $DIR/duplicate.rs:119:29 | -LL | fn FW1() where T: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:57:43 + --> $DIR/duplicate.rs:125:29 | -LL | fn FW2() where T: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:59:46 + --> $DIR/duplicate.rs:131:32 | -LL | fn FW3() where T: Iterator {} - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:65:40 + --> $DIR/duplicate.rs:145:40 | LL | fn FAPIT1(_: impl Iterator) {} | ---------- ^^^^^^^^^^ re-bound here @@ -208,7 +199,7 @@ LL | fn FAPIT1(_: impl Iterator) {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:67:40 + --> $DIR/duplicate.rs:147:40 | LL | fn FAPIT2(_: impl Iterator) {} | ---------- ^^^^^^^^^^ re-bound here @@ -216,7 +207,7 @@ LL | fn FAPIT2(_: impl Iterator) {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:69:43 + --> $DIR/duplicate.rs:149:43 | LL | fn FAPIT3(_: impl Iterator) {} | ------------- ^^^^^^^^^^^^^ re-bound here @@ -224,7 +215,7 @@ LL | fn FAPIT3(_: impl Iterator) {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:72:35 + --> $DIR/duplicate.rs:152:35 | LL | type TAI1> = T; | ---------- ^^^^^^^^^^ re-bound here @@ -232,7 +223,7 @@ LL | type TAI1> = T; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:74:35 + --> $DIR/duplicate.rs:154:35 | LL | type TAI2> = T; | ---------- ^^^^^^^^^^ re-bound here @@ -240,7 +231,7 @@ LL | type TAI2> = T; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:76:38 + --> $DIR/duplicate.rs:156:38 | LL | type TAI3> = T; | ------------- ^^^^^^^^^^^^^ re-bound here @@ -248,31 +239,31 @@ LL | type TAI3> = T; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:78:44 + --> $DIR/duplicate.rs:160:29 | -LL | type TAW1 where T: Iterator = T; - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:80:44 + --> $DIR/duplicate.rs:165:29 | -LL | type TAW2 where T: Iterator = T; - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:82:47 + --> $DIR/duplicate.rs:170:32 | -LL | type TAW3 where T: Iterator = T; - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:85:36 + --> $DIR/duplicate.rs:174:36 | LL | type ETAI1> = impl Copy; | ---------- ^^^^^^^^^^ re-bound here @@ -280,7 +271,7 @@ LL | type ETAI1> = impl Copy; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:87:36 + --> $DIR/duplicate.rs:176:36 | LL | type ETAI2> = impl Copy; | ---------- ^^^^^^^^^^ re-bound here @@ -288,7 +279,7 @@ LL | type ETAI2> = impl Copy; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:89:39 + --> $DIR/duplicate.rs:178:39 | LL | type ETAI3> = impl Copy; | ------------- ^^^^^^^^^^^^^ re-bound here @@ -296,7 +287,7 @@ LL | type ETAI3> = impl Copy; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:91:40 + --> $DIR/duplicate.rs:180:40 | LL | type ETAI4 = impl Iterator; | ---------- ^^^^^^^^^^ re-bound here @@ -304,7 +295,7 @@ LL | type ETAI4 = impl Iterator; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:93:40 + --> $DIR/duplicate.rs:182:40 | LL | type ETAI5 = impl Iterator; | ---------- ^^^^^^^^^^ re-bound here @@ -312,7 +303,7 @@ LL | type ETAI5 = impl Iterator; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:95:43 + --> $DIR/duplicate.rs:184:43 | LL | type ETAI6 = impl Iterator; | ------------- ^^^^^^^^^^^^^ re-bound here @@ -320,7 +311,7 @@ LL | type ETAI6 = impl Iterator; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:98:36 + --> $DIR/duplicate.rs:187:36 | LL | trait TRI1> {} | ---------- ^^^^^^^^^^ re-bound here @@ -328,7 +319,7 @@ LL | trait TRI1> {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:100:36 + --> $DIR/duplicate.rs:189:36 | LL | trait TRI2> {} | ---------- ^^^^^^^^^^ re-bound here @@ -336,7 +327,7 @@ LL | trait TRI2> {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:102:39 + --> $DIR/duplicate.rs:191:39 | LL | trait TRI3> {} | ------------- ^^^^^^^^^^^^^ re-bound here @@ -344,7 +335,7 @@ LL | trait TRI3> {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:104:34 + --> $DIR/duplicate.rs:193:34 | LL | trait TRS1: Iterator {} | ---------- ^^^^^^^^^^ re-bound here @@ -352,7 +343,7 @@ LL | trait TRS1: Iterator {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:106:34 + --> $DIR/duplicate.rs:195:34 | LL | trait TRS2: Iterator {} | ---------- ^^^^^^^^^^ re-bound here @@ -360,7 +351,7 @@ LL | trait TRS2: Iterator {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:108:37 + --> $DIR/duplicate.rs:197:37 | LL | trait TRS3: Iterator {} | ------------- ^^^^^^^^^^^^^ re-bound here @@ -368,79 +359,79 @@ LL | trait TRS3: Iterator {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:110:45 + --> $DIR/duplicate.rs:201:29 | -LL | trait TRW1 where T: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:112:45 + --> $DIR/duplicate.rs:207:29 | -LL | trait TRW2 where T: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:114:48 + --> $DIR/duplicate.rs:213:32 | -LL | trait TRW3 where T: Iterator {} - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:116:46 + --> $DIR/duplicate.rs:219:32 | -LL | trait TRSW1 where Self: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:116:46 + --> $DIR/duplicate.rs:219:32 | -LL | trait TRSW1 where Self: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:119:46 + --> $DIR/duplicate.rs:226:32 | -LL | trait TRSW2 where Self: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:119:46 + --> $DIR/duplicate.rs:226:32 | -LL | trait TRSW2 where Self: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:122:49 + --> $DIR/duplicate.rs:233:35 | -LL | trait TRSW3 where Self: Iterator {} - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:122:49 + --> $DIR/duplicate.rs:233:35 | -LL | trait TRSW3 where Self: Iterator {} - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:132:40 + --> $DIR/duplicate.rs:251:40 | LL | type TADyn1 = dyn Iterator; | ---------- ^^^^^^^^^^ re-bound here @@ -448,7 +439,7 @@ LL | type TADyn1 = dyn Iterator; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:134:44 + --> $DIR/duplicate.rs:253:44 | LL | type TADyn2 = Box>; | ---------- ^^^^^^^^^^ re-bound here @@ -456,7 +447,7 @@ LL | type TADyn2 = Box>; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:136:43 + --> $DIR/duplicate.rs:255:43 | LL | type TADyn3 = dyn Iterator; | ------------- ^^^^^^^^^^^^^ re-bound here @@ -464,29 +455,29 @@ LL | type TADyn3 = dyn Iterator; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:125:43 + --> $DIR/duplicate.rs:239:34 | -LL | trait TRA1 { type A: Iterator; } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | type A: Iterator; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:127:43 + --> $DIR/duplicate.rs:243:34 | -LL | trait TRA2 { type A: Iterator; } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | type A: Iterator; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:129:46 + --> $DIR/duplicate.rs:247:37 | -LL | trait TRA3 { type A: Iterator; } - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | type A: Iterator; + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first -error: aborting due to 60 previous errors; 1 warning emitted +error: aborting due to 60 previous errors For more information about this error, try `rustc --explain E0719`. diff --git a/src/test/ui/associated-type-bounds/duplicate.min_tait.stderr b/src/test/ui/associated-type-bounds/duplicate.min_tait.stderr index 06bfac588de00..81cd882e5d802 100644 --- a/src/test/ui/associated-type-bounds/duplicate.min_tait.stderr +++ b/src/test/ui/associated-type-bounds/duplicate.min_tait.stderr @@ -1,149 +1,149 @@ error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:10:36 + --> $DIR/duplicate.rs:9:36 | -LL | struct SI1> { f: T } +LL | struct SI1> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:12:36 + --> $DIR/duplicate.rs:13:36 | -LL | struct SI2> { f: T } +LL | struct SI2> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:14:39 + --> $DIR/duplicate.rs:17:39 | -LL | struct SI3> { f: T } +LL | struct SI3> { | ------------- ^^^^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:16:45 + --> $DIR/duplicate.rs:23:29 | -LL | struct SW1 where T: Iterator { f: T } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:18:45 + --> $DIR/duplicate.rs:30:29 | -LL | struct SW2 where T: Iterator { f: T } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:20:48 + --> $DIR/duplicate.rs:37:32 | -LL | struct SW3 where T: Iterator { f: T } - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:23:34 + --> $DIR/duplicate.rs:43:34 | -LL | enum EI1> { V(T) } +LL | enum EI1> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:25:34 + --> $DIR/duplicate.rs:47:34 | -LL | enum EI2> { V(T) } +LL | enum EI2> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:27:37 + --> $DIR/duplicate.rs:51:37 | -LL | enum EI3> { V(T) } +LL | enum EI3> { | ------------- ^^^^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:29:43 + --> $DIR/duplicate.rs:57:29 | -LL | enum EW1 where T: Iterator { V(T) } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:31:43 + --> $DIR/duplicate.rs:64:29 | -LL | enum EW2 where T: Iterator { V(T) } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:33:46 + --> $DIR/duplicate.rs:71:32 | -LL | enum EW3 where T: Iterator { V(T) } - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:36:35 + --> $DIR/duplicate.rs:77:35 | -LL | union UI1> { f: T } +LL | union UI1> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:38:35 + --> $DIR/duplicate.rs:81:35 | -LL | union UI2> { f: T } +LL | union UI2> { | ---------- ^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:40:38 + --> $DIR/duplicate.rs:85:38 | -LL | union UI3> { f: T } +LL | union UI3> { | ------------- ^^^^^^^^^^^^^ re-bound here | | | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:42:44 + --> $DIR/duplicate.rs:91:29 | -LL | union UW1 where T: Iterator { f: T } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:44:44 + --> $DIR/duplicate.rs:98:29 | -LL | union UW2 where T: Iterator { f: T } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:46:47 + --> $DIR/duplicate.rs:105:32 | -LL | union UW3 where T: Iterator { f: T } - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:49:32 + --> $DIR/duplicate.rs:111:32 | LL | fn FI1>() {} | ---------- ^^^^^^^^^^ re-bound here @@ -151,7 +151,7 @@ LL | fn FI1>() {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:51:32 + --> $DIR/duplicate.rs:113:32 | LL | fn FI2>() {} | ---------- ^^^^^^^^^^ re-bound here @@ -159,7 +159,7 @@ LL | fn FI2>() {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:53:35 + --> $DIR/duplicate.rs:115:35 | LL | fn FI3>() {} | ------------- ^^^^^^^^^^^^^ re-bound here @@ -167,31 +167,31 @@ LL | fn FI3>() {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:55:43 + --> $DIR/duplicate.rs:119:29 | -LL | fn FW1() where T: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:57:43 + --> $DIR/duplicate.rs:125:29 | -LL | fn FW2() where T: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:59:46 + --> $DIR/duplicate.rs:131:32 | -LL | fn FW3() where T: Iterator {} - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:65:40 + --> $DIR/duplicate.rs:145:40 | LL | fn FAPIT1(_: impl Iterator) {} | ---------- ^^^^^^^^^^ re-bound here @@ -199,7 +199,7 @@ LL | fn FAPIT1(_: impl Iterator) {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:67:40 + --> $DIR/duplicate.rs:147:40 | LL | fn FAPIT2(_: impl Iterator) {} | ---------- ^^^^^^^^^^ re-bound here @@ -207,7 +207,7 @@ LL | fn FAPIT2(_: impl Iterator) {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:69:43 + --> $DIR/duplicate.rs:149:43 | LL | fn FAPIT3(_: impl Iterator) {} | ------------- ^^^^^^^^^^^^^ re-bound here @@ -215,7 +215,7 @@ LL | fn FAPIT3(_: impl Iterator) {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:72:35 + --> $DIR/duplicate.rs:152:35 | LL | type TAI1> = T; | ---------- ^^^^^^^^^^ re-bound here @@ -223,7 +223,7 @@ LL | type TAI1> = T; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:74:35 + --> $DIR/duplicate.rs:154:35 | LL | type TAI2> = T; | ---------- ^^^^^^^^^^ re-bound here @@ -231,7 +231,7 @@ LL | type TAI2> = T; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:76:38 + --> $DIR/duplicate.rs:156:38 | LL | type TAI3> = T; | ------------- ^^^^^^^^^^^^^ re-bound here @@ -239,31 +239,31 @@ LL | type TAI3> = T; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:78:44 + --> $DIR/duplicate.rs:160:29 | -LL | type TAW1 where T: Iterator = T; - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:80:44 + --> $DIR/duplicate.rs:165:29 | -LL | type TAW2 where T: Iterator = T; - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:82:47 + --> $DIR/duplicate.rs:170:32 | -LL | type TAW3 where T: Iterator = T; - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:85:36 + --> $DIR/duplicate.rs:174:36 | LL | type ETAI1> = impl Copy; | ---------- ^^^^^^^^^^ re-bound here @@ -271,7 +271,7 @@ LL | type ETAI1> = impl Copy; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:87:36 + --> $DIR/duplicate.rs:176:36 | LL | type ETAI2> = impl Copy; | ---------- ^^^^^^^^^^ re-bound here @@ -279,7 +279,7 @@ LL | type ETAI2> = impl Copy; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:89:39 + --> $DIR/duplicate.rs:178:39 | LL | type ETAI3> = impl Copy; | ------------- ^^^^^^^^^^^^^ re-bound here @@ -287,7 +287,7 @@ LL | type ETAI3> = impl Copy; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:91:40 + --> $DIR/duplicate.rs:180:40 | LL | type ETAI4 = impl Iterator; | ---------- ^^^^^^^^^^ re-bound here @@ -295,7 +295,7 @@ LL | type ETAI4 = impl Iterator; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:93:40 + --> $DIR/duplicate.rs:182:40 | LL | type ETAI5 = impl Iterator; | ---------- ^^^^^^^^^^ re-bound here @@ -303,7 +303,7 @@ LL | type ETAI5 = impl Iterator; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:95:43 + --> $DIR/duplicate.rs:184:43 | LL | type ETAI6 = impl Iterator; | ------------- ^^^^^^^^^^^^^ re-bound here @@ -311,7 +311,7 @@ LL | type ETAI6 = impl Iterator; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:98:36 + --> $DIR/duplicate.rs:187:36 | LL | trait TRI1> {} | ---------- ^^^^^^^^^^ re-bound here @@ -319,7 +319,7 @@ LL | trait TRI1> {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:100:36 + --> $DIR/duplicate.rs:189:36 | LL | trait TRI2> {} | ---------- ^^^^^^^^^^ re-bound here @@ -327,7 +327,7 @@ LL | trait TRI2> {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:102:39 + --> $DIR/duplicate.rs:191:39 | LL | trait TRI3> {} | ------------- ^^^^^^^^^^^^^ re-bound here @@ -335,7 +335,7 @@ LL | trait TRI3> {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:104:34 + --> $DIR/duplicate.rs:193:34 | LL | trait TRS1: Iterator {} | ---------- ^^^^^^^^^^ re-bound here @@ -343,7 +343,7 @@ LL | trait TRS1: Iterator {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:106:34 + --> $DIR/duplicate.rs:195:34 | LL | trait TRS2: Iterator {} | ---------- ^^^^^^^^^^ re-bound here @@ -351,7 +351,7 @@ LL | trait TRS2: Iterator {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:108:37 + --> $DIR/duplicate.rs:197:37 | LL | trait TRS3: Iterator {} | ------------- ^^^^^^^^^^^^^ re-bound here @@ -359,79 +359,79 @@ LL | trait TRS3: Iterator {} | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:110:45 + --> $DIR/duplicate.rs:201:29 | -LL | trait TRW1 where T: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:112:45 + --> $DIR/duplicate.rs:207:29 | -LL | trait TRW2 where T: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:114:48 + --> $DIR/duplicate.rs:213:32 | -LL | trait TRW3 where T: Iterator {} - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:116:46 + --> $DIR/duplicate.rs:219:32 | -LL | trait TRSW1 where Self: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:116:46 + --> $DIR/duplicate.rs:219:32 | -LL | trait TRSW1 where Self: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:119:46 + --> $DIR/duplicate.rs:226:32 | -LL | trait TRSW2 where Self: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:119:46 + --> $DIR/duplicate.rs:226:32 | -LL | trait TRSW2 where Self: Iterator {} - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:122:49 + --> $DIR/duplicate.rs:233:35 | -LL | trait TRSW3 where Self: Iterator {} - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:122:49 + --> $DIR/duplicate.rs:233:35 | -LL | trait TRSW3 where Self: Iterator {} - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | Self: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:132:40 + --> $DIR/duplicate.rs:251:40 | LL | type TADyn1 = dyn Iterator; | ---------- ^^^^^^^^^^ re-bound here @@ -439,7 +439,7 @@ LL | type TADyn1 = dyn Iterator; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:134:44 + --> $DIR/duplicate.rs:253:44 | LL | type TADyn2 = Box>; | ---------- ^^^^^^^^^^ re-bound here @@ -447,7 +447,7 @@ LL | type TADyn2 = Box>; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:136:43 + --> $DIR/duplicate.rs:255:43 | LL | type TADyn3 = dyn Iterator; | ------------- ^^^^^^^^^^^^^ re-bound here @@ -455,28 +455,28 @@ LL | type TADyn3 = dyn Iterator; | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:125:43 + --> $DIR/duplicate.rs:239:34 | -LL | trait TRA1 { type A: Iterator; } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | type A: Iterator; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:127:43 + --> $DIR/duplicate.rs:243:34 | -LL | trait TRA2 { type A: Iterator; } - | ---------- ^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | type A: Iterator; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified - --> $DIR/duplicate.rs:129:46 + --> $DIR/duplicate.rs:247:37 | -LL | trait TRA3 { type A: Iterator; } - | ------------- ^^^^^^^^^^^^^ re-bound here - | | - | `Item` bound here first +LL | type A: Iterator; + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first error: aborting due to 60 previous errors diff --git a/src/test/ui/associated-type-bounds/duplicate.rs b/src/test/ui/associated-type-bounds/duplicate.rs index 0d7804ef1a7d5..e1a2ab37a3a31 100644 --- a/src/test/ui/associated-type-bounds/duplicate.rs +++ b/src/test/ui/associated-type-bounds/duplicate.rs @@ -2,49 +2,111 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![feature(untagged_unions)] use std::iter; -struct SI1> { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -struct SI2> { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -struct SI3> { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -struct SW1 where T: Iterator { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -struct SW2 where T: Iterator { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -struct SW3 where T: Iterator { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +struct SI1> { + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + f: T, +} +struct SI2> { + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + f: T, +} +struct SI3> { + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + f: T, +} +struct SW1 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ + f: T, +} +struct SW2 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ + f: T, +} +struct SW3 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ + f: T, +} -enum EI1> { V(T) } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -enum EI2> { V(T) } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -enum EI3> { V(T) } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -enum EW1 where T: Iterator { V(T) } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -enum EW2 where T: Iterator { V(T) } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -enum EW3 where T: Iterator { V(T) } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +enum EI1> { + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + V(T), +} +enum EI2> { + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + V(T), +} +enum EI3> { + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + V(T), +} +enum EW1 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ + V(T), +} +enum EW2 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ + V(T), +} +enum EW3 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ + V(T), +} -union UI1> { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -union UI2> { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -union UI3> { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -union UW1 where T: Iterator { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -union UW2 where T: Iterator { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -union UW3 where T: Iterator { f: T } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +union UI1> { + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + f: T, +} +union UI2> { + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + f: T, +} +union UI3> { + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + f: T, +} +union UW1 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ + f: T, +} +union UW2 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ + f: T, +} +union UW3 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ + f: T, +} fn FI1>() {} //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] @@ -52,16 +114,34 @@ fn FI2>() {} //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] fn FI3>() {} //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -fn FW1() where T: Iterator {} -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -fn FW2() where T: Iterator {} -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -fn FW3() where T: Iterator {} -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +fn FW1() +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ +} +fn FW2() +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ +} +fn FW3() +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ +} -fn FRPIT1() -> impl Iterator { iter::empty() } -fn FRPIT2() -> impl Iterator { iter::empty() } -fn FRPIT3() -> impl Iterator { iter::empty() } +fn FRPIT1() -> impl Iterator { + iter::empty() +} +fn FRPIT2() -> impl Iterator { + iter::empty() +} +fn FRPIT3() -> impl Iterator { + iter::empty() +} fn FAPIT1(_: impl Iterator) {} //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] fn FAPIT2(_: impl Iterator) {} @@ -75,12 +155,21 @@ type TAI2> = T; //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] type TAI3> = T; //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -type TAW1 where T: Iterator = T; +type TAW1 +where + T: Iterator, //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -type TAW2 where T: Iterator = T; += T; +type TAW2 +where + T: Iterator, //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -type TAW3 where T: Iterator = T; += T; +type TAW3 +where + T: Iterator, //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] += T; type ETAI1> = impl Copy; //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] @@ -107,27 +196,57 @@ trait TRS2: Iterator {} //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] trait TRS3: Iterator {} //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -trait TRW1 where T: Iterator {} -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -trait TRW2 where T: Iterator {} -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -trait TRW3 where T: Iterator {} -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -trait TRSW1 where Self: Iterator {} -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -//~| ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -trait TRSW2 where Self: Iterator {} -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -//~| ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -trait TRSW3 where Self: Iterator {} -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -//~| ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -trait TRA1 { type A: Iterator; } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -trait TRA2 { type A: Iterator; } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] -trait TRA3 { type A: Iterator; } -//~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +trait TRW1 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ +} +trait TRW2 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ +} +trait TRW3 +where + T: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ +} +trait TRSW1 +where + Self: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + //~| ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ +} +trait TRSW2 +where + Self: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + //~| ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ +} +trait TRSW3 +where + Self: Iterator, + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] + //~| ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +{ +} +trait TRA1 { + type A: Iterator; + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +} +trait TRA2 { + type A: Iterator; + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +} +trait TRA3 { + type A: Iterator; + //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] +} type TADyn1 = dyn Iterator; //~^ ERROR the value of the associated type `Item` (from trait `Iterator`) is already specified [E0719] diff --git a/src/test/ui/associated-type-bounds/trait-alias-impl-trait.full_tait.stderr b/src/test/ui/associated-type-bounds/trait-alias-impl-trait.full_tait.stderr deleted file mode 100644 index d4da4babf4e11..0000000000000 --- a/src/test/ui/associated-type-bounds/trait-alias-impl-trait.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/trait-alias-impl-trait.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/associated-type-bounds/trait-alias-impl-trait.rs b/src/test/ui/associated-type-bounds/trait-alias-impl-trait.rs index cf20631af5bca..9a9031043b652 100644 --- a/src/test/ui/associated-type-bounds/trait-alias-impl-trait.rs +++ b/src/test/ui/associated-type-bounds/trait-alias-impl-trait.rs @@ -4,36 +4,58 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::ops::Add; -trait Tr1 { type As1; fn mk(self) -> Self::As1; } -trait Tr2<'a> { fn tr2(self) -> &'a Self; } +trait Tr1 { + type As1; + fn mk(self) -> Self::As1; +} +trait Tr2<'a> { + fn tr2(self) -> &'a Self; +} -fn assert_copy(x: T) { let _x = x; let _x = x; } +fn assert_copy(x: T) { + let _x = x; + let _x = x; +} fn assert_static(_: T) {} fn assert_forall_tr2 Tr2<'a>>(_: T) {} struct S1; #[derive(Copy, Clone)] struct S2; -impl Tr1 for S1 { type As1 = S2; fn mk(self) -> Self::As1 { S2 } } +impl Tr1 for S1 { + type As1 = S2; + fn mk(self) -> Self::As1 { + S2 + } +} type Et1 = impl Tr1; -fn def_et1() -> Et1 { S1 } -pub fn use_et1() { assert_copy(def_et1().mk()); } +fn def_et1() -> Et1 { + S1 +} +pub fn use_et1() { + assert_copy(def_et1().mk()); +} type Et2 = impl Tr1; -fn def_et2() -> Et2 { S1 } -pub fn use_et2() { assert_static(def_et2().mk()); } +fn def_et2() -> Et2 { + S1 +} +pub fn use_et2() { + assert_static(def_et2().mk()); +} type Et3 = impl Tr1>>>; fn def_et3() -> Et3 { struct A; impl Tr1 for A { type As1 = core::ops::Range; - fn mk(self) -> Self::As1 { 0..10 } + fn mk(self) -> Self::As1 { + 0..10 + } } A } @@ -53,14 +75,20 @@ fn def_et4() -> Et4 { struct A; impl Tr1 for A { type As1 = A; - fn mk(self) -> A { A } + fn mk(self) -> A { + A + } } impl<'a> Tr2<'a> for A { - fn tr2(self) -> &'a Self { &A } + fn tr2(self) -> &'a Self { + &A + } } A } -pub fn use_et4() { assert_forall_tr2(def_et4().mk()); } +pub fn use_et4() { + assert_forall_tr2(def_et4().mk()); +} fn main() { let _ = use_et1(); diff --git a/src/test/ui/associated-types/issue-63591.full_tait.stderr b/src/test/ui/associated-types/issue-63591.full_tait.stderr deleted file mode 100644 index 9857f7e2677a8..0000000000000 --- a/src/test/ui/associated-types/issue-63591.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-63591.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/associated-types/issue-63591.rs b/src/test/ui/associated-types/issue-63591.rs index bba9ae2d9e70f..04b688674960d 100644 --- a/src/test/ui/associated-types/issue-63591.rs +++ b/src/test/ui/associated-types/issue-63591.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} diff --git a/src/test/ui/async-await/issues/issue-60655-latebound-regions.full_tait.stderr b/src/test/ui/async-await/issues/issue-60655-latebound-regions.full_tait.stderr deleted file mode 100644 index cc61becd71b1f..0000000000000 --- a/src/test/ui/async-await/issues/issue-60655-latebound-regions.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-60655-latebound-regions.rs:8:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs b/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs index f8b6a43896166..c132d9b9d7ded 100644 --- a/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs +++ b/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs @@ -6,7 +6,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::future::Future; diff --git a/src/test/ui/generator/layout-error.full_tait.stderr b/src/test/ui/generator/layout-error.full_tait.stderr index bf647d089833a..76314611fa217 100644 --- a/src/test/ui/generator/layout-error.full_tait.stderr +++ b/src/test/ui/generator/layout-error.full_tait.stderr @@ -1,18 +1,9 @@ error[E0425]: cannot find value `Foo` in this scope - --> $DIR/layout-error.rs:24:17 + --> $DIR/layout-error.rs:23:17 | LL | let a = Foo; | ^^^ not found in this scope -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/layout-error.rs:8:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0425`. diff --git a/src/test/ui/generator/layout-error.min_tait.stderr b/src/test/ui/generator/layout-error.min_tait.stderr index ed31c260cbc0f..09ff1abb8325f 100644 --- a/src/test/ui/generator/layout-error.min_tait.stderr +++ b/src/test/ui/generator/layout-error.min_tait.stderr @@ -1,11 +1,11 @@ error[E0425]: cannot find value `Foo` in this scope - --> $DIR/layout-error.rs:24:17 + --> $DIR/layout-error.rs:23:17 | LL | let a = Foo; | ^^^ not found in this scope error[E0658]: type alias impl trait is not permitted here - --> $DIR/layout-error.rs:30:27 + --> $DIR/layout-error.rs:29:27 | LL | Task::spawn(&POOL, || cb()); | ^ diff --git a/src/test/ui/generator/layout-error.rs b/src/test/ui/generator/layout-error.rs index a5efc3899dd4d..e8fd4f807e012 100644 --- a/src/test/ui/generator/layout-error.rs +++ b/src/test/ui/generator/layout-error.rs @@ -6,7 +6,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::future::Future; pub struct Task(F); diff --git a/src/test/ui/generator/metadata-sufficient-for-layout.full_tait.stderr b/src/test/ui/generator/metadata-sufficient-for-layout.full_tait.stderr index 1e609e8388277..4c70dc5e95816 100644 --- a/src/test/ui/generator/metadata-sufficient-for-layout.full_tait.stderr +++ b/src/test/ui/generator/metadata-sufficient-for-layout.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/metadata-sufficient-for-layout.rs:10:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: fatal error triggered by #[rustc_error] - --> $DIR/metadata-sufficient-for-layout.rs:28:1 + --> $DIR/metadata-sufficient-for-layout.rs:27:1 | LL | fn main() {} | ^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/generator/metadata-sufficient-for-layout.min_tait.stderr b/src/test/ui/generator/metadata-sufficient-for-layout.min_tait.stderr index 52d42fd59a003..4c70dc5e95816 100644 --- a/src/test/ui/generator/metadata-sufficient-for-layout.min_tait.stderr +++ b/src/test/ui/generator/metadata-sufficient-for-layout.min_tait.stderr @@ -1,5 +1,5 @@ error: fatal error triggered by #[rustc_error] - --> $DIR/metadata-sufficient-for-layout.rs:28:1 + --> $DIR/metadata-sufficient-for-layout.rs:27:1 | LL | fn main() {} | ^^^^^^^^^ diff --git a/src/test/ui/generator/metadata-sufficient-for-layout.rs b/src/test/ui/generator/metadata-sufficient-for-layout.rs index c01354569f07d..50093987e4b5f 100644 --- a/src/test/ui/generator/metadata-sufficient-for-layout.rs +++ b/src/test/ui/generator/metadata-sufficient-for-layout.rs @@ -8,7 +8,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait, rustc_attrs)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![feature(generator_trait)] extern crate metadata_sufficient_for_layout; diff --git a/src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.full_tait.stderr b/src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.full_tait.stderr deleted file mode 100644 index 174c4c62da92e..0000000000000 --- a/src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/associated-impl-trait-type-generic-trait.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.rs b/src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.rs index b2dad596ffa9c..fb816fb39e685 100644 --- a/src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.rs +++ b/src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete // build-pass (FIXME(62277): could be check-pass?) trait Bar {} diff --git a/src/test/ui/impl-trait/associated-impl-trait-type-trivial.full_tait.stderr b/src/test/ui/impl-trait/associated-impl-trait-type-trivial.full_tait.stderr deleted file mode 100644 index e3dd4a60b4df7..0000000000000 --- a/src/test/ui/impl-trait/associated-impl-trait-type-trivial.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/associated-impl-trait-type-trivial.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/impl-trait/associated-impl-trait-type-trivial.rs b/src/test/ui/impl-trait/associated-impl-trait-type-trivial.rs index c101ba2294830..57747b286bf91 100644 --- a/src/test/ui/impl-trait/associated-impl-trait-type-trivial.rs +++ b/src/test/ui/impl-trait/associated-impl-trait-type-trivial.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete // build-pass (FIXME(62277): could be check-pass?) trait Bar {} diff --git a/src/test/ui/impl-trait/associated-impl-trait-type.full_tait.stderr b/src/test/ui/impl-trait/associated-impl-trait-type.full_tait.stderr deleted file mode 100644 index 39147b00a346e..0000000000000 --- a/src/test/ui/impl-trait/associated-impl-trait-type.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/associated-impl-trait-type.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/impl-trait/associated-impl-trait-type.rs b/src/test/ui/impl-trait/associated-impl-trait-type.rs index 5c28eba2261fc..39e98ebe665ba 100644 --- a/src/test/ui/impl-trait/associated-impl-trait-type.rs +++ b/src/test/ui/impl-trait/associated-impl-trait-type.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete // build-pass (FIXME(62277): could be check-pass?) trait Bar {} diff --git a/src/test/ui/impl-trait/auto-trait.full_tait.stderr b/src/test/ui/impl-trait/auto-trait.full_tait.stderr index 314617748b0ba..3f25ca4b327f0 100644 --- a/src/test/ui/impl-trait/auto-trait.full_tait.stderr +++ b/src/test/ui/impl-trait/auto-trait.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/auto-trait.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0119]: conflicting implementations of trait `AnotherTrait` for type `D` - --> $DIR/auto-trait.rs:24:1 + --> $DIR/auto-trait.rs:23:1 | LL | impl AnotherTrait for T {} | -------------------------------- first implementation here @@ -16,6 +7,6 @@ LL | impl AnotherTrait for T {} LL | impl AnotherTrait for D { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `D` -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0119`. diff --git a/src/test/ui/impl-trait/auto-trait.min_tait.stderr b/src/test/ui/impl-trait/auto-trait.min_tait.stderr index 75a5b0cb87db1..3f25ca4b327f0 100644 --- a/src/test/ui/impl-trait/auto-trait.min_tait.stderr +++ b/src/test/ui/impl-trait/auto-trait.min_tait.stderr @@ -1,5 +1,5 @@ error[E0119]: conflicting implementations of trait `AnotherTrait` for type `D` - --> $DIR/auto-trait.rs:24:1 + --> $DIR/auto-trait.rs:23:1 | LL | impl AnotherTrait for T {} | -------------------------------- first implementation here diff --git a/src/test/ui/impl-trait/auto-trait.rs b/src/test/ui/impl-trait/auto-trait.rs index c965a34c12b32..59bd09e348a9f 100644 --- a/src/test/ui/impl-trait/auto-trait.rs +++ b/src/test/ui/impl-trait/auto-trait.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait OpaqueTrait {} impl OpaqueTrait for T {} diff --git a/src/test/ui/impl-trait/issue-55872-1.full_tait.stderr b/src/test/ui/impl-trait/issue-55872-1.full_tait.stderr index 286dd7aafb43f..94d73be195cf8 100644 --- a/src/test/ui/impl-trait/issue-55872-1.full_tait.stderr +++ b/src/test/ui/impl-trait/issue-55872-1.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-55872-1.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0276]: impl has stricter requirements than trait - --> $DIR/issue-55872-1.rs:17:5 + --> $DIR/issue-55872-1.rs:16:5 | LL | fn foo() -> Self::E; | ----------------------- definition of `foo` from trait @@ -17,7 +8,7 @@ LL | fn foo() -> Self::E { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: Default` error[E0277]: the trait bound `S: Copy` is not satisfied in `(S, T)` - --> $DIR/issue-55872-1.rs:13:14 + --> $DIR/issue-55872-1.rs:12:14 | LL | type E = impl Copy; | ^^^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `S` @@ -29,7 +20,7 @@ LL | impl Bar for S { | ^^^^^^^^^^^^^^^^^^^ error[E0277]: the trait bound `T: Copy` is not satisfied in `(S, T)` - --> $DIR/issue-55872-1.rs:13:14 + --> $DIR/issue-55872-1.rs:12:14 | LL | type E = impl Copy; | ^^^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `T` @@ -41,7 +32,7 @@ LL | fn foo() -> Self::E { | ^^^^^^^^^^^^^^^^^^^ error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-55872-1.rs:17:37 + --> $DIR/issue-55872-1.rs:16:37 | LL | fn foo() -> Self::E { | _____________________________________^ @@ -51,7 +42,7 @@ LL | | (S::default(), T::default()) LL | | } | |_____^ -error: aborting due to 4 previous errors; 1 warning emitted +error: aborting due to 4 previous errors Some errors have detailed explanations: E0276, E0277. For more information about an error, try `rustc --explain E0276`. diff --git a/src/test/ui/impl-trait/issue-55872-1.min_tait.stderr b/src/test/ui/impl-trait/issue-55872-1.min_tait.stderr index 653299f4cbcee..94d73be195cf8 100644 --- a/src/test/ui/impl-trait/issue-55872-1.min_tait.stderr +++ b/src/test/ui/impl-trait/issue-55872-1.min_tait.stderr @@ -1,5 +1,5 @@ error[E0276]: impl has stricter requirements than trait - --> $DIR/issue-55872-1.rs:17:5 + --> $DIR/issue-55872-1.rs:16:5 | LL | fn foo() -> Self::E; | ----------------------- definition of `foo` from trait @@ -8,7 +8,7 @@ LL | fn foo() -> Self::E { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: Default` error[E0277]: the trait bound `S: Copy` is not satisfied in `(S, T)` - --> $DIR/issue-55872-1.rs:13:14 + --> $DIR/issue-55872-1.rs:12:14 | LL | type E = impl Copy; | ^^^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `S` @@ -20,7 +20,7 @@ LL | impl Bar for S { | ^^^^^^^^^^^^^^^^^^^ error[E0277]: the trait bound `T: Copy` is not satisfied in `(S, T)` - --> $DIR/issue-55872-1.rs:13:14 + --> $DIR/issue-55872-1.rs:12:14 | LL | type E = impl Copy; | ^^^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `T` @@ -32,7 +32,7 @@ LL | fn foo() -> Self::E { | ^^^^^^^^^^^^^^^^^^^ error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-55872-1.rs:17:37 + --> $DIR/issue-55872-1.rs:16:37 | LL | fn foo() -> Self::E { | _____________________________________^ diff --git a/src/test/ui/impl-trait/issue-55872-1.rs b/src/test/ui/impl-trait/issue-55872-1.rs index a9e9c9b5bebeb..c6a331e58fee4 100644 --- a/src/test/ui/impl-trait/issue-55872-1.rs +++ b/src/test/ui/impl-trait/issue-55872-1.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete pub trait Bar { type E: Copy; diff --git a/src/test/ui/impl-trait/issue-55872-2.full_tait.stderr b/src/test/ui/impl-trait/issue-55872-2.full_tait.stderr index a8fc681a093d5..305e916c9a98b 100644 --- a/src/test/ui/impl-trait/issue-55872-2.full_tait.stderr +++ b/src/test/ui/impl-trait/issue-55872-2.full_tait.stderr @@ -1,20 +1,11 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-55872-2.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0277]: the trait bound `impl Future: Copy` is not satisfied - --> $DIR/issue-55872-2.rs:16:14 + --> $DIR/issue-55872-2.rs:15:14 | LL | type E = impl std::marker::Copy; | ^^^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `impl Future` error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-55872-2.rs:18:28 + --> $DIR/issue-55872-2.rs:17:28 | LL | fn foo() -> Self::E { | ____________________________^ @@ -23,6 +14,6 @@ LL | | async {} LL | | } | |_____^ -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 E0277`. diff --git a/src/test/ui/impl-trait/issue-55872-2.min_tait.stderr b/src/test/ui/impl-trait/issue-55872-2.min_tait.stderr index 57f81443dccdf..305e916c9a98b 100644 --- a/src/test/ui/impl-trait/issue-55872-2.min_tait.stderr +++ b/src/test/ui/impl-trait/issue-55872-2.min_tait.stderr @@ -1,11 +1,11 @@ error[E0277]: the trait bound `impl Future: Copy` is not satisfied - --> $DIR/issue-55872-2.rs:16:14 + --> $DIR/issue-55872-2.rs:15:14 | LL | type E = impl std::marker::Copy; | ^^^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `impl Future` error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-55872-2.rs:18:28 + --> $DIR/issue-55872-2.rs:17:28 | LL | fn foo() -> Self::E { | ____________________________^ diff --git a/src/test/ui/impl-trait/issue-55872-2.rs b/src/test/ui/impl-trait/issue-55872-2.rs index cd72b2eec3cf9..44839e5e845ae 100644 --- a/src/test/ui/impl-trait/issue-55872-2.rs +++ b/src/test/ui/impl-trait/issue-55872-2.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete pub trait Bar { type E: Copy; diff --git a/src/test/ui/impl-trait/issue-55872.full_tait.stderr b/src/test/ui/impl-trait/issue-55872.full_tait.stderr index e549fec1c229e..3fffd09836b20 100644 --- a/src/test/ui/impl-trait/issue-55872.full_tait.stderr +++ b/src/test/ui/impl-trait/issue-55872.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-55872.rs:4:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-55872.rs:16:28 + --> $DIR/issue-55872.rs:15:28 | LL | fn foo() -> Self::E { | ____________________________^ @@ -17,5 +8,5 @@ LL | | || () LL | | } | |_____^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/impl-trait/issue-55872.min_tait.stderr b/src/test/ui/impl-trait/issue-55872.min_tait.stderr index 341dba95cad85..3fffd09836b20 100644 --- a/src/test/ui/impl-trait/issue-55872.min_tait.stderr +++ b/src/test/ui/impl-trait/issue-55872.min_tait.stderr @@ -1,5 +1,5 @@ error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-55872.rs:16:28 + --> $DIR/issue-55872.rs:15:28 | LL | fn foo() -> Self::E { | ____________________________^ diff --git a/src/test/ui/impl-trait/issue-55872.rs b/src/test/ui/impl-trait/issue-55872.rs index e3fc523feccb9..049d61a425e39 100644 --- a/src/test/ui/impl-trait/issue-55872.rs +++ b/src/test/ui/impl-trait/issue-55872.rs @@ -2,7 +2,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete pub trait Bar { type E: Copy; @@ -14,7 +13,7 @@ impl Bar for S { type E = impl Copy; fn foo() -> Self::E { - //~^ ERROR type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + //~^ ERROR type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias || () } } diff --git a/src/test/ui/impl-trait/issues/issue-53457.full_tait.stderr b/src/test/ui/impl-trait/issues/issue-53457.full_tait.stderr deleted file mode 100644 index 906578c291f16..0000000000000 --- a/src/test/ui/impl-trait/issues/issue-53457.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-53457.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/impl-trait/issues/issue-53457.rs b/src/test/ui/impl-trait/issues/issue-53457.rs index c44e7f01f25d0..c6d7be47dfe65 100644 --- a/src/test/ui/impl-trait/issues/issue-53457.rs +++ b/src/test/ui/impl-trait/issues/issue-53457.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type X = impl Clone; diff --git a/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr b/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr index 728644f757991..b446eae9c3f1e 100644 --- a/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr +++ b/src/test/ui/impl-trait/issues/issue-78722.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-78722.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0308]: mismatched types - --> $DIR/issue-78722.rs:15:20 + --> $DIR/issue-78722.rs:14:20 | LL | type F = impl core::future::Future; | -------------------------------------- the expected opaque type @@ -23,10 +14,10 @@ LL | let f: F = async { 1 }; LL | pub const fn from_generator(gen: T) -> impl Future | ------------------------------- the found opaque type | - = note: expected opaque type `impl Future` (opaque type at <$DIR/issue-78722.rs:8:10>) + = note: expected opaque type `impl Future` (opaque type at <$DIR/issue-78722.rs:7:10>) found opaque type `impl Future` (opaque type at <$SRC_DIR/core/src/future/mod.rs:LL:COL>) = note: distinct uses of `impl Trait` result in different opaque types -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr b/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr index 221b23ae3d2ad..b446eae9c3f1e 100644 --- a/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr +++ b/src/test/ui/impl-trait/issues/issue-78722.min_tait.stderr @@ -1,5 +1,5 @@ error[E0308]: mismatched types - --> $DIR/issue-78722.rs:15:20 + --> $DIR/issue-78722.rs:14:20 | LL | type F = impl core::future::Future; | -------------------------------------- the expected opaque type @@ -14,7 +14,7 @@ LL | let f: F = async { 1 }; LL | pub const fn from_generator(gen: T) -> impl Future | ------------------------------- the found opaque type | - = note: expected opaque type `impl Future` (opaque type at <$DIR/issue-78722.rs:8:10>) + = note: expected opaque type `impl Future` (opaque type at <$DIR/issue-78722.rs:7:10>) found opaque type `impl Future` (opaque type at <$SRC_DIR/core/src/future/mod.rs:LL:COL>) = note: distinct uses of `impl Trait` result in different opaque types diff --git a/src/test/ui/impl-trait/issues/issue-78722.rs b/src/test/ui/impl-trait/issues/issue-78722.rs index 480b55eed21e2..0b8569b6e5fa0 100644 --- a/src/test/ui/impl-trait/issues/issue-78722.rs +++ b/src/test/ui/impl-trait/issues/issue-78722.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type F = impl core::future::Future; diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.full_tait.stderr b/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.full_tait.stderr index b2ebc7230b945..52ab9baff8b84 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.full_tait.stderr +++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.full_tait.stderr @@ -1,24 +1,15 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/error-handling-2.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds - --> $DIR/error-handling-2.rs:16:60 + --> $DIR/error-handling-2.rs:15:60 | LL | fn foo<'a: 'b, 'b, 'c>(x: &'static i32, mut y: &'a i32) -> E<'b, 'c> { | ^^^^^^^^^ | -note: hidden type `*mut &'a i32` captures the lifetime `'a` as defined on the function body at 16:8 - --> $DIR/error-handling-2.rs:16:8 +note: hidden type `*mut &'a i32` captures the lifetime `'a` as defined on the function body at 15:8 + --> $DIR/error-handling-2.rs:15:8 | LL | fn foo<'a: 'b, 'b, 'c>(x: &'static i32, mut y: &'a i32) -> E<'b, 'c> { | ^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0700`. diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.min_tait.stderr b/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.min_tait.stderr index 53745c290d03d..52ab9baff8b84 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.min_tait.stderr +++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.min_tait.stderr @@ -1,11 +1,11 @@ error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds - --> $DIR/error-handling-2.rs:16:60 + --> $DIR/error-handling-2.rs:15:60 | LL | fn foo<'a: 'b, 'b, 'c>(x: &'static i32, mut y: &'a i32) -> E<'b, 'c> { | ^^^^^^^^^ | -note: hidden type `*mut &'a i32` captures the lifetime `'a` as defined on the function body at 16:8 - --> $DIR/error-handling-2.rs:16:8 +note: hidden type `*mut &'a i32` captures the lifetime `'a` as defined on the function body at 15:8 + --> $DIR/error-handling-2.rs:15:8 | LL | fn foo<'a: 'b, 'b, 'c>(x: &'static i32, mut y: &'a i32) -> E<'b, 'c> { | ^^ diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.rs b/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.rs index 196ddf9b8e4ab..cfc493928c079 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.rs +++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #[derive(Clone)] struct CopyIfEq(T, U); diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.full_tait.stderr b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.full_tait.stderr index ff99d037d198f..cdcb7d7c38eec 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.full_tait.stderr +++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/error-handling.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: lifetime may not live long enough - --> $DIR/error-handling.rs:25:16 + --> $DIR/error-handling.rs:24:16 | LL | fn foo<'a, 'b, 'c>(x: &'static i32, mut y: &'a i32) -> E<'b, 'c> { | -- -- lifetime `'b` defined here @@ -20,5 +11,5 @@ LL | let _: &'b i32 = *u.0; | = help: consider adding the following bound: `'a: 'b` -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.min_tait.stderr b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.min_tait.stderr index 4b23ba81604a9..cdcb7d7c38eec 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.min_tait.stderr +++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.min_tait.stderr @@ -1,5 +1,5 @@ error: lifetime may not live long enough - --> $DIR/error-handling.rs:25:16 + --> $DIR/error-handling.rs:24:16 | LL | fn foo<'a, 'b, 'c>(x: &'static i32, mut y: &'a i32) -> E<'b, 'c> { | -- -- lifetime `'b` defined here diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.rs b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.rs index 1ead78e02ed45..23d5c9da31138 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.rs +++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #[derive(Clone)] struct CopyIfEq(T, U); diff --git a/src/test/ui/impl-trait/negative-reasoning.full_tait.stderr b/src/test/ui/impl-trait/negative-reasoning.full_tait.stderr index bccbc8cb36b15..edecdd061e1a4 100644 --- a/src/test/ui/impl-trait/negative-reasoning.full_tait.stderr +++ b/src/test/ui/impl-trait/negative-reasoning.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/negative-reasoning.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0119]: conflicting implementations of trait `AnotherTrait` for type `D` - --> $DIR/negative-reasoning.rs:22:1 + --> $DIR/negative-reasoning.rs:21:1 | LL | impl AnotherTrait for T {} | ------------------------------------------- first implementation here @@ -18,6 +9,6 @@ LL | impl AnotherTrait for D { | = note: upstream crates may add a new impl of trait `std::fmt::Debug` for type `impl OpaqueTrait` in future versions -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0119`. diff --git a/src/test/ui/impl-trait/negative-reasoning.min_tait.stderr b/src/test/ui/impl-trait/negative-reasoning.min_tait.stderr index 5727a372ddbe8..edecdd061e1a4 100644 --- a/src/test/ui/impl-trait/negative-reasoning.min_tait.stderr +++ b/src/test/ui/impl-trait/negative-reasoning.min_tait.stderr @@ -1,5 +1,5 @@ error[E0119]: conflicting implementations of trait `AnotherTrait` for type `D` - --> $DIR/negative-reasoning.rs:22:1 + --> $DIR/negative-reasoning.rs:21:1 | LL | impl AnotherTrait for T {} | ------------------------------------------- first implementation here diff --git a/src/test/ui/impl-trait/negative-reasoning.rs b/src/test/ui/impl-trait/negative-reasoning.rs index 7f608cc99db15..0838f32b932bf 100644 --- a/src/test/ui/impl-trait/negative-reasoning.rs +++ b/src/test/ui/impl-trait/negative-reasoning.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait OpaqueTrait {} impl OpaqueTrait for T {} diff --git a/src/test/ui/impl-trait/type-alias-generic-param.full_tait.stderr b/src/test/ui/impl-trait/type-alias-generic-param.full_tait.stderr deleted file mode 100644 index 965e3e4887bb2..0000000000000 --- a/src/test/ui/impl-trait/type-alias-generic-param.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-generic-param.rs:8:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/impl-trait/type-alias-generic-param.rs b/src/test/ui/impl-trait/type-alias-generic-param.rs index 733e10e56f88e..9cb9a6de2d6fc 100644 --- a/src/test/ui/impl-trait/type-alias-generic-param.rs +++ b/src/test/ui/impl-trait/type-alias-generic-param.rs @@ -6,7 +6,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait Meow { type MeowType; @@ -14,7 +13,8 @@ trait Meow { } impl Meow for I - where I: Iterator +where + I: Iterator, { type MeowType = impl Iterator; fn meow(self) -> Self::MeowType { diff --git a/src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.full_tait.stderr b/src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.full_tait.stderr deleted file mode 100644 index ec939e5718a94..0000000000000 --- a/src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-impl-trait-in-fn-body.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.rs b/src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.rs index 32ca4af304348..996840dc1960a 100644 --- a/src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.rs +++ b/src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; diff --git a/src/test/ui/issues/issue-60662.full_tait.stderr b/src/test/ui/issues/issue-60662.full_tait.stderr deleted file mode 100644 index a448f85b7625d..0000000000000 --- a/src/test/ui/issues/issue-60662.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-60662.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/issues/issue-60662.rs b/src/test/ui/issues/issue-60662.rs index 1320d2bbe93d0..5079e33650f73 100644 --- a/src/test/ui/issues/issue-60662.rs +++ b/src/test/ui/issues/issue-60662.rs @@ -4,10 +4,8 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete -trait Animal { -} +trait Animal {} fn main() { pub type ServeFut = impl Animal; diff --git a/src/test/ui/lint/inline-trait-and-foreign-items.full_tait.stderr b/src/test/ui/lint/inline-trait-and-foreign-items.full_tait.stderr index 65b4631010f20..d17c05ef29837 100644 --- a/src/test/ui/lint/inline-trait-and-foreign-items.full_tait.stderr +++ b/src/test/ui/lint/inline-trait-and-foreign-items.full_tait.stderr @@ -1,20 +1,11 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/inline-trait-and-foreign-items.rs:4:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - warning: `#[inline]` is ignored on constants - --> $DIR/inline-trait-and-foreign-items.rs:10:5 + --> $DIR/inline-trait-and-foreign-items.rs:9:5 | LL | #[inline] | ^^^^^^^^^ | note: the lint level is defined here - --> $DIR/inline-trait-and-foreign-items.rs:7:9 + --> $DIR/inline-trait-and-foreign-items.rs:6:9 | LL | #![warn(unused_attributes)] | ^^^^^^^^^^^^^^^^^ @@ -22,7 +13,7 @@ LL | #![warn(unused_attributes)] = note: see issue #65833 for more information error[E0518]: attribute should be applied to function or closure - --> $DIR/inline-trait-and-foreign-items.rs:14:5 + --> $DIR/inline-trait-and-foreign-items.rs:13:5 | LL | #[inline] | ^^^^^^^^^ @@ -30,7 +21,7 @@ LL | type T; | ------- not a function or closure warning: `#[inline]` is ignored on constants - --> $DIR/inline-trait-and-foreign-items.rs:21:5 + --> $DIR/inline-trait-and-foreign-items.rs:20:5 | LL | #[inline] | ^^^^^^^^^ @@ -39,7 +30,7 @@ LL | #[inline] = note: see issue #65833 for more information error[E0518]: attribute should be applied to function or closure - --> $DIR/inline-trait-and-foreign-items.rs:25:5 + --> $DIR/inline-trait-and-foreign-items.rs:24:5 | LL | #[inline] | ^^^^^^^^^ @@ -47,7 +38,7 @@ LL | type T = Self; | -------------- not a function or closure error[E0518]: attribute should be applied to function or closure - --> $DIR/inline-trait-and-foreign-items.rs:28:5 + --> $DIR/inline-trait-and-foreign-items.rs:27:5 | LL | #[inline] | ^^^^^^^^^ @@ -55,7 +46,7 @@ LL | type U = impl Trait; | -------------------- not a function or closure error[E0518]: attribute should be applied to function or closure - --> $DIR/inline-trait-and-foreign-items.rs:33:5 + --> $DIR/inline-trait-and-foreign-items.rs:32:5 | LL | #[inline] | ^^^^^^^^^ @@ -63,7 +54,7 @@ LL | static X: u32; | -------------- not a function or closure error[E0518]: attribute should be applied to function or closure - --> $DIR/inline-trait-and-foreign-items.rs:36:5 + --> $DIR/inline-trait-and-foreign-items.rs:35:5 | LL | #[inline] | ^^^^^^^^^ @@ -71,11 +62,11 @@ LL | type T; | ------- not a function or closure error: could not find defining uses - --> $DIR/inline-trait-and-foreign-items.rs:29:14 + --> $DIR/inline-trait-and-foreign-items.rs:28:14 | LL | type U = impl Trait; | ^^^^^^^^^^ -error: aborting due to 6 previous errors; 3 warnings emitted +error: aborting due to 6 previous errors; 2 warnings emitted For more information about this error, try `rustc --explain E0518`. diff --git a/src/test/ui/lint/inline-trait-and-foreign-items.min_tait.stderr b/src/test/ui/lint/inline-trait-and-foreign-items.min_tait.stderr index b9f123905a70c..d17c05ef29837 100644 --- a/src/test/ui/lint/inline-trait-and-foreign-items.min_tait.stderr +++ b/src/test/ui/lint/inline-trait-and-foreign-items.min_tait.stderr @@ -1,11 +1,11 @@ warning: `#[inline]` is ignored on constants - --> $DIR/inline-trait-and-foreign-items.rs:10:5 + --> $DIR/inline-trait-and-foreign-items.rs:9:5 | LL | #[inline] | ^^^^^^^^^ | note: the lint level is defined here - --> $DIR/inline-trait-and-foreign-items.rs:7:9 + --> $DIR/inline-trait-and-foreign-items.rs:6:9 | LL | #![warn(unused_attributes)] | ^^^^^^^^^^^^^^^^^ @@ -13,7 +13,7 @@ LL | #![warn(unused_attributes)] = note: see issue #65833 for more information error[E0518]: attribute should be applied to function or closure - --> $DIR/inline-trait-and-foreign-items.rs:14:5 + --> $DIR/inline-trait-and-foreign-items.rs:13:5 | LL | #[inline] | ^^^^^^^^^ @@ -21,7 +21,7 @@ LL | type T; | ------- not a function or closure warning: `#[inline]` is ignored on constants - --> $DIR/inline-trait-and-foreign-items.rs:21:5 + --> $DIR/inline-trait-and-foreign-items.rs:20:5 | LL | #[inline] | ^^^^^^^^^ @@ -30,7 +30,7 @@ LL | #[inline] = note: see issue #65833 for more information error[E0518]: attribute should be applied to function or closure - --> $DIR/inline-trait-and-foreign-items.rs:25:5 + --> $DIR/inline-trait-and-foreign-items.rs:24:5 | LL | #[inline] | ^^^^^^^^^ @@ -38,7 +38,7 @@ LL | type T = Self; | -------------- not a function or closure error[E0518]: attribute should be applied to function or closure - --> $DIR/inline-trait-and-foreign-items.rs:28:5 + --> $DIR/inline-trait-and-foreign-items.rs:27:5 | LL | #[inline] | ^^^^^^^^^ @@ -46,7 +46,7 @@ LL | type U = impl Trait; | -------------------- not a function or closure error[E0518]: attribute should be applied to function or closure - --> $DIR/inline-trait-and-foreign-items.rs:33:5 + --> $DIR/inline-trait-and-foreign-items.rs:32:5 | LL | #[inline] | ^^^^^^^^^ @@ -54,7 +54,7 @@ LL | static X: u32; | -------------- not a function or closure error[E0518]: attribute should be applied to function or closure - --> $DIR/inline-trait-and-foreign-items.rs:36:5 + --> $DIR/inline-trait-and-foreign-items.rs:35:5 | LL | #[inline] | ^^^^^^^^^ @@ -62,7 +62,7 @@ LL | type T; | ------- not a function or closure error: could not find defining uses - --> $DIR/inline-trait-and-foreign-items.rs:29:14 + --> $DIR/inline-trait-and-foreign-items.rs:28:14 | LL | type U = impl Trait; | ^^^^^^^^^^ diff --git a/src/test/ui/lint/inline-trait-and-foreign-items.rs b/src/test/ui/lint/inline-trait-and-foreign-items.rs index 3103cc9d31dc8..9d9579ec26c26 100644 --- a/src/test/ui/lint/inline-trait-and-foreign-items.rs +++ b/src/test/ui/lint/inline-trait-and-foreign-items.rs @@ -2,7 +2,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![warn(unused_attributes)] diff --git a/src/test/ui/lint/lint-ctypes-73249-2.full_tait.stderr b/src/test/ui/lint/lint-ctypes-73249-2.full_tait.stderr index 619ca15839b39..0e02b7bf4d9ae 100644 --- a/src/test/ui/lint/lint-ctypes-73249-2.full_tait.stderr +++ b/src/test/ui/lint/lint-ctypes-73249-2.full_tait.stderr @@ -1,24 +1,15 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/lint-ctypes-73249-2.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: `extern` block uses type `impl Baz`, which is not FFI-safe - --> $DIR/lint-ctypes-73249-2.rs:29:25 + --> $DIR/lint-ctypes-73249-2.rs:28:25 | LL | pub fn lint_me() -> A<()>; | ^^^^^ not FFI-safe | note: the lint level is defined here - --> $DIR/lint-ctypes-73249-2.rs:5:9 + --> $DIR/lint-ctypes-73249-2.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ = note: opaque types have no C equivalent -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/lint/lint-ctypes-73249-2.min_tait.stderr b/src/test/ui/lint/lint-ctypes-73249-2.min_tait.stderr index 479bd5744735f..0e02b7bf4d9ae 100644 --- a/src/test/ui/lint/lint-ctypes-73249-2.min_tait.stderr +++ b/src/test/ui/lint/lint-ctypes-73249-2.min_tait.stderr @@ -1,11 +1,11 @@ error: `extern` block uses type `impl Baz`, which is not FFI-safe - --> $DIR/lint-ctypes-73249-2.rs:29:25 + --> $DIR/lint-ctypes-73249-2.rs:28:25 | LL | pub fn lint_me() -> A<()>; | ^^^^^ not FFI-safe | note: the lint level is defined here - --> $DIR/lint-ctypes-73249-2.rs:5:9 + --> $DIR/lint-ctypes-73249-2.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ diff --git a/src/test/ui/lint/lint-ctypes-73249-2.rs b/src/test/ui/lint/lint-ctypes-73249-2.rs index f3313f892175b..8535307756ba3 100644 --- a/src/test/ui/lint/lint-ctypes-73249-2.rs +++ b/src/test/ui/lint/lint-ctypes-73249-2.rs @@ -1,12 +1,11 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![deny(improper_ctypes)] -pub trait Baz { } +pub trait Baz {} -impl Baz for () { } +impl Baz for () {} type Qux = impl Baz; diff --git a/src/test/ui/lint/lint-ctypes-73249-3.full_tait.stderr b/src/test/ui/lint/lint-ctypes-73249-3.full_tait.stderr index af0f26a9f43e6..60661e96ddf36 100644 --- a/src/test/ui/lint/lint-ctypes-73249-3.full_tait.stderr +++ b/src/test/ui/lint/lint-ctypes-73249-3.full_tait.stderr @@ -1,24 +1,15 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/lint-ctypes-73249-3.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: `extern` block uses type `impl Baz`, which is not FFI-safe - --> $DIR/lint-ctypes-73249-3.rs:21:25 + --> $DIR/lint-ctypes-73249-3.rs:22:25 | LL | pub fn lint_me() -> A; | ^ not FFI-safe | note: the lint level is defined here - --> $DIR/lint-ctypes-73249-3.rs:5:9 + --> $DIR/lint-ctypes-73249-3.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ = note: opaque types have no C equivalent -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/lint/lint-ctypes-73249-3.min_tait.stderr b/src/test/ui/lint/lint-ctypes-73249-3.min_tait.stderr index 880581ff05d22..60661e96ddf36 100644 --- a/src/test/ui/lint/lint-ctypes-73249-3.min_tait.stderr +++ b/src/test/ui/lint/lint-ctypes-73249-3.min_tait.stderr @@ -1,11 +1,11 @@ error: `extern` block uses type `impl Baz`, which is not FFI-safe - --> $DIR/lint-ctypes-73249-3.rs:21:25 + --> $DIR/lint-ctypes-73249-3.rs:22:25 | LL | pub fn lint_me() -> A; | ^ not FFI-safe | note: the lint level is defined here - --> $DIR/lint-ctypes-73249-3.rs:5:9 + --> $DIR/lint-ctypes-73249-3.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ diff --git a/src/test/ui/lint/lint-ctypes-73249-3.rs b/src/test/ui/lint/lint-ctypes-73249-3.rs index 966c7d5ce3cb6..287287d449cf5 100644 --- a/src/test/ui/lint/lint-ctypes-73249-3.rs +++ b/src/test/ui/lint/lint-ctypes-73249-3.rs @@ -1,16 +1,17 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![deny(improper_ctypes)] -pub trait Baz { } +pub trait Baz {} -impl Baz for u32 { } +impl Baz for u32 {} type Qux = impl Baz; -fn assign() -> Qux { 3 } +fn assign() -> Qux { + 3 +} #[repr(C)] pub struct A { diff --git a/src/test/ui/lint/lint-ctypes-73249-5.full_tait.stderr b/src/test/ui/lint/lint-ctypes-73249-5.full_tait.stderr index b80084fce068c..aa1238a751212 100644 --- a/src/test/ui/lint/lint-ctypes-73249-5.full_tait.stderr +++ b/src/test/ui/lint/lint-ctypes-73249-5.full_tait.stderr @@ -1,24 +1,15 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/lint-ctypes-73249-5.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: `extern` block uses type `impl Baz`, which is not FFI-safe - --> $DIR/lint-ctypes-73249-5.rs:21:25 + --> $DIR/lint-ctypes-73249-5.rs:22:25 | LL | pub fn lint_me() -> A; | ^ not FFI-safe | note: the lint level is defined here - --> $DIR/lint-ctypes-73249-5.rs:5:9 + --> $DIR/lint-ctypes-73249-5.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ = note: opaque types have no C equivalent -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/lint/lint-ctypes-73249-5.min_tait.stderr b/src/test/ui/lint/lint-ctypes-73249-5.min_tait.stderr index f42549d909656..aa1238a751212 100644 --- a/src/test/ui/lint/lint-ctypes-73249-5.min_tait.stderr +++ b/src/test/ui/lint/lint-ctypes-73249-5.min_tait.stderr @@ -1,11 +1,11 @@ error: `extern` block uses type `impl Baz`, which is not FFI-safe - --> $DIR/lint-ctypes-73249-5.rs:21:25 + --> $DIR/lint-ctypes-73249-5.rs:22:25 | LL | pub fn lint_me() -> A; | ^ not FFI-safe | note: the lint level is defined here - --> $DIR/lint-ctypes-73249-5.rs:5:9 + --> $DIR/lint-ctypes-73249-5.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ diff --git a/src/test/ui/lint/lint-ctypes-73249-5.rs b/src/test/ui/lint/lint-ctypes-73249-5.rs index 81979a9b6e696..b877364d9b6fd 100644 --- a/src/test/ui/lint/lint-ctypes-73249-5.rs +++ b/src/test/ui/lint/lint-ctypes-73249-5.rs @@ -1,16 +1,17 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![deny(improper_ctypes)] -pub trait Baz { } +pub trait Baz {} -impl Baz for u32 { } +impl Baz for u32 {} type Qux = impl Baz; -fn assign() -> Qux { 3 } +fn assign() -> Qux { + 3 +} #[repr(transparent)] pub struct A { diff --git a/src/test/ui/lint/lint-ctypes-73251-1.full_tait.stderr b/src/test/ui/lint/lint-ctypes-73251-1.full_tait.stderr index 5610230380b80..33f2ee59577d3 100644 --- a/src/test/ui/lint/lint-ctypes-73251-1.full_tait.stderr +++ b/src/test/ui/lint/lint-ctypes-73251-1.full_tait.stderr @@ -1,24 +1,15 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/lint-ctypes-73251-1.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: `extern` block uses type `impl Baz`, which is not FFI-safe - --> $DIR/lint-ctypes-73251-1.rs:24:25 + --> $DIR/lint-ctypes-73251-1.rs:25:25 | LL | pub fn lint_me() -> ::Assoc; | ^^^^^^^^^^^^^^^^^^^ not FFI-safe | note: the lint level is defined here - --> $DIR/lint-ctypes-73251-1.rs:5:9 + --> $DIR/lint-ctypes-73251-1.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ = note: opaque types have no C equivalent -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/lint/lint-ctypes-73251-1.min_tait.stderr b/src/test/ui/lint/lint-ctypes-73251-1.min_tait.stderr index 5b00fc4cce657..33f2ee59577d3 100644 --- a/src/test/ui/lint/lint-ctypes-73251-1.min_tait.stderr +++ b/src/test/ui/lint/lint-ctypes-73251-1.min_tait.stderr @@ -1,11 +1,11 @@ error: `extern` block uses type `impl Baz`, which is not FFI-safe - --> $DIR/lint-ctypes-73251-1.rs:24:25 + --> $DIR/lint-ctypes-73251-1.rs:25:25 | LL | pub fn lint_me() -> ::Assoc; | ^^^^^^^^^^^^^^^^^^^ not FFI-safe | note: the lint level is defined here - --> $DIR/lint-ctypes-73251-1.rs:5:9 + --> $DIR/lint-ctypes-73251-1.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ diff --git a/src/test/ui/lint/lint-ctypes-73251-1.rs b/src/test/ui/lint/lint-ctypes-73251-1.rs index 3f15a2fb42c42..042878c977808 100644 --- a/src/test/ui/lint/lint-ctypes-73251-1.rs +++ b/src/test/ui/lint/lint-ctypes-73251-1.rs @@ -1,12 +1,11 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![deny(improper_ctypes)] -pub trait Baz { } +pub trait Baz {} -impl Baz for u32 { } +impl Baz for u32 {} type Qux = impl Baz; @@ -18,7 +17,9 @@ impl Foo for u32 { type Assoc = Qux; } -fn assign() -> Qux { 1 } +fn assign() -> Qux { + 1 +} extern "C" { pub fn lint_me() -> ::Assoc; //~ ERROR: uses type `impl Baz` diff --git a/src/test/ui/lint/lint-ctypes-73251-2.full_tait.stderr b/src/test/ui/lint/lint-ctypes-73251-2.full_tait.stderr index 19911264a36d7..152aaa183e35a 100644 --- a/src/test/ui/lint/lint-ctypes-73251-2.full_tait.stderr +++ b/src/test/ui/lint/lint-ctypes-73251-2.full_tait.stderr @@ -1,24 +1,15 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/lint-ctypes-73251-2.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: `extern` block uses type `impl TraitA`, which is not FFI-safe - --> $DIR/lint-ctypes-73251-2.rs:32:25 + --> $DIR/lint-ctypes-73251-2.rs:38:25 | LL | pub fn lint_me() -> ::Assoc; | ^^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe | note: the lint level is defined here - --> $DIR/lint-ctypes-73251-2.rs:5:9 + --> $DIR/lint-ctypes-73251-2.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ = note: opaque types have no C equivalent -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/lint/lint-ctypes-73251-2.min_tait.stderr b/src/test/ui/lint/lint-ctypes-73251-2.min_tait.stderr index 4130ee7b4cb6b..152aaa183e35a 100644 --- a/src/test/ui/lint/lint-ctypes-73251-2.min_tait.stderr +++ b/src/test/ui/lint/lint-ctypes-73251-2.min_tait.stderr @@ -1,11 +1,11 @@ error: `extern` block uses type `impl TraitA`, which is not FFI-safe - --> $DIR/lint-ctypes-73251-2.rs:32:25 + --> $DIR/lint-ctypes-73251-2.rs:38:25 | LL | pub fn lint_me() -> ::Assoc; | ^^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe | note: the lint level is defined here - --> $DIR/lint-ctypes-73251-2.rs:5:9 + --> $DIR/lint-ctypes-73251-2.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ diff --git a/src/test/ui/lint/lint-ctypes-73251-2.rs b/src/test/ui/lint/lint-ctypes-73251-2.rs index 888671daca5e4..5a124b2fea50e 100644 --- a/src/test/ui/lint/lint-ctypes-73251-2.rs +++ b/src/test/ui/lint/lint-ctypes-73251-2.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![deny(improper_ctypes)] pub trait TraitA { @@ -16,7 +15,10 @@ pub trait TraitB { type Assoc; } -impl TraitB for T where T: TraitA { +impl TraitB for T +where + T: TraitA, +{ type Assoc = ::Assoc; } @@ -24,9 +26,13 @@ type AliasA = impl TraitA; type AliasB = impl TraitB; -fn use_of_a() -> AliasA { 3 } +fn use_of_a() -> AliasA { + 3 +} -fn use_of_b() -> AliasB { 3 } +fn use_of_b() -> AliasB { + 3 +} extern "C" { pub fn lint_me() -> ::Assoc; //~ ERROR: uses type `impl TraitA` diff --git a/src/test/ui/lint/lint-ctypes-73251.full_tait.stderr b/src/test/ui/lint/lint-ctypes-73251.full_tait.stderr deleted file mode 100644 index 577cf6cf5453c..0000000000000 --- a/src/test/ui/lint/lint-ctypes-73251.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/lint-ctypes-73251.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/lint/lint-ctypes-73251.rs b/src/test/ui/lint/lint-ctypes-73251.rs index 36e541612d16b..24742b64f8e98 100644 --- a/src/test/ui/lint/lint-ctypes-73251.rs +++ b/src/test/ui/lint/lint-ctypes-73251.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![deny(improper_ctypes)] pub trait Foo { diff --git a/src/test/ui/lint/opaque-ty-ffi-unsafe.full_tait.stderr b/src/test/ui/lint/opaque-ty-ffi-unsafe.full_tait.stderr index 5433d6e6ae241..d7b916f8ad58a 100644 --- a/src/test/ui/lint/opaque-ty-ffi-unsafe.full_tait.stderr +++ b/src/test/ui/lint/opaque-ty-ffi-unsafe.full_tait.stderr @@ -1,24 +1,15 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/opaque-ty-ffi-unsafe.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: `extern` block uses type `impl Fn<()>`, which is not FFI-safe - --> $DIR/opaque-ty-ffi-unsafe.rs:14:17 + --> $DIR/opaque-ty-ffi-unsafe.rs:13:17 | LL | pub fn a(_: A); | ^ not FFI-safe | note: the lint level is defined here - --> $DIR/opaque-ty-ffi-unsafe.rs:5:9 + --> $DIR/opaque-ty-ffi-unsafe.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ = note: opaque types have no C equivalent -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/lint/opaque-ty-ffi-unsafe.min_tait.stderr b/src/test/ui/lint/opaque-ty-ffi-unsafe.min_tait.stderr index 2f20912d2a6ea..d7b916f8ad58a 100644 --- a/src/test/ui/lint/opaque-ty-ffi-unsafe.min_tait.stderr +++ b/src/test/ui/lint/opaque-ty-ffi-unsafe.min_tait.stderr @@ -1,11 +1,11 @@ error: `extern` block uses type `impl Fn<()>`, which is not FFI-safe - --> $DIR/opaque-ty-ffi-unsafe.rs:14:17 + --> $DIR/opaque-ty-ffi-unsafe.rs:13:17 | LL | pub fn a(_: A); | ^ not FFI-safe | note: the lint level is defined here - --> $DIR/opaque-ty-ffi-unsafe.rs:5:9 + --> $DIR/opaque-ty-ffi-unsafe.rs:4:9 | LL | #![deny(improper_ctypes)] | ^^^^^^^^^^^^^^^ diff --git a/src/test/ui/lint/opaque-ty-ffi-unsafe.rs b/src/test/ui/lint/opaque-ty-ffi-unsafe.rs index 0e9df9195523a..0c9fed8b98c29 100644 --- a/src/test/ui/lint/opaque-ty-ffi-unsafe.rs +++ b/src/test/ui/lint/opaque-ty-ffi-unsafe.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![deny(improper_ctypes)] type A = impl Fn(); @@ -12,7 +11,7 @@ pub fn ret_closure() -> A { extern "C" { pub fn a(_: A); -//~^ ERROR `extern` block uses type `impl Fn<()>`, which is not FFI-safe + //~^ ERROR `extern` block uses type `impl Fn<()>`, which is not FFI-safe } fn main() {} diff --git a/src/test/ui/mir/issue-75053.full_tait.stderr b/src/test/ui/mir/issue-75053.full_tait.stderr index 543d15fadc6be..e2a5b8876e3ec 100644 --- a/src/test/ui/mir/issue-75053.full_tait.stderr +++ b/src/test/ui/mir/issue-75053.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-75053.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: fatal error triggered by #[rustc_error] - --> $DIR/issue-75053.rs:49:1 + --> $DIR/issue-75053.rs:48:1 | LL | fn main() { | ^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/mir/issue-75053.min_tait.stderr b/src/test/ui/mir/issue-75053.min_tait.stderr index c533275c99a79..e2a5b8876e3ec 100644 --- a/src/test/ui/mir/issue-75053.min_tait.stderr +++ b/src/test/ui/mir/issue-75053.min_tait.stderr @@ -1,5 +1,5 @@ error: fatal error triggered by #[rustc_error] - --> $DIR/issue-75053.rs:49:1 + --> $DIR/issue-75053.rs:48:1 | LL | fn main() { | ^^^^^^^^^ diff --git a/src/test/ui/mir/issue-75053.rs b/src/test/ui/mir/issue-75053.rs index b71f84dd9c24e..bcd689775a092 100644 --- a/src/test/ui/mir/issue-75053.rs +++ b/src/test/ui/mir/issue-75053.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait, rustc_attrs)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::marker::PhantomData; diff --git a/src/test/ui/privacy/private-in-public-assoc-ty.full_tait.stderr b/src/test/ui/privacy/private-in-public-assoc-ty.full_tait.stderr index a74c7c93a2eb5..f1f95c72150f5 100644 --- a/src/test/ui/privacy/private-in-public-assoc-ty.full_tait.stderr +++ b/src/test/ui/privacy/private-in-public-assoc-ty.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/private-in-public-assoc-ty.rs:7:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0446]: private type `Priv` in public interface - --> $DIR/private-in-public-assoc-ty.rs:20:9 + --> $DIR/private-in-public-assoc-ty.rs:19:9 | LL | struct Priv; | ------------ `Priv` declared as private @@ -17,7 +8,7 @@ LL | type A = Priv; | ^^^^^^^^^^^^^^ can't leak private type warning: private trait `PrivTr` in public interface (error E0445) - --> $DIR/private-in-public-assoc-ty.rs:27:9 + --> $DIR/private-in-public-assoc-ty.rs:26:9 | LL | type Alias1: PrivTr; | ^^^^^^^^^^^^^^^^^^^^ @@ -27,7 +18,7 @@ LL | type Alias1: PrivTr; = note: for more information, see issue #34537 warning: private type `Priv` in public interface (error E0446) - --> $DIR/private-in-public-assoc-ty.rs:30:9 + --> $DIR/private-in-public-assoc-ty.rs:29:9 | LL | type Alias2: PubTrAux1 = u8; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -36,7 +27,7 @@ LL | type Alias2: PubTrAux1 = u8; = note: for more information, see issue #34537 warning: private type `Priv` in public interface (error E0446) - --> $DIR/private-in-public-assoc-ty.rs:33:9 + --> $DIR/private-in-public-assoc-ty.rs:32:9 | LL | type Alias3: PubTrAux2 = u8; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -45,7 +36,7 @@ LL | type Alias3: PubTrAux2 = u8; = note: for more information, see issue #34537 error[E0446]: private type `Priv` in public interface - --> $DIR/private-in-public-assoc-ty.rs:37:9 + --> $DIR/private-in-public-assoc-ty.rs:36:9 | LL | struct Priv; | ------------ `Priv` declared as private @@ -54,7 +45,7 @@ LL | type Alias4 = Priv; | ^^^^^^^^^^^^^^^^^^^ can't leak private type error[E0446]: private type `Priv` in public interface - --> $DIR/private-in-public-assoc-ty.rs:44:9 + --> $DIR/private-in-public-assoc-ty.rs:43:9 | LL | struct Priv; | ------------ `Priv` declared as private @@ -63,7 +54,7 @@ LL | type Alias1 = Priv; | ^^^^^^^^^^^^^^^^^^^ can't leak private type error[E0445]: private trait `PrivTr` in public interface - --> $DIR/private-in-public-assoc-ty.rs:47:9 + --> $DIR/private-in-public-assoc-ty.rs:46:9 | LL | trait PrivTr {} | ------------ `PrivTr` declared as private @@ -71,7 +62,7 @@ LL | trait PrivTr {} LL | type Exist = impl PrivTr; | ^^^^^^^^^^^^^^^^^^^^^^^^^ can't leak private trait -error: aborting due to 4 previous errors; 4 warnings emitted +error: aborting due to 4 previous errors; 3 warnings emitted Some errors have detailed explanations: E0445, E0446. For more information about an error, try `rustc --explain E0445`. diff --git a/src/test/ui/privacy/private-in-public-assoc-ty.min_tait.stderr b/src/test/ui/privacy/private-in-public-assoc-ty.min_tait.stderr index 36230ffd04b7c..f1f95c72150f5 100644 --- a/src/test/ui/privacy/private-in-public-assoc-ty.min_tait.stderr +++ b/src/test/ui/privacy/private-in-public-assoc-ty.min_tait.stderr @@ -1,5 +1,5 @@ error[E0446]: private type `Priv` in public interface - --> $DIR/private-in-public-assoc-ty.rs:20:9 + --> $DIR/private-in-public-assoc-ty.rs:19:9 | LL | struct Priv; | ------------ `Priv` declared as private @@ -8,7 +8,7 @@ LL | type A = Priv; | ^^^^^^^^^^^^^^ can't leak private type warning: private trait `PrivTr` in public interface (error E0445) - --> $DIR/private-in-public-assoc-ty.rs:27:9 + --> $DIR/private-in-public-assoc-ty.rs:26:9 | LL | type Alias1: PrivTr; | ^^^^^^^^^^^^^^^^^^^^ @@ -18,7 +18,7 @@ LL | type Alias1: PrivTr; = note: for more information, see issue #34537 warning: private type `Priv` in public interface (error E0446) - --> $DIR/private-in-public-assoc-ty.rs:30:9 + --> $DIR/private-in-public-assoc-ty.rs:29:9 | LL | type Alias2: PubTrAux1 = u8; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -27,7 +27,7 @@ LL | type Alias2: PubTrAux1 = u8; = note: for more information, see issue #34537 warning: private type `Priv` in public interface (error E0446) - --> $DIR/private-in-public-assoc-ty.rs:33:9 + --> $DIR/private-in-public-assoc-ty.rs:32:9 | LL | type Alias3: PubTrAux2 = u8; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -36,7 +36,7 @@ LL | type Alias3: PubTrAux2 = u8; = note: for more information, see issue #34537 error[E0446]: private type `Priv` in public interface - --> $DIR/private-in-public-assoc-ty.rs:37:9 + --> $DIR/private-in-public-assoc-ty.rs:36:9 | LL | struct Priv; | ------------ `Priv` declared as private @@ -45,7 +45,7 @@ LL | type Alias4 = Priv; | ^^^^^^^^^^^^^^^^^^^ can't leak private type error[E0446]: private type `Priv` in public interface - --> $DIR/private-in-public-assoc-ty.rs:44:9 + --> $DIR/private-in-public-assoc-ty.rs:43:9 | LL | struct Priv; | ------------ `Priv` declared as private @@ -54,7 +54,7 @@ LL | type Alias1 = Priv; | ^^^^^^^^^^^^^^^^^^^ can't leak private type error[E0445]: private trait `PrivTr` in public interface - --> $DIR/private-in-public-assoc-ty.rs:47:9 + --> $DIR/private-in-public-assoc-ty.rs:46:9 | LL | trait PrivTr {} | ------------ `PrivTr` declared as private diff --git a/src/test/ui/privacy/private-in-public-assoc-ty.rs b/src/test/ui/privacy/private-in-public-assoc-ty.rs index f8fb565943092..dd2dcc6a2ea95 100644 --- a/src/test/ui/privacy/private-in-public-assoc-ty.rs +++ b/src/test/ui/privacy/private-in-public-assoc-ty.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete mod m { struct Priv; diff --git a/src/test/ui/privacy/private-in-public-type-alias-impl-trait.full_tait.stderr b/src/test/ui/privacy/private-in-public-type-alias-impl-trait.full_tait.stderr deleted file mode 100644 index c419c7ee4d44a..0000000000000 --- a/src/test/ui/privacy/private-in-public-type-alias-impl-trait.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/private-in-public-type-alias-impl-trait.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/privacy/private-in-public-type-alias-impl-trait.rs b/src/test/ui/privacy/private-in-public-type-alias-impl-trait.rs index 8443631253f78..91dade4a2c147 100644 --- a/src/test/ui/privacy/private-in-public-type-alias-impl-trait.rs +++ b/src/test/ui/privacy/private-in-public-type-alias-impl-trait.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![deny(private_in_public)] pub type Pub = impl Default; @@ -22,7 +21,9 @@ pub trait Trait { impl Trait for u8 { type Pub = impl Default; - fn method() -> Self::Pub { Priv } + fn method() -> Self::Pub { + Priv + } } fn main() {} diff --git a/src/test/ui/save-analysis/issue-68621.full_tait.stderr b/src/test/ui/save-analysis/issue-68621.full_tait.stderr index 193aed2615ce6..9206f68345017 100644 --- a/src/test/ui/save-analysis/issue-68621.full_tait.stderr +++ b/src/test/ui/save-analysis/issue-68621.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-68621.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: could not find defining uses - --> $DIR/issue-68621.rs:17:19 + --> $DIR/issue-68621.rs:16:19 | LL | type Future = impl Trait; | ^^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/save-analysis/issue-68621.min_tait.stderr b/src/test/ui/save-analysis/issue-68621.min_tait.stderr index cccfb3de8fb1b..9206f68345017 100644 --- a/src/test/ui/save-analysis/issue-68621.min_tait.stderr +++ b/src/test/ui/save-analysis/issue-68621.min_tait.stderr @@ -1,5 +1,5 @@ error: could not find defining uses - --> $DIR/issue-68621.rs:17:19 + --> $DIR/issue-68621.rs:16:19 | LL | type Future = impl Trait; | ^^^^^^^^^^ diff --git a/src/test/ui/save-analysis/issue-68621.rs b/src/test/ui/save-analysis/issue-68621.rs index 1f4a9080cc934..33bb55e50e0f9 100644 --- a/src/test/ui/save-analysis/issue-68621.rs +++ b/src/test/ui/save-analysis/issue-68621.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait Trait {} diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-const.full_tait.stderr b/src/test/ui/type-alias-impl-trait/assoc-type-const.full_tait.stderr index 7b43d1d86bcd4..ea214e70fc8b3 100644 --- a/src/test/ui/type-alias-impl-trait/assoc-type-const.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/assoc-type-const.full_tait.stderr @@ -1,19 +1,11 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/assoc-type-const.rs:7:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/assoc-type-const.rs:9:12 + --> $DIR/assoc-type-const.rs:8:12 | LL | #![feature(const_generics)] | ^^^^^^^^^^^^^^ | + = note: `#[warn(incomplete_features)]` on by default = note: see issue #44580 for more information -warning: 2 warnings emitted +warning: 1 warning emitted diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-const.min_tait.stderr b/src/test/ui/type-alias-impl-trait/assoc-type-const.min_tait.stderr index d4b9132cc927b..ea214e70fc8b3 100644 --- a/src/test/ui/type-alias-impl-trait/assoc-type-const.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/assoc-type-const.min_tait.stderr @@ -1,5 +1,5 @@ warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/assoc-type-const.rs:9:12 + --> $DIR/assoc-type-const.rs:8:12 | LL | #![feature(const_generics)] | ^^^^^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-const.rs b/src/test/ui/type-alias-impl-trait/assoc-type-const.rs index be065c3b6beac..4db32a3113c77 100644 --- a/src/test/ui/type-alias-impl-trait/assoc-type-const.rs +++ b/src/test/ui/type-alias-impl-trait/assoc-type-const.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![feature(const_generics)] //~^ WARN the feature `const_generics` is incomplete diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.full_tait.stderr b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.full_tait.stderr index 01263cde8bb19..aaaeb9bd695e8 100644 --- a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.full_tait.stderr @@ -1,18 +1,9 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/assoc-type-lifetime-unconstrained.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates - --> $DIR/assoc-type-lifetime-unconstrained.rs:20:6 + --> $DIR/assoc-type-lifetime-unconstrained.rs:19:6 | LL | impl<'a, I> UnwrapItemsExt for I { | ^^ unconstrained lifetime parameter -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.min_tait.stderr b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.min_tait.stderr index afcdab5f479df..aaaeb9bd695e8 100644 --- a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.min_tait.stderr @@ -1,5 +1,5 @@ error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates - --> $DIR/assoc-type-lifetime-unconstrained.rs:20:6 + --> $DIR/assoc-type-lifetime-unconstrained.rs:19:6 | LL | impl<'a, I> UnwrapItemsExt for I { | ^^ unconstrained lifetime parameter diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.rs b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.rs index 39cc75e688b83..cb849e129422f 100644 --- a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.rs +++ b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait UnwrapItemsExt { type Iter; diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.full_tait.stderr b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.full_tait.stderr deleted file mode 100644 index 31afbf14e658c..0000000000000 --- a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/assoc-type-lifetime.rs:7:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.rs b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.rs index ebbdbb67dbe6f..28535fe55674a 100644 --- a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.rs +++ b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait UnwrapItemsExt<'a> { type Iter; diff --git a/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.full_tait.stderr b/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.full_tait.stderr deleted file mode 100644 index 2c48d815e0de4..0000000000000 --- a/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/associated-type-alias-impl-trait.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.rs b/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.rs index 8d2b1826790b3..b9324991a5f0f 100644 --- a/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.rs +++ b/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete // build-pass (FIXME(62277): could be check-pass?) trait Bar {} diff --git a/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice.rs b/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice.rs index 94e1fa73de884..64bf96259f01e 100644 --- a/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice.rs +++ b/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete pub type Foo = impl std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice2.rs b/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice2.rs index 65bc594dcf2f7..09aa2691804d6 100644 --- a/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice2.rs +++ b/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice2.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete pub trait View { type Tmp: Iterator; @@ -18,6 +17,6 @@ impl View for X { type Tmp = impl Iterator; fn test(&self) -> Self::Tmp { - vec![1,2,3].into_iter() + vec![1, 2, 3].into_iter() } } diff --git a/src/test/ui/type-alias-impl-trait/bound_reduction2.full_tait.stderr b/src/test/ui/type-alias-impl-trait/bound_reduction2.full_tait.stderr index 164564e8516fc..b16d98ab72b77 100644 --- a/src/test/ui/type-alias-impl-trait/bound_reduction2.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/bound_reduction2.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/bound_reduction2.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: non-defining opaque type use in defining scope - --> $DIR/bound_reduction2.rs:18:46 + --> $DIR/bound_reduction2.rs:17:46 | LL | fn foo_desugared(_: T) -> Foo { | ^^^^^^^^^^^^^ | note: used non-generic type `::Assoc` for generic parameter - --> $DIR/bound_reduction2.rs:12:10 + --> $DIR/bound_reduction2.rs:11:10 | LL | type Foo = impl Trait; | ^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/bound_reduction2.min_tait.stderr b/src/test/ui/type-alias-impl-trait/bound_reduction2.min_tait.stderr index d3520a9bac2f3..b16d98ab72b77 100644 --- a/src/test/ui/type-alias-impl-trait/bound_reduction2.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/bound_reduction2.min_tait.stderr @@ -1,11 +1,11 @@ error: non-defining opaque type use in defining scope - --> $DIR/bound_reduction2.rs:18:46 + --> $DIR/bound_reduction2.rs:17:46 | LL | fn foo_desugared(_: T) -> Foo { | ^^^^^^^^^^^^^ | note: used non-generic type `::Assoc` for generic parameter - --> $DIR/bound_reduction2.rs:12:10 + --> $DIR/bound_reduction2.rs:11:10 | LL | type Foo = impl Trait; | ^ diff --git a/src/test/ui/type-alias-impl-trait/bound_reduction2.rs b/src/test/ui/type-alias-impl-trait/bound_reduction2.rs index b94b21e4244a2..3e56d115b474a 100644 --- a/src/test/ui/type-alias-impl-trait/bound_reduction2.rs +++ b/src/test/ui/type-alias-impl-trait/bound_reduction2.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.full_tait.stderr b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.full_tait.stderr index cfb1fe9c19a8b..a0099e343b855 100644 --- a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/bounds-are-checked-2.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0277]: the trait bound `T: Clone` is not satisfied - --> $DIR/bounds-are-checked-2.rs:9:13 + --> $DIR/bounds-are-checked-2.rs:8:13 | LL | type X = impl Clone; | ^^^^^^^^^^ the trait `Clone` is not implemented for `T` @@ -18,6 +9,6 @@ help: consider restricting type parameter `T` LL | type X = impl Clone; | ^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.min_tait.stderr b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.min_tait.stderr index 735b96d5df98e..a0099e343b855 100644 --- a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.min_tait.stderr @@ -1,5 +1,5 @@ error[E0277]: the trait bound `T: Clone` is not satisfied - --> $DIR/bounds-are-checked-2.rs:9:13 + --> $DIR/bounds-are-checked-2.rs:8:13 | LL | type X = impl Clone; | ^^^^^^^^^^ the trait `Clone` is not implemented for `T` diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs index fecc2543bce19..5ffcd7ae54601 100644 --- a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type X = impl Clone; //~^ ERROR the trait bound `T: Clone` is not satisfied diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked.full_tait.stderr b/src/test/ui/type-alias-impl-trait/bounds-are-checked.full_tait.stderr index ca89421cd8bf1..ec15474bf8498 100644 --- a/src/test/ui/type-alias-impl-trait/bounds-are-checked.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/bounds-are-checked.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - warning: unnecessary lifetime parameter `'a` - --> $DIR/bounds-are-checked.rs:12:6 + --> $DIR/bounds-are-checked.rs:11:6 | LL | fn f<'a: 'static>(t: &'a str) -> X<'a> { | ^^^^^^^^^^^ @@ -16,20 +7,20 @@ LL | fn f<'a: 'static>(t: &'a str) -> X<'a> { = help: you can use the `'static` lifetime directly, in place of `'a` error[E0308]: mismatched types - --> $DIR/bounds-are-checked.rs:9:14 + --> $DIR/bounds-are-checked.rs:8:14 | LL | type X<'a> = impl Into<&'static str> + From<&'a str>; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch | = note: expected trait `From<&'a str>` found trait `From<&'static str>` -note: the lifetime `'a` as defined on the item at 9:8... - --> $DIR/bounds-are-checked.rs:9:8 +note: the lifetime `'a` as defined on the item at 8:8... + --> $DIR/bounds-are-checked.rs:8:8 | LL | type X<'a> = impl Into<&'static str> + From<&'a str>; | ^^ = note: ...does not necessarily outlive the static lifetime -error: aborting due to previous error; 2 warnings emitted +error: aborting due to previous error; 1 warning emitted For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked.min_tait.stderr b/src/test/ui/type-alias-impl-trait/bounds-are-checked.min_tait.stderr index 9a451cb108373..ec15474bf8498 100644 --- a/src/test/ui/type-alias-impl-trait/bounds-are-checked.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked.min_tait.stderr @@ -1,5 +1,5 @@ warning: unnecessary lifetime parameter `'a` - --> $DIR/bounds-are-checked.rs:12:6 + --> $DIR/bounds-are-checked.rs:11:6 | LL | fn f<'a: 'static>(t: &'a str) -> X<'a> { | ^^^^^^^^^^^ @@ -7,15 +7,15 @@ LL | fn f<'a: 'static>(t: &'a str) -> X<'a> { = help: you can use the `'static` lifetime directly, in place of `'a` error[E0308]: mismatched types - --> $DIR/bounds-are-checked.rs:9:14 + --> $DIR/bounds-are-checked.rs:8:14 | LL | type X<'a> = impl Into<&'static str> + From<&'a str>; | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch | = note: expected trait `From<&'a str>` found trait `From<&'static str>` -note: the lifetime `'a` as defined on the item at 9:8... - --> $DIR/bounds-are-checked.rs:9:8 +note: the lifetime `'a` as defined on the item at 8:8... + --> $DIR/bounds-are-checked.rs:8:8 | LL | type X<'a> = impl Into<&'static str> + From<&'a str>; | ^^ diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked.rs b/src/test/ui/type-alias-impl-trait/bounds-are-checked.rs index 5e1faaa3b0839..74c49a9c6c7ff 100644 --- a/src/test/ui/type-alias-impl-trait/bounds-are-checked.rs +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type X<'a> = impl Into<&'static str> + From<&'a str>; //~^ ERROR mismatched types @@ -19,8 +18,7 @@ fn extend_lt<'a>(o: &'a str) -> &'static str { } fn main() { - let r = - { + let r = { let s = "abcdef".to_string(); extend_lt(&s) }; diff --git a/src/test/ui/type-alias-impl-trait/coherence.full_tait.stderr b/src/test/ui/type-alias-impl-trait/coherence.full_tait.stderr index 68de0c961ba1c..4d7335cd86524 100644 --- a/src/test/ui/type-alias-impl-trait/coherence.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/coherence.full_tait.stderr @@ -1,18 +1,9 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/coherence.rs:4:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates - --> $DIR/coherence.rs:17:6 + --> $DIR/coherence.rs:16:6 | LL | impl foreign_crate::ForeignTrait for AliasOfForeignType {} | ^ unconstrained type parameter -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/coherence.min_tait.stderr b/src/test/ui/type-alias-impl-trait/coherence.min_tait.stderr index 4da52369fdb5d..4d7335cd86524 100644 --- a/src/test/ui/type-alias-impl-trait/coherence.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/coherence.min_tait.stderr @@ -1,5 +1,5 @@ error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates - --> $DIR/coherence.rs:17:6 + --> $DIR/coherence.rs:16:6 | LL | impl foreign_crate::ForeignTrait for AliasOfForeignType {} | ^ unconstrained type parameter diff --git a/src/test/ui/type-alias-impl-trait/coherence.rs b/src/test/ui/type-alias-impl-trait/coherence.rs index 51babb0e61bd3..998eadeb2717c 100644 --- a/src/test/ui/type-alias-impl-trait/coherence.rs +++ b/src/test/ui/type-alias-impl-trait/coherence.rs @@ -2,7 +2,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete extern crate foreign_crate; diff --git a/src/test/ui/type-alias-impl-trait/declared_but_never_defined.full_tait.stderr b/src/test/ui/type-alias-impl-trait/declared_but_never_defined.full_tait.stderr index 5fc79cf9561fa..83019772afcb9 100644 --- a/src/test/ui/type-alias-impl-trait/declared_but_never_defined.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/declared_but_never_defined.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/declared_but_never_defined.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: could not find defining uses - --> $DIR/declared_but_never_defined.rs:9:12 + --> $DIR/declared_but_never_defined.rs:8:12 | LL | type Bar = impl std::fmt::Debug; | ^^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/declared_but_never_defined.min_tait.stderr b/src/test/ui/type-alias-impl-trait/declared_but_never_defined.min_tait.stderr index b731e41b149a8..83019772afcb9 100644 --- a/src/test/ui/type-alias-impl-trait/declared_but_never_defined.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/declared_but_never_defined.min_tait.stderr @@ -1,5 +1,5 @@ error: could not find defining uses - --> $DIR/declared_but_never_defined.rs:9:12 + --> $DIR/declared_but_never_defined.rs:8:12 | LL | type Bar = impl std::fmt::Debug; | ^^^^^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/declared_but_never_defined.rs b/src/test/ui/type-alias-impl-trait/declared_but_never_defined.rs index ac92bea8c47a4..a62ae2aff70b4 100644 --- a/src/test/ui/type-alias-impl-trait/declared_but_never_defined.rs +++ b/src/test/ui/type-alias-impl-trait/declared_but_never_defined.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.full_tait.stderr b/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.full_tait.stderr index eeccc598f529c..b3301a0ee4c4b 100644 --- a/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.full_tait.stderr @@ -1,20 +1,11 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/declared_but_not_defined_in_scope.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: could not find defining uses - --> $DIR/declared_but_not_defined_in_scope.rs:10:20 + --> $DIR/declared_but_not_defined_in_scope.rs:9:20 | LL | pub type Boo = impl ::std::fmt::Debug; | ^^^^^^^^^^^^^^^^^^^^^^ error[E0308]: mismatched types - --> $DIR/declared_but_not_defined_in_scope.rs:14:5 + --> $DIR/declared_but_not_defined_in_scope.rs:13:5 | LL | pub type Boo = impl ::std::fmt::Debug; | ---------------------- the expected opaque type @@ -27,6 +18,6 @@ LL | "" = note: expected opaque type `impl Debug` found reference `&'static str` -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 E0308`. diff --git a/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.min_tait.stderr b/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.min_tait.stderr index 20057c3aa5185..b3301a0ee4c4b 100644 --- a/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.min_tait.stderr @@ -1,11 +1,11 @@ error: could not find defining uses - --> $DIR/declared_but_not_defined_in_scope.rs:10:20 + --> $DIR/declared_but_not_defined_in_scope.rs:9:20 | LL | pub type Boo = impl ::std::fmt::Debug; | ^^^^^^^^^^^^^^^^^^^^^^ error[E0308]: mismatched types - --> $DIR/declared_but_not_defined_in_scope.rs:14:5 + --> $DIR/declared_but_not_defined_in_scope.rs:13:5 | LL | pub type Boo = impl ::std::fmt::Debug; | ---------------------- the expected opaque type diff --git a/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.rs b/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.rs index 2bbae98db448c..0ada4a38da3fb 100644 --- a/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.rs +++ b/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses.full_tait.stderr b/src/test/ui/type-alias-impl-trait/different_defining_uses.full_tait.stderr index 60fa141884db3..23c5f9587cc07 100644 --- a/src/test/ui/type-alias-impl-trait/different_defining_uses.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/different_defining_uses.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: concrete type differs from previous defining opaque type use - --> $DIR/different_defining_uses.rs:15:1 + --> $DIR/different_defining_uses.rs:14:1 | LL | fn bar() -> Foo { | ^^^^^^^^^^^^^^^ expected `&'static str`, got `i32` | note: previous use here - --> $DIR/different_defining_uses.rs:11:1 + --> $DIR/different_defining_uses.rs:10:1 | LL | fn foo() -> Foo { | ^^^^^^^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses.min_tait.stderr b/src/test/ui/type-alias-impl-trait/different_defining_uses.min_tait.stderr index 904ee58685cbf..23c5f9587cc07 100644 --- a/src/test/ui/type-alias-impl-trait/different_defining_uses.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses.min_tait.stderr @@ -1,11 +1,11 @@ error: concrete type differs from previous defining opaque type use - --> $DIR/different_defining_uses.rs:15:1 + --> $DIR/different_defining_uses.rs:14:1 | LL | fn bar() -> Foo { | ^^^^^^^^^^^^^^^ expected `&'static str`, got `i32` | note: previous use here - --> $DIR/different_defining_uses.rs:11:1 + --> $DIR/different_defining_uses.rs:10:1 | LL | fn foo() -> Foo { | ^^^^^^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses.rs b/src/test/ui/type-alias-impl-trait/different_defining_uses.rs index 542de6b62e197..bb981959b2200 100644 --- a/src/test/ui/type-alias-impl-trait/different_defining_uses.rs +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} @@ -12,6 +11,7 @@ fn foo() -> Foo { "" } -fn bar() -> Foo { //~ ERROR concrete type differs from previous +fn bar() -> Foo { + //~^ ERROR concrete type differs from previous 42i32 } diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.full_tait.stderr b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.full_tait.stderr index 5c5ae7eadcbcf..7b7906f58acaf 100644 --- a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.full_tait.stderr @@ -1,20 +1,11 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/different_defining_uses_never_type.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: concrete type differs from previous defining opaque type use - --> $DIR/different_defining_uses_never_type.rs:15:1 + --> $DIR/different_defining_uses_never_type.rs:14:1 | LL | fn bar() -> Foo { | ^^^^^^^^^^^^^^^ expected `&'static str`, got `()` | note: previous use here - --> $DIR/different_defining_uses_never_type.rs:11:1 + --> $DIR/different_defining_uses_never_type.rs:10:1 | LL | fn foo() -> Foo { | ^^^^^^^^^^^^^^^ @@ -26,10 +17,10 @@ LL | fn boo() -> Foo { | ^^^^^^^^^^^^^^^ expected `&'static str`, got `()` | note: previous use here - --> $DIR/different_defining_uses_never_type.rs:11:1 + --> $DIR/different_defining_uses_never_type.rs:10:1 | LL | fn foo() -> Foo { | ^^^^^^^^^^^^^^^ -error: aborting due to 2 previous errors; 1 warning emitted +error: aborting due to 2 previous errors diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.min_tait.stderr b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.min_tait.stderr index 9cf2c58368737..7b7906f58acaf 100644 --- a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.min_tait.stderr @@ -1,11 +1,11 @@ error: concrete type differs from previous defining opaque type use - --> $DIR/different_defining_uses_never_type.rs:15:1 + --> $DIR/different_defining_uses_never_type.rs:14:1 | LL | fn bar() -> Foo { | ^^^^^^^^^^^^^^^ expected `&'static str`, got `()` | note: previous use here - --> $DIR/different_defining_uses_never_type.rs:11:1 + --> $DIR/different_defining_uses_never_type.rs:10:1 | LL | fn foo() -> Foo { | ^^^^^^^^^^^^^^^ @@ -17,7 +17,7 @@ LL | fn boo() -> Foo { | ^^^^^^^^^^^^^^^ expected `&'static str`, got `()` | note: previous use here - --> $DIR/different_defining_uses_never_type.rs:11:1 + --> $DIR/different_defining_uses_never_type.rs:10:1 | LL | fn foo() -> Foo { | ^^^^^^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.rs b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.rs index 72352a74a04b6..716c7383c6115 100644 --- a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.rs +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} @@ -12,10 +11,12 @@ fn foo() -> Foo { "" } -fn bar() -> Foo { //~ ERROR concrete type differs from previous +fn bar() -> Foo { + //~^ ERROR concrete type differs from previous panic!() } -fn boo() -> Foo { //~ ERROR concrete type differs from previous +fn boo() -> Foo { + //~^ ERROR concrete type differs from previous loop {} } diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.full_tait.stderr b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.full_tait.stderr deleted file mode 100644 index b69622b77bfc4..0000000000000 --- a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/different_defining_uses_never_type2.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.rs b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.rs index ac9884b3e4501..8383f38ddbec0 100644 --- a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.rs +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/fallback.full_tait.stderr b/src/test/ui/type-alias-impl-trait/fallback.full_tait.stderr deleted file mode 100644 index 9641d756cb03e..0000000000000 --- a/src/test/ui/type-alias-impl-trait/fallback.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/fallback.rs:7:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/fallback.rs b/src/test/ui/type-alias-impl-trait/fallback.rs index 84fec75655fb2..204dc0496ede9 100644 --- a/src/test/ui/type-alias-impl-trait/fallback.rs +++ b/src/test/ui/type-alias-impl-trait/fallback.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type Foo = impl Copy; diff --git a/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.full_tait.stderr index 972e5d9428825..749530d8f327d 100644 --- a/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_different_defining_uses.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: concrete type differs from previous defining opaque type use - --> $DIR/generic_different_defining_uses.rs:14:1 + --> $DIR/generic_different_defining_uses.rs:13:1 | LL | fn my_iter2(t: T) -> MyIter { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `std::iter::Once`, got `std::option::IntoIter` | note: previous use here - --> $DIR/generic_different_defining_uses.rs:10:1 + --> $DIR/generic_different_defining_uses.rs:9:1 | LL | fn my_iter(t: T) -> MyIter { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.min_tait.stderr index 911683862c263..749530d8f327d 100644 --- a/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.min_tait.stderr @@ -1,11 +1,11 @@ error: concrete type differs from previous defining opaque type use - --> $DIR/generic_different_defining_uses.rs:14:1 + --> $DIR/generic_different_defining_uses.rs:13:1 | LL | fn my_iter2(t: T) -> MyIter { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `std::iter::Once`, got `std::option::IntoIter` | note: previous use here - --> $DIR/generic_different_defining_uses.rs:10:1 + --> $DIR/generic_different_defining_uses.rs:9:1 | LL | fn my_iter(t: T) -> MyIter { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.rs b/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.rs index 4eb603df583a8..adf4c1f86563b 100644 --- a/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.rs +++ b/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} @@ -11,6 +10,7 @@ fn my_iter(t: T) -> MyIter { std::iter::once(t) } -fn my_iter2(t: T) -> MyIter { //~ ERROR concrete type differs from previous +fn my_iter2(t: T) -> MyIter { + //~^ ERROR concrete type differs from previous Some(t).into_iter() } diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.full_tait.stderr index ecf0e39ed6f61..3dedb22330945 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_duplicate_lifetime_param.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: non-defining opaque type use in defining scope - --> $DIR/generic_duplicate_lifetime_param.rs:10:26 + --> $DIR/generic_duplicate_lifetime_param.rs:9:26 | LL | fn one<'a>(t: &'a ()) -> Two<'a, 'a> { | ^^^^^^^^^^^ | note: lifetime used multiple times - --> $DIR/generic_duplicate_lifetime_param.rs:8:10 + --> $DIR/generic_duplicate_lifetime_param.rs:7:10 | LL | type Two<'a, 'b> = impl std::fmt::Debug; | ^^ ^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.min_tait.stderr index 1aad312056bb5..3dedb22330945 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.min_tait.stderr @@ -1,11 +1,11 @@ error: non-defining opaque type use in defining scope - --> $DIR/generic_duplicate_lifetime_param.rs:10:26 + --> $DIR/generic_duplicate_lifetime_param.rs:9:26 | LL | fn one<'a>(t: &'a ()) -> Two<'a, 'a> { | ^^^^^^^^^^^ | note: lifetime used multiple times - --> $DIR/generic_duplicate_lifetime_param.rs:8:10 + --> $DIR/generic_duplicate_lifetime_param.rs:7:10 | LL | type Two<'a, 'b> = impl std::fmt::Debug; | ^^ ^^ diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs index d838d497238d5..f0b80db2a8312 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs @@ -1,12 +1,12 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} type Two<'a, 'b> = impl std::fmt::Debug; -fn one<'a>(t: &'a ()) -> Two<'a, 'a> { //~ ERROR non-defining opaque type use +fn one<'a>(t: &'a ()) -> Two<'a, 'a> { + //~^ ERROR non-defining opaque type use t } diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.full_tait.stderr deleted file mode 100644 index ef7d4f1be4eea..0000000000000 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_duplicate_param_use10.rs:4:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.rs index c7a7ded2127a9..afd2be2674588 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.rs @@ -2,7 +2,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.full_tait.stderr index 357d477c9f1e2..44bcdb7bf830c 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_duplicate_param_use2.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: non-defining opaque type use in defining scope - --> $DIR/generic_duplicate_param_use2.rs:13:27 + --> $DIR/generic_duplicate_param_use2.rs:12:27 | LL | fn one(t: T) -> Two { | ^^^^^^^^^ | note: type used multiple times - --> $DIR/generic_duplicate_param_use2.rs:11:10 + --> $DIR/generic_duplicate_param_use2.rs:10:10 | LL | type Two = impl Debug; | ^ ^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.min_tait.stderr index 805ab67816f97..44bcdb7bf830c 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.min_tait.stderr @@ -1,11 +1,11 @@ error: non-defining opaque type use in defining scope - --> $DIR/generic_duplicate_param_use2.rs:13:27 + --> $DIR/generic_duplicate_param_use2.rs:12:27 | LL | fn one(t: T) -> Two { | ^^^^^^^^^ | note: type used multiple times - --> $DIR/generic_duplicate_param_use2.rs:11:10 + --> $DIR/generic_duplicate_param_use2.rs:10:10 | LL | type Two = impl Debug; | ^ ^ diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.rs index ff51662282394..9627689b15c3c 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.full_tait.stderr index b2004c8416c49..0185afc76bcc4 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_duplicate_param_use3.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: non-defining opaque type use in defining scope - --> $DIR/generic_duplicate_param_use3.rs:13:27 + --> $DIR/generic_duplicate_param_use3.rs:12:27 | LL | fn one(t: T) -> Two { | ^^^^^^^^^ | note: type used multiple times - --> $DIR/generic_duplicate_param_use3.rs:11:10 + --> $DIR/generic_duplicate_param_use3.rs:10:10 | LL | type Two = impl Debug; | ^ ^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.min_tait.stderr index 43af9eca63ef2..0185afc76bcc4 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.min_tait.stderr @@ -1,11 +1,11 @@ error: non-defining opaque type use in defining scope - --> $DIR/generic_duplicate_param_use3.rs:13:27 + --> $DIR/generic_duplicate_param_use3.rs:12:27 | LL | fn one(t: T) -> Two { | ^^^^^^^^^ | note: type used multiple times - --> $DIR/generic_duplicate_param_use3.rs:11:10 + --> $DIR/generic_duplicate_param_use3.rs:10:10 | LL | type Two = impl Debug; | ^ ^ diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.rs index f7d1cc1ad4e5c..04d00600c9397 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.full_tait.stderr index f5db77a08d74c..504116e87d297 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_duplicate_param_use4.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: non-defining opaque type use in defining scope - --> $DIR/generic_duplicate_param_use4.rs:13:27 + --> $DIR/generic_duplicate_param_use4.rs:12:27 | LL | fn one(t: T) -> Two { | ^^^^^^^^^ | note: type used multiple times - --> $DIR/generic_duplicate_param_use4.rs:11:10 + --> $DIR/generic_duplicate_param_use4.rs:10:10 | LL | type Two = impl Debug; | ^ ^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.min_tait.stderr index f8e2b5104608d..504116e87d297 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.min_tait.stderr @@ -1,11 +1,11 @@ error: non-defining opaque type use in defining scope - --> $DIR/generic_duplicate_param_use4.rs:13:27 + --> $DIR/generic_duplicate_param_use4.rs:12:27 | LL | fn one(t: T) -> Two { | ^^^^^^^^^ | note: type used multiple times - --> $DIR/generic_duplicate_param_use4.rs:11:10 + --> $DIR/generic_duplicate_param_use4.rs:10:10 | LL | type Two = impl Debug; | ^ ^ diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.rs index 26583a6ce9b9f..0d2979626ac46 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; @@ -11,7 +10,7 @@ fn main() {} type Two = impl Debug; fn one(t: T) -> Two { -//~^ ERROR non-defining opaque type use in defining scope + //~^ ERROR non-defining opaque type use in defining scope t } diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.full_tait.stderr index aab64e72b7bca..7417112ca8aab 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.full_tait.stderr @@ -1,26 +1,17 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_duplicate_param_use5.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use5.rs:19:1 + --> $DIR/generic_duplicate_param_use5.rs:18:1 | LL | fn three(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, U)`, got `(U, T)` | note: previous use here - --> $DIR/generic_duplicate_param_use5.rs:15:1 + --> $DIR/generic_duplicate_param_use5.rs:14:1 | LL | fn two(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0277]: `T` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use5.rs:11:18 + --> $DIR/generic_duplicate_param_use5.rs:10:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` @@ -32,7 +23,7 @@ LL | type Two = impl Debug; | ^^^^^^^^^^^^^^^^^ error[E0277]: `U` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use5.rs:11:18 + --> $DIR/generic_duplicate_param_use5.rs:10:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `U` cannot be formatted using `{:?}` because it doesn't implement `Debug` @@ -43,6 +34,6 @@ help: consider restricting type parameter `U` LL | type Two = impl Debug; | ^^^^^^^^^^^^^^^^^ -error: aborting due to 3 previous errors; 1 warning emitted +error: aborting due to 3 previous errors For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.min_tait.stderr index 5c8c5b8977906..7417112ca8aab 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.min_tait.stderr @@ -1,17 +1,17 @@ error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use5.rs:19:1 + --> $DIR/generic_duplicate_param_use5.rs:18:1 | LL | fn three(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, U)`, got `(U, T)` | note: previous use here - --> $DIR/generic_duplicate_param_use5.rs:15:1 + --> $DIR/generic_duplicate_param_use5.rs:14:1 | LL | fn two(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0277]: `T` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use5.rs:11:18 + --> $DIR/generic_duplicate_param_use5.rs:10:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` @@ -23,7 +23,7 @@ LL | type Two = impl Debug; | ^^^^^^^^^^^^^^^^^ error[E0277]: `U` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use5.rs:11:18 + --> $DIR/generic_duplicate_param_use5.rs:10:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `U` cannot be formatted using `{:?}` because it doesn't implement `Debug` diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs index af473e8245acf..30ed7557c9768 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.full_tait.stderr index a69e99bf8b05f..abadba0522c4c 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.full_tait.stderr @@ -1,26 +1,17 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_duplicate_param_use6.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use6.rs:18:1 + --> $DIR/generic_duplicate_param_use6.rs:17:1 | LL | fn three(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, T)`, got `(U, T)` | note: previous use here - --> $DIR/generic_duplicate_param_use6.rs:14:1 + --> $DIR/generic_duplicate_param_use6.rs:13:1 | LL | fn two(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0277]: `T` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use6.rs:11:18 + --> $DIR/generic_duplicate_param_use6.rs:10:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` @@ -31,6 +22,6 @@ help: consider restricting type parameter `T` LL | type Two = impl Debug; | ^^^^^^^^^^^^^^^^^ -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 E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.min_tait.stderr index a377ef2d87322..abadba0522c4c 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.min_tait.stderr @@ -1,17 +1,17 @@ error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use6.rs:18:1 + --> $DIR/generic_duplicate_param_use6.rs:17:1 | LL | fn three(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, T)`, got `(U, T)` | note: previous use here - --> $DIR/generic_duplicate_param_use6.rs:14:1 + --> $DIR/generic_duplicate_param_use6.rs:13:1 | LL | fn two(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0277]: `T` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use6.rs:11:18 + --> $DIR/generic_duplicate_param_use6.rs:10:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs index 01afb2f449648..04644f1e18b99 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.full_tait.stderr deleted file mode 100644 index d80c8326ad6c6..0000000000000 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_duplicate_param_use7.rs:4:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.rs index 184e3a5f926ba..df12882abada7 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.rs @@ -2,7 +2,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.full_tait.stderr index e73ac88500e03..509ee95db30c6 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.full_tait.stderr @@ -1,26 +1,17 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_duplicate_param_use8.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use8.rs:17:1 + --> $DIR/generic_duplicate_param_use8.rs:16:1 | LL | fn three(_: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, u32)`, got `(U, u32)` | note: previous use here - --> $DIR/generic_duplicate_param_use8.rs:13:1 + --> $DIR/generic_duplicate_param_use8.rs:12:1 | LL | fn two(t: T, _: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0277]: `T` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use8.rs:10:18 + --> $DIR/generic_duplicate_param_use8.rs:9:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` @@ -31,6 +22,6 @@ help: consider restricting type parameter `T` LL | type Two = impl Debug; | ^^^^^^^^^^^^^^^^^ -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 E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.min_tait.stderr index d7edce7a491de..509ee95db30c6 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.min_tait.stderr @@ -1,17 +1,17 @@ error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use8.rs:17:1 + --> $DIR/generic_duplicate_param_use8.rs:16:1 | LL | fn three(_: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, u32)`, got `(U, u32)` | note: previous use here - --> $DIR/generic_duplicate_param_use8.rs:13:1 + --> $DIR/generic_duplicate_param_use8.rs:12:1 | LL | fn two(t: T, _: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0277]: `T` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use8.rs:10:18 + --> $DIR/generic_duplicate_param_use8.rs:9:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs index ecb8b2cedb488..283e0c1d660eb 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.full_tait.stderr index 0b3d72d67b242..3454dc44e0184 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.full_tait.stderr @@ -1,26 +1,17 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_duplicate_param_use9.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use9.rs:24:1 + --> $DIR/generic_duplicate_param_use9.rs:23:1 | LL | fn three(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(A, B, ::Bar)`, got `(A, B, i32)` | note: previous use here - --> $DIR/generic_duplicate_param_use9.rs:20:1 + --> $DIR/generic_duplicate_param_use9.rs:19:1 | LL | fn two(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0277]: the trait bound `A: Foo` is not satisfied in `(A, B, ::Bar)` - --> $DIR/generic_duplicate_param_use9.rs:10:18 + --> $DIR/generic_duplicate_param_use9.rs:9:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ within `(A, B, ::Bar)`, the trait `Foo` is not implemented for `A` @@ -32,7 +23,7 @@ LL | type Two = impl Debug; | ^^^^^ error[E0277]: `A` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use9.rs:10:18 + --> $DIR/generic_duplicate_param_use9.rs:9:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `A` cannot be formatted using `{:?}` because it doesn't implement `Debug` @@ -44,7 +35,7 @@ LL | type Two = impl Debug; | ^^^^^^^^^^^^^^^^^ error[E0277]: `B` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use9.rs:10:18 + --> $DIR/generic_duplicate_param_use9.rs:9:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `B` cannot be formatted using `{:?}` because it doesn't implement `Debug` @@ -55,6 +46,6 @@ help: consider restricting type parameter `B` LL | type Two = impl Debug; | ^^^^^^^^^^^^^^^^^ -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 E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.min_tait.stderr index fd1081d7b71de..3454dc44e0184 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.min_tait.stderr @@ -1,17 +1,17 @@ error: concrete type differs from previous defining opaque type use - --> $DIR/generic_duplicate_param_use9.rs:24:1 + --> $DIR/generic_duplicate_param_use9.rs:23:1 | LL | fn three(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(A, B, ::Bar)`, got `(A, B, i32)` | note: previous use here - --> $DIR/generic_duplicate_param_use9.rs:20:1 + --> $DIR/generic_duplicate_param_use9.rs:19:1 | LL | fn two(t: T, u: U) -> Two { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error[E0277]: the trait bound `A: Foo` is not satisfied in `(A, B, ::Bar)` - --> $DIR/generic_duplicate_param_use9.rs:10:18 + --> $DIR/generic_duplicate_param_use9.rs:9:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ within `(A, B, ::Bar)`, the trait `Foo` is not implemented for `A` @@ -23,7 +23,7 @@ LL | type Two = impl Debug; | ^^^^^ error[E0277]: `A` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use9.rs:10:18 + --> $DIR/generic_duplicate_param_use9.rs:9:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `A` cannot be formatted using `{:?}` because it doesn't implement `Debug` @@ -35,7 +35,7 @@ LL | type Two = impl Debug; | ^^^^^^^^^^^^^^^^^ error[E0277]: `B` doesn't implement `Debug` - --> $DIR/generic_duplicate_param_use9.rs:10:18 + --> $DIR/generic_duplicate_param_use9.rs:9:18 | LL | type Two = impl Debug; | ^^^^^^^^^^ `B` cannot be formatted using `{:?}` because it doesn't implement `Debug` diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs index 5eced6cfa5a0b..4c3b0877d2393 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_lifetime_param.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_lifetime_param.full_tait.stderr deleted file mode 100644 index 39817757f18b4..0000000000000 --- a/src/test/ui/type-alias-impl-trait/generic_lifetime_param.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_lifetime_param.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/generic_lifetime_param.rs b/src/test/ui/type-alias-impl-trait/generic_lifetime_param.rs index dbe7cfd1c81fc..7274f4f76f8cb 100644 --- a/src/test/ui/type-alias-impl-trait/generic_lifetime_param.rs +++ b/src/test/ui/type-alias-impl-trait/generic_lifetime_param.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/generic_not_used.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_not_used.full_tait.stderr index 819ef7b771232..aa8457cf158e8 100644 --- a/src/test/ui/type-alias-impl-trait/generic_not_used.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_not_used.full_tait.stderr @@ -1,20 +1,11 @@ error: at least one trait must be specified - --> $DIR/generic_not_used.rs:8:33 + --> $DIR/generic_not_used.rs:7:33 | LL | type WrongGeneric = impl 'static; | ^^^^^^^^^^^^ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_not_used.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: type parameter `V` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/generic_not_used.rs:11:73 + --> $DIR/generic_not_used.rs:10:73 | LL | fn wrong_generic(_: U, v: V) -> WrongGeneric { | _________________________________________________________________________^ @@ -23,5 +14,5 @@ LL | | v LL | | } | |_^ -error: aborting due to 2 previous errors; 1 warning emitted +error: aborting due to 2 previous errors diff --git a/src/test/ui/type-alias-impl-trait/generic_not_used.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_not_used.min_tait.stderr index fe7f5f6c71e04..aa8457cf158e8 100644 --- a/src/test/ui/type-alias-impl-trait/generic_not_used.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_not_used.min_tait.stderr @@ -1,11 +1,11 @@ error: at least one trait must be specified - --> $DIR/generic_not_used.rs:8:33 + --> $DIR/generic_not_used.rs:7:33 | LL | type WrongGeneric = impl 'static; | ^^^^^^^^^^^^ error: type parameter `V` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/generic_not_used.rs:11:73 + --> $DIR/generic_not_used.rs:10:73 | LL | fn wrong_generic(_: U, v: V) -> WrongGeneric { | _________________________________________________________________________^ diff --git a/src/test/ui/type-alias-impl-trait/generic_not_used.rs b/src/test/ui/type-alias-impl-trait/generic_not_used.rs index 68f50b2151ff1..36fae028d4ec6 100644 --- a/src/test/ui/type-alias-impl-trait/generic_not_used.rs +++ b/src/test/ui/type-alias-impl-trait/generic_not_used.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} @@ -9,6 +8,6 @@ type WrongGeneric = impl 'static; //~^ ERROR: at least one trait must be specified fn wrong_generic(_: U, v: V) -> WrongGeneric { -//~^ ERROR type parameter `V` is part of concrete type but not used in parameter list + //~^ ERROR type parameter `V` is part of concrete type but not used in parameter list v } diff --git a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.full_tait.stderr index 90a753b5a6de1..f191797c09e1d 100644 --- a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.full_tait.stderr @@ -1,20 +1,11 @@ error: at least one trait must be specified - --> $DIR/generic_type_does_not_live_long_enough.rs:12:24 + --> $DIR/generic_type_does_not_live_long_enough.rs:11:24 | LL | type WrongGeneric = impl 'static; | ^^^^^^^^^^^^ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_type_does_not_live_long_enough.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0308]: mismatched types - --> $DIR/generic_type_does_not_live_long_enough.rs:9:18 + --> $DIR/generic_type_does_not_live_long_enough.rs:8:18 | LL | let z: i32 = x; | --- ^ expected `i32`, found opaque type @@ -28,7 +19,7 @@ LL | type WrongGeneric = impl 'static; found opaque type `impl Sized` error[E0310]: the parameter type `T` may not live long enough - --> $DIR/generic_type_does_not_live_long_enough.rs:12:24 + --> $DIR/generic_type_does_not_live_long_enough.rs:11:24 | LL | type WrongGeneric = impl 'static; | ^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds @@ -36,7 +27,7 @@ LL | type WrongGeneric = impl 'static; LL | fn wrong_generic(t: T) -> WrongGeneric { | - help: consider adding an explicit lifetime bound...: `T: 'static` -error: aborting due to 3 previous errors; 1 warning emitted +error: aborting due to 3 previous errors Some errors have detailed explanations: E0308, E0310. For more information about an error, try `rustc --explain E0308`. diff --git a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.min_tait.stderr index e50282201074e..f191797c09e1d 100644 --- a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.min_tait.stderr @@ -1,11 +1,11 @@ error: at least one trait must be specified - --> $DIR/generic_type_does_not_live_long_enough.rs:12:24 + --> $DIR/generic_type_does_not_live_long_enough.rs:11:24 | LL | type WrongGeneric = impl 'static; | ^^^^^^^^^^^^ error[E0308]: mismatched types - --> $DIR/generic_type_does_not_live_long_enough.rs:9:18 + --> $DIR/generic_type_does_not_live_long_enough.rs:8:18 | LL | let z: i32 = x; | --- ^ expected `i32`, found opaque type @@ -19,7 +19,7 @@ LL | type WrongGeneric = impl 'static; found opaque type `impl Sized` error[E0310]: the parameter type `T` may not live long enough - --> $DIR/generic_type_does_not_live_long_enough.rs:12:24 + --> $DIR/generic_type_does_not_live_long_enough.rs:11:24 | LL | type WrongGeneric = impl 'static; | ^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds diff --git a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs index 9f647d9e737fe..bd0fc8cbace46 100644 --- a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs +++ b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() { let y = 42; diff --git a/src/test/ui/type-alias-impl-trait/generic_underconstrained.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_underconstrained.full_tait.stderr index c4778a46fb088..be701b0ca9089 100644 --- a/src/test/ui/type-alias-impl-trait/generic_underconstrained.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_underconstrained.full_tait.stderr @@ -1,20 +1,11 @@ error: at least one trait must be specified - --> $DIR/generic_underconstrained.rs:9:35 + --> $DIR/generic_underconstrained.rs:8:35 | LL | type Underconstrained = impl 'static; | ^^^^^^^^^^^^ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_underconstrained.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0277]: the trait bound `T: Trait` is not satisfied - --> $DIR/generic_underconstrained.rs:13:31 + --> $DIR/generic_underconstrained.rs:12:31 | LL | type Underconstrained = impl 'static; | ----- required by this bound in `Underconstrained` @@ -27,6 +18,6 @@ help: consider restricting type parameter `T` LL | fn underconstrain(_: T) -> Underconstrained { | ^^^^^^^ -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 E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_underconstrained.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_underconstrained.min_tait.stderr index 6c1d6debee816..be701b0ca9089 100644 --- a/src/test/ui/type-alias-impl-trait/generic_underconstrained.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_underconstrained.min_tait.stderr @@ -1,11 +1,11 @@ error: at least one trait must be specified - --> $DIR/generic_underconstrained.rs:9:35 + --> $DIR/generic_underconstrained.rs:8:35 | LL | type Underconstrained = impl 'static; | ^^^^^^^^^^^^ error[E0277]: the trait bound `T: Trait` is not satisfied - --> $DIR/generic_underconstrained.rs:13:31 + --> $DIR/generic_underconstrained.rs:12:31 | LL | type Underconstrained = impl 'static; | ----- required by this bound in `Underconstrained` diff --git a/src/test/ui/type-alias-impl-trait/generic_underconstrained.rs b/src/test/ui/type-alias-impl-trait/generic_underconstrained.rs index f4c4a1b72cb9d..5d723e5bc6213 100644 --- a/src/test/ui/type-alias-impl-trait/generic_underconstrained.rs +++ b/src/test/ui/type-alias-impl-trait/generic_underconstrained.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/generic_underconstrained2.full_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_underconstrained2.full_tait.stderr index 7ab73d24274ce..ab2d9482364db 100644 --- a/src/test/ui/type-alias-impl-trait/generic_underconstrained2.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_underconstrained2.full_tait.stderr @@ -1,26 +1,17 @@ error: at least one trait must be specified - --> $DIR/generic_underconstrained2.rs:8:45 + --> $DIR/generic_underconstrained2.rs:7:45 | LL | type Underconstrained = impl 'static; | ^^^^^^^^^^^^ error: at least one trait must be specified - --> $DIR/generic_underconstrained2.rs:17:46 + --> $DIR/generic_underconstrained2.rs:16:46 | LL | type Underconstrained2 = impl 'static; | ^^^^^^^^^^^^ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/generic_underconstrained2.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0277]: `U` doesn't implement `Debug` - --> $DIR/generic_underconstrained2.rs:12:33 + --> $DIR/generic_underconstrained2.rs:11:33 | LL | type Underconstrained = impl 'static; | --------------- required by this bound in `Underconstrained` @@ -34,7 +25,7 @@ LL | fn underconstrained(_: U) -> Underconstrained { | ^^^^^^^^^^^^^^^^^ error[E0277]: `V` doesn't implement `Debug` - --> $DIR/generic_underconstrained2.rs:21:43 + --> $DIR/generic_underconstrained2.rs:20:43 | LL | type Underconstrained2 = impl 'static; | --------------- required by this bound in `Underconstrained2` @@ -47,6 +38,6 @@ help: consider restricting type parameter `V` LL | fn underconstrained2(_: U, _: V) -> Underconstrained2 { | ^^^^^^^^^^^^^^^^^ -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 E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_underconstrained2.min_tait.stderr b/src/test/ui/type-alias-impl-trait/generic_underconstrained2.min_tait.stderr index a4f5f4b8645b1..ab2d9482364db 100644 --- a/src/test/ui/type-alias-impl-trait/generic_underconstrained2.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/generic_underconstrained2.min_tait.stderr @@ -1,17 +1,17 @@ error: at least one trait must be specified - --> $DIR/generic_underconstrained2.rs:8:45 + --> $DIR/generic_underconstrained2.rs:7:45 | LL | type Underconstrained = impl 'static; | ^^^^^^^^^^^^ error: at least one trait must be specified - --> $DIR/generic_underconstrained2.rs:17:46 + --> $DIR/generic_underconstrained2.rs:16:46 | LL | type Underconstrained2 = impl 'static; | ^^^^^^^^^^^^ error[E0277]: `U` doesn't implement `Debug` - --> $DIR/generic_underconstrained2.rs:12:33 + --> $DIR/generic_underconstrained2.rs:11:33 | LL | type Underconstrained = impl 'static; | --------------- required by this bound in `Underconstrained` @@ -25,7 +25,7 @@ LL | fn underconstrained(_: U) -> Underconstrained { | ^^^^^^^^^^^^^^^^^ error[E0277]: `V` doesn't implement `Debug` - --> $DIR/generic_underconstrained2.rs:21:43 + --> $DIR/generic_underconstrained2.rs:20:43 | LL | type Underconstrained2 = impl 'static; | --------------- required by this bound in `Underconstrained2` diff --git a/src/test/ui/type-alias-impl-trait/generic_underconstrained2.rs b/src/test/ui/type-alias-impl-trait/generic_underconstrained2.rs index b3fb0748d2a62..01cd1b9b972fb 100644 --- a/src/test/ui/type-alias-impl-trait/generic_underconstrained2.rs +++ b/src/test/ui/type-alias-impl-trait/generic_underconstrained2.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.full_tait.stderr b/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.full_tait.stderr index bdd88134290c8..679f2f73919cf 100644 --- a/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.full_tait.stderr @@ -1,18 +1,9 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/impl-with-unconstrained-param.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates - --> $DIR/impl-with-unconstrained-param.rs:14:6 + --> $DIR/impl-with-unconstrained-param.rs:13:6 | LL | impl X for () { | ^ unconstrained type parameter -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.min_tait.stderr b/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.min_tait.stderr index eb59766b91396..679f2f73919cf 100644 --- a/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.min_tait.stderr @@ -1,5 +1,5 @@ error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates - --> $DIR/impl-with-unconstrained-param.rs:14:6 + --> $DIR/impl-with-unconstrained-param.rs:13:6 | LL | impl X for () { | ^ unconstrained type parameter diff --git a/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.rs b/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.rs index 1aefa2474ffcd..6759799b37d85 100644 --- a/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.rs +++ b/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait X { type I; diff --git a/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.full_tait.stderr b/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.full_tait.stderr index 6d1a59aafeda4..9435eaace3717 100644 --- a/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/incoherent-assoc-imp-trait.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0119]: conflicting implementations of trait `std::ops::FnOnce<()>` for type `&_` - --> $DIR/incoherent-assoc-imp-trait.rs:13:1 + --> $DIR/incoherent-assoc-imp-trait.rs:12:1 | LL | impl FnOnce<()> for &F { | ^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -18,7 +9,7 @@ LL | impl FnOnce<()> for &F { where F: Fn, F: ?Sized; error[E0210]: type parameter `F` must be used as the type parameter for some local type (e.g., `MyStruct`) - --> $DIR/incoherent-assoc-imp-trait.rs:13:6 + --> $DIR/incoherent-assoc-imp-trait.rs:12:6 | LL | impl FnOnce<()> for &F { | ^ type parameter `F` must be used as the type parameter for some local type @@ -26,7 +17,7 @@ LL | impl FnOnce<()> for &F { = note: implementing a foreign trait is only possible if at least one of the types for which it is implemented is local = note: only traits defined in the current crate can be implemented for a type parameter -error: aborting due to 2 previous errors; 1 warning emitted +error: aborting due to 2 previous errors Some errors have detailed explanations: E0119, E0210. For more information about an error, try `rustc --explain E0119`. diff --git a/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.min_tait.stderr b/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.min_tait.stderr index 5c02b602d528b..9435eaace3717 100644 --- a/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.min_tait.stderr @@ -1,5 +1,5 @@ error[E0119]: conflicting implementations of trait `std::ops::FnOnce<()>` for type `&_` - --> $DIR/incoherent-assoc-imp-trait.rs:13:1 + --> $DIR/incoherent-assoc-imp-trait.rs:12:1 | LL | impl FnOnce<()> for &F { | ^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -9,7 +9,7 @@ LL | impl FnOnce<()> for &F { where F: Fn, F: ?Sized; error[E0210]: type parameter `F` must be used as the type parameter for some local type (e.g., `MyStruct`) - --> $DIR/incoherent-assoc-imp-trait.rs:13:6 + --> $DIR/incoherent-assoc-imp-trait.rs:12:6 | LL | impl FnOnce<()> for &F { | ^ type parameter `F` must be used as the type parameter for some local type diff --git a/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.rs b/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.rs index b52b9c18f0845..f73169d7d08a9 100644 --- a/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.rs +++ b/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![feature(fn_traits)] trait MyTrait {} diff --git a/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.full_tait.stderr index 4effd87120e7d..696f887a4d89a 100644 --- a/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-52843-closure-constrain.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: concrete type differs from previous defining opaque type use - --> $DIR/issue-52843-closure-constrain.rs:13:16 + --> $DIR/issue-52843-closure-constrain.rs:12:16 | LL | let null = || -> Opaque { 0 }; | ^^^^^^^^^^^^^^^^^^ expected `String`, got `i32` | note: previous use here - --> $DIR/issue-52843-closure-constrain.rs:12:5 + --> $DIR/issue-52843-closure-constrain.rs:11:5 | LL | fn _unused() -> Opaque { String::new() } | ^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.min_tait.stderr index c2cb4829fb78a..68231d43f629e 100644 --- a/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.min_tait.stderr @@ -1,5 +1,5 @@ error[E0658]: type alias impl trait is not permitted here - --> $DIR/issue-52843-closure-constrain.rs:13:22 + --> $DIR/issue-52843-closure-constrain.rs:12:22 | LL | let null = || -> Opaque { 0 }; | ^^^^^^ @@ -8,13 +8,13 @@ LL | let null = || -> Opaque { 0 }; = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error: concrete type differs from previous defining opaque type use - --> $DIR/issue-52843-closure-constrain.rs:13:16 + --> $DIR/issue-52843-closure-constrain.rs:12:16 | LL | let null = || -> Opaque { 0 }; | ^^^^^^^^^^^^^^^^^^ expected `String`, got `[type error]` | note: previous use here - --> $DIR/issue-52843-closure-constrain.rs:12:5 + --> $DIR/issue-52843-closure-constrain.rs:11:5 | LL | fn _unused() -> Opaque { String::new() } | ^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.rs b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.rs index 01f874155fa1e..c7deb2e4eac9c 100644 --- a/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.rs +++ b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/issue-52843.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-52843.full_tait.stderr index 35ac0993b29ca..abd18392636ce 100644 --- a/src/test/ui/type-alias-impl-trait/issue-52843.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-52843.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-52843.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0277]: the trait bound `T: Default` is not satisfied - --> $DIR/issue-52843.rs:6:15 + --> $DIR/issue-52843.rs:5:15 | LL | type Foo = impl Default; | ^^^^^^^^^^^^ the trait `Default` is not implemented for `T` @@ -18,6 +9,6 @@ help: consider restricting type parameter `T` LL | type Foo = impl Default; | ^^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/issue-52843.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-52843.min_tait.stderr index 9fb760f34c19a..abd18392636ce 100644 --- a/src/test/ui/type-alias-impl-trait/issue-52843.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-52843.min_tait.stderr @@ -1,5 +1,5 @@ error[E0277]: the trait bound `T: Default` is not satisfied - --> $DIR/issue-52843.rs:6:15 + --> $DIR/issue-52843.rs:5:15 | LL | type Foo = impl Default; | ^^^^^^^^^^^^ the trait `Default` is not implemented for `T` diff --git a/src/test/ui/type-alias-impl-trait/issue-52843.rs b/src/test/ui/type-alias-impl-trait/issue-52843.rs index 14f9db6eae2c7..844bfa3b8461b 100644 --- a/src/test/ui/type-alias-impl-trait/issue-52843.rs +++ b/src/test/ui/type-alias-impl-trait/issue-52843.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type Foo = impl Default; //~^ ERROR: the trait bound `T: Default` is not satisfied diff --git a/src/test/ui/type-alias-impl-trait/issue-53096.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-53096.full_tait.stderr index a8dd6a93d3dbf..fb70582c31a2d 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53096.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-53096.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-53096.rs:4:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: fatal error triggered by #[rustc_error] - --> $DIR/issue-53096.rs:14:1 + --> $DIR/issue-53096.rs:13:1 | LL | fn main() {} | ^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/issue-53096.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-53096.min_tait.stderr index 4210d0c1cb17a..fb70582c31a2d 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53096.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-53096.min_tait.stderr @@ -1,5 +1,5 @@ error: fatal error triggered by #[rustc_error] - --> $DIR/issue-53096.rs:14:1 + --> $DIR/issue-53096.rs:13:1 | LL | fn main() {} | ^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/issue-53096.rs b/src/test/ui/type-alias-impl-trait/issue-53096.rs index 7bb0066b7ef42..249055bf26c34 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53096.rs +++ b/src/test/ui/type-alias-impl-trait/issue-53096.rs @@ -2,7 +2,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type Foo = impl Fn() -> usize; const fn bar() -> Foo { diff --git a/src/test/ui/type-alias-impl-trait/issue-53598.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-53598.full_tait.stderr index ee4b7eef0bdc4..7087aef67681d 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53598.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-53598.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-53598.rs:4:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-53598.rs:23:42 + --> $DIR/issue-53598.rs:22:42 | LL | fn foo(_: T) -> Self::Item { | __________________________________________^ @@ -17,5 +8,5 @@ LL | | S::(Default::default()) LL | | } | |_____^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/issue-53598.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-53598.min_tait.stderr index 728721b6dbd71..7087aef67681d 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53598.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-53598.min_tait.stderr @@ -1,5 +1,5 @@ error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-53598.rs:23:42 + --> $DIR/issue-53598.rs:22:42 | LL | fn foo(_: T) -> Self::Item { | __________________________________________^ diff --git a/src/test/ui/type-alias-impl-trait/issue-53598.rs b/src/test/ui/type-alias-impl-trait/issue-53598.rs index 38067a7222374..1680d6e583950 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53598.rs +++ b/src/test/ui/type-alias-impl-trait/issue-53598.rs @@ -2,7 +2,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; @@ -21,7 +20,7 @@ impl Foo for S2 { type Item = impl Debug; fn foo(_: T) -> Self::Item { - //~^ Error type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + //~^ Error type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias S::(Default::default()) } } diff --git a/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.full_tait.stderr index b23fed5dadfe7..05b7173b80b59 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-53678-generator-and-const-fn.rs:4:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: fatal error triggered by #[rustc_error] - --> $DIR/issue-53678-generator-and-const-fn.rs:22:1 + --> $DIR/issue-53678-generator-and-const-fn.rs:21:1 | LL | fn main() {} | ^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.min_tait.stderr index fabba2183531f..05b7173b80b59 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.min_tait.stderr @@ -1,5 +1,5 @@ error: fatal error triggered by #[rustc_error] - --> $DIR/issue-53678-generator-and-const-fn.rs:22:1 + --> $DIR/issue-53678-generator-and-const-fn.rs:21:1 | LL | fn main() {} | ^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs index a8215c41826f8..9c50a3da95cb7 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs +++ b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs @@ -2,7 +2,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::ops::Generator; diff --git a/src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.full_tait.stderr deleted file mode 100644 index 98778210bfb37..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-55099-lifetime-inference.rs:8:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.rs b/src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.rs index 2c24e9d744ae2..fc32d455aaa80 100644 --- a/src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.rs +++ b/src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.rs @@ -6,15 +6,12 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete -trait Future { -} +trait Future {} struct AndThen(F); -impl Future for AndThen { -} +impl Future for AndThen {} struct Foo<'a> { x: &'a mut (), diff --git a/src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.full_tait.stderr deleted file mode 100644 index d31c232fc2391..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-57188-associate-impl-capture.rs:7:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.rs b/src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.rs index 645a4c5696d45..7207dda90dc4f 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.rs +++ b/src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete struct Baz<'a> { source: &'a str, diff --git a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.full_tait.stderr index 61e8da91bbaa9..70b6f264860e7 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-57611-trait-alias.rs:8:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: implementation of `FnOnce` is not general enough - --> $DIR/issue-57611-trait-alias.rs:20:16 + --> $DIR/issue-57611-trait-alias.rs:19:16 | LL | type Bar = impl Baz; | ^^^^^^^^^^^^^^^^^^^^ implementation of `FnOnce` is not general enough @@ -16,5 +7,5 @@ LL | type Bar = impl Baz; = note: closure with signature `fn(&'2 X) -> &X` must implement `FnOnce<(&'1 X,)>`, for any lifetime `'1`... = note: ...but it actually implements `FnOnce<(&'2 X,)>`, for some specific lifetime `'2` -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.min_tait.stderr index f65e91e52c713..70b6f264860e7 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.min_tait.stderr @@ -1,5 +1,5 @@ error: implementation of `FnOnce` is not general enough - --> $DIR/issue-57611-trait-alias.rs:20:16 + --> $DIR/issue-57611-trait-alias.rs:19:16 | LL | type Bar = impl Baz; | ^^^^^^^^^^^^^^^^^^^^ implementation of `FnOnce` is not general enough diff --git a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs index 508ecdd88a482..fcc3555b23127 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs +++ b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs @@ -6,7 +6,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait Foo { type Bar: Baz; diff --git a/src/test/ui/type-alias-impl-trait/issue-57700.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-57700.full_tait.stderr index 4336532cdbbaf..2d85862671933 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57700.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-57700.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-57700.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: type parameter `impl Deref` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-57700.rs:19:58 + --> $DIR/issue-57700.rs:18:58 | LL | fn foo(self: impl Deref) -> Self::Bar { | __________________________________________________________^ @@ -17,5 +8,5 @@ LL | | self LL | | } | |_____^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/issue-57700.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-57700.min_tait.stderr index 47ab31cd797b8..2d85862671933 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57700.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-57700.min_tait.stderr @@ -1,5 +1,5 @@ error: type parameter `impl Deref` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-57700.rs:19:58 + --> $DIR/issue-57700.rs:18:58 | LL | fn foo(self: impl Deref) -> Self::Bar { | __________________________________________________________^ diff --git a/src/test/ui/type-alias-impl-trait/issue-57700.rs b/src/test/ui/type-alias-impl-trait/issue-57700.rs index 476a188cde698..19b3d1ce2c768 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57700.rs +++ b/src/test/ui/type-alias-impl-trait/issue-57700.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::ops::Deref; @@ -17,7 +16,7 @@ impl Foo for C { type Bar = impl Foo; fn foo(self: impl Deref) -> Self::Bar { - //~^ Error type parameter `impl Deref` is part of concrete type but not used in parameter list for the `impl Trait` type alias + //~^ Error type parameter `impl Deref` is part of concrete type but not used in parameter list for the `impl Trait` type alias self } } diff --git a/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.full_tait.stderr deleted file mode 100644 index b35361c89a485..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-57807-associated-type.rs:7:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs b/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs index 0a021149e700d..9118648fe426f 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs +++ b/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait Bar { type A; diff --git a/src/test/ui/type-alias-impl-trait/issue-58887.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-58887.full_tait.stderr deleted file mode 100644 index f0fd5f2f056ab..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-58887.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-58887.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-58887.rs b/src/test/ui/type-alias-impl-trait/issue-58887.rs index f0803a663de39..0a09bd50a6eaf 100644 --- a/src/test/ui/type-alias-impl-trait/issue-58887.rs +++ b/src/test/ui/type-alias-impl-trait/issue-58887.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait UnwrapItemsExt { type Iter; diff --git a/src/test/ui/type-alias-impl-trait/issue-58951.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-58951.full_tait.stderr deleted file mode 100644 index 164b8881714e7..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-58951.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-58951.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-58951.rs b/src/test/ui/type-alias-impl-trait/issue-58951.rs index 3b1ea0d676bb4..932684ec089b9 100644 --- a/src/test/ui/type-alias-impl-trait/issue-58951.rs +++ b/src/test/ui/type-alias-impl-trait/issue-58951.rs @@ -3,11 +3,12 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type A = impl Iterator; -fn def_a() -> A { 0..1 } +fn def_a() -> A { + 0..1 +} pub fn use_a() { def_a().map(|x| x); diff --git a/src/test/ui/type-alias-impl-trait/issue-60407.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-60407.full_tait.stderr index 9d3f366ad810a..adb07f5227b40 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60407.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-60407.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-60407.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: fatal error triggered by #[rustc_error] - --> $DIR/issue-60407.rs:11:1 + --> $DIR/issue-60407.rs:10:1 | LL | fn main() { | ^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/issue-60407.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-60407.min_tait.stderr index 1a3ceafa3e294..adb07f5227b40 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60407.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-60407.min_tait.stderr @@ -1,5 +1,5 @@ error: fatal error triggered by #[rustc_error] - --> $DIR/issue-60407.rs:11:1 + --> $DIR/issue-60407.rs:10:1 | LL | fn main() { | ^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/issue-60407.rs b/src/test/ui/type-alias-impl-trait/issue-60407.rs index 3c6b873b4ca5a..7319bcf4cd911 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60407.rs +++ b/src/test/ui/type-alias-impl-trait/issue-60407.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait, rustc_attrs)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type Debuggable = impl core::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/issue-60564.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-60564.full_tait.stderr index 72b6b0648f98f..738718e770ac3 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60564.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-60564.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-60564.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: non-defining opaque type use in defining scope - --> $DIR/issue-60564.rs:22:34 + --> $DIR/issue-60564.rs:21:34 | LL | fn iter_bits(self, n: u8) -> Self::BitsIter { | ^^^^^^^^^^^^^^ | note: used non-generic type `u8` for generic parameter - --> $DIR/issue-60564.rs:11:25 + --> $DIR/issue-60564.rs:10:25 | LL | type IterBitsIter = impl std::iter::Iterator; | ^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/issue-60564.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-60564.min_tait.stderr index 72668c8056fc5..738718e770ac3 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60564.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-60564.min_tait.stderr @@ -1,11 +1,11 @@ error: non-defining opaque type use in defining scope - --> $DIR/issue-60564.rs:22:34 + --> $DIR/issue-60564.rs:21:34 | LL | fn iter_bits(self, n: u8) -> Self::BitsIter { | ^^^^^^^^^^^^^^ | note: used non-generic type `u8` for generic parameter - --> $DIR/issue-60564.rs:11:25 + --> $DIR/issue-60564.rs:10:25 | LL | type IterBitsIter = impl std::iter::Iterator; | ^ diff --git a/src/test/ui/type-alias-impl-trait/issue-60564.rs b/src/test/ui/type-alias-impl-trait/issue-60564.rs index 10fbbd2ef292e..7f780a253c95f 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60564.rs +++ b/src/test/ui/type-alias-impl-trait/issue-60564.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait IterBits { type BitsIter: Iterator; diff --git a/src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.full_tait.stderr deleted file mode 100644 index 1fc38d2f549a1..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-62000-associate-impl-trait-lifetimes.rs:7:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.rs b/src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.rs index 4d9ca47b9474a..38370cd008f73 100644 --- a/src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.rs +++ b/src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait MyTrait { type AssocType: Send; diff --git a/src/test/ui/type-alias-impl-trait/issue-63263-closure-return.rs b/src/test/ui/type-alias-impl-trait/issue-63263-closure-return.rs index 3b8f6afcb0054..634ec0f515f31 100644 --- a/src/test/ui/type-alias-impl-trait/issue-63263-closure-return.rs +++ b/src/test/ui/type-alias-impl-trait/issue-63263-closure-return.rs @@ -5,7 +5,6 @@ // check-pass #![feature(min_type_alias_impl_trait, type_alias_impl_trait)] -//~^ WARN incomplete pub type Closure = impl FnOnce(); diff --git a/src/test/ui/type-alias-impl-trait/issue-63263-closure-return.stderr b/src/test/ui/type-alias-impl-trait/issue-63263-closure-return.stderr deleted file mode 100644 index e1f4ecd3b9814..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-63263-closure-return.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-63263-closure-return.rs:7:39 - | -LL | #![feature(min_type_alias_impl_trait, type_alias_impl_trait)] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-63279.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-63279.full_tait.stderr index 53a0016c08eb5..409cca865d1e6 100644 --- a/src/test/ui/type-alias-impl-trait/issue-63279.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-63279.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-63279.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -error[E0271]: type mismatch resolving `<[closure@$DIR/issue-63279.rs:11:5: 11:28] as FnOnce<()>>::Output == ()` - --> $DIR/issue-63279.rs:8:16 +error[E0271]: type mismatch resolving `<[closure@$DIR/issue-63279.rs:10:5: 10:28] as FnOnce<()>>::Output == ()` + --> $DIR/issue-63279.rs:7:16 | LL | type Closure = impl FnOnce(); | ^^^^^^^^^^^^^ expected `()`, found opaque type @@ -16,6 +7,6 @@ LL | type Closure = impl FnOnce(); = note: expected unit type `()` found opaque type `impl FnOnce<()>` -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0271`. diff --git a/src/test/ui/type-alias-impl-trait/issue-63279.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-63279.min_tait.stderr index be386ab90ea00..a93d2dfcee508 100644 --- a/src/test/ui/type-alias-impl-trait/issue-63279.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-63279.min_tait.stderr @@ -1,5 +1,5 @@ error[E0658]: type alias impl trait is not permitted here - --> $DIR/issue-63279.rs:11:11 + --> $DIR/issue-63279.rs:10:11 | LL | || -> Closure { || () } | ^^^^^^^ @@ -7,8 +7,8 @@ LL | || -> Closure { || () } = note: see issue #63063 for more information = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable -error[E0271]: type mismatch resolving `<[closure@$DIR/issue-63279.rs:11:5: 11:28] as FnOnce<()>>::Output == ()` - --> $DIR/issue-63279.rs:8:16 +error[E0271]: type mismatch resolving `<[closure@$DIR/issue-63279.rs:10:5: 10:28] as FnOnce<()>>::Output == ()` + --> $DIR/issue-63279.rs:7:16 | LL | type Closure = impl FnOnce(); | ^^^^^^^^^^^^^ expected `()`, found opaque type diff --git a/src/test/ui/type-alias-impl-trait/issue-63279.rs b/src/test/ui/type-alias-impl-trait/issue-63279.rs index 086715626bc16..4c9c26a343c51 100644 --- a/src/test/ui/type-alias-impl-trait/issue-63279.rs +++ b/src/test/ui/type-alias-impl-trait/issue-63279.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type Closure = impl FnOnce(); //~ ERROR: type mismatch resolving diff --git a/src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.full_tait.stderr deleted file mode 100644 index fc8d8147167b3..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-63677-type-alias-coherence.rs:7:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.rs b/src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.rs index 62d11ad38d62d..b477fea41b72d 100644 --- a/src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.rs +++ b/src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete pub trait Trait {} pub struct S1(T); diff --git a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.full_tait.stderr index ee26789d204f1..6b4ea787ea8db 100644 --- a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: fatal error triggered by #[rustc_error] - --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:18:1 + --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:17:1 | LL | fn main() { | ^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.min_tait.stderr index 5b6c4b5cda1fd..6798ecb9489f8 100644 --- a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.min_tait.stderr @@ -1,5 +1,5 @@ error[E0658]: type alias impl trait is not permitted here - --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:20:13 + --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:19:13 | LL | take(|| {}); | ^ @@ -8,7 +8,7 @@ LL | take(|| {}); = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: type alias impl trait is not permitted here - --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:22:13 + --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:21:13 | LL | take(|| {}); | ^ diff --git a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs index d37be640e0b04..f181b3d06a670 100644 --- a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs +++ b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait, rustc_attrs)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type T = impl Sized; // The concrete type referred by impl-trait-type-alias(`T`) is guaranteed diff --git a/src/test/ui/type-alias-impl-trait/issue-65918.rs b/src/test/ui/type-alias-impl-trait/issue-65918.rs index ab05e4b1cbeca..b15bff57a0d2d 100644 --- a/src/test/ui/type-alias-impl-trait/issue-65918.rs +++ b/src/test/ui/type-alias-impl-trait/issue-65918.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::marker::PhantomData; diff --git a/src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.full_tait.stderr deleted file mode 100644 index 2fc46574512cc..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-66580-closure-coherence.rs:7:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.rs b/src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.rs index 7b3ddc7886841..7fdaa7fb99bc2 100644 --- a/src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.rs +++ b/src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type Closure = impl FnOnce(); @@ -13,7 +12,9 @@ fn closure() -> Closure { || {} } -struct Wrap { f: T } +struct Wrap { + f: T, +} impl Wrap {} diff --git a/src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.full_tait.stderr deleted file mode 100644 index 81e27da0949af..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-67844-nested-opaque.rs:8:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.rs b/src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.rs index b9e29a01cddf9..f47f0cdba88bb 100644 --- a/src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.rs +++ b/src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.rs @@ -6,9 +6,10 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete -trait WithAssoc { type AssocType; } +trait WithAssoc { + type AssocType; +} trait WithParam {} @@ -23,7 +24,6 @@ impl WithAssoc for MyStruct { type AssocType = MyParam; } - fn my_fun() -> Return { MyStruct } diff --git a/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.full_tait.stderr index 8b1ad19ac0cbf..db3b89bc699c1 100644 --- a/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-68368-non-defining-use.rs:7:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: non-defining opaque type use in defining scope - --> $DIR/issue-68368-non-defining-use.rs:11:15 + --> $DIR/issue-68368-non-defining-use.rs:10:15 | LL | fn f<'a>() -> Alias<'a, ()> {} | ^^^^^^^^^^^^^ | note: used non-generic type `()` for generic parameter - --> $DIR/issue-68368-non-defining-use.rs:10:16 + --> $DIR/issue-68368-non-defining-use.rs:9:16 | LL | type Alias<'a, U> = impl Trait; | ^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.min_tait.stderr index 01ae457851f24..db3b89bc699c1 100644 --- a/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.min_tait.stderr @@ -1,11 +1,11 @@ error: non-defining opaque type use in defining scope - --> $DIR/issue-68368-non-defining-use.rs:11:15 + --> $DIR/issue-68368-non-defining-use.rs:10:15 | LL | fn f<'a>() -> Alias<'a, ()> {} | ^^^^^^^^^^^^^ | note: used non-generic type `()` for generic parameter - --> $DIR/issue-68368-non-defining-use.rs:10:16 + --> $DIR/issue-68368-non-defining-use.rs:9:16 | LL | type Alias<'a, U> = impl Trait; | ^ diff --git a/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs b/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs index 92465076733bc..b31c79b8b2bb7 100644 --- a/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs +++ b/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait Trait {} type Alias<'a, U> = impl Trait; fn f<'a>() -> Alias<'a, ()> {} diff --git a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.full_tait.stderr index 7f120af2408bf..150bfbaef5910 100644 --- a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.full_tait.stderr @@ -1,20 +1,11 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-69136-inner-lifetime-resolve-error.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0261]: use of undeclared lifetime name `'a` - --> $DIR/issue-69136-inner-lifetime-resolve-error.rs:20:65 + --> $DIR/issue-69136-inner-lifetime-resolve-error.rs:19:65 | LL | type Return = impl WithAssoc; | - ^^ undeclared lifetime | | | help: consider introducing lifetime `'a` here: `'a,` -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0261`. diff --git a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.min_tait.stderr index e1fc94c3472a3..150bfbaef5910 100644 --- a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.min_tait.stderr @@ -1,5 +1,5 @@ error[E0261]: use of undeclared lifetime name `'a` - --> $DIR/issue-69136-inner-lifetime-resolve-error.rs:20:65 + --> $DIR/issue-69136-inner-lifetime-resolve-error.rs:19:65 | LL | type Return = impl WithAssoc; | - ^^ undeclared lifetime diff --git a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs index 61161d44e51ab..ae89cdd1c0879 100644 --- a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs +++ b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait SomeTrait {} diff --git a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.full_tait.stderr deleted file mode 100644 index 61e2e20dfd043..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-69136-inner-lifetime-resolve-ok.rs:7:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.rs b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.rs index 01df967a4a515..05d50f0f1bf54 100644 --- a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.rs +++ b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.rs @@ -5,7 +5,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait SomeTrait {} diff --git a/src/test/ui/type-alias-impl-trait/issue-69323.full.stderr b/src/test/ui/type-alias-impl-trait/issue-69323.full.stderr deleted file mode 100644 index 71cc6f61c3786..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-69323.full.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-69323.rs:5:27 - | -LL | #![cfg_attr(full, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-69323.rs b/src/test/ui/type-alias-impl-trait/issue-69323.rs index 824558c1b342b..9c4b4433f9fad 100644 --- a/src/test/ui/type-alias-impl-trait/issue-69323.rs +++ b/src/test/ui/type-alias-impl-trait/issue-69323.rs @@ -3,7 +3,6 @@ // revisions: min full #![feature(min_type_alias_impl_trait)] #![cfg_attr(full, feature(type_alias_impl_trait))] -//[full]~^ WARN incomplete use std::iter::{once, Chain}; diff --git a/src/test/ui/type-alias-impl-trait/issue-70121.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-70121.full_tait.stderr deleted file mode 100644 index 9fe2e2cf88ee9..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-70121.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-70121.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/issue-70121.rs b/src/test/ui/type-alias-impl-trait/issue-70121.rs index 150eca46975da..1eb33c805bb15 100644 --- a/src/test/ui/type-alias-impl-trait/issue-70121.rs +++ b/src/test/ui/type-alias-impl-trait/issue-70121.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete pub type Successors<'a> = impl Iterator; diff --git a/src/test/ui/type-alias-impl-trait/issue-74244.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-74244.full_tait.stderr index e7729e47c36dd..83c37001a45c9 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74244.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-74244.full_tait.stderr @@ -1,18 +1,9 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-74244.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates - --> $DIR/issue-74244.rs:12:6 + --> $DIR/issue-74244.rs:11:6 | LL | impl Allocator for DefaultAllocator { | ^ unconstrained type parameter -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/issue-74244.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-74244.min_tait.stderr index 6ee8c58826dd4..83c37001a45c9 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74244.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-74244.min_tait.stderr @@ -1,5 +1,5 @@ error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates - --> $DIR/issue-74244.rs:12:6 + --> $DIR/issue-74244.rs:11:6 | LL | impl Allocator for DefaultAllocator { | ^ unconstrained type parameter diff --git a/src/test/ui/type-alias-impl-trait/issue-74244.rs b/src/test/ui/type-alias-impl-trait/issue-74244.rs index 890eb23ef9511..d9845a9b62ce8 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74244.rs +++ b/src/test/ui/type-alias-impl-trait/issue-74244.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait Allocator { type Buffer; diff --git a/src/test/ui/type-alias-impl-trait/issue-74761-2.rs b/src/test/ui/type-alias-impl-trait/issue-74761-2.rs index 4b0f2afee5484..8e7ff45a72dff 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74761-2.rs +++ b/src/test/ui/type-alias-impl-trait/issue-74761-2.rs @@ -1,6 +1,5 @@ #![feature(member_constraints)] #![feature(type_alias_impl_trait)] -//~^ WARN incomplete pub trait A { type B; diff --git a/src/test/ui/type-alias-impl-trait/issue-74761-2.stderr b/src/test/ui/type-alias-impl-trait/issue-74761-2.stderr index 4506a6e23d5c0..505e6436f5bdf 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74761-2.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-74761-2.stderr @@ -1,5 +1,5 @@ error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/issue-74761-2.rs:12:14 + --> $DIR/issue-74761-2.rs:11:14 | LL | type B = impl core::fmt::Debug; | ^^^^^^^^^^^^^^^^^^^^^ @@ -7,28 +7,19 @@ LL | type B = impl core::fmt::Debug; = note: see issue #63063 for more information = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-74761-2.rs:2:12 - | -LL | #![feature(type_alias_impl_trait)] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates - --> $DIR/issue-74761-2.rs:9:6 + --> $DIR/issue-74761-2.rs:8:6 | LL | impl<'a, 'b> A for () { | ^^ unconstrained lifetime parameter error[E0207]: the lifetime parameter `'b` is not constrained by the impl trait, self type, or predicates - --> $DIR/issue-74761-2.rs:9:10 + --> $DIR/issue-74761-2.rs:8:10 | LL | impl<'a, 'b> A for () { | ^^ unconstrained lifetime parameter -error: aborting due to 3 previous errors; 1 warning emitted +error: aborting due to 3 previous errors Some errors have detailed explanations: E0207, E0658. For more information about an error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/issue-74761.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-74761.full_tait.stderr index 05b63a00dfb15..112fc2ec7196c 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74761.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-74761.full_tait.stderr @@ -1,24 +1,15 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-74761.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates - --> $DIR/issue-74761.rs:10:6 + --> $DIR/issue-74761.rs:9:6 | LL | impl<'a, 'b> A for () { | ^^ unconstrained lifetime parameter error[E0207]: the lifetime parameter `'b` is not constrained by the impl trait, self type, or predicates - --> $DIR/issue-74761.rs:10:10 + --> $DIR/issue-74761.rs:9:10 | LL | impl<'a, 'b> A for () { | ^^ unconstrained lifetime parameter -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 E0207`. diff --git a/src/test/ui/type-alias-impl-trait/issue-74761.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-74761.min_tait.stderr index ad111e23b15b5..112fc2ec7196c 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74761.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-74761.min_tait.stderr @@ -1,11 +1,11 @@ error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates - --> $DIR/issue-74761.rs:10:6 + --> $DIR/issue-74761.rs:9:6 | LL | impl<'a, 'b> A for () { | ^^ unconstrained lifetime parameter error[E0207]: the lifetime parameter `'b` is not constrained by the impl trait, self type, or predicates - --> $DIR/issue-74761.rs:10:10 + --> $DIR/issue-74761.rs:9:10 | LL | impl<'a, 'b> A for () { | ^^ unconstrained lifetime parameter diff --git a/src/test/ui/type-alias-impl-trait/issue-74761.rs b/src/test/ui/type-alias-impl-trait/issue-74761.rs index bbc67ecc97aab..4f0db7aedc785 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74761.rs +++ b/src/test/ui/type-alias-impl-trait/issue-74761.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete pub trait A { type B; diff --git a/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.full_tait.stderr index 8fb4a3b662565..fb063800bdbc6 100644 --- a/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-76202-trait-impl-for-tait.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: cannot implement trait on type alias impl trait - --> $DIR/issue-76202-trait-impl-for-tait.rs:19:1 + --> $DIR/issue-76202-trait-impl-for-tait.rs:18:1 | LL | impl Test for F { | ^^^^^^^^^^^^^^^ | note: type alias impl trait defined here - --> $DIR/issue-76202-trait-impl-for-tait.rs:12:10 + --> $DIR/issue-76202-trait-impl-for-tait.rs:11:10 | LL | type F = impl Dummy; | ^^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.min_tait.stderr index 3754553772c25..fb063800bdbc6 100644 --- a/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.min_tait.stderr @@ -1,11 +1,11 @@ error: cannot implement trait on type alias impl trait - --> $DIR/issue-76202-trait-impl-for-tait.rs:19:1 + --> $DIR/issue-76202-trait-impl-for-tait.rs:18:1 | LL | impl Test for F { | ^^^^^^^^^^^^^^^ | note: type alias impl trait defined here - --> $DIR/issue-76202-trait-impl-for-tait.rs:12:10 + --> $DIR/issue-76202-trait-impl-for-tait.rs:11:10 | LL | type F = impl Dummy; | ^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs b/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs index 276c770fe486f..527fbd4bb2f4e 100644 --- a/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs +++ b/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait Dummy {} impl Dummy for () {} @@ -16,7 +15,8 @@ trait Test { fn test(self); } -impl Test for F { //~ ERROR cannot implement trait +impl Test for F { + //~^ ERROR cannot implement trait fn test(self) {} } diff --git a/src/test/ui/type-alias-impl-trait/issue-78450.rs b/src/test/ui/type-alias-impl-trait/issue-78450.rs index 640f929f8f11b..bcc16a5b2aba8 100644 --- a/src/test/ui/type-alias-impl-trait/issue-78450.rs +++ b/src/test/ui/type-alias-impl-trait/issue-78450.rs @@ -2,7 +2,6 @@ #![feature(min_type_alias_impl_trait)] #![feature(type_alias_impl_trait)] -//~^ WARNING: the feature `type_alias_impl_trait` is incomplete pub trait AssociatedImpl { type ImplTrait; diff --git a/src/test/ui/type-alias-impl-trait/issue-78450.stderr b/src/test/ui/type-alias-impl-trait/issue-78450.stderr deleted file mode 100644 index efccf6241fb78..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-78450.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-78450.rs:4:12 - | -LL | #![feature(type_alias_impl_trait)] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.full_tait.stderr b/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.full_tait.stderr deleted file mode 100644 index 5e4307be17a04..0000000000000 --- a/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/nested_type_alias_impl_trait.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs b/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs index f03563dfed6d2..3c059fcf7d428 100644 --- a/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs +++ b/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs @@ -1,21 +1,20 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete // build-pass (FIXME(62277): could be check-pass?) mod my_mod { - use std::fmt::Debug; + use std::fmt::Debug; - pub type Foo = impl Debug; - pub type Foot = impl Debug; + pub type Foo = impl Debug; + pub type Foot = impl Debug; - pub fn get_foo() -> Foo { - 5i32 - } + pub fn get_foo() -> Foo { + 5i32 + } - pub fn get_foot() -> Foot { - get_foo() - } + pub fn get_foot() -> Foot { + get_foo() + } } fn main() { diff --git a/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.full_tait.stderr b/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.full_tait.stderr index 45c95469e95c2..725958358a11e 100644 --- a/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/never_reveal_concrete_type.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0308]: mismatched types - --> $DIR/never_reveal_concrete_type.rs:16:27 + --> $DIR/never_reveal_concrete_type.rs:15:27 | LL | type NoReveal = impl std::fmt::Debug; | -------------------- the found opaque type @@ -22,12 +13,12 @@ LL | let _: &'static str = x; found opaque type `impl Debug` error[E0605]: non-primitive cast: `impl Debug` as `&'static str` - --> $DIR/never_reveal_concrete_type.rs:17:13 + --> $DIR/never_reveal_concrete_type.rs:16:13 | LL | let _ = x as &'static str; | ^^^^^^^^^^^^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object -error: aborting due to 2 previous errors; 1 warning emitted +error: aborting due to 2 previous errors Some errors have detailed explanations: E0308, E0605. For more information about an error, try `rustc --explain E0308`. diff --git a/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.min_tait.stderr b/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.min_tait.stderr index 530f8876cf200..725958358a11e 100644 --- a/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.min_tait.stderr @@ -1,5 +1,5 @@ error[E0308]: mismatched types - --> $DIR/never_reveal_concrete_type.rs:16:27 + --> $DIR/never_reveal_concrete_type.rs:15:27 | LL | type NoReveal = impl std::fmt::Debug; | -------------------- the found opaque type @@ -13,7 +13,7 @@ LL | let _: &'static str = x; found opaque type `impl Debug` error[E0605]: non-primitive cast: `impl Debug` as `&'static str` - --> $DIR/never_reveal_concrete_type.rs:17:13 + --> $DIR/never_reveal_concrete_type.rs:16:13 | LL | let _ = x as &'static str; | ^^^^^^^^^^^^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object diff --git a/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.rs b/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.rs index c555b9cdded8a..1672c49c604af 100644 --- a/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.rs +++ b/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.full_tait.stderr b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.full_tait.stderr index faddecb217664..917830c6a0984 100644 --- a/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/no_inferrable_concrete_type.rs:6:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: could not find defining uses - --> $DIR/no_inferrable_concrete_type.rs:9:12 + --> $DIR/no_inferrable_concrete_type.rs:8:12 | LL | type Foo = impl Copy; | ^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.min_tait.stderr b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.min_tait.stderr index 3194bd7610712..917830c6a0984 100644 --- a/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.min_tait.stderr @@ -1,5 +1,5 @@ error: could not find defining uses - --> $DIR/no_inferrable_concrete_type.rs:9:12 + --> $DIR/no_inferrable_concrete_type.rs:8:12 | LL | type Foo = impl Copy; | ^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.rs b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.rs index 409eec7250fd0..520954b50ab55 100644 --- a/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.rs +++ b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.rs @@ -4,7 +4,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type Foo = impl Copy; //~ could not find defining uses diff --git a/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.full_tait.stderr b/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.full_tait.stderr index 8699b21929ff2..0f0141dcb99fe 100644 --- a/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/no_revealing_outside_defining_module.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0308]: mismatched types - --> $DIR/no_revealing_outside_defining_module.rs:18:19 + --> $DIR/no_revealing_outside_defining_module.rs:17:19 | LL | pub type Boo = impl ::std::fmt::Debug; | ---------------------- the found opaque type @@ -22,7 +13,7 @@ LL | let _: &str = bomp(); found opaque type `impl Debug` error[E0308]: mismatched types - --> $DIR/no_revealing_outside_defining_module.rs:22:5 + --> $DIR/no_revealing_outside_defining_module.rs:21:5 | LL | pub type Boo = impl ::std::fmt::Debug; | ---------------------- the expected opaque type @@ -35,6 +26,6 @@ LL | "" = note: expected opaque type `impl Debug` found reference `&'static str` -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 E0308`. diff --git a/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.min_tait.stderr b/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.min_tait.stderr index faaab4393521e..0f0141dcb99fe 100644 --- a/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.min_tait.stderr @@ -1,5 +1,5 @@ error[E0308]: mismatched types - --> $DIR/no_revealing_outside_defining_module.rs:18:19 + --> $DIR/no_revealing_outside_defining_module.rs:17:19 | LL | pub type Boo = impl ::std::fmt::Debug; | ---------------------- the found opaque type @@ -13,7 +13,7 @@ LL | let _: &str = bomp(); found opaque type `impl Debug` error[E0308]: mismatched types - --> $DIR/no_revealing_outside_defining_module.rs:22:5 + --> $DIR/no_revealing_outside_defining_module.rs:21:5 | LL | pub type Boo = impl ::std::fmt::Debug; | ---------------------- the expected opaque type diff --git a/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.rs b/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.rs index 566c311b9bdf3..5ab793c0119f5 100644 --- a/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.rs +++ b/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/not_a_defining_use.full_tait.stderr b/src/test/ui/type-alias-impl-trait/not_a_defining_use.full_tait.stderr index 76e3500e8a90e..d7f8d04ff808e 100644 --- a/src/test/ui/type-alias-impl-trait/not_a_defining_use.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/not_a_defining_use.full_tait.stderr @@ -1,23 +1,14 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/not_a_defining_use.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: non-defining opaque type use in defining scope - --> $DIR/not_a_defining_use.rs:12:27 + --> $DIR/not_a_defining_use.rs:11:27 | LL | fn two(t: T) -> Two { | ^^^^^^^^^^^ | note: used non-generic type `u32` for generic parameter - --> $DIR/not_a_defining_use.rs:10:13 + --> $DIR/not_a_defining_use.rs:9:13 | LL | type Two = impl Debug; | ^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/not_a_defining_use.min_tait.stderr b/src/test/ui/type-alias-impl-trait/not_a_defining_use.min_tait.stderr index f5dbfecc742f5..d7f8d04ff808e 100644 --- a/src/test/ui/type-alias-impl-trait/not_a_defining_use.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/not_a_defining_use.min_tait.stderr @@ -1,11 +1,11 @@ error: non-defining opaque type use in defining scope - --> $DIR/not_a_defining_use.rs:12:27 + --> $DIR/not_a_defining_use.rs:11:27 | LL | fn two(t: T) -> Two { | ^^^^^^^^^^^ | note: used non-generic type `u32` for generic parameter - --> $DIR/not_a_defining_use.rs:10:13 + --> $DIR/not_a_defining_use.rs:9:13 | LL | type Two = impl Debug; | ^ diff --git a/src/test/ui/type-alias-impl-trait/not_a_defining_use.rs b/src/test/ui/type-alias-impl-trait/not_a_defining_use.rs index e58f33fcff48d..57ccb58acc939 100644 --- a/src/test/ui/type-alias-impl-trait/not_a_defining_use.rs +++ b/src/test/ui/type-alias-impl-trait/not_a_defining_use.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/not_well_formed.full_tait.stderr b/src/test/ui/type-alias-impl-trait/not_well_formed.full_tait.stderr index 38f086ec45d68..59f07482ddbc1 100644 --- a/src/test/ui/type-alias-impl-trait/not_well_formed.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/not_well_formed.full_tait.stderr @@ -1,18 +1,9 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/not_well_formed.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0220]: associated type `Assoc` not found for `V` - --> $DIR/not_well_formed.rs:13:29 + --> $DIR/not_well_formed.rs:11:29 | LL | type Foo = impl Trait; | ^^^^^ associated type `Assoc` not found -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0220`. diff --git a/src/test/ui/type-alias-impl-trait/not_well_formed.min_tait.stderr b/src/test/ui/type-alias-impl-trait/not_well_formed.min_tait.stderr index 3bac38cef7da8..59f07482ddbc1 100644 --- a/src/test/ui/type-alias-impl-trait/not_well_formed.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/not_well_formed.min_tait.stderr @@ -1,5 +1,5 @@ error[E0220]: associated type `Assoc` not found for `V` - --> $DIR/not_well_formed.rs:13:29 + --> $DIR/not_well_formed.rs:11:29 | LL | type Foo = impl Trait; | ^^^^^ associated type `Assoc` not found diff --git a/src/test/ui/type-alias-impl-trait/not_well_formed.rs b/src/test/ui/type-alias-impl-trait/not_well_formed.rs index 6d511c581888c..c3e9895524e17 100644 --- a/src/test/ui/type-alias-impl-trait/not_well_formed.rs +++ b/src/test/ui/type-alias-impl-trait/not_well_formed.rs @@ -1,10 +1,8 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete -fn main() { -} +fn main() {} trait TraitWithAssoc { type Assoc; diff --git a/src/test/ui/type-alias-impl-trait/structural-match-no-leak.full_tait.stderr b/src/test/ui/type-alias-impl-trait/structural-match-no-leak.full_tait.stderr index d5a4fa52dfb7b..ce0827d94f94f 100644 --- a/src/test/ui/type-alias-impl-trait/structural-match-no-leak.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/structural-match-no-leak.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/structural-match-no-leak.rs:4:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: `impl Send` cannot be used in patterns - --> $DIR/structural-match-no-leak.rs:18:9 + --> $DIR/structural-match-no-leak.rs:17:9 | LL | LEAK_FREE => (), | ^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/structural-match-no-leak.min_tait.stderr b/src/test/ui/type-alias-impl-trait/structural-match-no-leak.min_tait.stderr index b7caf8ed29868..ce0827d94f94f 100644 --- a/src/test/ui/type-alias-impl-trait/structural-match-no-leak.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/structural-match-no-leak.min_tait.stderr @@ -1,5 +1,5 @@ error: `impl Send` cannot be used in patterns - --> $DIR/structural-match-no-leak.rs:18:9 + --> $DIR/structural-match-no-leak.rs:17:9 | LL | LEAK_FREE => (), | ^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/structural-match-no-leak.rs b/src/test/ui/type-alias-impl-trait/structural-match-no-leak.rs index e2b10e7355fbb..7a067c6f2d75d 100644 --- a/src/test/ui/type-alias-impl-trait/structural-match-no-leak.rs +++ b/src/test/ui/type-alias-impl-trait/structural-match-no-leak.rs @@ -2,7 +2,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type Bar = impl Send; diff --git a/src/test/ui/type-alias-impl-trait/structural-match.full_tait.stderr b/src/test/ui/type-alias-impl-trait/structural-match.full_tait.stderr index d394c99df8029..cb2cf59774ba0 100644 --- a/src/test/ui/type-alias-impl-trait/structural-match.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/structural-match.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/structural-match.rs:4:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: `impl Send` cannot be used in patterns - --> $DIR/structural-match.rs:19:9 + --> $DIR/structural-match.rs:18:9 | LL | VALUE => (), | ^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/structural-match.min_tait.stderr b/src/test/ui/type-alias-impl-trait/structural-match.min_tait.stderr index f63b1fb23df7e..cb2cf59774ba0 100644 --- a/src/test/ui/type-alias-impl-trait/structural-match.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/structural-match.min_tait.stderr @@ -1,5 +1,5 @@ error: `impl Send` cannot be used in patterns - --> $DIR/structural-match.rs:19:9 + --> $DIR/structural-match.rs:18:9 | LL | VALUE => (), | ^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/structural-match.rs b/src/test/ui/type-alias-impl-trait/structural-match.rs index aed9334b3cc86..c30cd5f5958e6 100644 --- a/src/test/ui/type-alias-impl-trait/structural-match.rs +++ b/src/test/ui/type-alias-impl-trait/structural-match.rs @@ -2,7 +2,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type Foo = impl Send; diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.full_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.full_tait.stderr index 6f817757cc4b3..2a40ccc074b93 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.full_tait.stderr @@ -1,14 +1,5 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-impl-trait-const.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0308]: mismatched types - --> $DIR/type-alias-impl-trait-const.rs:13:19 + --> $DIR/type-alias-impl-trait-const.rs:12:19 | LL | pub type Foo = impl Debug; | ---------- the expected opaque type @@ -20,11 +11,11 @@ LL | const _FOO: Foo = 5; found type `{integer}` error: could not find defining uses - --> $DIR/type-alias-impl-trait-const.rs:10:16 + --> $DIR/type-alias-impl-trait-const.rs:9:16 | LL | pub type Foo = impl Debug; | ^^^^^^^^^^ -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 E0308`. diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.min_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.min_tait.stderr index ce98318333b01..2a40ccc074b93 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.min_tait.stderr @@ -1,5 +1,5 @@ error[E0308]: mismatched types - --> $DIR/type-alias-impl-trait-const.rs:13:19 + --> $DIR/type-alias-impl-trait-const.rs:12:19 | LL | pub type Foo = impl Debug; | ---------- the expected opaque type @@ -11,7 +11,7 @@ LL | const _FOO: Foo = 5; found type `{integer}` error: could not find defining uses - --> $DIR/type-alias-impl-trait-const.rs:10:16 + --> $DIR/type-alias-impl-trait-const.rs:9:16 | LL | pub type Foo = impl Debug; | ^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.rs index 751512c5dfc03..4432807916eba 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete // Ensures that `const` items can constrain an opaque `impl Trait`. diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.full_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.full_tait.stderr deleted file mode 100644 index fb88c2043bd3f..0000000000000 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-impl-trait-fns.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs index a6b00220084ad..e3debedbde307 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete // Regression test for issue #61863 @@ -11,20 +10,19 @@ pub trait MyTrait {} #[derive(Debug)] pub struct MyStruct { - v: u64 + v: u64, } impl MyTrait for MyStruct {} pub fn bla() -> TE { - return MyStruct {v:1} + return MyStruct { v: 1 }; } pub fn bla2() -> TE { bla() } - type TE = impl MyTrait; fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.full_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.full_tait.stderr deleted file mode 100644 index cbecd0bb3d486..0000000000000 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-impl-trait-sized.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.rs index b062739921fa6..b0f6a5a2db3e7 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.rs @@ -3,18 +3,25 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type A = impl Sized; -fn f1() -> A { 0 } +fn f1() -> A { + 0 +} type B = impl ?Sized; -fn f2() -> &'static B { &[0] } +fn f2() -> &'static B { + &[0] +} type C = impl ?Sized + 'static; -fn f3() -> &'static C { &[0] } +fn f3() -> &'static C { + &[0] +} type D = impl ?Sized; -fn f4() -> &'static D { &1 } +fn f4() -> &'static D { + &1 +} fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.full_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.full_tait.stderr deleted file mode 100644 index 1a351867bff2d..0000000000000 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-impl-trait-tuple.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.rs index ad2c11d4f994e..5f228ec03f739 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete #![allow(dead_code)] pub trait MyTrait {} diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.full_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.full_tait.stderr index b16d9c2c143bd..c4bd4deaa0617 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.full_tait.stderr @@ -1,18 +1,9 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-impl-trait-unconstrained-lifetime.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates - --> $DIR/type-alias-impl-trait-unconstrained-lifetime.rs:13:6 + --> $DIR/type-alias-impl-trait-unconstrained-lifetime.rs:12:6 | LL | impl<'a, I: Iterator> Trait for (i32, I) { | ^^ unconstrained lifetime parameter -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.min_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.min_tait.stderr index 7d4abb0fafbbc..c4bd4deaa0617 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.min_tait.stderr @@ -1,5 +1,5 @@ error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates - --> $DIR/type-alias-impl-trait-unconstrained-lifetime.rs:13:6 + --> $DIR/type-alias-impl-trait-unconstrained-lifetime.rs:12:6 | LL | impl<'a, I: Iterator> Trait for (i32, I) { | ^^ unconstrained lifetime parameter diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.rs index 97294e81dca66..63bbbaa707c98 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete trait Trait { type Associated; diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.full_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.full_tait.stderr index e3fd076fc492b..f1b9f23f06640 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-impl-trait-with-cycle-error.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: could not find defining uses - --> $DIR/type-alias-impl-trait-with-cycle-error.rs:6:12 + --> $DIR/type-alias-impl-trait-with-cycle-error.rs:5:12 | LL | type Foo = impl Fn() -> Foo; | ^^^^^^^^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.min_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.min_tait.stderr index 556779574e43c..f1b9f23f06640 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.min_tait.stderr @@ -1,5 +1,5 @@ error: could not find defining uses - --> $DIR/type-alias-impl-trait-with-cycle-error.rs:6:12 + --> $DIR/type-alias-impl-trait-with-cycle-error.rs:5:12 | LL | type Foo = impl Fn() -> Foo; | ^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.rs index dba0d2c2cdf46..2b3694d50100c 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type Foo = impl Fn() -> Foo; //~^ ERROR: could not find defining uses diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.full_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.full_tait.stderr index eccf08b4a1247..2df29d72c1e3b 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.full_tait.stderr @@ -1,17 +1,8 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-impl-trait-with-cycle-error2.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error: could not find defining uses - --> $DIR/type-alias-impl-trait-with-cycle-error2.rs:10:12 + --> $DIR/type-alias-impl-trait-with-cycle-error2.rs:9:12 | LL | type Foo = impl Bar; | ^^^^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.min_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.min_tait.stderr index 44d279cad171f..2df29d72c1e3b 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.min_tait.stderr @@ -1,5 +1,5 @@ error: could not find defining uses - --> $DIR/type-alias-impl-trait-with-cycle-error2.rs:10:12 + --> $DIR/type-alias-impl-trait-with-cycle-error2.rs:9:12 | LL | type Foo = impl Bar; | ^^^^^^^^^^^^^^^^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.rs index f204403712588..2d7e213970727 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete pub trait Bar { type Item; @@ -14,6 +13,4 @@ fn crash(x: Foo) -> Foo { x } -fn main() { - -} +fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.full_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.full_tait.stderr index 6ada4b2fdffe0..4c32549ce30b1 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.full_tait.stderr @@ -1,23 +1,14 @@ error: at least one trait must be specified - --> $DIR/type-alias-impl-trait-with-no-traits.rs:6:12 + --> $DIR/type-alias-impl-trait-with-no-traits.rs:5:12 | LL | type Foo = impl 'static; | ^^^^^^^^^^^^ error: at least one trait must be specified - --> $DIR/type-alias-impl-trait-with-no-traits.rs:13:13 + --> $DIR/type-alias-impl-trait-with-no-traits.rs:12:13 | LL | fn bar() -> impl 'static { | ^^^^^^^^^^^^ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-impl-trait-with-no-traits.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -error: aborting due to 2 previous errors; 1 warning emitted +error: aborting due to 2 previous errors diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.min_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.min_tait.stderr index 5fd8aac550751..4c32549ce30b1 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.min_tait.stderr @@ -1,11 +1,11 @@ error: at least one trait must be specified - --> $DIR/type-alias-impl-trait-with-no-traits.rs:6:12 + --> $DIR/type-alias-impl-trait-with-no-traits.rs:5:12 | LL | type Foo = impl 'static; | ^^^^^^^^^^^^ error: at least one trait must be specified - --> $DIR/type-alias-impl-trait-with-no-traits.rs:13:13 + --> $DIR/type-alias-impl-trait-with-no-traits.rs:12:13 | LL | fn bar() -> impl 'static { | ^^^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.rs index 7efc790058864..469f3875a8d40 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.rs @@ -1,7 +1,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete type Foo = impl 'static; //~^ ERROR: at least one trait must be specified diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.full_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.full_tait.stderr deleted file mode 100644 index 8c0f7758dae60..0000000000000 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-impl-trait.rs:8:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.rs index 6176595534a35..934acb0d9afa0 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.rs @@ -6,7 +6,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete fn main() { assert_eq!(foo().to_string(), "foo"); diff --git a/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.full_tait.stderr b/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.full_tait.stderr deleted file mode 100644 index ed4fe41da3ed3..0000000000000 --- a/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.full_tait.stderr +++ /dev/null @@ -1,11 +0,0 @@ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/type-alias-nested-impl-trait.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -warning: 1 warning emitted - diff --git a/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.rs b/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.rs index 3023bf06562fb..8bdac325cd708 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete use std::iter::{once, Chain}; diff --git a/src/test/ui/type-alias-impl-trait/unused_generic_param.full_tait.stderr b/src/test/ui/type-alias-impl-trait/unused_generic_param.full_tait.stderr index b70f36b67ab3d..995a6dfbf877c 100644 --- a/src/test/ui/type-alias-impl-trait/unused_generic_param.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/unused_generic_param.full_tait.stderr @@ -1,23 +1,14 @@ error: at least one trait must be specified - --> $DIR/unused_generic_param.rs:9:28 + --> $DIR/unused_generic_param.rs:7:28 | LL | type PartiallyDefined = impl 'static; | ^^^^^^^^^^^^ error: at least one trait must be specified - --> $DIR/unused_generic_param.rs:16:29 + --> $DIR/unused_generic_param.rs:14:29 | LL | type PartiallyDefined2 = impl 'static; | ^^^^^^^^^^^^ -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/unused_generic_param.rs:3:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - -error: aborting due to 2 previous errors; 1 warning emitted +error: aborting due to 2 previous errors diff --git a/src/test/ui/type-alias-impl-trait/unused_generic_param.min_tait.stderr b/src/test/ui/type-alias-impl-trait/unused_generic_param.min_tait.stderr index 561025c88f8f6..995a6dfbf877c 100644 --- a/src/test/ui/type-alias-impl-trait/unused_generic_param.min_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/unused_generic_param.min_tait.stderr @@ -1,11 +1,11 @@ error: at least one trait must be specified - --> $DIR/unused_generic_param.rs:9:28 + --> $DIR/unused_generic_param.rs:7:28 | LL | type PartiallyDefined = impl 'static; | ^^^^^^^^^^^^ error: at least one trait must be specified - --> $DIR/unused_generic_param.rs:16:29 + --> $DIR/unused_generic_param.rs:14:29 | LL | type PartiallyDefined2 = impl 'static; | ^^^^^^^^^^^^ diff --git a/src/test/ui/type-alias-impl-trait/unused_generic_param.rs b/src/test/ui/type-alias-impl-trait/unused_generic_param.rs index 59c7646ade263..8c946238362c2 100644 --- a/src/test/ui/type-alias-impl-trait/unused_generic_param.rs +++ b/src/test/ui/type-alias-impl-trait/unused_generic_param.rs @@ -1,10 +1,8 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete -fn main() { -} +fn main() {} type PartiallyDefined = impl 'static; //~^ ERROR: at least one trait must be specified diff --git a/src/test/ui/typeck/typeck_type_placeholder_item.full_tait.stderr b/src/test/ui/typeck/typeck_type_placeholder_item.full_tait.stderr index b6aea9586b879..3427dc0e62214 100644 --- a/src/test/ui/typeck/typeck_type_placeholder_item.full_tait.stderr +++ b/src/test/ui/typeck/typeck_type_placeholder_item.full_tait.stderr @@ -1,35 +1,35 @@ error: expected identifier, found reserved identifier `_` - --> $DIR/typeck_type_placeholder_item.rs:157:18 + --> $DIR/typeck_type_placeholder_item.rs:156:18 | LL | struct BadStruct<_>(_); | ^ expected identifier, found reserved identifier error: expected identifier, found reserved identifier `_` - --> $DIR/typeck_type_placeholder_item.rs:160:16 + --> $DIR/typeck_type_placeholder_item.rs:159:16 | LL | trait BadTrait<_> {} | ^ expected identifier, found reserved identifier error: expected identifier, found reserved identifier `_` - --> $DIR/typeck_type_placeholder_item.rs:170:19 + --> $DIR/typeck_type_placeholder_item.rs:169:19 | LL | struct BadStruct1<_, _>(_); | ^ expected identifier, found reserved identifier error: expected identifier, found reserved identifier `_` - --> $DIR/typeck_type_placeholder_item.rs:170:22 + --> $DIR/typeck_type_placeholder_item.rs:169:22 | LL | struct BadStruct1<_, _>(_); | ^ expected identifier, found reserved identifier error: expected identifier, found reserved identifier `_` - --> $DIR/typeck_type_placeholder_item.rs:175:19 + --> $DIR/typeck_type_placeholder_item.rs:174:19 | LL | struct BadStruct2<_, T>(_, T); | ^ expected identifier, found reserved identifier error: associated constant in `impl` without body - --> $DIR/typeck_type_placeholder_item.rs:208:5 + --> $DIR/typeck_type_placeholder_item.rs:207:5 | LL | const C: _; | ^^^^^^^^^^- @@ -37,24 +37,15 @@ LL | const C: _; | help: provide a definition for the constant: `= ;` error[E0403]: the name `_` is already used for a generic parameter in this item's generic parameters - --> $DIR/typeck_type_placeholder_item.rs:170:22 + --> $DIR/typeck_type_placeholder_item.rs:169:22 | LL | struct BadStruct1<_, _>(_); | - ^ already used | | | first use of `_` -warning: the feature `type_alias_impl_trait` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/typeck_type_placeholder_item.rs:5:32 - | -LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: `#[warn(incomplete_features)]` on by default - = note: see issue #63063 for more information - error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:10:14 + --> $DIR/typeck_type_placeholder_item.rs:9:14 | LL | fn test() -> _ { 5 } | ^ @@ -63,7 +54,7 @@ LL | fn test() -> _ { 5 } | help: replace with the correct return type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:13:16 + --> $DIR/typeck_type_placeholder_item.rs:12:16 | LL | fn test2() -> (_, _) { (5, 5) } | -^--^- @@ -73,7 +64,7 @@ LL | fn test2() -> (_, _) { (5, 5) } | help: replace with the correct return type: `(i32, i32)` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:16:15 + --> $DIR/typeck_type_placeholder_item.rs:15:15 | LL | static TEST3: _ = "test"; | ^ @@ -82,7 +73,7 @@ LL | static TEST3: _ = "test"; | help: replace with the correct type: `&str` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:19:15 + --> $DIR/typeck_type_placeholder_item.rs:18:15 | LL | static TEST4: _ = 145; | ^ @@ -91,13 +82,13 @@ LL | static TEST4: _ = 145; | help: replace with the correct type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:22:15 + --> $DIR/typeck_type_placeholder_item.rs:21:15 | LL | static TEST5: (_, _) = (1, 2); | ^^^^^^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:25:13 + --> $DIR/typeck_type_placeholder_item.rs:24:13 | LL | fn test6(_: _) { } | ^ not allowed in type signatures @@ -108,7 +99,7 @@ LL | fn test6(_: T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:28:18 + --> $DIR/typeck_type_placeholder_item.rs:27:18 | LL | fn test6_b(_: _, _: T) { } | ^ not allowed in type signatures @@ -119,7 +110,7 @@ LL | fn test6_b(_: U, _: T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:31:30 + --> $DIR/typeck_type_placeholder_item.rs:30:30 | LL | fn test6_c(_: _, _: (T, K, L, A, B)) { } | ^ not allowed in type signatures @@ -130,7 +121,7 @@ LL | fn test6_c(_: U, _: (T, K, L, A, B)) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:34:13 + --> $DIR/typeck_type_placeholder_item.rs:33:13 | LL | fn test7(x: _) { let _x: usize = x; } | ^ not allowed in type signatures @@ -141,7 +132,7 @@ LL | fn test7(x: T) { let _x: usize = x; } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:37:22 + --> $DIR/typeck_type_placeholder_item.rs:36:22 | LL | fn test8(_f: fn() -> _) { } | ^ @@ -150,7 +141,7 @@ LL | fn test8(_f: fn() -> _) { } | help: use type parameters instead: `T` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:37:22 + --> $DIR/typeck_type_placeholder_item.rs:36:22 | LL | fn test8(_f: fn() -> _) { } | ^ not allowed in type signatures @@ -161,7 +152,7 @@ LL | fn test8(_f: fn() -> T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:51:26 + --> $DIR/typeck_type_placeholder_item.rs:50:26 | LL | fn test11(x: &usize) -> &_ { | -^ @@ -170,7 +161,7 @@ LL | fn test11(x: &usize) -> &_ { | help: replace with the correct return type: `&'static &'static usize` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:56:52 + --> $DIR/typeck_type_placeholder_item.rs:55:52 | LL | unsafe fn test12(x: *const usize) -> *const *const _ { | --------------^ @@ -179,7 +170,7 @@ LL | unsafe fn test12(x: *const usize) -> *const *const _ { | help: replace with the correct return type: `*const *const usize` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/typeck_type_placeholder_item.rs:70:8 + --> $DIR/typeck_type_placeholder_item.rs:69:8 | LL | a: _, | ^ not allowed in type signatures @@ -198,13 +189,13 @@ LL | b: (T, T), | error: missing type for `static` item - --> $DIR/typeck_type_placeholder_item.rs:76:12 + --> $DIR/typeck_type_placeholder_item.rs:75:12 | LL | static A = 42; | ^ help: provide a type for the static variable: `A: i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:78:15 + --> $DIR/typeck_type_placeholder_item.rs:77:15 | LL | static B: _ = 42; | ^ @@ -213,13 +204,13 @@ LL | static B: _ = 42; | help: replace with the correct type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:80:15 + --> $DIR/typeck_type_placeholder_item.rs:79:15 | LL | static C: Option<_> = Some(42); | ^^^^^^^^^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:82:21 + --> $DIR/typeck_type_placeholder_item.rs:81:21 | LL | fn fn_test() -> _ { 5 } | ^ @@ -228,7 +219,7 @@ LL | fn fn_test() -> _ { 5 } | help: replace with the correct return type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:85:23 + --> $DIR/typeck_type_placeholder_item.rs:84:23 | LL | fn fn_test2() -> (_, _) { (5, 5) } | -^--^- @@ -238,7 +229,7 @@ LL | fn fn_test2() -> (_, _) { (5, 5) } | help: replace with the correct return type: `(i32, i32)` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:88:22 + --> $DIR/typeck_type_placeholder_item.rs:87:22 | LL | static FN_TEST3: _ = "test"; | ^ @@ -247,7 +238,7 @@ LL | static FN_TEST3: _ = "test"; | help: replace with the correct type: `&str` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:91:22 + --> $DIR/typeck_type_placeholder_item.rs:90:22 | LL | static FN_TEST4: _ = 145; | ^ @@ -256,13 +247,13 @@ LL | static FN_TEST4: _ = 145; | help: replace with the correct type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:94:22 + --> $DIR/typeck_type_placeholder_item.rs:93:22 | LL | static FN_TEST5: (_, _) = (1, 2); | ^^^^^^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:97:20 + --> $DIR/typeck_type_placeholder_item.rs:96:20 | LL | fn fn_test6(_: _) { } | ^ not allowed in type signatures @@ -273,7 +264,7 @@ LL | fn fn_test6(_: T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:100:20 + --> $DIR/typeck_type_placeholder_item.rs:99:20 | LL | fn fn_test7(x: _) { let _x: usize = x; } | ^ not allowed in type signatures @@ -284,7 +275,7 @@ LL | fn fn_test7(x: T) { let _x: usize = x; } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:103:29 + --> $DIR/typeck_type_placeholder_item.rs:102:29 | LL | fn fn_test8(_f: fn() -> _) { } | ^ @@ -293,7 +284,7 @@ LL | fn fn_test8(_f: fn() -> _) { } | help: use type parameters instead: `T` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:103:29 + --> $DIR/typeck_type_placeholder_item.rs:102:29 | LL | fn fn_test8(_f: fn() -> _) { } | ^ not allowed in type signatures @@ -304,7 +295,7 @@ LL | fn fn_test8(_f: fn() -> T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/typeck_type_placeholder_item.rs:126:12 + --> $DIR/typeck_type_placeholder_item.rs:125:12 | LL | a: _, | ^ not allowed in type signatures @@ -323,13 +314,13 @@ LL | b: (T, T), | error[E0282]: type annotations needed - --> $DIR/typeck_type_placeholder_item.rs:131:18 + --> $DIR/typeck_type_placeholder_item.rs:130:18 | LL | fn fn_test11(_: _) -> (_, _) { panic!() } | ^ cannot infer type error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:131:28 + --> $DIR/typeck_type_placeholder_item.rs:130:28 | LL | fn fn_test11(_: _) -> (_, _) { panic!() } | ^ ^ not allowed in type signatures @@ -337,7 +328,7 @@ LL | fn fn_test11(_: _) -> (_, _) { panic!() } | not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:135:30 + --> $DIR/typeck_type_placeholder_item.rs:134:30 | LL | fn fn_test12(x: i32) -> (_, _) { (x, x) } | -^--^- @@ -347,7 +338,7 @@ LL | fn fn_test12(x: i32) -> (_, _) { (x, x) } | help: replace with the correct return type: `(i32, i32)` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:138:33 + --> $DIR/typeck_type_placeholder_item.rs:137:33 | LL | fn fn_test13(x: _) -> (i32, _) { (x, x) } | ------^- @@ -356,7 +347,7 @@ LL | fn fn_test13(x: _) -> (i32, _) { (x, x) } | help: replace with the correct return type: `(i32, i32)` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/typeck_type_placeholder_item.rs:157:21 + --> $DIR/typeck_type_placeholder_item.rs:156:21 | LL | struct BadStruct<_>(_); | ^ not allowed in type signatures @@ -367,7 +358,7 @@ LL | struct BadStruct(T); | ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for implementations - --> $DIR/typeck_type_placeholder_item.rs:162:15 + --> $DIR/typeck_type_placeholder_item.rs:161:15 | LL | impl BadTrait<_> for BadStruct<_> {} | ^ ^ not allowed in type signatures @@ -380,13 +371,13 @@ LL | impl BadTrait for BadStruct {} | ^^^ ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for opaque types - --> $DIR/typeck_type_placeholder_item.rs:165:34 + --> $DIR/typeck_type_placeholder_item.rs:164:34 | LL | fn impl_trait() -> impl BadTrait<_> { | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/typeck_type_placeholder_item.rs:170:25 + --> $DIR/typeck_type_placeholder_item.rs:169:25 | LL | struct BadStruct1<_, _>(_); | ^ not allowed in type signatures @@ -397,7 +388,7 @@ LL | struct BadStruct1(T); | ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/typeck_type_placeholder_item.rs:175:25 + --> $DIR/typeck_type_placeholder_item.rs:174:25 | LL | struct BadStruct2<_, T>(_, T); | ^ not allowed in type signatures @@ -408,19 +399,19 @@ LL | struct BadStruct2(U, T); | ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for type aliases - --> $DIR/typeck_type_placeholder_item.rs:179:14 + --> $DIR/typeck_type_placeholder_item.rs:178:14 | LL | type X = Box<_>; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for opaque types - --> $DIR/typeck_type_placeholder_item.rs:185:21 + --> $DIR/typeck_type_placeholder_item.rs:184:21 | LL | type Y = impl Trait<_>; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:219:31 + --> $DIR/typeck_type_placeholder_item.rs:218:31 | LL | fn value() -> Option<&'static _> { | ----------------^- @@ -429,7 +420,7 @@ LL | fn value() -> Option<&'static _> { | help: replace with the correct return type: `Option<&'static u8>` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants - --> $DIR/typeck_type_placeholder_item.rs:224:10 + --> $DIR/typeck_type_placeholder_item.rs:223:10 | LL | const _: Option<_> = map(value); | ^^^^^^^^^ @@ -438,7 +429,7 @@ LL | const _: Option<_> = map(value); | help: replace with the correct type: `Option` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:143:31 + --> $DIR/typeck_type_placeholder_item.rs:142:31 | LL | fn method_test1(&self, x: _); | ^ not allowed in type signatures @@ -449,7 +440,7 @@ LL | fn method_test1(&self, x: T); | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:145:31 + --> $DIR/typeck_type_placeholder_item.rs:144:31 | LL | fn method_test2(&self, x: _) -> _; | ^ ^ not allowed in type signatures @@ -462,7 +453,7 @@ LL | fn method_test2(&self, x: T) -> T; | ^^^ ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:147:31 + --> $DIR/typeck_type_placeholder_item.rs:146:31 | LL | fn method_test3(&self) -> _; | ^ not allowed in type signatures @@ -473,7 +464,7 @@ LL | fn method_test3(&self) -> T; | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:149:26 + --> $DIR/typeck_type_placeholder_item.rs:148:26 | LL | fn assoc_fn_test1(x: _); | ^ not allowed in type signatures @@ -484,7 +475,7 @@ LL | fn assoc_fn_test1(x: T); | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:151:26 + --> $DIR/typeck_type_placeholder_item.rs:150:26 | LL | fn assoc_fn_test2(x: _) -> _; | ^ ^ not allowed in type signatures @@ -497,7 +488,7 @@ LL | fn assoc_fn_test2(x: T) -> T; | ^^^ ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:153:28 + --> $DIR/typeck_type_placeholder_item.rs:152:28 | LL | fn assoc_fn_test3() -> _; | ^ not allowed in type signatures @@ -508,19 +499,19 @@ LL | fn assoc_fn_test3() -> T; | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types - --> $DIR/typeck_type_placeholder_item.rs:193:14 + --> $DIR/typeck_type_placeholder_item.rs:192:14 | LL | type B = _; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants - --> $DIR/typeck_type_placeholder_item.rs:195:14 + --> $DIR/typeck_type_placeholder_item.rs:194:14 | LL | const C: _; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants - --> $DIR/typeck_type_placeholder_item.rs:197:14 + --> $DIR/typeck_type_placeholder_item.rs:196:14 | LL | const D: _ = 42; | ^ @@ -529,13 +520,13 @@ LL | const D: _ = 42; | help: replace with the correct type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types - --> $DIR/typeck_type_placeholder_item.rs:200:26 + --> $DIR/typeck_type_placeholder_item.rs:199:26 | LL | type F: std::ops::Fn(_); | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:44:24 + --> $DIR/typeck_type_placeholder_item.rs:43:24 | LL | fn test9(&self) -> _ { () } | ^ @@ -544,7 +535,7 @@ LL | fn test9(&self) -> _ { () } | help: replace with the correct return type: `()` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:47:27 + --> $DIR/typeck_type_placeholder_item.rs:46:27 | LL | fn test10(&self, _x : _) { } | ^ not allowed in type signatures @@ -555,7 +546,7 @@ LL | fn test10(&self, _x : T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:62:24 + --> $DIR/typeck_type_placeholder_item.rs:61:24 | LL | fn clone(&self) -> _ { Test9 } | ^ @@ -564,7 +555,7 @@ LL | fn clone(&self) -> _ { Test9 } | help: replace with the correct return type: `Test9` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:65:37 + --> $DIR/typeck_type_placeholder_item.rs:64:37 | LL | fn clone_from(&mut self, other: _) { *self = Test9; } | ^ not allowed in type signatures @@ -575,7 +566,7 @@ LL | fn clone_from(&mut self, other: T) { *self = Test9; } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:110:31 + --> $DIR/typeck_type_placeholder_item.rs:109:31 | LL | fn fn_test9(&self) -> _ { () } | ^ @@ -584,7 +575,7 @@ LL | fn fn_test9(&self) -> _ { () } | help: replace with the correct return type: `()` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:113:34 + --> $DIR/typeck_type_placeholder_item.rs:112:34 | LL | fn fn_test10(&self, _x : _) { } | ^ not allowed in type signatures @@ -595,7 +586,7 @@ LL | fn fn_test10(&self, _x : T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:118:28 + --> $DIR/typeck_type_placeholder_item.rs:117:28 | LL | fn clone(&self) -> _ { FnTest9 } | ^ @@ -604,7 +595,7 @@ LL | fn clone(&self) -> _ { FnTest9 } | help: replace with the correct return type: `FnTest9` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:121:41 + --> $DIR/typeck_type_placeholder_item.rs:120:41 | LL | fn clone_from(&mut self, other: _) { *self = FnTest9; } | ^ not allowed in type signatures @@ -615,25 +606,25 @@ LL | fn clone_from(&mut self, other: T) { *self = FnTest9; } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types - --> $DIR/typeck_type_placeholder_item.rs:204:14 + --> $DIR/typeck_type_placeholder_item.rs:203:14 | LL | type A = _; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types - --> $DIR/typeck_type_placeholder_item.rs:206:14 + --> $DIR/typeck_type_placeholder_item.rs:205:14 | LL | type B = _; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants - --> $DIR/typeck_type_placeholder_item.rs:208:14 + --> $DIR/typeck_type_placeholder_item.rs:207:14 | LL | const C: _; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants - --> $DIR/typeck_type_placeholder_item.rs:211:14 + --> $DIR/typeck_type_placeholder_item.rs:210:14 | LL | const D: _ = 42; | ^ @@ -641,7 +632,7 @@ LL | const D: _ = 42; | not allowed in type signatures | help: replace with the correct type: `i32` -error: aborting due to 69 previous errors; 1 warning emitted +error: aborting due to 69 previous errors Some errors have detailed explanations: E0121, E0282, E0403. For more information about an error, try `rustc --explain E0121`. diff --git a/src/test/ui/typeck/typeck_type_placeholder_item.min_tait.stderr b/src/test/ui/typeck/typeck_type_placeholder_item.min_tait.stderr index 88cc3bfc7f8c3..3427dc0e62214 100644 --- a/src/test/ui/typeck/typeck_type_placeholder_item.min_tait.stderr +++ b/src/test/ui/typeck/typeck_type_placeholder_item.min_tait.stderr @@ -1,35 +1,35 @@ error: expected identifier, found reserved identifier `_` - --> $DIR/typeck_type_placeholder_item.rs:157:18 + --> $DIR/typeck_type_placeholder_item.rs:156:18 | LL | struct BadStruct<_>(_); | ^ expected identifier, found reserved identifier error: expected identifier, found reserved identifier `_` - --> $DIR/typeck_type_placeholder_item.rs:160:16 + --> $DIR/typeck_type_placeholder_item.rs:159:16 | LL | trait BadTrait<_> {} | ^ expected identifier, found reserved identifier error: expected identifier, found reserved identifier `_` - --> $DIR/typeck_type_placeholder_item.rs:170:19 + --> $DIR/typeck_type_placeholder_item.rs:169:19 | LL | struct BadStruct1<_, _>(_); | ^ expected identifier, found reserved identifier error: expected identifier, found reserved identifier `_` - --> $DIR/typeck_type_placeholder_item.rs:170:22 + --> $DIR/typeck_type_placeholder_item.rs:169:22 | LL | struct BadStruct1<_, _>(_); | ^ expected identifier, found reserved identifier error: expected identifier, found reserved identifier `_` - --> $DIR/typeck_type_placeholder_item.rs:175:19 + --> $DIR/typeck_type_placeholder_item.rs:174:19 | LL | struct BadStruct2<_, T>(_, T); | ^ expected identifier, found reserved identifier error: associated constant in `impl` without body - --> $DIR/typeck_type_placeholder_item.rs:208:5 + --> $DIR/typeck_type_placeholder_item.rs:207:5 | LL | const C: _; | ^^^^^^^^^^- @@ -37,7 +37,7 @@ LL | const C: _; | help: provide a definition for the constant: `= ;` error[E0403]: the name `_` is already used for a generic parameter in this item's generic parameters - --> $DIR/typeck_type_placeholder_item.rs:170:22 + --> $DIR/typeck_type_placeholder_item.rs:169:22 | LL | struct BadStruct1<_, _>(_); | - ^ already used @@ -45,7 +45,7 @@ LL | struct BadStruct1<_, _>(_); | first use of `_` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:10:14 + --> $DIR/typeck_type_placeholder_item.rs:9:14 | LL | fn test() -> _ { 5 } | ^ @@ -54,7 +54,7 @@ LL | fn test() -> _ { 5 } | help: replace with the correct return type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:13:16 + --> $DIR/typeck_type_placeholder_item.rs:12:16 | LL | fn test2() -> (_, _) { (5, 5) } | -^--^- @@ -64,7 +64,7 @@ LL | fn test2() -> (_, _) { (5, 5) } | help: replace with the correct return type: `(i32, i32)` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:16:15 + --> $DIR/typeck_type_placeholder_item.rs:15:15 | LL | static TEST3: _ = "test"; | ^ @@ -73,7 +73,7 @@ LL | static TEST3: _ = "test"; | help: replace with the correct type: `&str` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:19:15 + --> $DIR/typeck_type_placeholder_item.rs:18:15 | LL | static TEST4: _ = 145; | ^ @@ -82,13 +82,13 @@ LL | static TEST4: _ = 145; | help: replace with the correct type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:22:15 + --> $DIR/typeck_type_placeholder_item.rs:21:15 | LL | static TEST5: (_, _) = (1, 2); | ^^^^^^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:25:13 + --> $DIR/typeck_type_placeholder_item.rs:24:13 | LL | fn test6(_: _) { } | ^ not allowed in type signatures @@ -99,7 +99,7 @@ LL | fn test6(_: T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:28:18 + --> $DIR/typeck_type_placeholder_item.rs:27:18 | LL | fn test6_b(_: _, _: T) { } | ^ not allowed in type signatures @@ -110,7 +110,7 @@ LL | fn test6_b(_: U, _: T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:31:30 + --> $DIR/typeck_type_placeholder_item.rs:30:30 | LL | fn test6_c(_: _, _: (T, K, L, A, B)) { } | ^ not allowed in type signatures @@ -121,7 +121,7 @@ LL | fn test6_c(_: U, _: (T, K, L, A, B)) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:34:13 + --> $DIR/typeck_type_placeholder_item.rs:33:13 | LL | fn test7(x: _) { let _x: usize = x; } | ^ not allowed in type signatures @@ -132,7 +132,7 @@ LL | fn test7(x: T) { let _x: usize = x; } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:37:22 + --> $DIR/typeck_type_placeholder_item.rs:36:22 | LL | fn test8(_f: fn() -> _) { } | ^ @@ -141,7 +141,7 @@ LL | fn test8(_f: fn() -> _) { } | help: use type parameters instead: `T` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:37:22 + --> $DIR/typeck_type_placeholder_item.rs:36:22 | LL | fn test8(_f: fn() -> _) { } | ^ not allowed in type signatures @@ -152,7 +152,7 @@ LL | fn test8(_f: fn() -> T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:51:26 + --> $DIR/typeck_type_placeholder_item.rs:50:26 | LL | fn test11(x: &usize) -> &_ { | -^ @@ -161,7 +161,7 @@ LL | fn test11(x: &usize) -> &_ { | help: replace with the correct return type: `&'static &'static usize` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:56:52 + --> $DIR/typeck_type_placeholder_item.rs:55:52 | LL | unsafe fn test12(x: *const usize) -> *const *const _ { | --------------^ @@ -170,7 +170,7 @@ LL | unsafe fn test12(x: *const usize) -> *const *const _ { | help: replace with the correct return type: `*const *const usize` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/typeck_type_placeholder_item.rs:70:8 + --> $DIR/typeck_type_placeholder_item.rs:69:8 | LL | a: _, | ^ not allowed in type signatures @@ -189,13 +189,13 @@ LL | b: (T, T), | error: missing type for `static` item - --> $DIR/typeck_type_placeholder_item.rs:76:12 + --> $DIR/typeck_type_placeholder_item.rs:75:12 | LL | static A = 42; | ^ help: provide a type for the static variable: `A: i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:78:15 + --> $DIR/typeck_type_placeholder_item.rs:77:15 | LL | static B: _ = 42; | ^ @@ -204,13 +204,13 @@ LL | static B: _ = 42; | help: replace with the correct type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:80:15 + --> $DIR/typeck_type_placeholder_item.rs:79:15 | LL | static C: Option<_> = Some(42); | ^^^^^^^^^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:82:21 + --> $DIR/typeck_type_placeholder_item.rs:81:21 | LL | fn fn_test() -> _ { 5 } | ^ @@ -219,7 +219,7 @@ LL | fn fn_test() -> _ { 5 } | help: replace with the correct return type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:85:23 + --> $DIR/typeck_type_placeholder_item.rs:84:23 | LL | fn fn_test2() -> (_, _) { (5, 5) } | -^--^- @@ -229,7 +229,7 @@ LL | fn fn_test2() -> (_, _) { (5, 5) } | help: replace with the correct return type: `(i32, i32)` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:88:22 + --> $DIR/typeck_type_placeholder_item.rs:87:22 | LL | static FN_TEST3: _ = "test"; | ^ @@ -238,7 +238,7 @@ LL | static FN_TEST3: _ = "test"; | help: replace with the correct type: `&str` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:91:22 + --> $DIR/typeck_type_placeholder_item.rs:90:22 | LL | static FN_TEST4: _ = 145; | ^ @@ -247,13 +247,13 @@ LL | static FN_TEST4: _ = 145; | help: replace with the correct type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables - --> $DIR/typeck_type_placeholder_item.rs:94:22 + --> $DIR/typeck_type_placeholder_item.rs:93:22 | LL | static FN_TEST5: (_, _) = (1, 2); | ^^^^^^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:97:20 + --> $DIR/typeck_type_placeholder_item.rs:96:20 | LL | fn fn_test6(_: _) { } | ^ not allowed in type signatures @@ -264,7 +264,7 @@ LL | fn fn_test6(_: T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:100:20 + --> $DIR/typeck_type_placeholder_item.rs:99:20 | LL | fn fn_test7(x: _) { let _x: usize = x; } | ^ not allowed in type signatures @@ -275,7 +275,7 @@ LL | fn fn_test7(x: T) { let _x: usize = x; } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:103:29 + --> $DIR/typeck_type_placeholder_item.rs:102:29 | LL | fn fn_test8(_f: fn() -> _) { } | ^ @@ -284,7 +284,7 @@ LL | fn fn_test8(_f: fn() -> _) { } | help: use type parameters instead: `T` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:103:29 + --> $DIR/typeck_type_placeholder_item.rs:102:29 | LL | fn fn_test8(_f: fn() -> _) { } | ^ not allowed in type signatures @@ -295,7 +295,7 @@ LL | fn fn_test8(_f: fn() -> T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/typeck_type_placeholder_item.rs:126:12 + --> $DIR/typeck_type_placeholder_item.rs:125:12 | LL | a: _, | ^ not allowed in type signatures @@ -314,13 +314,13 @@ LL | b: (T, T), | error[E0282]: type annotations needed - --> $DIR/typeck_type_placeholder_item.rs:131:18 + --> $DIR/typeck_type_placeholder_item.rs:130:18 | LL | fn fn_test11(_: _) -> (_, _) { panic!() } | ^ cannot infer type error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:131:28 + --> $DIR/typeck_type_placeholder_item.rs:130:28 | LL | fn fn_test11(_: _) -> (_, _) { panic!() } | ^ ^ not allowed in type signatures @@ -328,7 +328,7 @@ LL | fn fn_test11(_: _) -> (_, _) { panic!() } | not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:135:30 + --> $DIR/typeck_type_placeholder_item.rs:134:30 | LL | fn fn_test12(x: i32) -> (_, _) { (x, x) } | -^--^- @@ -338,7 +338,7 @@ LL | fn fn_test12(x: i32) -> (_, _) { (x, x) } | help: replace with the correct return type: `(i32, i32)` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:138:33 + --> $DIR/typeck_type_placeholder_item.rs:137:33 | LL | fn fn_test13(x: _) -> (i32, _) { (x, x) } | ------^- @@ -347,7 +347,7 @@ LL | fn fn_test13(x: _) -> (i32, _) { (x, x) } | help: replace with the correct return type: `(i32, i32)` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/typeck_type_placeholder_item.rs:157:21 + --> $DIR/typeck_type_placeholder_item.rs:156:21 | LL | struct BadStruct<_>(_); | ^ not allowed in type signatures @@ -358,7 +358,7 @@ LL | struct BadStruct(T); | ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for implementations - --> $DIR/typeck_type_placeholder_item.rs:162:15 + --> $DIR/typeck_type_placeholder_item.rs:161:15 | LL | impl BadTrait<_> for BadStruct<_> {} | ^ ^ not allowed in type signatures @@ -371,13 +371,13 @@ LL | impl BadTrait for BadStruct {} | ^^^ ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for opaque types - --> $DIR/typeck_type_placeholder_item.rs:165:34 + --> $DIR/typeck_type_placeholder_item.rs:164:34 | LL | fn impl_trait() -> impl BadTrait<_> { | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/typeck_type_placeholder_item.rs:170:25 + --> $DIR/typeck_type_placeholder_item.rs:169:25 | LL | struct BadStruct1<_, _>(_); | ^ not allowed in type signatures @@ -388,7 +388,7 @@ LL | struct BadStruct1(T); | ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs - --> $DIR/typeck_type_placeholder_item.rs:175:25 + --> $DIR/typeck_type_placeholder_item.rs:174:25 | LL | struct BadStruct2<_, T>(_, T); | ^ not allowed in type signatures @@ -399,19 +399,19 @@ LL | struct BadStruct2(U, T); | ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for type aliases - --> $DIR/typeck_type_placeholder_item.rs:179:14 + --> $DIR/typeck_type_placeholder_item.rs:178:14 | LL | type X = Box<_>; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for opaque types - --> $DIR/typeck_type_placeholder_item.rs:185:21 + --> $DIR/typeck_type_placeholder_item.rs:184:21 | LL | type Y = impl Trait<_>; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:219:31 + --> $DIR/typeck_type_placeholder_item.rs:218:31 | LL | fn value() -> Option<&'static _> { | ----------------^- @@ -420,7 +420,7 @@ LL | fn value() -> Option<&'static _> { | help: replace with the correct return type: `Option<&'static u8>` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants - --> $DIR/typeck_type_placeholder_item.rs:224:10 + --> $DIR/typeck_type_placeholder_item.rs:223:10 | LL | const _: Option<_> = map(value); | ^^^^^^^^^ @@ -429,7 +429,7 @@ LL | const _: Option<_> = map(value); | help: replace with the correct type: `Option` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:143:31 + --> $DIR/typeck_type_placeholder_item.rs:142:31 | LL | fn method_test1(&self, x: _); | ^ not allowed in type signatures @@ -440,7 +440,7 @@ LL | fn method_test1(&self, x: T); | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:145:31 + --> $DIR/typeck_type_placeholder_item.rs:144:31 | LL | fn method_test2(&self, x: _) -> _; | ^ ^ not allowed in type signatures @@ -453,7 +453,7 @@ LL | fn method_test2(&self, x: T) -> T; | ^^^ ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:147:31 + --> $DIR/typeck_type_placeholder_item.rs:146:31 | LL | fn method_test3(&self) -> _; | ^ not allowed in type signatures @@ -464,7 +464,7 @@ LL | fn method_test3(&self) -> T; | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:149:26 + --> $DIR/typeck_type_placeholder_item.rs:148:26 | LL | fn assoc_fn_test1(x: _); | ^ not allowed in type signatures @@ -475,7 +475,7 @@ LL | fn assoc_fn_test1(x: T); | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:151:26 + --> $DIR/typeck_type_placeholder_item.rs:150:26 | LL | fn assoc_fn_test2(x: _) -> _; | ^ ^ not allowed in type signatures @@ -488,7 +488,7 @@ LL | fn assoc_fn_test2(x: T) -> T; | ^^^ ^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:153:28 + --> $DIR/typeck_type_placeholder_item.rs:152:28 | LL | fn assoc_fn_test3() -> _; | ^ not allowed in type signatures @@ -499,19 +499,19 @@ LL | fn assoc_fn_test3() -> T; | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types - --> $DIR/typeck_type_placeholder_item.rs:193:14 + --> $DIR/typeck_type_placeholder_item.rs:192:14 | LL | type B = _; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants - --> $DIR/typeck_type_placeholder_item.rs:195:14 + --> $DIR/typeck_type_placeholder_item.rs:194:14 | LL | const C: _; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants - --> $DIR/typeck_type_placeholder_item.rs:197:14 + --> $DIR/typeck_type_placeholder_item.rs:196:14 | LL | const D: _ = 42; | ^ @@ -520,13 +520,13 @@ LL | const D: _ = 42; | help: replace with the correct type: `i32` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types - --> $DIR/typeck_type_placeholder_item.rs:200:26 + --> $DIR/typeck_type_placeholder_item.rs:199:26 | LL | type F: std::ops::Fn(_); | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:44:24 + --> $DIR/typeck_type_placeholder_item.rs:43:24 | LL | fn test9(&self) -> _ { () } | ^ @@ -535,7 +535,7 @@ LL | fn test9(&self) -> _ { () } | help: replace with the correct return type: `()` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:47:27 + --> $DIR/typeck_type_placeholder_item.rs:46:27 | LL | fn test10(&self, _x : _) { } | ^ not allowed in type signatures @@ -546,7 +546,7 @@ LL | fn test10(&self, _x : T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:62:24 + --> $DIR/typeck_type_placeholder_item.rs:61:24 | LL | fn clone(&self) -> _ { Test9 } | ^ @@ -555,7 +555,7 @@ LL | fn clone(&self) -> _ { Test9 } | help: replace with the correct return type: `Test9` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:65:37 + --> $DIR/typeck_type_placeholder_item.rs:64:37 | LL | fn clone_from(&mut self, other: _) { *self = Test9; } | ^ not allowed in type signatures @@ -566,7 +566,7 @@ LL | fn clone_from(&mut self, other: T) { *self = Test9; } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:110:31 + --> $DIR/typeck_type_placeholder_item.rs:109:31 | LL | fn fn_test9(&self) -> _ { () } | ^ @@ -575,7 +575,7 @@ LL | fn fn_test9(&self) -> _ { () } | help: replace with the correct return type: `()` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:113:34 + --> $DIR/typeck_type_placeholder_item.rs:112:34 | LL | fn fn_test10(&self, _x : _) { } | ^ not allowed in type signatures @@ -586,7 +586,7 @@ LL | fn fn_test10(&self, _x : T) { } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types - --> $DIR/typeck_type_placeholder_item.rs:118:28 + --> $DIR/typeck_type_placeholder_item.rs:117:28 | LL | fn clone(&self) -> _ { FnTest9 } | ^ @@ -595,7 +595,7 @@ LL | fn clone(&self) -> _ { FnTest9 } | help: replace with the correct return type: `FnTest9` error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions - --> $DIR/typeck_type_placeholder_item.rs:121:41 + --> $DIR/typeck_type_placeholder_item.rs:120:41 | LL | fn clone_from(&mut self, other: _) { *self = FnTest9; } | ^ not allowed in type signatures @@ -606,25 +606,25 @@ LL | fn clone_from(&mut self, other: T) { *self = FnTest9; } | ^^^ ^ error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types - --> $DIR/typeck_type_placeholder_item.rs:204:14 + --> $DIR/typeck_type_placeholder_item.rs:203:14 | LL | type A = _; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types - --> $DIR/typeck_type_placeholder_item.rs:206:14 + --> $DIR/typeck_type_placeholder_item.rs:205:14 | LL | type B = _; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants - --> $DIR/typeck_type_placeholder_item.rs:208:14 + --> $DIR/typeck_type_placeholder_item.rs:207:14 | LL | const C: _; | ^ not allowed in type signatures error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants - --> $DIR/typeck_type_placeholder_item.rs:211:14 + --> $DIR/typeck_type_placeholder_item.rs:210:14 | LL | const D: _ = 42; | ^ diff --git a/src/test/ui/typeck/typeck_type_placeholder_item.rs b/src/test/ui/typeck/typeck_type_placeholder_item.rs index 55f5d44d46b37..3d30ab32baced 100644 --- a/src/test/ui/typeck/typeck_type_placeholder_item.rs +++ b/src/test/ui/typeck/typeck_type_placeholder_item.rs @@ -3,7 +3,6 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] #![cfg_attr(full_tait, feature(type_alias_impl_trait))] -//[full_tait]~^ WARN incomplete // This test checks that it is not possible to enable global type // inference by using the `_` type placeholder. From 38bdd0e0198196b545aeb64f0305707de163a83a Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Mon, 26 Jul 2021 17:01:16 -0300 Subject: [PATCH 32/34] Make all tests use type_alias_impl_trait feature instead of min --- compiler/rustc_ast_passes/src/feature_gate.rs | 2 +- src/test/rustdoc-ui/coverage/traits.rs | 2 +- .../trait-alias-closure.rs | 2 +- .../error-in-impl-trait/trait-alias.rs | 2 +- src/test/rustdoc/auxiliary/issue-73061.rs | 2 +- src/test/rustdoc/impl-trait-alias.rs | 2 +- src/test/rustdoc/return-impl-trait.rs | 2 +- .../ui/associated-type-bounds/duplicate.rs | 4 +- .../associated-type-bounds/duplicate.stderr | 483 +++++++++++++ .../trait-alias-impl-trait.rs | 4 +- src/test/ui/associated-types/issue-63591.rs | 4 +- .../issues/issue-60655-latebound-regions.rs | 4 +- ...orted_main_const_fn_item_type_forbidden.rs | 2 +- ...d_main_const_fn_item_type_forbidden.stderr | 2 +- ...ture-gate-min_type_alias_impl_trait.stderr | 22 +- .../feature-gate-type_alias_impl_trait.rs | 4 +- .../feature-gate-type_alias_impl_trait.stderr | 14 +- src/test/ui/generator/layout-error.rs | 6 +- src/test/ui/generator/layout-error.stderr | 9 + .../metadata-sufficient-for-layout.rs | 4 +- .../metadata-sufficient-for-layout.stderr | 8 + ...ssociated-impl-trait-type-generic-trait.rs | 4 +- .../associated-impl-trait-type-trivial.rs | 4 +- .../impl-trait/associated-impl-trait-type.rs | 4 +- src/test/ui/impl-trait/auto-trait.rs | 4 +- src/test/ui/impl-trait/auto-trait.stderr | 12 + .../ui/impl-trait/bound-normalization-pass.rs | 2 +- src/test/ui/impl-trait/issue-55872-1.rs | 4 +- src/test/ui/impl-trait/issue-55872-1.stderr | 48 ++ src/test/ui/impl-trait/issue-55872-2.rs | 4 +- src/test/ui/impl-trait/issue-55872-2.stderr | 19 + src/test/ui/impl-trait/issue-55872.rs | 4 +- src/test/ui/impl-trait/issue-55872.stderr | 12 + src/test/ui/impl-trait/issue-86465.rs | 2 +- src/test/ui/impl-trait/issues/issue-53457.rs | 5 +- src/test/ui/impl-trait/issues/issue-70877.rs | 5 +- .../ui/impl-trait/issues/issue-70877.stderr | 15 + src/test/ui/impl-trait/issues/issue-78722.rs | 4 +- .../ui/impl-trait/issues/issue-78722.stderr | 23 + src/test/ui/impl-trait/issues/issue-86201.rs | 2 +- .../multiple-lifetimes/error-handling-2.rs | 4 +- .../error-handling-2.stderr | 15 + .../multiple-lifetimes/error-handling.rs | 4 +- .../multiple-lifetimes/error-handling.stderr | 15 + ...nds-pick-original-type-alias-impl-trait.rs | 2 +- src/test/ui/impl-trait/negative-reasoning.rs | 4 +- .../ui/impl-trait/negative-reasoning.stderr | 14 + .../ui/impl-trait/type-alias-generic-param.rs | 4 +- .../type-alias-impl-trait-in-fn-body.rs | 4 +- src/test/ui/impl-trait/where-allowed.stderr | 6 +- .../ui/issues/issue-60662.full_tait.stdout | 2 +- .../ui/issues/issue-60662.min_tait.stdout | 2 +- src/test/ui/issues/issue-60662.rs | 4 +- src/test/ui/issues/issue-60662.stdout | 14 + src/test/ui/layout/debug.rs | 2 +- .../ui/lint/inline-trait-and-foreign-items.rs | 4 +- .../inline-trait-and-foreign-items.stderr | 72 ++ src/test/ui/lint/lint-ctypes-73249-2.rs | 4 +- src/test/ui/lint/lint-ctypes-73249-2.stderr | 15 + src/test/ui/lint/lint-ctypes-73249-3.rs | 4 +- src/test/ui/lint/lint-ctypes-73249-3.stderr | 15 + src/test/ui/lint/lint-ctypes-73249-5.rs | 4 +- src/test/ui/lint/lint-ctypes-73249-5.stderr | 15 + src/test/ui/lint/lint-ctypes-73251-1.rs | 4 +- src/test/ui/lint/lint-ctypes-73251-1.stderr | 15 + src/test/ui/lint/lint-ctypes-73251-2.rs | 4 +- src/test/ui/lint/lint-ctypes-73251-2.stderr | 15 + src/test/ui/lint/lint-ctypes-73251.rs | 4 +- src/test/ui/lint/opaque-ty-ffi-unsafe.rs | 4 +- src/test/ui/lint/opaque-ty-ffi-unsafe.stderr | 15 + src/test/ui/mir/issue-75053.rs | 4 +- src/test/ui/mir/issue-75053.stderr | 8 + .../ui/privacy/private-in-public-assoc-ty.rs | 4 +- .../privacy/private-in-public-assoc-ty.stderr | 68 ++ ...private-in-public-type-alias-impl-trait.rs | 4 +- src/test/ui/save-analysis/issue-68621.rs | 4 +- src/test/ui/save-analysis/issue-68621.stderr | 8 + src/test/ui/traits/alias/issue-83613.rs | 2 +- .../type-alias-impl-trait/assoc-type-const.rs | 4 +- .../assoc-type-const.stderr | 11 + .../assoc-type-lifetime-unconstrained.rs | 4 +- .../assoc-type-lifetime-unconstrained.stderr | 9 + .../assoc-type-lifetime.rs | 4 +- .../associated-type-alias-impl-trait.rs | 4 +- .../auxiliary/cross_crate_ice.rs | 4 +- .../auxiliary/cross_crate_ice2.rs | 4 +- .../type-alias-impl-trait/bound_reduction.rs | 4 +- .../type-alias-impl-trait/bound_reduction2.rs | 4 +- .../bound_reduction2.stderr | 14 + .../bounds-are-checked-2.rs | 4 +- .../bounds-are-checked-2.stderr | 14 + .../bounds-are-checked.rs | 4 +- .../bounds-are-checked.stderr | 26 + .../ui/type-alias-impl-trait/coherence.rs | 4 +- .../ui/type-alias-impl-trait/coherence.stderr | 9 + .../declared_but_never_defined.rs | 4 +- .../declared_but_never_defined.stderr | 8 + .../declared_but_not_defined_in_scope.rs | 4 +- .../declared_but_not_defined_in_scope.stderr | 23 + .../different_defining_uses.rs | 4 +- .../different_defining_uses.stderr | 14 + .../different_defining_uses_never_type.rs | 4 +- .../different_defining_uses_never_type.stderr | 26 + .../different_defining_uses_never_type2.rs | 4 +- src/test/ui/type-alias-impl-trait/fallback.rs | 4 +- .../generic_different_defining_uses.rs | 4 +- .../generic_different_defining_uses.stderr | 14 + .../generic_duplicate_lifetime_param.rs | 4 +- .../generic_duplicate_lifetime_param.stderr | 14 + .../generic_duplicate_param_use.rs | 10 +- .../generic_duplicate_param_use.stderr | 38 ++ .../generic_duplicate_param_use10.rs | 4 +- .../generic_duplicate_param_use2.rs | 4 +- .../generic_duplicate_param_use2.stderr | 14 + .../generic_duplicate_param_use3.rs | 4 +- .../generic_duplicate_param_use3.stderr | 14 + .../generic_duplicate_param_use4.rs | 4 +- .../generic_duplicate_param_use4.stderr | 14 + .../generic_duplicate_param_use5.rs | 4 +- .../generic_duplicate_param_use5.stderr | 39 ++ .../generic_duplicate_param_use6.rs | 4 +- .../generic_duplicate_param_use6.stderr | 27 + .../generic_duplicate_param_use7.rs | 4 +- .../generic_duplicate_param_use8.rs | 4 +- .../generic_duplicate_param_use8.stderr | 27 + .../generic_duplicate_param_use9.rs | 4 +- .../generic_duplicate_param_use9.stderr | 51 ++ .../generic_lifetime_param.rs | 4 +- .../generic_nondefining_use.rs | 12 +- .../generic_nondefining_use.stderr | 35 + .../type-alias-impl-trait/generic_not_used.rs | 4 +- .../generic_not_used.stderr | 18 + .../generic_type_does_not_live_long_enough.rs | 4 +- ...eric_type_does_not_live_long_enough.stderr | 33 + .../generic_underconstrained.rs | 4 +- .../generic_underconstrained.stderr | 23 + .../generic_underconstrained2.rs | 4 +- .../generic_underconstrained2.stderr | 43 ++ .../impl-with-unconstrained-param.rs | 4 +- .../impl-with-unconstrained-param.stderr | 9 + .../incoherent-assoc-imp-trait.rs | 4 +- .../incoherent-assoc-imp-trait.stderr | 23 + ...ue-52843-closure-constrain.min_tait.stderr | 24 - .../issue-52843-closure-constrain.rs | 6 +- .../issue-52843-closure-constrain.stderr | 14 + .../ui/type-alias-impl-trait/issue-52843.rs | 4 +- .../type-alias-impl-trait/issue-52843.stderr | 14 + .../issue-53096.full_tait.stderr | 9 +- .../ui/type-alias-impl-trait/issue-53096.rs | 4 +- .../type-alias-impl-trait/issue-53096.stderr | 8 + .../ui/type-alias-impl-trait/issue-53598.rs | 4 +- .../type-alias-impl-trait/issue-53598.stderr | 12 + .../issue-53678-generator-and-const-fn.rs | 4 +- .../issue-53678-generator-and-const-fn.stderr | 8 + .../issue-55099-lifetime-inference.rs | 4 +- .../issue-57188-associate-impl-capture.rs | 4 +- .../issue-57611-trait-alias.rs | 4 +- .../issue-57611-trait-alias.stderr | 11 + .../ui/type-alias-impl-trait/issue-57700.rs | 4 +- .../type-alias-impl-trait/issue-57700.stderr | 12 + .../issue-57807-associated-type.rs | 4 +- .../ui/type-alias-impl-trait/issue-58887.rs | 4 +- .../ui/type-alias-impl-trait/issue-58951.rs | 4 +- .../type-alias-impl-trait/issue-60371.stderr | 2 +- .../issue-60407.full_tait.stderr | 9 +- .../ui/type-alias-impl-trait/issue-60407.rs | 4 +- .../type-alias-impl-trait/issue-60407.stderr | 8 + .../ui/type-alias-impl-trait/issue-60564.rs | 4 +- .../type-alias-impl-trait/issue-60564.stderr | 14 + ...ue-62000-associate-impl-trait-lifetimes.rs | 4 +- .../issue-63263-closure-return.rs | 2 +- .../issue-63279.min_tait.stderr | 22 - .../ui/type-alias-impl-trait/issue-63279.rs | 6 +- .../type-alias-impl-trait/issue-63279.stderr | 12 + .../ui/type-alias-impl-trait/issue-63355.rs | 4 +- .../issue-63677-type-alias-coherence.rs | 4 +- .../ui/type-alias-impl-trait/issue-65384.rs | 2 +- ...-opaque-ty-from-val-twice.full_tait.stderr | 9 +- ...t-opaque-ty-from-val-twice.min_tait.stderr | 21 - ...sue-65679-inst-opaque-ty-from-val-twice.rs | 8 +- ...65679-inst-opaque-ty-from-val-twice.stderr | 8 + .../ui/type-alias-impl-trait/issue-65918.rs | 4 +- .../issue-66580-closure-coherence.rs | 4 +- .../issue-67844-nested-opaque.rs | 4 +- .../issue-68368-non-defining-use.rs | 4 +- .../issue-68368-non-defining-use.stderr | 14 + ...ssue-69136-inner-lifetime-resolve-error.rs | 4 +- ...-69136-inner-lifetime-resolve-error.stderr | 11 + .../issue-69136-inner-lifetime-resolve-ok.rs | 4 +- .../ui/type-alias-impl-trait/issue-69323.rs | 4 +- .../ui/type-alias-impl-trait/issue-70121.rs | 4 +- .../ui/type-alias-impl-trait/issue-74244.rs | 4 +- .../type-alias-impl-trait/issue-74244.stderr | 9 + .../ui/type-alias-impl-trait/issue-74761-2.rs | 2 - .../issue-74761-2.stderr | 14 +- .../ui/type-alias-impl-trait/issue-74761.rs | 4 +- .../type-alias-impl-trait/issue-74761.stderr | 15 + .../issue-76202-trait-impl-for-tait.rs | 4 +- .../issue-76202-trait-impl-for-tait.stderr | 14 + .../ui/type-alias-impl-trait/issue-78450.rs | 1 - .../multiple-def-uses-in-one-fn-pass.rs | 2 +- .../multiple-def-uses-in-one-fn.rs | 2 +- .../multiple-def-uses-in-one-fn2.rs | 2 +- .../multiple-def-uses-in-one-fn3.rs | 2 +- .../nested_type_alias_impl_trait.rs | 4 +- .../never_reveal_concrete_type.rs | 4 +- .../never_reveal_concrete_type.stderr | 24 + .../no_inferrable_concrete_type.rs | 4 +- .../no_inferrable_concrete_type.stderr | 8 + .../no_revealing_outside_defining_module.rs | 4 +- ...o_revealing_outside_defining_module.stderr | 31 + .../not_a_defining_use.rs | 4 +- .../not_a_defining_use.stderr | 14 + .../type-alias-impl-trait/not_well_formed.rs | 4 +- .../not_well_formed.stderr | 9 + .../structural-match-no-leak.rs | 4 +- .../structural-match-no-leak.stderr | 8 + .../type-alias-impl-trait/structural-match.rs | 4 +- .../structural-match.stderr | 8 + .../type-alias-impl-trait-const.rs | 4 +- .../type-alias-impl-trait-const.stderr | 21 + .../type-alias-impl-trait-fns.rs | 4 +- .../type-alias-impl-trait-sized.rs | 4 +- .../type-alias-impl-trait-tuple.rs | 4 +- ...alias-impl-trait-unconstrained-lifetime.rs | 4 +- ...s-impl-trait-unconstrained-lifetime.stderr | 9 + .../type-alias-impl-trait-with-cycle-error.rs | 4 +- ...e-alias-impl-trait-with-cycle-error.stderr | 8 + ...type-alias-impl-trait-with-cycle-error2.rs | 4 +- ...-alias-impl-trait-with-cycle-error2.stderr | 8 + .../type-alias-impl-trait-with-no-traits.rs | 4 +- ...ype-alias-impl-trait-with-no-traits.stderr | 14 + .../type-alias-impl-trait.rs | 4 +- .../type-alias-nested-impl-trait.rs | 4 +- .../unused_generic_param.rs | 4 +- .../unused_generic_param.stderr | 14 + .../ui/typeck/typeck_type_placeholder_item.rs | 4 +- .../typeck_type_placeholder_item.stderr | 638 ++++++++++++++++++ 238 files changed, 2713 insertions(+), 523 deletions(-) create mode 100644 src/test/ui/associated-type-bounds/duplicate.stderr create mode 100644 src/test/ui/generator/layout-error.stderr create mode 100644 src/test/ui/generator/metadata-sufficient-for-layout.stderr create mode 100644 src/test/ui/impl-trait/auto-trait.stderr create mode 100644 src/test/ui/impl-trait/issue-55872-1.stderr create mode 100644 src/test/ui/impl-trait/issue-55872-2.stderr create mode 100644 src/test/ui/impl-trait/issue-55872.stderr create mode 100644 src/test/ui/impl-trait/issues/issue-70877.stderr create mode 100644 src/test/ui/impl-trait/issues/issue-78722.stderr create mode 100644 src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.stderr create mode 100644 src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr create mode 100644 src/test/ui/impl-trait/negative-reasoning.stderr create mode 100644 src/test/ui/issues/issue-60662.stdout create mode 100644 src/test/ui/lint/inline-trait-and-foreign-items.stderr create mode 100644 src/test/ui/lint/lint-ctypes-73249-2.stderr create mode 100644 src/test/ui/lint/lint-ctypes-73249-3.stderr create mode 100644 src/test/ui/lint/lint-ctypes-73249-5.stderr create mode 100644 src/test/ui/lint/lint-ctypes-73251-1.stderr create mode 100644 src/test/ui/lint/lint-ctypes-73251-2.stderr create mode 100644 src/test/ui/lint/opaque-ty-ffi-unsafe.stderr create mode 100644 src/test/ui/mir/issue-75053.stderr create mode 100644 src/test/ui/privacy/private-in-public-assoc-ty.stderr create mode 100644 src/test/ui/save-analysis/issue-68621.stderr create mode 100644 src/test/ui/type-alias-impl-trait/assoc-type-const.stderr create mode 100644 src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.stderr create mode 100644 src/test/ui/type-alias-impl-trait/bound_reduction2.stderr create mode 100644 src/test/ui/type-alias-impl-trait/bounds-are-checked-2.stderr create mode 100644 src/test/ui/type-alias-impl-trait/bounds-are-checked.stderr create mode 100644 src/test/ui/type-alias-impl-trait/coherence.stderr create mode 100644 src/test/ui/type-alias-impl-trait/declared_but_never_defined.stderr create mode 100644 src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.stderr create mode 100644 src/test/ui/type-alias-impl-trait/different_defining_uses.stderr create mode 100644 src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_different_defining_uses.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_duplicate_param_use.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_nondefining_use.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_not_used.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_underconstrained.stderr create mode 100644 src/test/ui/type-alias-impl-trait/generic_underconstrained2.stderr create mode 100644 src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.stderr create mode 100644 src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.min_tait.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-52843.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-53096.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-53598.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-57700.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-60407.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-60564.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-63279.min_tait.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-63279.stderr delete mode 100644 src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.min_tait.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-74244.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-74761.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.stderr create mode 100644 src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.stderr create mode 100644 src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.stderr create mode 100644 src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.stderr create mode 100644 src/test/ui/type-alias-impl-trait/not_a_defining_use.stderr create mode 100644 src/test/ui/type-alias-impl-trait/not_well_formed.stderr create mode 100644 src/test/ui/type-alias-impl-trait/structural-match-no-leak.stderr create mode 100644 src/test/ui/type-alias-impl-trait/structural-match.stderr create mode 100644 src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.stderr create mode 100644 src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.stderr create mode 100644 src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.stderr create mode 100644 src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.stderr create mode 100644 src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.stderr create mode 100644 src/test/ui/type-alias-impl-trait/unused_generic_param.stderr create mode 100644 src/test/ui/typeck/typeck_type_placeholder_item.stderr diff --git a/compiler/rustc_ast_passes/src/feature_gate.rs b/compiler/rustc_ast_passes/src/feature_gate.rs index 3e757e3843e38..89b59e5f00f1c 100644 --- a/compiler/rustc_ast_passes/src/feature_gate.rs +++ b/compiler/rustc_ast_passes/src/feature_gate.rs @@ -287,7 +287,7 @@ impl<'a> PostExpansionVisitor<'a> { if let ast::TyKind::ImplTrait(..) = ty.kind { gate_feature_post!( &self.vis, - min_type_alias_impl_trait, + type_alias_impl_trait, ty.span, "`impl Trait` in type aliases is unstable" ); diff --git a/src/test/rustdoc-ui/coverage/traits.rs b/src/test/rustdoc-ui/coverage/traits.rs index 2a108dac2a5db..daa08ec25823b 100644 --- a/src/test/rustdoc-ui/coverage/traits.rs +++ b/src/test/rustdoc-ui/coverage/traits.rs @@ -2,7 +2,7 @@ // check-pass #![feature(trait_alias)] -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] /// look at this trait right here pub trait ThisTrait { diff --git a/src/test/rustdoc-ui/error-in-impl-trait/trait-alias-closure.rs b/src/test/rustdoc-ui/error-in-impl-trait/trait-alias-closure.rs index 3e7b428023487..31dd786cbbf89 100644 --- a/src/test/rustdoc-ui/error-in-impl-trait/trait-alias-closure.rs +++ b/src/test/rustdoc-ui/error-in-impl-trait/trait-alias-closure.rs @@ -1,5 +1,5 @@ // check-pass -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] pub trait ValidTrait {} type ImplTrait = impl ValidTrait; diff --git a/src/test/rustdoc-ui/error-in-impl-trait/trait-alias.rs b/src/test/rustdoc-ui/error-in-impl-trait/trait-alias.rs index 7ebf4d544de1e..c18a024af4bbc 100644 --- a/src/test/rustdoc-ui/error-in-impl-trait/trait-alias.rs +++ b/src/test/rustdoc-ui/error-in-impl-trait/trait-alias.rs @@ -1,5 +1,5 @@ // check-pass -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] pub trait ValidTrait {} type ImplTrait = impl ValidTrait; diff --git a/src/test/rustdoc/auxiliary/issue-73061.rs b/src/test/rustdoc/auxiliary/issue-73061.rs index 9b4129e771f87..e05a3bc6d9180 100644 --- a/src/test/rustdoc/auxiliary/issue-73061.rs +++ b/src/test/rustdoc/auxiliary/issue-73061.rs @@ -1,6 +1,6 @@ //edition:2018 -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] pub trait Foo { type X: std::future::Future; diff --git a/src/test/rustdoc/impl-trait-alias.rs b/src/test/rustdoc/impl-trait-alias.rs index bf73a833580c5..54c3f856ddb3c 100644 --- a/src/test/rustdoc/impl-trait-alias.rs +++ b/src/test/rustdoc/impl-trait-alias.rs @@ -1,4 +1,4 @@ -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] trait MyTrait {} impl MyTrait for i32 {} diff --git a/src/test/rustdoc/return-impl-trait.rs b/src/test/rustdoc/return-impl-trait.rs index da4945aadf7f9..1ccf5ac46119a 100644 --- a/src/test/rustdoc/return-impl-trait.rs +++ b/src/test/rustdoc/return-impl-trait.rs @@ -1,4 +1,4 @@ -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] pub trait Backend {} diff --git a/src/test/ui/associated-type-bounds/duplicate.rs b/src/test/ui/associated-type-bounds/duplicate.rs index e1a2ab37a3a31..e1dc6f8f4b63d 100644 --- a/src/test/ui/associated-type-bounds/duplicate.rs +++ b/src/test/ui/associated-type-bounds/duplicate.rs @@ -1,7 +1,5 @@ #![feature(associated_type_bounds)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![feature(untagged_unions)] use std::iter; diff --git a/src/test/ui/associated-type-bounds/duplicate.stderr b/src/test/ui/associated-type-bounds/duplicate.stderr new file mode 100644 index 0000000000000..e4f4836f71ab2 --- /dev/null +++ b/src/test/ui/associated-type-bounds/duplicate.stderr @@ -0,0 +1,483 @@ +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:7:36 + | +LL | struct SI1> { + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:11:36 + | +LL | struct SI2> { + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:15:39 + | +LL | struct SI3> { + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:21:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:28:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:35:32 + | +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:41:34 + | +LL | enum EI1> { + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:45:34 + | +LL | enum EI2> { + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:49:37 + | +LL | enum EI3> { + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:55:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:62:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:69:32 + | +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:75:35 + | +LL | union UI1> { + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:79:35 + | +LL | union UI2> { + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:83:38 + | +LL | union UI3> { + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:89:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:96:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:103:32 + | +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:109:32 + | +LL | fn FI1>() {} + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:111:32 + | +LL | fn FI2>() {} + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:113:35 + | +LL | fn FI3>() {} + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:117:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:123:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:129:32 + | +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:143:40 + | +LL | fn FAPIT1(_: impl Iterator) {} + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:145:40 + | +LL | fn FAPIT2(_: impl Iterator) {} + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:147:43 + | +LL | fn FAPIT3(_: impl Iterator) {} + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:150:35 + | +LL | type TAI1> = T; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:152:35 + | +LL | type TAI2> = T; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:154:38 + | +LL | type TAI3> = T; + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:158:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:163:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:168:32 + | +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:172:36 + | +LL | type ETAI1> = impl Copy; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:174:36 + | +LL | type ETAI2> = impl Copy; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:176:39 + | +LL | type ETAI3> = impl Copy; + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:178:40 + | +LL | type ETAI4 = impl Iterator; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:180:40 + | +LL | type ETAI5 = impl Iterator; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:182:43 + | +LL | type ETAI6 = impl Iterator; + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:185:36 + | +LL | trait TRI1> {} + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:187:36 + | +LL | trait TRI2> {} + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:189:39 + | +LL | trait TRI3> {} + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:191:34 + | +LL | trait TRS1: Iterator {} + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:193:34 + | +LL | trait TRS2: Iterator {} + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:195:37 + | +LL | trait TRS3: Iterator {} + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:199:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:205:29 + | +LL | T: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:211:32 + | +LL | T: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:217:32 + | +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:217:32 + | +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:224:32 + | +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:224:32 + | +LL | Self: Iterator, + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:231:35 + | +LL | Self: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:231:35 + | +LL | Self: Iterator, + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:249:40 + | +LL | type TADyn1 = dyn Iterator; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:251:44 + | +LL | type TADyn2 = Box>; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:253:43 + | +LL | type TADyn3 = dyn Iterator; + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:237:34 + | +LL | type A: Iterator; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:241:34 + | +LL | type A: Iterator; + | ---------- ^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error[E0719]: the value of the associated type `Item` (from trait `Iterator`) is already specified + --> $DIR/duplicate.rs:245:37 + | +LL | type A: Iterator; + | ------------- ^^^^^^^^^^^^^ re-bound here + | | + | `Item` bound here first + +error: aborting due to 60 previous errors + +For more information about this error, try `rustc --explain E0719`. diff --git a/src/test/ui/associated-type-bounds/trait-alias-impl-trait.rs b/src/test/ui/associated-type-bounds/trait-alias-impl-trait.rs index 9a9031043b652..e223a89574170 100644 --- a/src/test/ui/associated-type-bounds/trait-alias-impl-trait.rs +++ b/src/test/ui/associated-type-bounds/trait-alias-impl-trait.rs @@ -1,9 +1,7 @@ // run-pass #![feature(associated_type_bounds)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::ops::Add; diff --git a/src/test/ui/associated-types/issue-63591.rs b/src/test/ui/associated-types/issue-63591.rs index 04b688674960d..4d2e39f4da60c 100644 --- a/src/test/ui/associated-types/issue-63591.rs +++ b/src/test/ui/associated-types/issue-63591.rs @@ -1,9 +1,7 @@ // check-pass #![feature(associated_type_bounds)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs b/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs index c132d9b9d7ded..66a3b07c3bd96 100644 --- a/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs +++ b/src/test/ui/async-await/issues/issue-60655-latebound-regions.rs @@ -3,9 +3,7 @@ // check-pass // edition:2018 -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::future::Future; diff --git a/src/test/ui/entry-point/imported_main_const_fn_item_type_forbidden.rs b/src/test/ui/entry-point/imported_main_const_fn_item_type_forbidden.rs index d8553815b75de..e0bb7dbfae9f1 100644 --- a/src/test/ui/entry-point/imported_main_const_fn_item_type_forbidden.rs +++ b/src/test/ui/entry-point/imported_main_const_fn_item_type_forbidden.rs @@ -1,5 +1,5 @@ #![feature(imported_main)] -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] #![allow(incomplete_features)] //~^^^ ERROR `main` function not found in crate pub mod foo { diff --git a/src/test/ui/entry-point/imported_main_const_fn_item_type_forbidden.stderr b/src/test/ui/entry-point/imported_main_const_fn_item_type_forbidden.stderr index c4c0afc5687c1..6aa170fdfd2a7 100644 --- a/src/test/ui/entry-point/imported_main_const_fn_item_type_forbidden.stderr +++ b/src/test/ui/entry-point/imported_main_const_fn_item_type_forbidden.stderr @@ -2,7 +2,7 @@ error[E0601]: `main` function not found in crate `imported_main_const_fn_item_ty --> $DIR/imported_main_const_fn_item_type_forbidden.rs:1:1 | LL | / #![feature(imported_main)] -LL | | #![feature(min_type_alias_impl_trait)] +LL | | #![feature(type_alias_impl_trait)] LL | | #![allow(incomplete_features)] LL | | ... | diff --git a/src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.stderr b/src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.stderr index 07857289aaeb5..c87f1f4f00de6 100644 --- a/src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.stderr +++ b/src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.stderr @@ -5,7 +5,7 @@ LL | type Foo = impl Debug; | ^^^^^^^^^^ | = note: see issue #63063 for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/feature-gate-min_type_alias_impl_trait.rs:12:16 @@ -14,7 +14,7 @@ LL | type Baa = impl Debug; | ^^^^^^^^^^ | = note: see issue #63063 for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: associated type defaults are unstable --> $DIR/feature-gate-min_type_alias_impl_trait.rs:23:5 @@ -32,7 +32,7 @@ LL | type Assoc = impl Debug; | ^^^^^^^^^^ | = note: see issue #63063 for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/feature-gate-min_type_alias_impl_trait.rs:29:24 @@ -41,7 +41,7 @@ LL | type NestedFree = (Vec, impl Debug, impl Iterator for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/feature-gate-min_type_alias_impl_trait.rs:29:37 @@ -50,7 +50,7 @@ LL | type NestedFree = (Vec, impl Debug, impl Iterator for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/feature-gate-min_type_alias_impl_trait.rs:29:49 @@ -59,7 +59,7 @@ LL | type NestedFree = (Vec, impl Debug, impl Iterator for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/feature-gate-min_type_alias_impl_trait.rs:29:70 @@ -68,7 +68,7 @@ LL | type NestedFree = (Vec, impl Debug, impl Iterator for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/feature-gate-min_type_alias_impl_trait.rs:40:21 @@ -77,7 +77,7 @@ LL | type Baa = (Vec, impl Debug, impl Iterator for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/feature-gate-min_type_alias_impl_trait.rs:40:34 @@ -86,7 +86,7 @@ LL | type Baa = (Vec, impl Debug, impl Iterator for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/feature-gate-min_type_alias_impl_trait.rs:40:46 @@ -95,7 +95,7 @@ LL | type Baa = (Vec, impl Debug, impl Iterator for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/feature-gate-min_type_alias_impl_trait.rs:40:67 @@ -104,7 +104,7 @@ LL | type Baa = (Vec, impl Debug, impl Iterator for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0562]: `impl Trait` not allowed outside of function and method return types --> $DIR/feature-gate-min_type_alias_impl_trait.rs:23:18 diff --git a/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.rs b/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.rs index 4fb1cd2aae1d3..ea82837d4bf55 100644 --- a/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.rs +++ b/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.rs @@ -1,5 +1,5 @@ // ignore-compare-mode-chalk -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; type Foo = impl Debug; @@ -13,7 +13,7 @@ fn define() -> Bar { type Foo2 = impl Debug; fn define2() { - let x = || -> Foo2 { 42 }; //~ ERROR not permitted here + let x = || -> Foo2 { 42 }; } type Foo3 = impl Debug; diff --git a/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.stderr b/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.stderr index 10409d5fc4bad..da3ddb1c50979 100644 --- a/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.stderr +++ b/src/test/ui/feature-gates/feature-gate-type_alias_impl_trait.stderr @@ -10,15 +10,6 @@ LL | Bar(42) = note: expected opaque type `impl Debug` found type `{integer}` -error[E0658]: type alias impl trait is not permitted here - --> $DIR/feature-gate-type_alias_impl_trait.rs:16:19 - | -LL | let x = || -> Foo2 { 42 }; - | ^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - error[E0308]: mismatched types --> $DIR/feature-gate-type_alias_impl_trait.rs:23:18 | @@ -77,7 +68,6 @@ error: could not find defining uses LL | type Foo4 = impl Debug; | ^^^^^^^^^^ -error: aborting due to 8 previous errors +error: aborting due to 7 previous errors -Some errors have detailed explanations: E0308, E0658. -For more information about an error, try `rustc --explain E0308`. +For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/generator/layout-error.rs b/src/test/ui/generator/layout-error.rs index e8fd4f807e012..7c3d187409a2f 100644 --- a/src/test/ui/generator/layout-error.rs +++ b/src/test/ui/generator/layout-error.rs @@ -3,9 +3,7 @@ // // edition:2018 -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::future::Future; pub struct Task(F); @@ -26,5 +24,5 @@ fn main() { type F = impl Future; // Check that statics are inhabited computes they layout. static POOL: Task = Task::new(); - Task::spawn(&POOL, || cb()); //[min_tait]~ ERROR type alias impl trait is not permitted here + Task::spawn(&POOL, || cb()); } diff --git a/src/test/ui/generator/layout-error.stderr b/src/test/ui/generator/layout-error.stderr new file mode 100644 index 0000000000000..b1a258f4f2ca7 --- /dev/null +++ b/src/test/ui/generator/layout-error.stderr @@ -0,0 +1,9 @@ +error[E0425]: cannot find value `Foo` in this scope + --> $DIR/layout-error.rs:21:17 + | +LL | let a = Foo; + | ^^^ not found in this scope + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0425`. diff --git a/src/test/ui/generator/metadata-sufficient-for-layout.rs b/src/test/ui/generator/metadata-sufficient-for-layout.rs index 50093987e4b5f..d0e648ee775fa 100644 --- a/src/test/ui/generator/metadata-sufficient-for-layout.rs +++ b/src/test/ui/generator/metadata-sufficient-for-layout.rs @@ -5,9 +5,7 @@ // // aux-build:metadata-sufficient-for-layout.rs -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait, rustc_attrs)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait, rustc_attrs)] #![feature(generator_trait)] extern crate metadata_sufficient_for_layout; diff --git a/src/test/ui/generator/metadata-sufficient-for-layout.stderr b/src/test/ui/generator/metadata-sufficient-for-layout.stderr new file mode 100644 index 0000000000000..3488b04f2267e --- /dev/null +++ b/src/test/ui/generator/metadata-sufficient-for-layout.stderr @@ -0,0 +1,8 @@ +error: fatal error triggered by #[rustc_error] + --> $DIR/metadata-sufficient-for-layout.rs:25:1 + | +LL | fn main() {} + | ^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.rs b/src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.rs index fb816fb39e685..6c7c46b0e3dbb 100644 --- a/src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.rs +++ b/src/test/ui/impl-trait/associated-impl-trait-type-generic-trait.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] // build-pass (FIXME(62277): could be check-pass?) trait Bar {} diff --git a/src/test/ui/impl-trait/associated-impl-trait-type-trivial.rs b/src/test/ui/impl-trait/associated-impl-trait-type-trivial.rs index 57747b286bf91..cdda341cad87a 100644 --- a/src/test/ui/impl-trait/associated-impl-trait-type-trivial.rs +++ b/src/test/ui/impl-trait/associated-impl-trait-type-trivial.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] // build-pass (FIXME(62277): could be check-pass?) trait Bar {} diff --git a/src/test/ui/impl-trait/associated-impl-trait-type.rs b/src/test/ui/impl-trait/associated-impl-trait-type.rs index 39e98ebe665ba..d0661d66f4b48 100644 --- a/src/test/ui/impl-trait/associated-impl-trait-type.rs +++ b/src/test/ui/impl-trait/associated-impl-trait-type.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] // build-pass (FIXME(62277): could be check-pass?) trait Bar {} diff --git a/src/test/ui/impl-trait/auto-trait.rs b/src/test/ui/impl-trait/auto-trait.rs index 59bd09e348a9f..cf2773f4ef59d 100644 --- a/src/test/ui/impl-trait/auto-trait.rs +++ b/src/test/ui/impl-trait/auto-trait.rs @@ -1,8 +1,6 @@ // Tests that type alias impls traits do not leak auto-traits for // the purposes of coherence checking -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait OpaqueTrait {} impl OpaqueTrait for T {} diff --git a/src/test/ui/impl-trait/auto-trait.stderr b/src/test/ui/impl-trait/auto-trait.stderr new file mode 100644 index 0000000000000..26cd8fb6a9b5c --- /dev/null +++ b/src/test/ui/impl-trait/auto-trait.stderr @@ -0,0 +1,12 @@ +error[E0119]: conflicting implementations of trait `AnotherTrait` for type `D` + --> $DIR/auto-trait.rs:21:1 + | +LL | impl AnotherTrait for T {} + | -------------------------------- first implementation here +... +LL | impl AnotherTrait for D { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `D` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0119`. diff --git a/src/test/ui/impl-trait/bound-normalization-pass.rs b/src/test/ui/impl-trait/bound-normalization-pass.rs index 4218bc5206596..51718079d2c48 100644 --- a/src/test/ui/impl-trait/bound-normalization-pass.rs +++ b/src/test/ui/impl-trait/bound-normalization-pass.rs @@ -4,7 +4,7 @@ //[sa] compile-flags: -Z save-analysis //-^ To make this the regression test for #75962. -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] // See issue 60414 diff --git a/src/test/ui/impl-trait/issue-55872-1.rs b/src/test/ui/impl-trait/issue-55872-1.rs index c6a331e58fee4..72a060abae3e7 100644 --- a/src/test/ui/impl-trait/issue-55872-1.rs +++ b/src/test/ui/impl-trait/issue-55872-1.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] pub trait Bar { type E: Copy; diff --git a/src/test/ui/impl-trait/issue-55872-1.stderr b/src/test/ui/impl-trait/issue-55872-1.stderr new file mode 100644 index 0000000000000..6411c1b5d1ca2 --- /dev/null +++ b/src/test/ui/impl-trait/issue-55872-1.stderr @@ -0,0 +1,48 @@ +error[E0276]: impl has stricter requirements than trait + --> $DIR/issue-55872-1.rs:14:5 + | +LL | fn foo() -> Self::E; + | ----------------------- definition of `foo` from trait +... +LL | fn foo() -> Self::E { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ impl has extra requirement `T: Default` + +error[E0277]: the trait bound `S: Copy` is not satisfied in `(S, T)` + --> $DIR/issue-55872-1.rs:10:14 + | +LL | type E = impl Copy; + | ^^^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `S` + | + = note: required because it appears within the type `(S, T)` +help: consider further restricting this bound + | +LL | impl Bar for S { + | ^^^^^^^^^^^^^^^^^^^ + +error[E0277]: the trait bound `T: Copy` is not satisfied in `(S, T)` + --> $DIR/issue-55872-1.rs:10:14 + | +LL | type E = impl Copy; + | ^^^^^^^^^ within `(S, T)`, the trait `Copy` is not implemented for `T` + | + = note: required because it appears within the type `(S, T)` +help: consider further restricting this bound + | +LL | fn foo() -> Self::E { + | ^^^^^^^^^^^^^^^^^^^ + +error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + --> $DIR/issue-55872-1.rs:14:37 + | +LL | fn foo() -> Self::E { + | _____________________________________^ +LL | | +LL | | +LL | | (S::default(), T::default()) +LL | | } + | |_____^ + +error: aborting due to 4 previous errors + +Some errors have detailed explanations: E0276, E0277. +For more information about an error, try `rustc --explain E0276`. diff --git a/src/test/ui/impl-trait/issue-55872-2.rs b/src/test/ui/impl-trait/issue-55872-2.rs index 44839e5e845ae..6eda1dc62ec62 100644 --- a/src/test/ui/impl-trait/issue-55872-2.rs +++ b/src/test/ui/impl-trait/issue-55872-2.rs @@ -1,9 +1,7 @@ // edition:2018 // ignore-compare-mode-chalk -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] pub trait Bar { type E: Copy; diff --git a/src/test/ui/impl-trait/issue-55872-2.stderr b/src/test/ui/impl-trait/issue-55872-2.stderr new file mode 100644 index 0000000000000..58c5ee45051af --- /dev/null +++ b/src/test/ui/impl-trait/issue-55872-2.stderr @@ -0,0 +1,19 @@ +error[E0277]: the trait bound `impl Future: Copy` is not satisfied + --> $DIR/issue-55872-2.rs:13:14 + | +LL | type E = impl std::marker::Copy; + | ^^^^^^^^^^^^^^^^^^^^^^ the trait `Copy` is not implemented for `impl Future` + +error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + --> $DIR/issue-55872-2.rs:15:28 + | +LL | fn foo() -> Self::E { + | ____________________________^ +LL | | +LL | | async {} +LL | | } + | |_____^ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/impl-trait/issue-55872.rs b/src/test/ui/impl-trait/issue-55872.rs index 049d61a425e39..bbd940254178c 100644 --- a/src/test/ui/impl-trait/issue-55872.rs +++ b/src/test/ui/impl-trait/issue-55872.rs @@ -1,7 +1,5 @@ // ignore-compare-mode-chalk -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] pub trait Bar { type E: Copy; diff --git a/src/test/ui/impl-trait/issue-55872.stderr b/src/test/ui/impl-trait/issue-55872.stderr new file mode 100644 index 0000000000000..60654ec34610f --- /dev/null +++ b/src/test/ui/impl-trait/issue-55872.stderr @@ -0,0 +1,12 @@ +error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + --> $DIR/issue-55872.rs:13:28 + | +LL | fn foo() -> Self::E { + | ____________________________^ +LL | | +LL | | || () +LL | | } + | |_____^ + +error: aborting due to previous error + diff --git a/src/test/ui/impl-trait/issue-86465.rs b/src/test/ui/impl-trait/issue-86465.rs index 23a3748c12c6a..a6976daff0186 100644 --- a/src/test/ui/impl-trait/issue-86465.rs +++ b/src/test/ui/impl-trait/issue-86465.rs @@ -1,4 +1,4 @@ -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] type X<'a, 'b> = impl std::fmt::Debug; diff --git a/src/test/ui/impl-trait/issues/issue-53457.rs b/src/test/ui/impl-trait/issues/issue-53457.rs index c6d7be47dfe65..7b9c2c53aad4f 100644 --- a/src/test/ui/impl-trait/issues/issue-53457.rs +++ b/src/test/ui/impl-trait/issues/issue-53457.rs @@ -1,9 +1,6 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] - +#![feature(type_alias_impl_trait)] type X = impl Clone; fn bar(f: F) -> F { diff --git a/src/test/ui/impl-trait/issues/issue-70877.rs b/src/test/ui/impl-trait/issues/issue-70877.rs index 29aa705ef9d4d..853c2a82bede4 100644 --- a/src/test/ui/impl-trait/issues/issue-70877.rs +++ b/src/test/ui/impl-trait/issues/issue-70877.rs @@ -1,7 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] -#![allow(incomplete_features)] +#![feature(type_alias_impl_trait)] type FooArg<'a> = &'a dyn ToString; type FooRet = impl std::fmt::Debug; diff --git a/src/test/ui/impl-trait/issues/issue-70877.stderr b/src/test/ui/impl-trait/issues/issue-70877.stderr new file mode 100644 index 0000000000000..b6861039f6a99 --- /dev/null +++ b/src/test/ui/impl-trait/issues/issue-70877.stderr @@ -0,0 +1,15 @@ +error[E0271]: type mismatch resolving `::Item == Box<(dyn for<'r> Fn(&'r (dyn ToString + 'r)) -> Option + 'static)>` + --> $DIR/issue-70877.rs:7:12 + | +LL | type FooRet = impl std::fmt::Debug; + | -------------------- the found opaque type +... +LL | type Foo = impl Iterator; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected enum `Option`, found opaque type + | + = note: expected struct `Box<(dyn for<'r> Fn(&'r (dyn ToString + 'r)) -> Option + 'static)>` + found struct `Box<(dyn for<'r> Fn(&'r (dyn ToString + 'r)) -> impl Debug + 'static)>` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0271`. diff --git a/src/test/ui/impl-trait/issues/issue-78722.rs b/src/test/ui/impl-trait/issues/issue-78722.rs index 0b8569b6e5fa0..bdbd20f9d2b88 100644 --- a/src/test/ui/impl-trait/issues/issue-78722.rs +++ b/src/test/ui/impl-trait/issues/issue-78722.rs @@ -1,8 +1,6 @@ // edition:2018 -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type F = impl core::future::Future; diff --git a/src/test/ui/impl-trait/issues/issue-78722.stderr b/src/test/ui/impl-trait/issues/issue-78722.stderr new file mode 100644 index 0000000000000..f42d66d12435c --- /dev/null +++ b/src/test/ui/impl-trait/issues/issue-78722.stderr @@ -0,0 +1,23 @@ +error[E0308]: mismatched types + --> $DIR/issue-78722.rs:12:20 + | +LL | type F = impl core::future::Future; + | -------------------------------------- the expected opaque type +... +LL | let f: F = async { 1 }; + | - ^^^^^^^^^^^ expected opaque type, found a different opaque type + | | + | expected due to this + | + ::: $SRC_DIR/core/src/future/mod.rs:LL:COL + | +LL | pub const fn from_generator(gen: T) -> impl Future + | ------------------------------- the found opaque type + | + = note: expected opaque type `impl Future` (opaque type at <$DIR/issue-78722.rs:5:10>) + found opaque type `impl Future` (opaque type at <$SRC_DIR/core/src/future/mod.rs:LL:COL>) + = note: distinct uses of `impl Trait` result in different opaque types + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/impl-trait/issues/issue-86201.rs b/src/test/ui/impl-trait/issues/issue-86201.rs index 8dc76f4f752a1..8cc4fef890abf 100644 --- a/src/test/ui/impl-trait/issues/issue-86201.rs +++ b/src/test/ui/impl-trait/issues/issue-86201.rs @@ -1,5 +1,5 @@ #![feature(unboxed_closures)] -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] type FunType = impl Fn<()>; //~^ could not find defining uses diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.rs b/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.rs index cfc493928c079..96d891b2cf1d7 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.rs +++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.rs @@ -1,9 +1,7 @@ // compile-flags:-Zborrowck=mir #![feature(member_constraints)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #[derive(Clone)] struct CopyIfEq(T, U); diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.stderr b/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.stderr new file mode 100644 index 0000000000000..59105f11805cd --- /dev/null +++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling-2.stderr @@ -0,0 +1,15 @@ +error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds + --> $DIR/error-handling-2.rs:13:60 + | +LL | fn foo<'a: 'b, 'b, 'c>(x: &'static i32, mut y: &'a i32) -> E<'b, 'c> { + | ^^^^^^^^^ + | +note: hidden type `*mut &'a i32` captures the lifetime `'a` as defined on the function body at 13:8 + --> $DIR/error-handling-2.rs:13:8 + | +LL | fn foo<'a: 'b, 'b, 'c>(x: &'static i32, mut y: &'a i32) -> E<'b, 'c> { + | ^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0700`. diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.rs b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.rs index 23d5c9da31138..6d88f16ea8abb 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.rs +++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.rs @@ -1,8 +1,6 @@ // compile-flags:-Zborrowck=mir -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #[derive(Clone)] struct CopyIfEq(T, U); diff --git a/src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr new file mode 100644 index 0000000000000..ccd0040030da2 --- /dev/null +++ b/src/test/ui/impl-trait/multiple-lifetimes/error-handling.stderr @@ -0,0 +1,15 @@ +error: lifetime may not live long enough + --> $DIR/error-handling.rs:22:16 + | +LL | fn foo<'a, 'b, 'c>(x: &'static i32, mut y: &'a i32) -> E<'b, 'c> { + | -- -- lifetime `'b` defined here + | | + | lifetime `'a` defined here +... +LL | let _: &'b i32 = *u.0; + | ^^^^^^^ type annotation requires that `'a` must outlive `'b` + | + = help: consider adding the following bound: `'a: 'b` + +error: aborting due to previous error + diff --git a/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-type-alias-impl-trait.rs b/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-type-alias-impl-trait.rs index b9857b7aa2f1d..529dcd8ece6f8 100644 --- a/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-type-alias-impl-trait.rs +++ b/src/test/ui/impl-trait/multiple-lifetimes/ordinary-bounds-pick-original-type-alias-impl-trait.rs @@ -3,7 +3,7 @@ // revisions: migrate mir //[mir]compile-flags: -Z borrowck=mir -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] trait Trait<'a, 'b> {} impl Trait<'_, '_> for T {} diff --git a/src/test/ui/impl-trait/negative-reasoning.rs b/src/test/ui/impl-trait/negative-reasoning.rs index 0838f32b932bf..d173fe83fb791 100644 --- a/src/test/ui/impl-trait/negative-reasoning.rs +++ b/src/test/ui/impl-trait/negative-reasoning.rs @@ -1,8 +1,6 @@ // Tests that we cannot assume that an opaque type does *not* implement some // other trait -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait OpaqueTrait {} impl OpaqueTrait for T {} diff --git a/src/test/ui/impl-trait/negative-reasoning.stderr b/src/test/ui/impl-trait/negative-reasoning.stderr new file mode 100644 index 0000000000000..e39a8e53f7985 --- /dev/null +++ b/src/test/ui/impl-trait/negative-reasoning.stderr @@ -0,0 +1,14 @@ +error[E0119]: conflicting implementations of trait `AnotherTrait` for type `D` + --> $DIR/negative-reasoning.rs:19:1 + | +LL | impl AnotherTrait for T {} + | ------------------------------------------- first implementation here +... +LL | impl AnotherTrait for D { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ conflicting implementation for `D` + | + = note: upstream crates may add a new impl of trait `std::fmt::Debug` for type `impl OpaqueTrait` in future versions + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0119`. diff --git a/src/test/ui/impl-trait/type-alias-generic-param.rs b/src/test/ui/impl-trait/type-alias-generic-param.rs index 9cb9a6de2d6fc..3499b2859267c 100644 --- a/src/test/ui/impl-trait/type-alias-generic-param.rs +++ b/src/test/ui/impl-trait/type-alias-generic-param.rs @@ -3,9 +3,7 @@ // types in 'item' position when generic parameters are involved // // run-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait Meow { type MeowType; diff --git a/src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.rs b/src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.rs index 996840dc1960a..91be4efd56a15 100644 --- a/src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.rs +++ b/src/test/ui/impl-trait/type-alias-impl-trait-in-fn-body.rs @@ -1,8 +1,6 @@ // build-pass (FIXME(62277): could be check-pass?) -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/impl-trait/where-allowed.stderr b/src/test/ui/impl-trait/where-allowed.stderr index 93a3de61ccf8a..7f11d30dbaa5f 100644 --- a/src/test/ui/impl-trait/where-allowed.stderr +++ b/src/test/ui/impl-trait/where-allowed.stderr @@ -23,7 +23,7 @@ LL | type Out = impl Debug; | ^^^^^^^^^^ | = note: see issue #63063 for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/where-allowed.rs:154:23 @@ -32,7 +32,7 @@ LL | type InTypeAlias = impl Debug; | ^^^^^^^^^^ | = note: see issue #63063 for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: `impl Trait` in type aliases is unstable --> $DIR/where-allowed.rs:157:39 @@ -41,7 +41,7 @@ LL | type InReturnInTypeAlias = fn() -> impl Debug; | ^^^^^^^^^^ | = note: see issue #63063 for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0562]: `impl Trait` not allowed outside of function and method return types --> $DIR/where-allowed.rs:15:40 diff --git a/src/test/ui/issues/issue-60662.full_tait.stdout b/src/test/ui/issues/issue-60662.full_tait.stdout index 9ee4434d55959..88bbbd143fb8b 100644 --- a/src/test/ui/issues/issue-60662.full_tait.stdout +++ b/src/test/ui/issues/issue-60662.full_tait.stdout @@ -2,7 +2,7 @@ // compile-flags: -Z unpretty=hir // revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] #![feature(type_alias_impl_trait)] #[prelude_import] use ::std::prelude::rust_2015::*; diff --git a/src/test/ui/issues/issue-60662.min_tait.stdout b/src/test/ui/issues/issue-60662.min_tait.stdout index d0db578f57091..c2495556f6029 100644 --- a/src/test/ui/issues/issue-60662.min_tait.stdout +++ b/src/test/ui/issues/issue-60662.min_tait.stdout @@ -2,7 +2,7 @@ // compile-flags: -Z unpretty=hir // revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] #[prelude_import] use ::std::prelude::rust_2015::*; #[macro_use] diff --git a/src/test/ui/issues/issue-60662.rs b/src/test/ui/issues/issue-60662.rs index 5079e33650f73..b9faa668b80eb 100644 --- a/src/test/ui/issues/issue-60662.rs +++ b/src/test/ui/issues/issue-60662.rs @@ -1,9 +1,7 @@ // check-pass // compile-flags: -Z unpretty=hir -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait Animal {} diff --git a/src/test/ui/issues/issue-60662.stdout b/src/test/ui/issues/issue-60662.stdout new file mode 100644 index 0000000000000..14a49f20e6b22 --- /dev/null +++ b/src/test/ui/issues/issue-60662.stdout @@ -0,0 +1,14 @@ +// check-pass +// compile-flags: -Z unpretty=hir + +#![feature(type_alias_impl_trait)] +#[prelude_import] +use ::std::prelude::rust_2015::*; +#[macro_use] +extern crate std; + +trait Animal { } + +fn main() { + pub type ServeFut = /*impl Trait*/; + } diff --git a/src/test/ui/layout/debug.rs b/src/test/ui/layout/debug.rs index 317955f0e39dd..299151df66493 100644 --- a/src/test/ui/layout/debug.rs +++ b/src/test/ui/layout/debug.rs @@ -1,5 +1,5 @@ // normalize-stderr-test "pref: Align \{\n *pow2: [1-3],\n *\}" -> "pref: $$PREF_ALIGN" -#![feature(never_type, rustc_attrs, min_type_alias_impl_trait)] +#![feature(never_type, rustc_attrs, type_alias_impl_trait)] #![crate_type = "lib"] #[rustc_layout(debug)] diff --git a/src/test/ui/lint/inline-trait-and-foreign-items.rs b/src/test/ui/lint/inline-trait-and-foreign-items.rs index 9d9579ec26c26..6321b3c76e4d1 100644 --- a/src/test/ui/lint/inline-trait-and-foreign-items.rs +++ b/src/test/ui/lint/inline-trait-and-foreign-items.rs @@ -1,7 +1,5 @@ #![feature(extern_types)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![warn(unused_attributes)] diff --git a/src/test/ui/lint/inline-trait-and-foreign-items.stderr b/src/test/ui/lint/inline-trait-and-foreign-items.stderr new file mode 100644 index 0000000000000..6ac884c12ceb9 --- /dev/null +++ b/src/test/ui/lint/inline-trait-and-foreign-items.stderr @@ -0,0 +1,72 @@ +warning: `#[inline]` is ignored on constants + --> $DIR/inline-trait-and-foreign-items.rs:7:5 + | +LL | #[inline] + | ^^^^^^^^^ + | +note: the lint level is defined here + --> $DIR/inline-trait-and-foreign-items.rs:4:9 + | +LL | #![warn(unused_attributes)] + | ^^^^^^^^^^^^^^^^^ + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: see issue #65833 for more information + +error[E0518]: attribute should be applied to function or closure + --> $DIR/inline-trait-and-foreign-items.rs:11:5 + | +LL | #[inline] + | ^^^^^^^^^ +LL | type T; + | ------- not a function or closure + +warning: `#[inline]` is ignored on constants + --> $DIR/inline-trait-and-foreign-items.rs:18:5 + | +LL | #[inline] + | ^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: see issue #65833 for more information + +error[E0518]: attribute should be applied to function or closure + --> $DIR/inline-trait-and-foreign-items.rs:22:5 + | +LL | #[inline] + | ^^^^^^^^^ +LL | type T = Self; + | -------------- not a function or closure + +error[E0518]: attribute should be applied to function or closure + --> $DIR/inline-trait-and-foreign-items.rs:25:5 + | +LL | #[inline] + | ^^^^^^^^^ +LL | type U = impl Trait; + | -------------------- not a function or closure + +error[E0518]: attribute should be applied to function or closure + --> $DIR/inline-trait-and-foreign-items.rs:30:5 + | +LL | #[inline] + | ^^^^^^^^^ +LL | static X: u32; + | -------------- not a function or closure + +error[E0518]: attribute should be applied to function or closure + --> $DIR/inline-trait-and-foreign-items.rs:33:5 + | +LL | #[inline] + | ^^^^^^^^^ +LL | type T; + | ------- not a function or closure + +error: could not find defining uses + --> $DIR/inline-trait-and-foreign-items.rs:26:14 + | +LL | type U = impl Trait; + | ^^^^^^^^^^ + +error: aborting due to 6 previous errors; 2 warnings emitted + +For more information about this error, try `rustc --explain E0518`. diff --git a/src/test/ui/lint/lint-ctypes-73249-2.rs b/src/test/ui/lint/lint-ctypes-73249-2.rs index 8535307756ba3..fe578f51b63a0 100644 --- a/src/test/ui/lint/lint-ctypes-73249-2.rs +++ b/src/test/ui/lint/lint-ctypes-73249-2.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![deny(improper_ctypes)] pub trait Baz {} diff --git a/src/test/ui/lint/lint-ctypes-73249-2.stderr b/src/test/ui/lint/lint-ctypes-73249-2.stderr new file mode 100644 index 0000000000000..36dbe3217d75a --- /dev/null +++ b/src/test/ui/lint/lint-ctypes-73249-2.stderr @@ -0,0 +1,15 @@ +error: `extern` block uses type `impl Baz`, which is not FFI-safe + --> $DIR/lint-ctypes-73249-2.rs:26:25 + | +LL | pub fn lint_me() -> A<()>; + | ^^^^^ not FFI-safe + | +note: the lint level is defined here + --> $DIR/lint-ctypes-73249-2.rs:2:9 + | +LL | #![deny(improper_ctypes)] + | ^^^^^^^^^^^^^^^ + = note: opaque types have no C equivalent + +error: aborting due to previous error + diff --git a/src/test/ui/lint/lint-ctypes-73249-3.rs b/src/test/ui/lint/lint-ctypes-73249-3.rs index 287287d449cf5..ec12de00739e4 100644 --- a/src/test/ui/lint/lint-ctypes-73249-3.rs +++ b/src/test/ui/lint/lint-ctypes-73249-3.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![deny(improper_ctypes)] pub trait Baz {} diff --git a/src/test/ui/lint/lint-ctypes-73249-3.stderr b/src/test/ui/lint/lint-ctypes-73249-3.stderr new file mode 100644 index 0000000000000..e987ec90228c1 --- /dev/null +++ b/src/test/ui/lint/lint-ctypes-73249-3.stderr @@ -0,0 +1,15 @@ +error: `extern` block uses type `impl Baz`, which is not FFI-safe + --> $DIR/lint-ctypes-73249-3.rs:20:25 + | +LL | pub fn lint_me() -> A; + | ^ not FFI-safe + | +note: the lint level is defined here + --> $DIR/lint-ctypes-73249-3.rs:2:9 + | +LL | #![deny(improper_ctypes)] + | ^^^^^^^^^^^^^^^ + = note: opaque types have no C equivalent + +error: aborting due to previous error + diff --git a/src/test/ui/lint/lint-ctypes-73249-5.rs b/src/test/ui/lint/lint-ctypes-73249-5.rs index b877364d9b6fd..58c2d7a501ad5 100644 --- a/src/test/ui/lint/lint-ctypes-73249-5.rs +++ b/src/test/ui/lint/lint-ctypes-73249-5.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![deny(improper_ctypes)] pub trait Baz {} diff --git a/src/test/ui/lint/lint-ctypes-73249-5.stderr b/src/test/ui/lint/lint-ctypes-73249-5.stderr new file mode 100644 index 0000000000000..749714c7df8d7 --- /dev/null +++ b/src/test/ui/lint/lint-ctypes-73249-5.stderr @@ -0,0 +1,15 @@ +error: `extern` block uses type `impl Baz`, which is not FFI-safe + --> $DIR/lint-ctypes-73249-5.rs:20:25 + | +LL | pub fn lint_me() -> A; + | ^ not FFI-safe + | +note: the lint level is defined here + --> $DIR/lint-ctypes-73249-5.rs:2:9 + | +LL | #![deny(improper_ctypes)] + | ^^^^^^^^^^^^^^^ + = note: opaque types have no C equivalent + +error: aborting due to previous error + diff --git a/src/test/ui/lint/lint-ctypes-73251-1.rs b/src/test/ui/lint/lint-ctypes-73251-1.rs index 042878c977808..dc4c7efd7ef23 100644 --- a/src/test/ui/lint/lint-ctypes-73251-1.rs +++ b/src/test/ui/lint/lint-ctypes-73251-1.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![deny(improper_ctypes)] pub trait Baz {} diff --git a/src/test/ui/lint/lint-ctypes-73251-1.stderr b/src/test/ui/lint/lint-ctypes-73251-1.stderr new file mode 100644 index 0000000000000..505ccd5a930ce --- /dev/null +++ b/src/test/ui/lint/lint-ctypes-73251-1.stderr @@ -0,0 +1,15 @@ +error: `extern` block uses type `impl Baz`, which is not FFI-safe + --> $DIR/lint-ctypes-73251-1.rs:23:25 + | +LL | pub fn lint_me() -> ::Assoc; + | ^^^^^^^^^^^^^^^^^^^ not FFI-safe + | +note: the lint level is defined here + --> $DIR/lint-ctypes-73251-1.rs:2:9 + | +LL | #![deny(improper_ctypes)] + | ^^^^^^^^^^^^^^^ + = note: opaque types have no C equivalent + +error: aborting due to previous error + diff --git a/src/test/ui/lint/lint-ctypes-73251-2.rs b/src/test/ui/lint/lint-ctypes-73251-2.rs index 5a124b2fea50e..79effd054b083 100644 --- a/src/test/ui/lint/lint-ctypes-73251-2.rs +++ b/src/test/ui/lint/lint-ctypes-73251-2.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![deny(improper_ctypes)] pub trait TraitA { diff --git a/src/test/ui/lint/lint-ctypes-73251-2.stderr b/src/test/ui/lint/lint-ctypes-73251-2.stderr new file mode 100644 index 0000000000000..94ee95d422e08 --- /dev/null +++ b/src/test/ui/lint/lint-ctypes-73251-2.stderr @@ -0,0 +1,15 @@ +error: `extern` block uses type `impl TraitA`, which is not FFI-safe + --> $DIR/lint-ctypes-73251-2.rs:36:25 + | +LL | pub fn lint_me() -> ::Assoc; + | ^^^^^^^^^^^^^^^^^^^^^^^^^ not FFI-safe + | +note: the lint level is defined here + --> $DIR/lint-ctypes-73251-2.rs:2:9 + | +LL | #![deny(improper_ctypes)] + | ^^^^^^^^^^^^^^^ + = note: opaque types have no C equivalent + +error: aborting due to previous error + diff --git a/src/test/ui/lint/lint-ctypes-73251.rs b/src/test/ui/lint/lint-ctypes-73251.rs index 24742b64f8e98..ebc2ca77b67a1 100644 --- a/src/test/ui/lint/lint-ctypes-73251.rs +++ b/src/test/ui/lint/lint-ctypes-73251.rs @@ -1,8 +1,6 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![deny(improper_ctypes)] pub trait Foo { diff --git a/src/test/ui/lint/opaque-ty-ffi-unsafe.rs b/src/test/ui/lint/opaque-ty-ffi-unsafe.rs index 0c9fed8b98c29..fadb7471952f5 100644 --- a/src/test/ui/lint/opaque-ty-ffi-unsafe.rs +++ b/src/test/ui/lint/opaque-ty-ffi-unsafe.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![deny(improper_ctypes)] type A = impl Fn(); diff --git a/src/test/ui/lint/opaque-ty-ffi-unsafe.stderr b/src/test/ui/lint/opaque-ty-ffi-unsafe.stderr new file mode 100644 index 0000000000000..9d46f6d936e25 --- /dev/null +++ b/src/test/ui/lint/opaque-ty-ffi-unsafe.stderr @@ -0,0 +1,15 @@ +error: `extern` block uses type `impl Fn<()>`, which is not FFI-safe + --> $DIR/opaque-ty-ffi-unsafe.rs:11:17 + | +LL | pub fn a(_: A); + | ^ not FFI-safe + | +note: the lint level is defined here + --> $DIR/opaque-ty-ffi-unsafe.rs:2:9 + | +LL | #![deny(improper_ctypes)] + | ^^^^^^^^^^^^^^^ + = note: opaque types have no C equivalent + +error: aborting due to previous error + diff --git a/src/test/ui/mir/issue-75053.rs b/src/test/ui/mir/issue-75053.rs index bcd689775a092..cb56eaa0b13d9 100644 --- a/src/test/ui/mir/issue-75053.rs +++ b/src/test/ui/mir/issue-75053.rs @@ -1,8 +1,6 @@ // compile-flags: -Z mir-opt-level=3 -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait, rustc_attrs)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait, rustc_attrs)] use std::marker::PhantomData; diff --git a/src/test/ui/mir/issue-75053.stderr b/src/test/ui/mir/issue-75053.stderr new file mode 100644 index 0000000000000..64e59e6c44825 --- /dev/null +++ b/src/test/ui/mir/issue-75053.stderr @@ -0,0 +1,8 @@ +error: fatal error triggered by #[rustc_error] + --> $DIR/issue-75053.rs:46:1 + | +LL | fn main() { + | ^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/privacy/private-in-public-assoc-ty.rs b/src/test/ui/privacy/private-in-public-assoc-ty.rs index dd2dcc6a2ea95..fba72c13170fe 100644 --- a/src/test/ui/privacy/private-in-public-assoc-ty.rs +++ b/src/test/ui/privacy/private-in-public-assoc-ty.rs @@ -2,9 +2,7 @@ // This test also ensures that the checks are performed even inside private modules. #![feature(associated_type_defaults)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] mod m { struct Priv; diff --git a/src/test/ui/privacy/private-in-public-assoc-ty.stderr b/src/test/ui/privacy/private-in-public-assoc-ty.stderr new file mode 100644 index 0000000000000..ba62a228b09fe --- /dev/null +++ b/src/test/ui/privacy/private-in-public-assoc-ty.stderr @@ -0,0 +1,68 @@ +error[E0446]: private type `Priv` in public interface + --> $DIR/private-in-public-assoc-ty.rs:17:9 + | +LL | struct Priv; + | ------------ `Priv` declared as private +... +LL | type A = Priv; + | ^^^^^^^^^^^^^^ can't leak private type + +warning: private trait `PrivTr` in public interface (error E0445) + --> $DIR/private-in-public-assoc-ty.rs:24:9 + | +LL | type Alias1: PrivTr; + | ^^^^^^^^^^^^^^^^^^^^ + | + = note: `#[warn(private_in_public)]` on by default + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #34537 + +warning: private type `Priv` in public interface (error E0446) + --> $DIR/private-in-public-assoc-ty.rs:27:9 + | +LL | type Alias2: PubTrAux1 = u8; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #34537 + +warning: private type `Priv` in public interface (error E0446) + --> $DIR/private-in-public-assoc-ty.rs:30:9 + | +LL | type Alias3: PubTrAux2 = u8; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release! + = note: for more information, see issue #34537 + +error[E0446]: private type `Priv` in public interface + --> $DIR/private-in-public-assoc-ty.rs:34:9 + | +LL | struct Priv; + | ------------ `Priv` declared as private +... +LL | type Alias4 = Priv; + | ^^^^^^^^^^^^^^^^^^^ can't leak private type + +error[E0446]: private type `Priv` in public interface + --> $DIR/private-in-public-assoc-ty.rs:41:9 + | +LL | struct Priv; + | ------------ `Priv` declared as private +... +LL | type Alias1 = Priv; + | ^^^^^^^^^^^^^^^^^^^ can't leak private type + +error[E0445]: private trait `PrivTr` in public interface + --> $DIR/private-in-public-assoc-ty.rs:44:9 + | +LL | trait PrivTr {} + | ------------ `PrivTr` declared as private +... +LL | type Exist = impl PrivTr; + | ^^^^^^^^^^^^^^^^^^^^^^^^^ can't leak private trait + +error: aborting due to 4 previous errors; 3 warnings emitted + +Some errors have detailed explanations: E0445, E0446. +For more information about an error, try `rustc --explain E0445`. diff --git a/src/test/ui/privacy/private-in-public-type-alias-impl-trait.rs b/src/test/ui/privacy/private-in-public-type-alias-impl-trait.rs index 91dade4a2c147..c7df31529bcf3 100644 --- a/src/test/ui/privacy/private-in-public-type-alias-impl-trait.rs +++ b/src/test/ui/privacy/private-in-public-type-alias-impl-trait.rs @@ -1,8 +1,6 @@ // build-pass (FIXME(62277): could be check-pass?) -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![deny(private_in_public)] pub type Pub = impl Default; diff --git a/src/test/ui/save-analysis/issue-68621.rs b/src/test/ui/save-analysis/issue-68621.rs index 33bb55e50e0f9..96af085c5b6b8 100644 --- a/src/test/ui/save-analysis/issue-68621.rs +++ b/src/test/ui/save-analysis/issue-68621.rs @@ -1,8 +1,6 @@ // compile-flags: -Zsave-analysis -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait Trait {} diff --git a/src/test/ui/save-analysis/issue-68621.stderr b/src/test/ui/save-analysis/issue-68621.stderr new file mode 100644 index 0000000000000..3af6d0a3e076e --- /dev/null +++ b/src/test/ui/save-analysis/issue-68621.stderr @@ -0,0 +1,8 @@ +error: could not find defining uses + --> $DIR/issue-68621.rs:14:19 + | +LL | type Future = impl Trait; + | ^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/traits/alias/issue-83613.rs b/src/test/ui/traits/alias/issue-83613.rs index 146920ac685bb..0013d5d66f172 100644 --- a/src/test/ui/traits/alias/issue-83613.rs +++ b/src/test/ui/traits/alias/issue-83613.rs @@ -1,4 +1,4 @@ -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] trait OpaqueTrait {} impl OpaqueTrait for T {} type OpaqueType = impl OpaqueTrait; diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-const.rs b/src/test/ui/type-alias-impl-trait/assoc-type-const.rs index 4db32a3113c77..d53f562e99f4b 100644 --- a/src/test/ui/type-alias-impl-trait/assoc-type-const.rs +++ b/src/test/ui/type-alias-impl-trait/assoc-type-const.rs @@ -2,9 +2,7 @@ // const generics in an associated opaque type // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![feature(const_generics)] //~^ WARN the feature `const_generics` is incomplete diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-const.stderr b/src/test/ui/type-alias-impl-trait/assoc-type-const.stderr new file mode 100644 index 0000000000000..e0c1b02386127 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/assoc-type-const.stderr @@ -0,0 +1,11 @@ +warning: the feature `const_generics` is incomplete and may not be safe to use and/or cause compiler crashes + --> $DIR/assoc-type-const.rs:6:12 + | +LL | #![feature(const_generics)] + | ^^^^^^^^^^^^^^ + | + = note: `#[warn(incomplete_features)]` on by default + = note: see issue #44580 for more information + +warning: 1 warning emitted + diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.rs b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.rs index cb849e129422f..3f34b00ec77e1 100644 --- a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.rs +++ b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.rs @@ -1,9 +1,7 @@ // Tests that we don't allow unconstrained lifetime parameters in impls when // the lifetime is used in an associated opaque type. -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait UnwrapItemsExt { type Iter; diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.stderr b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.stderr new file mode 100644 index 0000000000000..e594dc577b1cd --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime-unconstrained.stderr @@ -0,0 +1,9 @@ +error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates + --> $DIR/assoc-type-lifetime-unconstrained.rs:17:6 + | +LL | impl<'a, I> UnwrapItemsExt for I { + | ^^ unconstrained lifetime parameter + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.rs b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.rs index 28535fe55674a..39f785d8cc55d 100644 --- a/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.rs +++ b/src/test/ui/type-alias-impl-trait/assoc-type-lifetime.rs @@ -2,9 +2,7 @@ // lifetimes are used in an associated opaque type // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait UnwrapItemsExt<'a> { type Iter; diff --git a/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.rs b/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.rs index b9324991a5f0f..42f07d49ffe25 100644 --- a/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.rs +++ b/src/test/ui/type-alias-impl-trait/associated-type-alias-impl-trait.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] // build-pass (FIXME(62277): could be check-pass?) trait Bar {} diff --git a/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice.rs b/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice.rs index 64bf96259f01e..e7bca2231de4b 100644 --- a/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice.rs +++ b/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice.rs @@ -1,9 +1,7 @@ // Crate that exports an opaque `impl Trait` type. Used for testing cross-crate. #![crate_type = "rlib"] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] pub type Foo = impl std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice2.rs b/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice2.rs index 09aa2691804d6..119f7df1ffdad 100644 --- a/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice2.rs +++ b/src/test/ui/type-alias-impl-trait/auxiliary/cross_crate_ice2.rs @@ -1,9 +1,7 @@ // Crate that exports an opaque `impl Trait` type. Used for testing cross-crate. #![crate_type = "rlib"] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] pub trait View { type Tmp: Iterator; diff --git a/src/test/ui/type-alias-impl-trait/bound_reduction.rs b/src/test/ui/type-alias-impl-trait/bound_reduction.rs index b45105ea8f29e..b9b50f0b77aa3 100644 --- a/src/test/ui/type-alias-impl-trait/bound_reduction.rs +++ b/src/test/ui/type-alias-impl-trait/bound_reduction.rs @@ -1,9 +1,7 @@ // build-pass (FIXME(62277): could be check-pass?) #![allow(warnings)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() { } diff --git a/src/test/ui/type-alias-impl-trait/bound_reduction2.rs b/src/test/ui/type-alias-impl-trait/bound_reduction2.rs index 3e56d115b474a..a15074c35936b 100644 --- a/src/test/ui/type-alias-impl-trait/bound_reduction2.rs +++ b/src/test/ui/type-alias-impl-trait/bound_reduction2.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/bound_reduction2.stderr b/src/test/ui/type-alias-impl-trait/bound_reduction2.stderr new file mode 100644 index 0000000000000..c9d6a43b9094a --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/bound_reduction2.stderr @@ -0,0 +1,14 @@ +error: non-defining opaque type use in defining scope + --> $DIR/bound_reduction2.rs:15:46 + | +LL | fn foo_desugared(_: T) -> Foo { + | ^^^^^^^^^^^^^ + | +note: used non-generic type `::Assoc` for generic parameter + --> $DIR/bound_reduction2.rs:9:10 + | +LL | type Foo = impl Trait; + | ^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs index 5ffcd7ae54601..c0359159aebea 100644 --- a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.rs @@ -1,9 +1,7 @@ // Make sure that we check that impl trait types implement the traits that they // claim to. -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type X = impl Clone; //~^ ERROR the trait bound `T: Clone` is not satisfied diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.stderr b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.stderr new file mode 100644 index 0000000000000..c1f58aa6de663 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked-2.stderr @@ -0,0 +1,14 @@ +error[E0277]: the trait bound `T: Clone` is not satisfied + --> $DIR/bounds-are-checked-2.rs:6:13 + | +LL | type X = impl Clone; + | ^^^^^^^^^^ the trait `Clone` is not implemented for `T` + | +help: consider restricting type parameter `T` + | +LL | type X = impl Clone; + | ^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked.rs b/src/test/ui/type-alias-impl-trait/bounds-are-checked.rs index 74c49a9c6c7ff..eecef2338c146 100644 --- a/src/test/ui/type-alias-impl-trait/bounds-are-checked.rs +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked.rs @@ -1,9 +1,7 @@ // Make sure that we check that impl trait types implement the traits that they // claim to. -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type X<'a> = impl Into<&'static str> + From<&'a str>; //~^ ERROR mismatched types diff --git a/src/test/ui/type-alias-impl-trait/bounds-are-checked.stderr b/src/test/ui/type-alias-impl-trait/bounds-are-checked.stderr new file mode 100644 index 0000000000000..d5fafe05887b9 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/bounds-are-checked.stderr @@ -0,0 +1,26 @@ +warning: unnecessary lifetime parameter `'a` + --> $DIR/bounds-are-checked.rs:9:6 + | +LL | fn f<'a: 'static>(t: &'a str) -> X<'a> { + | ^^^^^^^^^^^ + | + = help: you can use the `'static` lifetime directly, in place of `'a` + +error[E0308]: mismatched types + --> $DIR/bounds-are-checked.rs:6:14 + | +LL | type X<'a> = impl Into<&'static str> + From<&'a str>; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ lifetime mismatch + | + = note: expected trait `From<&'a str>` + found trait `From<&'static str>` +note: the lifetime `'a` as defined on the item at 6:8... + --> $DIR/bounds-are-checked.rs:6:8 + | +LL | type X<'a> = impl Into<&'static str> + From<&'a str>; + | ^^ + = note: ...does not necessarily outlive the static lifetime + +error: aborting due to previous error; 1 warning emitted + +For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/type-alias-impl-trait/coherence.rs b/src/test/ui/type-alias-impl-trait/coherence.rs index 998eadeb2717c..1c0f83d6c12da 100644 --- a/src/test/ui/type-alias-impl-trait/coherence.rs +++ b/src/test/ui/type-alias-impl-trait/coherence.rs @@ -1,7 +1,5 @@ // aux-build:foreign-crate.rs -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] extern crate foreign_crate; diff --git a/src/test/ui/type-alias-impl-trait/coherence.stderr b/src/test/ui/type-alias-impl-trait/coherence.stderr new file mode 100644 index 0000000000000..6ede0fa14ba70 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/coherence.stderr @@ -0,0 +1,9 @@ +error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates + --> $DIR/coherence.rs:14:6 + | +LL | impl foreign_crate::ForeignTrait for AliasOfForeignType {} + | ^ unconstrained type parameter + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/declared_but_never_defined.rs b/src/test/ui/type-alias-impl-trait/declared_but_never_defined.rs index a62ae2aff70b4..c4bf56a919721 100644 --- a/src/test/ui/type-alias-impl-trait/declared_but_never_defined.rs +++ b/src/test/ui/type-alias-impl-trait/declared_but_never_defined.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/declared_but_never_defined.stderr b/src/test/ui/type-alias-impl-trait/declared_but_never_defined.stderr new file mode 100644 index 0000000000000..21c2e8a9db618 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/declared_but_never_defined.stderr @@ -0,0 +1,8 @@ +error: could not find defining uses + --> $DIR/declared_but_never_defined.rs:6:12 + | +LL | type Bar = impl std::fmt::Debug; + | ^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.rs b/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.rs index 0ada4a38da3fb..7ea517eb734a4 100644 --- a/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.rs +++ b/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.stderr b/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.stderr new file mode 100644 index 0000000000000..0b4c262bbb43b --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/declared_but_not_defined_in_scope.stderr @@ -0,0 +1,23 @@ +error: could not find defining uses + --> $DIR/declared_but_not_defined_in_scope.rs:7:20 + | +LL | pub type Boo = impl ::std::fmt::Debug; + | ^^^^^^^^^^^^^^^^^^^^^^ + +error[E0308]: mismatched types + --> $DIR/declared_but_not_defined_in_scope.rs:11:5 + | +LL | pub type Boo = impl ::std::fmt::Debug; + | ---------------------- the expected opaque type +... +LL | fn bomp() -> boo::Boo { + | -------- expected `impl Debug` because of return type +LL | "" + | ^^ expected opaque type, found `&str` + | + = note: expected opaque type `impl Debug` + found reference `&'static str` + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses.rs b/src/test/ui/type-alias-impl-trait/different_defining_uses.rs index bb981959b2200..272af7a5204fc 100644 --- a/src/test/ui/type-alias-impl-trait/different_defining_uses.rs +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses.stderr b/src/test/ui/type-alias-impl-trait/different_defining_uses.stderr new file mode 100644 index 0000000000000..eaa716bc71c3e --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses.stderr @@ -0,0 +1,14 @@ +error: concrete type differs from previous defining opaque type use + --> $DIR/different_defining_uses.rs:12:1 + | +LL | fn bar() -> Foo { + | ^^^^^^^^^^^^^^^ expected `&'static str`, got `i32` + | +note: previous use here + --> $DIR/different_defining_uses.rs:8:1 + | +LL | fn foo() -> Foo { + | ^^^^^^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.rs b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.rs index 716c7383c6115..95cbcfec2dc15 100644 --- a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.rs +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.stderr b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.stderr new file mode 100644 index 0000000000000..6274029e4f524 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type.stderr @@ -0,0 +1,26 @@ +error: concrete type differs from previous defining opaque type use + --> $DIR/different_defining_uses_never_type.rs:12:1 + | +LL | fn bar() -> Foo { + | ^^^^^^^^^^^^^^^ expected `&'static str`, got `()` + | +note: previous use here + --> $DIR/different_defining_uses_never_type.rs:8:1 + | +LL | fn foo() -> Foo { + | ^^^^^^^^^^^^^^^ + +error: concrete type differs from previous defining opaque type use + --> $DIR/different_defining_uses_never_type.rs:17:1 + | +LL | fn boo() -> Foo { + | ^^^^^^^^^^^^^^^ expected `&'static str`, got `()` + | +note: previous use here + --> $DIR/different_defining_uses_never_type.rs:8:1 + | +LL | fn foo() -> Foo { + | ^^^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.rs b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.rs index 8383f38ddbec0..8549687ea7814 100644 --- a/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.rs +++ b/src/test/ui/type-alias-impl-trait/different_defining_uses_never_type2.rs @@ -1,8 +1,6 @@ // build-pass (FIXME(62277): could be check-pass?) -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/fallback.rs b/src/test/ui/type-alias-impl-trait/fallback.rs index 204dc0496ede9..fe1ca2230daca 100644 --- a/src/test/ui/type-alias-impl-trait/fallback.rs +++ b/src/test/ui/type-alias-impl-trait/fallback.rs @@ -2,9 +2,7 @@ // inference variable being completely unconstrained. // // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type Foo = impl Copy; diff --git a/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.rs b/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.rs index adf4c1f86563b..075351307589b 100644 --- a/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.rs +++ b/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.stderr b/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.stderr new file mode 100644 index 0000000000000..f8a058170e37f --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_different_defining_uses.stderr @@ -0,0 +1,14 @@ +error: concrete type differs from previous defining opaque type use + --> $DIR/generic_different_defining_uses.rs:11:1 + | +LL | fn my_iter2(t: T) -> MyIter { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `std::iter::Once`, got `std::option::IntoIter` + | +note: previous use here + --> $DIR/generic_different_defining_uses.rs:7:1 + | +LL | fn my_iter(t: T) -> MyIter { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs index f0b80db2a8312..31f992976b189 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.stderr new file mode 100644 index 0000000000000..08b26b8fc1307 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_lifetime_param.stderr @@ -0,0 +1,14 @@ +error: non-defining opaque type use in defining scope + --> $DIR/generic_duplicate_lifetime_param.rs:7:26 + | +LL | fn one<'a>(t: &'a ()) -> Two<'a, 'a> { + | ^^^^^^^^^^^ + | +note: lifetime used multiple times + --> $DIR/generic_duplicate_lifetime_param.rs:5:10 + | +LL | type Two<'a, 'b> = impl std::fmt::Debug; + | ^^ ^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use.rs index 12ff5a2e713d8..e45950c4926b1 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use.rs @@ -1,7 +1,5 @@ #![feature(const_generics)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![allow(incomplete_features)] use std::fmt::Debug; @@ -14,16 +12,16 @@ type TwoLifetimes<'a, 'b> = impl Debug; type TwoConsts = impl Debug; fn one_ty(t: T) -> TwoTys { -//~^ ERROR non-defining opaque type use in defining scope + //~^ ERROR non-defining opaque type use in defining scope t } fn one_lifetime<'a>(t: &'a u32) -> TwoLifetimes<'a, 'a> { -//~^ ERROR non-defining opaque type use in defining scope + //~^ ERROR non-defining opaque type use in defining scope t } fn one_const(t: *mut [u8; N]) -> TwoConsts { -//~^ ERROR non-defining opaque type use in defining scope + //~^ ERROR non-defining opaque type use in defining scope t } diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use.stderr new file mode 100644 index 0000000000000..7ea5efd4e6b02 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use.stderr @@ -0,0 +1,38 @@ +error: non-defining opaque type use in defining scope + --> $DIR/generic_duplicate_param_use.rs:14:30 + | +LL | fn one_ty(t: T) -> TwoTys { + | ^^^^^^^^^^^^ + | +note: type used multiple times + --> $DIR/generic_duplicate_param_use.rs:10:13 + | +LL | type TwoTys = impl Debug; + | ^ ^ + +error: non-defining opaque type use in defining scope + --> $DIR/generic_duplicate_param_use.rs:19:36 + | +LL | fn one_lifetime<'a>(t: &'a u32) -> TwoLifetimes<'a, 'a> { + | ^^^^^^^^^^^^^^^^^^^^ + | +note: lifetime used multiple times + --> $DIR/generic_duplicate_param_use.rs:11:19 + | +LL | type TwoLifetimes<'a, 'b> = impl Debug; + | ^^ ^^ + +error: non-defining opaque type use in defining scope + --> $DIR/generic_duplicate_param_use.rs:24:50 + | +LL | fn one_const(t: *mut [u8; N]) -> TwoConsts { + | ^^^^^^^^^^^^^^^ + | +note: constant used multiple times + --> $DIR/generic_duplicate_param_use.rs:12:22 + | +LL | type TwoConsts = impl Debug; + | ^ ^ + +error: aborting due to 3 previous errors + diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.rs index afd2be2674588..c17d595dbb3ad 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use10.rs @@ -1,7 +1,5 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.rs index 9627689b15c3c..a74731df69515 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.stderr new file mode 100644 index 0000000000000..d87e8c5783b65 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use2.stderr @@ -0,0 +1,14 @@ +error: non-defining opaque type use in defining scope + --> $DIR/generic_duplicate_param_use2.rs:10:27 + | +LL | fn one(t: T) -> Two { + | ^^^^^^^^^ + | +note: type used multiple times + --> $DIR/generic_duplicate_param_use2.rs:8:10 + | +LL | type Two = impl Debug; + | ^ ^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.rs index 04d00600c9397..0597b8385d252 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.stderr new file mode 100644 index 0000000000000..711de855f0d10 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use3.stderr @@ -0,0 +1,14 @@ +error: non-defining opaque type use in defining scope + --> $DIR/generic_duplicate_param_use3.rs:10:27 + | +LL | fn one(t: T) -> Two { + | ^^^^^^^^^ + | +note: type used multiple times + --> $DIR/generic_duplicate_param_use3.rs:8:10 + | +LL | type Two = impl Debug; + | ^ ^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.rs index 0d2979626ac46..e77c94988f73e 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.stderr new file mode 100644 index 0000000000000..fcf01f5164ae4 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use4.stderr @@ -0,0 +1,14 @@ +error: non-defining opaque type use in defining scope + --> $DIR/generic_duplicate_param_use4.rs:10:27 + | +LL | fn one(t: T) -> Two { + | ^^^^^^^^^ + | +note: type used multiple times + --> $DIR/generic_duplicate_param_use4.rs:8:10 + | +LL | type Two = impl Debug; + | ^ ^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs index 30ed7557c9768..dd2f202cf5dc0 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.stderr new file mode 100644 index 0000000000000..cb43b897cf9be --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use5.stderr @@ -0,0 +1,39 @@ +error: concrete type differs from previous defining opaque type use + --> $DIR/generic_duplicate_param_use5.rs:16:1 + | +LL | fn three(t: T, u: U) -> Two { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, U)`, got `(U, T)` + | +note: previous use here + --> $DIR/generic_duplicate_param_use5.rs:12:1 + | +LL | fn two(t: T, u: U) -> Two { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0277]: `T` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use5.rs:8:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(T, U)` +help: consider restricting type parameter `T` + | +LL | type Two = impl Debug; + | ^^^^^^^^^^^^^^^^^ + +error[E0277]: `U` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use5.rs:8:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `U` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(T, U)` +help: consider restricting type parameter `U` + | +LL | type Two = impl Debug; + | ^^^^^^^^^^^^^^^^^ + +error: aborting due to 3 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs index 04644f1e18b99..d54d3cd62e020 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.stderr new file mode 100644 index 0000000000000..509da2320e862 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use6.stderr @@ -0,0 +1,27 @@ +error: concrete type differs from previous defining opaque type use + --> $DIR/generic_duplicate_param_use6.rs:15:1 + | +LL | fn three(t: T, u: U) -> Two { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, T)`, got `(U, T)` + | +note: previous use here + --> $DIR/generic_duplicate_param_use6.rs:11:1 + | +LL | fn two(t: T, u: U) -> Two { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0277]: `T` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use6.rs:8:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(T, T)` +help: consider restricting type parameter `T` + | +LL | type Two = impl Debug; + | ^^^^^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.rs index df12882abada7..feebf81eef2a7 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use7.rs @@ -1,7 +1,5 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs index 283e0c1d660eb..4a723b64cdc4f 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.stderr new file mode 100644 index 0000000000000..a09f2506258fb --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use8.stderr @@ -0,0 +1,27 @@ +error: concrete type differs from previous defining opaque type use + --> $DIR/generic_duplicate_param_use8.rs:14:1 + | +LL | fn three(_: T, u: U) -> Two { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(T, u32)`, got `(U, u32)` + | +note: previous use here + --> $DIR/generic_duplicate_param_use8.rs:10:1 + | +LL | fn two(t: T, _: U) -> Two { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0277]: `T` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use8.rs:7:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `T` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(T, u32)` +help: consider restricting type parameter `T` + | +LL | type Two = impl Debug; + | ^^^^^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs index 4c3b0877d2393..747081933172b 100644 --- a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.stderr b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.stderr new file mode 100644 index 0000000000000..68a30820951fa --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_duplicate_param_use9.stderr @@ -0,0 +1,51 @@ +error: concrete type differs from previous defining opaque type use + --> $DIR/generic_duplicate_param_use9.rs:21:1 + | +LL | fn three(t: T, u: U) -> Two { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `(A, B, ::Bar)`, got `(A, B, i32)` + | +note: previous use here + --> $DIR/generic_duplicate_param_use9.rs:17:1 + | +LL | fn two(t: T, u: U) -> Two { + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error[E0277]: the trait bound `A: Foo` is not satisfied in `(A, B, ::Bar)` + --> $DIR/generic_duplicate_param_use9.rs:7:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ within `(A, B, ::Bar)`, the trait `Foo` is not implemented for `A` + | + = note: required because it appears within the type `(A, B, ::Bar)` +help: consider restricting type parameter `A` + | +LL | type Two = impl Debug; + | ^^^^^ + +error[E0277]: `A` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use9.rs:7:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `A` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(A, B, ::Bar)` +help: consider restricting type parameter `A` + | +LL | type Two = impl Debug; + | ^^^^^^^^^^^^^^^^^ + +error[E0277]: `B` doesn't implement `Debug` + --> $DIR/generic_duplicate_param_use9.rs:7:18 + | +LL | type Two = impl Debug; + | ^^^^^^^^^^ `B` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | + = note: required because of the requirements on the impl of `Debug` for `(A, B, ::Bar)` +help: consider restricting type parameter `B` + | +LL | type Two = impl Debug; + | ^^^^^^^^^^^^^^^^^ + +error: aborting due to 4 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_lifetime_param.rs b/src/test/ui/type-alias-impl-trait/generic_lifetime_param.rs index 7274f4f76f8cb..e109c38c98695 100644 --- a/src/test/ui/type-alias-impl-trait/generic_lifetime_param.rs +++ b/src/test/ui/type-alias-impl-trait/generic_lifetime_param.rs @@ -1,8 +1,6 @@ // build-pass (FIXME(62277): could be check-pass?) -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/generic_nondefining_use.rs b/src/test/ui/type-alias-impl-trait/generic_nondefining_use.rs index c69884d8d6edb..9f1bffff77c97 100644 --- a/src/test/ui/type-alias-impl-trait/generic_nondefining_use.rs +++ b/src/test/ui/type-alias-impl-trait/generic_nondefining_use.rs @@ -1,7 +1,5 @@ #![feature(const_generics)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![allow(incomplete_features)] use std::fmt::Debug; @@ -15,16 +13,16 @@ type OneConst = impl Debug; // Not defining uses, because they doesn't define *all* possible generics. fn concrete_ty() -> OneTy { -//~^ ERROR non-defining opaque type use in defining scope + //~^ ERROR non-defining opaque type use in defining scope 5u32 } fn concrete_lifetime() -> OneLifetime<'static> { -//~^ ERROR non-defining opaque type use in defining scope + //~^ ERROR non-defining opaque type use in defining scope 6u32 } -fn concrete_const() -> OneConst<{123}> { -//~^ ERROR non-defining opaque type use in defining scope +fn concrete_const() -> OneConst<{ 123 }> { + //~^ ERROR non-defining opaque type use in defining scope 7u32 } diff --git a/src/test/ui/type-alias-impl-trait/generic_nondefining_use.stderr b/src/test/ui/type-alias-impl-trait/generic_nondefining_use.stderr new file mode 100644 index 0000000000000..eb0c296bb626a --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_nondefining_use.stderr @@ -0,0 +1,35 @@ +error: non-defining opaque type use in defining scope + --> $DIR/generic_nondefining_use.rs:15:21 + | +LL | fn concrete_ty() -> OneTy { + | ^^^^^^^^^^ + | +note: used non-generic type `u32` for generic parameter + --> $DIR/generic_nondefining_use.rs:9:12 + | +LL | type OneTy = impl Debug; + | ^ + +error: non-defining opaque type use in defining scope + --> $DIR/generic_nondefining_use.rs:20:27 + | +LL | type OneLifetime<'a> = impl Debug; + | -- cannot use static lifetime; use a bound lifetime instead or remove the lifetime parameter from the opaque type +... +LL | fn concrete_lifetime() -> OneLifetime<'static> { + | ^^^^^^^^^^^^^^^^^^^^ + +error: non-defining opaque type use in defining scope + --> $DIR/generic_nondefining_use.rs:25:24 + | +LL | fn concrete_const() -> OneConst<{ 123 }> { + | ^^^^^^^^^^^^^^^^^ + | +note: used non-generic constant `{ 123 }` for generic parameter + --> $DIR/generic_nondefining_use.rs:11:21 + | +LL | type OneConst = impl Debug; + | ^ + +error: aborting due to 3 previous errors + diff --git a/src/test/ui/type-alias-impl-trait/generic_not_used.rs b/src/test/ui/type-alias-impl-trait/generic_not_used.rs index 36fae028d4ec6..dd6300a64f42e 100644 --- a/src/test/ui/type-alias-impl-trait/generic_not_used.rs +++ b/src/test/ui/type-alias-impl-trait/generic_not_used.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/generic_not_used.stderr b/src/test/ui/type-alias-impl-trait/generic_not_used.stderr new file mode 100644 index 0000000000000..8015ff7eded90 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_not_used.stderr @@ -0,0 +1,18 @@ +error: at least one trait must be specified + --> $DIR/generic_not_used.rs:5:33 + | +LL | type WrongGeneric = impl 'static; + | ^^^^^^^^^^^^ + +error: type parameter `V` is part of concrete type but not used in parameter list for the `impl Trait` type alias + --> $DIR/generic_not_used.rs:8:73 + | +LL | fn wrong_generic(_: U, v: V) -> WrongGeneric { + | _________________________________________________________________________^ +LL | | +LL | | v +LL | | } + | |_^ + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs index bd0fc8cbace46..9c6b93b7ba040 100644 --- a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs +++ b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() { let y = 42; diff --git a/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr new file mode 100644 index 0000000000000..18d8daa05e63d --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_type_does_not_live_long_enough.stderr @@ -0,0 +1,33 @@ +error: at least one trait must be specified + --> $DIR/generic_type_does_not_live_long_enough.rs:9:24 + | +LL | type WrongGeneric = impl 'static; + | ^^^^^^^^^^^^ + +error[E0308]: mismatched types + --> $DIR/generic_type_does_not_live_long_enough.rs:6:18 + | +LL | let z: i32 = x; + | --- ^ expected `i32`, found opaque type + | | + | expected due to this +... +LL | type WrongGeneric = impl 'static; + | ------------ the found opaque type + | + = note: expected type `i32` + found opaque type `impl Sized` + +error[E0310]: the parameter type `T` may not live long enough + --> $DIR/generic_type_does_not_live_long_enough.rs:9:24 + | +LL | type WrongGeneric = impl 'static; + | ^^^^^^^^^^^^ ...so that the type `T` will meet its required lifetime bounds +... +LL | fn wrong_generic(t: T) -> WrongGeneric { + | - help: consider adding an explicit lifetime bound...: `T: 'static` + +error: aborting due to 3 previous errors + +Some errors have detailed explanations: E0308, E0310. +For more information about an error, try `rustc --explain E0308`. diff --git a/src/test/ui/type-alias-impl-trait/generic_underconstrained.rs b/src/test/ui/type-alias-impl-trait/generic_underconstrained.rs index 5d723e5bc6213..766ee36c02be2 100644 --- a/src/test/ui/type-alias-impl-trait/generic_underconstrained.rs +++ b/src/test/ui/type-alias-impl-trait/generic_underconstrained.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/generic_underconstrained.stderr b/src/test/ui/type-alias-impl-trait/generic_underconstrained.stderr new file mode 100644 index 0000000000000..cefc5d99b379e --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_underconstrained.stderr @@ -0,0 +1,23 @@ +error: at least one trait must be specified + --> $DIR/generic_underconstrained.rs:6:35 + | +LL | type Underconstrained = impl 'static; + | ^^^^^^^^^^^^ + +error[E0277]: the trait bound `T: Trait` is not satisfied + --> $DIR/generic_underconstrained.rs:10:31 + | +LL | type Underconstrained = impl 'static; + | ----- required by this bound in `Underconstrained` +... +LL | fn underconstrain(_: T) -> Underconstrained { + | ^^^^^^^^^^^^^^^^^^^ the trait `Trait` is not implemented for `T` + | +help: consider restricting type parameter `T` + | +LL | fn underconstrain(_: T) -> Underconstrained { + | ^^^^^^^ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/generic_underconstrained2.rs b/src/test/ui/type-alias-impl-trait/generic_underconstrained2.rs index 01cd1b9b972fb..cd7c962e2d15b 100644 --- a/src/test/ui/type-alias-impl-trait/generic_underconstrained2.rs +++ b/src/test/ui/type-alias-impl-trait/generic_underconstrained2.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/generic_underconstrained2.stderr b/src/test/ui/type-alias-impl-trait/generic_underconstrained2.stderr new file mode 100644 index 0000000000000..8bba62a913e11 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/generic_underconstrained2.stderr @@ -0,0 +1,43 @@ +error: at least one trait must be specified + --> $DIR/generic_underconstrained2.rs:5:45 + | +LL | type Underconstrained = impl 'static; + | ^^^^^^^^^^^^ + +error: at least one trait must be specified + --> $DIR/generic_underconstrained2.rs:14:46 + | +LL | type Underconstrained2 = impl 'static; + | ^^^^^^^^^^^^ + +error[E0277]: `U` doesn't implement `Debug` + --> $DIR/generic_underconstrained2.rs:9:33 + | +LL | type Underconstrained = impl 'static; + | --------------- required by this bound in `Underconstrained` +... +LL | fn underconstrained(_: U) -> Underconstrained { + | ^^^^^^^^^^^^^^^^^^^ `U` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | +help: consider restricting type parameter `U` + | +LL | fn underconstrained(_: U) -> Underconstrained { + | ^^^^^^^^^^^^^^^^^ + +error[E0277]: `V` doesn't implement `Debug` + --> $DIR/generic_underconstrained2.rs:18:43 + | +LL | type Underconstrained2 = impl 'static; + | --------------- required by this bound in `Underconstrained2` +... +LL | fn underconstrained2(_: U, _: V) -> Underconstrained2 { + | ^^^^^^^^^^^^^^^^^^^^ `V` cannot be formatted using `{:?}` because it doesn't implement `Debug` + | +help: consider restricting type parameter `V` + | +LL | fn underconstrained2(_: U, _: V) -> Underconstrained2 { + | ^^^^^^^^^^^^^^^^^ + +error: aborting due to 4 previous errors + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.rs b/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.rs index 6759799b37d85..851c2f66c475a 100644 --- a/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.rs +++ b/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.rs @@ -1,9 +1,7 @@ // Ensure that we don't ICE if associated type impl trait is used in an impl // with an unconstrained type parameter. -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait X { type I; diff --git a/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.stderr b/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.stderr new file mode 100644 index 0000000000000..8cf8fb1d16c4d --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/impl-with-unconstrained-param.stderr @@ -0,0 +1,9 @@ +error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates + --> $DIR/impl-with-unconstrained-param.rs:11:6 + | +LL | impl X for () { + | ^ unconstrained type parameter + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.rs b/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.rs index f73169d7d08a9..c46c4715924e5 100644 --- a/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.rs +++ b/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.rs @@ -1,9 +1,7 @@ // Regression test for issue 67856 #![feature(unboxed_closures)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![feature(fn_traits)] trait MyTrait {} diff --git a/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.stderr b/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.stderr new file mode 100644 index 0000000000000..e1e259187f5f9 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/incoherent-assoc-imp-trait.stderr @@ -0,0 +1,23 @@ +error[E0119]: conflicting implementations of trait `std::ops::FnOnce<()>` for type `&_` + --> $DIR/incoherent-assoc-imp-trait.rs:10:1 + | +LL | impl FnOnce<()> for &F { + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: conflicting implementation in crate `core`: + - impl FnOnce for &F + where F: Fn, F: ?Sized; + +error[E0210]: type parameter `F` must be used as the type parameter for some local type (e.g., `MyStruct`) + --> $DIR/incoherent-assoc-imp-trait.rs:10:6 + | +LL | impl FnOnce<()> for &F { + | ^ type parameter `F` must be used as the type parameter for some local type + | + = note: implementing a foreign trait is only possible if at least one of the types for which it is implemented is local + = note: only traits defined in the current crate can be implemented for a type parameter + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0119, E0210. +For more information about an error, try `rustc --explain E0119`. diff --git a/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.min_tait.stderr deleted file mode 100644 index 68231d43f629e..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.min_tait.stderr +++ /dev/null @@ -1,24 +0,0 @@ -error[E0658]: type alias impl trait is not permitted here - --> $DIR/issue-52843-closure-constrain.rs:12:22 - | -LL | let null = || -> Opaque { 0 }; - | ^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error: concrete type differs from previous defining opaque type use - --> $DIR/issue-52843-closure-constrain.rs:12:16 - | -LL | let null = || -> Opaque { 0 }; - | ^^^^^^^^^^^^^^^^^^ expected `String`, got `[type error]` - | -note: previous use here - --> $DIR/issue-52843-closure-constrain.rs:11:5 - | -LL | fn _unused() -> Opaque { String::new() } - | ^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.rs b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.rs index c7deb2e4eac9c..50eeff0b18fd4 100644 --- a/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.rs +++ b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.rs @@ -1,15 +1,13 @@ // Checks to ensure that we properly detect when a closure constrains an opaque type -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; fn main() { type Opaque = impl Debug; fn _unused() -> Opaque { String::new() } - let null = || -> Opaque { 0 }; //[min_tait]~ ERROR: not permitted here + let null = || -> Opaque { 0 }; //~^ ERROR: concrete type differs from previous defining opaque type use println!("{:?}", null()); } diff --git a/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.stderr b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.stderr new file mode 100644 index 0000000000000..d82050e263ee6 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.stderr @@ -0,0 +1,14 @@ +error: concrete type differs from previous defining opaque type use + --> $DIR/issue-52843-closure-constrain.rs:10:16 + | +LL | let null = || -> Opaque { 0 }; + | ^^^^^^^^^^^^^^^^^^ expected `String`, got `i32` + | +note: previous use here + --> $DIR/issue-52843-closure-constrain.rs:9:5 + | +LL | fn _unused() -> Opaque { String::new() } + | ^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/issue-52843.rs b/src/test/ui/type-alias-impl-trait/issue-52843.rs index 844bfa3b8461b..b24959d720720 100644 --- a/src/test/ui/type-alias-impl-trait/issue-52843.rs +++ b/src/test/ui/type-alias-impl-trait/issue-52843.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type Foo = impl Default; //~^ ERROR: the trait bound `T: Default` is not satisfied diff --git a/src/test/ui/type-alias-impl-trait/issue-52843.stderr b/src/test/ui/type-alias-impl-trait/issue-52843.stderr new file mode 100644 index 0000000000000..8718a57d9d4f3 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-52843.stderr @@ -0,0 +1,14 @@ +error[E0277]: the trait bound `T: Default` is not satisfied + --> $DIR/issue-52843.rs:3:15 + | +LL | type Foo = impl Default; + | ^^^^^^^^^^^^ the trait `Default` is not implemented for `T` + | +help: consider restricting type parameter `T` + | +LL | type Foo = impl Default; + | ^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0277`. diff --git a/src/test/ui/type-alias-impl-trait/issue-53096.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-53096.full_tait.stderr index fb70582c31a2d..554215fe89455 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53096.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-53096.full_tait.stderr @@ -1,8 +1,9 @@ -error: fatal error triggered by #[rustc_error] - --> $DIR/issue-53096.rs:13:1 +error[E0636]: the feature `type_alias_impl_trait` has already been declared + --> $DIR/issue-53096.rs:4:32 | -LL | fn main() {} - | ^^^^^^^^^ +LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] + | ^^^^^^^^^^^^^^^^^^^^^ error: aborting due to previous error +For more information about this error, try `rustc --explain E0636`. diff --git a/src/test/ui/type-alias-impl-trait/issue-53096.rs b/src/test/ui/type-alias-impl-trait/issue-53096.rs index 249055bf26c34..792bd16527be8 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53096.rs +++ b/src/test/ui/type-alias-impl-trait/issue-53096.rs @@ -1,7 +1,5 @@ #![feature(const_impl_trait, const_fn_fn_ptr_basics, rustc_attrs)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type Foo = impl Fn() -> usize; const fn bar() -> Foo { diff --git a/src/test/ui/type-alias-impl-trait/issue-53096.stderr b/src/test/ui/type-alias-impl-trait/issue-53096.stderr new file mode 100644 index 0000000000000..0af3a75f8532e --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-53096.stderr @@ -0,0 +1,8 @@ +error: fatal error triggered by #[rustc_error] + --> $DIR/issue-53096.rs:11:1 + | +LL | fn main() {} + | ^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/issue-53598.rs b/src/test/ui/type-alias-impl-trait/issue-53598.rs index 1680d6e583950..37b330ba4b8fc 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53598.rs +++ b/src/test/ui/type-alias-impl-trait/issue-53598.rs @@ -1,7 +1,5 @@ // ignore-compare-mode-chalk -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/issue-53598.stderr b/src/test/ui/type-alias-impl-trait/issue-53598.stderr new file mode 100644 index 0000000000000..4c8144a235930 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-53598.stderr @@ -0,0 +1,12 @@ +error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias + --> $DIR/issue-53598.rs:20:42 + | +LL | fn foo(_: T) -> Self::Item { + | __________________________________________^ +LL | | +LL | | S::(Default::default()) +LL | | } + | |_____^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs index 9c50a3da95cb7..176118200e5ed 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs +++ b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs @@ -1,7 +1,5 @@ #![feature(const_impl_trait, generators, generator_trait, rustc_attrs)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::ops::Generator; diff --git a/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.stderr b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.stderr new file mode 100644 index 0000000000000..eb1c9603a60d6 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.stderr @@ -0,0 +1,8 @@ +error: fatal error triggered by #[rustc_error] + --> $DIR/issue-53678-generator-and-const-fn.rs:19:1 + | +LL | fn main() {} + | ^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.rs b/src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.rs index fc32d455aaa80..af0780ab0b998 100644 --- a/src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.rs +++ b/src/test/ui/type-alias-impl-trait/issue-55099-lifetime-inference.rs @@ -3,9 +3,7 @@ // Tests that we don't incorrectly consider a lifetime to part // of the concrete type -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait Future {} diff --git a/src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.rs b/src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.rs index 7207dda90dc4f..3a7a5da075f11 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.rs +++ b/src/test/ui/type-alias-impl-trait/issue-57188-associate-impl-capture.rs @@ -2,9 +2,7 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] struct Baz<'a> { source: &'a str, diff --git a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs index fcc3555b23127..a55fbf9c48a57 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs +++ b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.rs @@ -3,9 +3,7 @@ // FIXME: This should compile, but it currently doesn't #![feature(trait_alias)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait Foo { type Bar: Baz; diff --git a/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr new file mode 100644 index 0000000000000..f87beb66d995e --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-57611-trait-alias.stderr @@ -0,0 +1,11 @@ +error: implementation of `FnOnce` is not general enough + --> $DIR/issue-57611-trait-alias.rs:17:16 + | +LL | type Bar = impl Baz; + | ^^^^^^^^^^^^^^^^^^^^ implementation of `FnOnce` is not general enough + | + = note: closure with signature `fn(&'2 X) -> &X` must implement `FnOnce<(&'1 X,)>`, for any lifetime `'1`... + = note: ...but it actually implements `FnOnce<(&'2 X,)>`, for some specific lifetime `'2` + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/issue-57700.rs b/src/test/ui/type-alias-impl-trait/issue-57700.rs index 19b3d1ce2c768..f1db4d3291b40 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57700.rs +++ b/src/test/ui/type-alias-impl-trait/issue-57700.rs @@ -1,8 +1,6 @@ // ignore-compare-mode-chalk #![feature(arbitrary_self_types)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::ops::Deref; diff --git a/src/test/ui/type-alias-impl-trait/issue-57700.stderr b/src/test/ui/type-alias-impl-trait/issue-57700.stderr new file mode 100644 index 0000000000000..c701e3e74ef59 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-57700.stderr @@ -0,0 +1,12 @@ +error: type parameter `impl Deref` is part of concrete type but not used in parameter list for the `impl Trait` type alias + --> $DIR/issue-57700.rs:16:58 + | +LL | fn foo(self: impl Deref) -> Self::Bar { + | __________________________________________________________^ +LL | | +LL | | self +LL | | } + | |_____^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs b/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs index 9118648fe426f..fcab2c7db2605 100644 --- a/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs +++ b/src/test/ui/type-alias-impl-trait/issue-57807-associated-type.rs @@ -2,9 +2,7 @@ // that we properly unify associated types within // a type alias impl trait // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait Bar { type A; diff --git a/src/test/ui/type-alias-impl-trait/issue-58887.rs b/src/test/ui/type-alias-impl-trait/issue-58887.rs index 0a09bd50a6eaf..96ac7860283ac 100644 --- a/src/test/ui/type-alias-impl-trait/issue-58887.rs +++ b/src/test/ui/type-alias-impl-trait/issue-58887.rs @@ -1,8 +1,6 @@ // run-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait UnwrapItemsExt { type Iter; diff --git a/src/test/ui/type-alias-impl-trait/issue-58951.rs b/src/test/ui/type-alias-impl-trait/issue-58951.rs index 932684ec089b9..7303cbab4a813 100644 --- a/src/test/ui/type-alias-impl-trait/issue-58951.rs +++ b/src/test/ui/type-alias-impl-trait/issue-58951.rs @@ -1,8 +1,6 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type A = impl Iterator; diff --git a/src/test/ui/type-alias-impl-trait/issue-60371.stderr b/src/test/ui/type-alias-impl-trait/issue-60371.stderr index a9df74689df29..9abdd70bbd927 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60371.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-60371.stderr @@ -5,7 +5,7 @@ LL | type Item = impl Bug; | ^^^^^^^^ | = note: see issue #63063 for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable + = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable error[E0658]: type alias impl trait is not permitted here --> $DIR/issue-60371.rs:13:40 diff --git a/src/test/ui/type-alias-impl-trait/issue-60407.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-60407.full_tait.stderr index adb07f5227b40..9b2d21192cd89 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60407.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-60407.full_tait.stderr @@ -1,8 +1,9 @@ -error: fatal error triggered by #[rustc_error] - --> $DIR/issue-60407.rs:10:1 +error[E0636]: the feature `type_alias_impl_trait` has already been declared + --> $DIR/issue-60407.rs:3:32 | -LL | fn main() { - | ^^^^^^^^^ +LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] + | ^^^^^^^^^^^^^^^^^^^^^ error: aborting due to previous error +For more information about this error, try `rustc --explain E0636`. diff --git a/src/test/ui/type-alias-impl-trait/issue-60407.rs b/src/test/ui/type-alias-impl-trait/issue-60407.rs index 7319bcf4cd911..b833429c76922 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60407.rs +++ b/src/test/ui/type-alias-impl-trait/issue-60407.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait, rustc_attrs)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait, rustc_attrs)] type Debuggable = impl core::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/issue-60407.stderr b/src/test/ui/type-alias-impl-trait/issue-60407.stderr new file mode 100644 index 0000000000000..fecee27797a54 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-60407.stderr @@ -0,0 +1,8 @@ +error: fatal error triggered by #[rustc_error] + --> $DIR/issue-60407.rs:8:1 + | +LL | fn main() { + | ^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/issue-60564.rs b/src/test/ui/type-alias-impl-trait/issue-60564.rs index 7f780a253c95f..78def0d1136de 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60564.rs +++ b/src/test/ui/type-alias-impl-trait/issue-60564.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait IterBits { type BitsIter: Iterator; diff --git a/src/test/ui/type-alias-impl-trait/issue-60564.stderr b/src/test/ui/type-alias-impl-trait/issue-60564.stderr new file mode 100644 index 0000000000000..66fa862ef9d7a --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-60564.stderr @@ -0,0 +1,14 @@ +error: non-defining opaque type use in defining scope + --> $DIR/issue-60564.rs:19:34 + | +LL | fn iter_bits(self, n: u8) -> Self::BitsIter { + | ^^^^^^^^^^^^^^ + | +note: used non-generic type `u8` for generic parameter + --> $DIR/issue-60564.rs:8:25 + | +LL | type IterBitsIter = impl std::iter::Iterator; + | ^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.rs b/src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.rs index 38370cd008f73..36779a0ce89c3 100644 --- a/src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.rs +++ b/src/test/ui/type-alias-impl-trait/issue-62000-associate-impl-trait-lifetimes.rs @@ -2,9 +2,7 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait MyTrait { type AssocType: Send; diff --git a/src/test/ui/type-alias-impl-trait/issue-63263-closure-return.rs b/src/test/ui/type-alias-impl-trait/issue-63263-closure-return.rs index 634ec0f515f31..7414611a74893 100644 --- a/src/test/ui/type-alias-impl-trait/issue-63263-closure-return.rs +++ b/src/test/ui/type-alias-impl-trait/issue-63263-closure-return.rs @@ -4,7 +4,7 @@ // check-pass -#![feature(min_type_alias_impl_trait, type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] pub type Closure = impl FnOnce(); diff --git a/src/test/ui/type-alias-impl-trait/issue-63279.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-63279.min_tait.stderr deleted file mode 100644 index a93d2dfcee508..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-63279.min_tait.stderr +++ /dev/null @@ -1,22 +0,0 @@ -error[E0658]: type alias impl trait is not permitted here - --> $DIR/issue-63279.rs:10:11 - | -LL | || -> Closure { || () } - | ^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0271]: type mismatch resolving `<[closure@$DIR/issue-63279.rs:10:5: 10:28] as FnOnce<()>>::Output == ()` - --> $DIR/issue-63279.rs:7:16 - | -LL | type Closure = impl FnOnce(); - | ^^^^^^^^^^^^^ expected `()`, found opaque type - | - = note: expected unit type `()` - found opaque type `impl FnOnce<()>` - -error: aborting due to 2 previous errors - -Some errors have detailed explanations: E0271, E0658. -For more information about an error, try `rustc --explain E0271`. diff --git a/src/test/ui/type-alias-impl-trait/issue-63279.rs b/src/test/ui/type-alias-impl-trait/issue-63279.rs index 4c9c26a343c51..b97192a2aed4a 100644 --- a/src/test/ui/type-alias-impl-trait/issue-63279.rs +++ b/src/test/ui/type-alias-impl-trait/issue-63279.rs @@ -1,13 +1,11 @@ // compile-flags: -Zsave-analysis -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type Closure = impl FnOnce(); //~ ERROR: type mismatch resolving fn c() -> Closure { - || -> Closure { || () } //[min_tait]~ ERROR: not permitted here + || -> Closure { || () } } fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/issue-63279.stderr b/src/test/ui/type-alias-impl-trait/issue-63279.stderr new file mode 100644 index 0000000000000..63a83a60ff876 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-63279.stderr @@ -0,0 +1,12 @@ +error[E0271]: type mismatch resolving `<[closure@$DIR/issue-63279.rs:8:5: 8:28] as FnOnce<()>>::Output == ()` + --> $DIR/issue-63279.rs:5:16 + | +LL | type Closure = impl FnOnce(); + | ^^^^^^^^^^^^^ expected `()`, found opaque type + | + = note: expected unit type `()` + found opaque type `impl FnOnce<()>` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0271`. diff --git a/src/test/ui/type-alias-impl-trait/issue-63355.rs b/src/test/ui/type-alias-impl-trait/issue-63355.rs index 8762d189c7389..ff4fd5dcec73c 100644 --- a/src/test/ui/type-alias-impl-trait/issue-63355.rs +++ b/src/test/ui/type-alias-impl-trait/issue-63355.rs @@ -1,4 +1,4 @@ -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] #![feature(type_alias_impl_trait)] #![allow(incomplete_features)] @@ -28,7 +28,7 @@ impl Bar for () { } } -// FIXME(#86731): The below is illegal use of `min_type_alias_impl_trait` +// FIXME(#86731): The below is illegal use of `type_alias_impl_trait` // but the compiler doesn't report it, we should fix it. pub type FooImpl = impl Foo; pub type BarImpl = impl Bar; diff --git a/src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.rs b/src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.rs index b477fea41b72d..28f4a85c9f290 100644 --- a/src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.rs +++ b/src/test/ui/type-alias-impl-trait/issue-63677-type-alias-coherence.rs @@ -2,9 +2,7 @@ // Regression test for issue #63677 - ensure that // coherence checking can properly handle 'impl trait' // in type aliases -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] pub trait Trait {} pub struct S1(T); diff --git a/src/test/ui/type-alias-impl-trait/issue-65384.rs b/src/test/ui/type-alias-impl-trait/issue-65384.rs index 63666c497c669..273928c4d663d 100644 --- a/src/test/ui/type-alias-impl-trait/issue-65384.rs +++ b/src/test/ui/type-alias-impl-trait/issue-65384.rs @@ -1,4 +1,4 @@ -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] #![feature(type_alias_impl_trait)] #![allow(incomplete_features)] diff --git a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.full_tait.stderr index 6b4ea787ea8db..98d20d6ca0d56 100644 --- a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.full_tait.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.full_tait.stderr @@ -1,8 +1,9 @@ -error: fatal error triggered by #[rustc_error] - --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:17:1 +error[E0636]: the feature `type_alias_impl_trait` has already been declared + --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:5:32 | -LL | fn main() { - | ^^^^^^^^^ +LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] + | ^^^^^^^^^^^^^^^^^^^^^ error: aborting due to previous error +For more information about this error, try `rustc --explain E0636`. diff --git a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.min_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.min_tait.stderr deleted file mode 100644 index 6798ecb9489f8..0000000000000 --- a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.min_tait.stderr +++ /dev/null @@ -1,21 +0,0 @@ -error[E0658]: type alias impl trait is not permitted here - --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:19:13 - | -LL | take(|| {}); - | ^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0658]: type alias impl trait is not permitted here - --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:21:13 - | -LL | take(|| {}); - | ^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error: aborting due to 2 previous errors - -For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs index f181b3d06a670..0f0cd4e9227b4 100644 --- a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs +++ b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.rs @@ -1,8 +1,6 @@ // compile-flags: -Zsave-analysis -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait, rustc_attrs)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait, rustc_attrs)] type T = impl Sized; // The concrete type referred by impl-trait-type-alias(`T`) is guaranteed @@ -15,9 +13,7 @@ fn take(_: fn() -> T) {} #[rustc_error] fn main() { - //[full_tait]~^ ERROR fatal error triggered by #[rustc_error] + //~^ ERROR fatal error triggered by #[rustc_error] take(|| {}); - //[min_tait]~^ ERROR not permitted here take(|| {}); - //[min_tait]~^ ERROR not permitted here } diff --git a/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.stderr b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.stderr new file mode 100644 index 0000000000000..f3683f2bf9607 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.stderr @@ -0,0 +1,8 @@ +error: fatal error triggered by #[rustc_error] + --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:15:1 + | +LL | fn main() { + | ^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/issue-65918.rs b/src/test/ui/type-alias-impl-trait/issue-65918.rs index b15bff57a0d2d..af6d501092017 100644 --- a/src/test/ui/type-alias-impl-trait/issue-65918.rs +++ b/src/test/ui/type-alias-impl-trait/issue-65918.rs @@ -2,9 +2,7 @@ // build-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::marker::PhantomData; diff --git a/src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.rs b/src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.rs index 7fdaa7fb99bc2..d97270c3124d1 100644 --- a/src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.rs +++ b/src/test/ui/type-alias-impl-trait/issue-66580-closure-coherence.rs @@ -2,9 +2,7 @@ // Ensures that we don't try to determine whether a closure // is foreign when it's the underlying type of an opaque type // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type Closure = impl FnOnce(); diff --git a/src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.rs b/src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.rs index f47f0cdba88bb..cd219328a995a 100644 --- a/src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.rs +++ b/src/test/ui/type-alias-impl-trait/issue-67844-nested-opaque.rs @@ -3,9 +3,7 @@ // Ensures that we properly handle nested TAIT occurrences // with generic parameters -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait WithAssoc { type AssocType; diff --git a/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs b/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs index b31c79b8b2bb7..3b6decbe9c65e 100644 --- a/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs +++ b/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.rs @@ -2,9 +2,7 @@ // Ensures that we don't ICE when emitting an error // for a non-defining use when lifetimes are involved -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait Trait {} type Alias<'a, U> = impl Trait; fn f<'a>() -> Alias<'a, ()> {} diff --git a/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.stderr b/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.stderr new file mode 100644 index 0000000000000..c2fa54f50f881 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-68368-non-defining-use.stderr @@ -0,0 +1,14 @@ +error: non-defining opaque type use in defining scope + --> $DIR/issue-68368-non-defining-use.rs:8:15 + | +LL | fn f<'a>() -> Alias<'a, ()> {} + | ^^^^^^^^^^^^^ + | +note: used non-generic type `()` for generic parameter + --> $DIR/issue-68368-non-defining-use.rs:7:16 + | +LL | type Alias<'a, U> = impl Trait; + | ^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs index ae89cdd1c0879..6732902c09a50 100644 --- a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs +++ b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.rs @@ -1,8 +1,6 @@ // Regression test for #69136 -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait SomeTrait {} diff --git a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.stderr b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.stderr new file mode 100644 index 0000000000000..fe45e39d938f0 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-error.stderr @@ -0,0 +1,11 @@ +error[E0261]: use of undeclared lifetime name `'a` + --> $DIR/issue-69136-inner-lifetime-resolve-error.rs:17:65 + | +LL | type Return = impl WithAssoc; + | - ^^ undeclared lifetime + | | + | help: consider introducing lifetime `'a` here: `'a,` + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0261`. diff --git a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.rs b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.rs index 05d50f0f1bf54..a6916eda8b093 100644 --- a/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.rs +++ b/src/test/ui/type-alias-impl-trait/issue-69136-inner-lifetime-resolve-ok.rs @@ -2,9 +2,7 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait SomeTrait {} diff --git a/src/test/ui/type-alias-impl-trait/issue-69323.rs b/src/test/ui/type-alias-impl-trait/issue-69323.rs index 9c4b4433f9fad..a9bd6daf2acf7 100644 --- a/src/test/ui/type-alias-impl-trait/issue-69323.rs +++ b/src/test/ui/type-alias-impl-trait/issue-69323.rs @@ -1,8 +1,6 @@ // check-pass -// revisions: min full -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::iter::{once, Chain}; diff --git a/src/test/ui/type-alias-impl-trait/issue-70121.rs b/src/test/ui/type-alias-impl-trait/issue-70121.rs index 1eb33c805bb15..dff0d89d465dd 100644 --- a/src/test/ui/type-alias-impl-trait/issue-70121.rs +++ b/src/test/ui/type-alias-impl-trait/issue-70121.rs @@ -1,8 +1,6 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] pub type Successors<'a> = impl Iterator; diff --git a/src/test/ui/type-alias-impl-trait/issue-74244.rs b/src/test/ui/type-alias-impl-trait/issue-74244.rs index d9845a9b62ce8..bb4104b3d2519 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74244.rs +++ b/src/test/ui/type-alias-impl-trait/issue-74244.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait Allocator { type Buffer; diff --git a/src/test/ui/type-alias-impl-trait/issue-74244.stderr b/src/test/ui/type-alias-impl-trait/issue-74244.stderr new file mode 100644 index 0000000000000..ff6bacd277e1e --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-74244.stderr @@ -0,0 +1,9 @@ +error[E0207]: the type parameter `T` is not constrained by the impl trait, self type, or predicates + --> $DIR/issue-74244.rs:9:6 + | +LL | impl Allocator for DefaultAllocator { + | ^ unconstrained type parameter + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/issue-74761-2.rs b/src/test/ui/type-alias-impl-trait/issue-74761-2.rs index 8e7ff45a72dff..4345b5d886ee2 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74761-2.rs +++ b/src/test/ui/type-alias-impl-trait/issue-74761-2.rs @@ -9,8 +9,6 @@ impl<'a, 'b> A for () { //~^ ERROR the lifetime parameter `'a` is not constrained //~| ERROR the lifetime parameter `'b` is not constrained type B = impl core::fmt::Debug; - //~^ ERROR is unstable - fn f(&self) -> Self::B {} } diff --git a/src/test/ui/type-alias-impl-trait/issue-74761-2.stderr b/src/test/ui/type-alias-impl-trait/issue-74761-2.stderr index 505e6436f5bdf..7a321458b0bf1 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74761-2.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-74761-2.stderr @@ -1,12 +1,3 @@ -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/issue-74761-2.rs:11:14 - | -LL | type B = impl core::fmt::Debug; - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable - error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates --> $DIR/issue-74761-2.rs:8:6 | @@ -19,7 +10,6 @@ error[E0207]: the lifetime parameter `'b` is not constrained by the impl trait, LL | impl<'a, 'b> A for () { | ^^ unconstrained lifetime parameter -error: aborting due to 3 previous errors +error: aborting due to 2 previous errors -Some errors have detailed explanations: E0207, E0658. -For more information about an error, try `rustc --explain E0207`. +For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/issue-74761.rs b/src/test/ui/type-alias-impl-trait/issue-74761.rs index 4f0db7aedc785..d26ca5c3ead38 100644 --- a/src/test/ui/type-alias-impl-trait/issue-74761.rs +++ b/src/test/ui/type-alias-impl-trait/issue-74761.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] pub trait A { type B; diff --git a/src/test/ui/type-alias-impl-trait/issue-74761.stderr b/src/test/ui/type-alias-impl-trait/issue-74761.stderr new file mode 100644 index 0000000000000..1d016fe070f9c --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-74761.stderr @@ -0,0 +1,15 @@ +error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates + --> $DIR/issue-74761.rs:7:6 + | +LL | impl<'a, 'b> A for () { + | ^^ unconstrained lifetime parameter + +error[E0207]: the lifetime parameter `'b` is not constrained by the impl trait, self type, or predicates + --> $DIR/issue-74761.rs:7:10 + | +LL | impl<'a, 'b> A for () { + | ^^ unconstrained lifetime parameter + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs b/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs index 527fbd4bb2f4e..fb56cc54d634b 100644 --- a/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs +++ b/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.rs @@ -1,9 +1,7 @@ // Regression test for issue #76202 // Tests that we don't ICE when we have a trait impl on a TAIT. -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait Dummy {} impl Dummy for () {} diff --git a/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.stderr b/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.stderr new file mode 100644 index 0000000000000..8689ee53660f6 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-76202-trait-impl-for-tait.stderr @@ -0,0 +1,14 @@ +error: cannot implement trait on type alias impl trait + --> $DIR/issue-76202-trait-impl-for-tait.rs:16:1 + | +LL | impl Test for F { + | ^^^^^^^^^^^^^^^ + | +note: type alias impl trait defined here + --> $DIR/issue-76202-trait-impl-for-tait.rs:9:10 + | +LL | type F = impl Dummy; + | ^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/issue-78450.rs b/src/test/ui/type-alias-impl-trait/issue-78450.rs index bcc16a5b2aba8..fccbfb74fa2ce 100644 --- a/src/test/ui/type-alias-impl-trait/issue-78450.rs +++ b/src/test/ui/type-alias-impl-trait/issue-78450.rs @@ -1,6 +1,5 @@ // check-pass -#![feature(min_type_alias_impl_trait)] #![feature(type_alias_impl_trait)] pub trait AssociatedImpl { diff --git a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-pass.rs b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-pass.rs index ecad910f7d542..f412b2d0e7db7 100644 --- a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-pass.rs +++ b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn-pass.rs @@ -1,5 +1,5 @@ // check-pass -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] type X = impl ToString; diff --git a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs index 67351e2015993..371dff475d1d7 100644 --- a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs +++ b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn.rs @@ -2,7 +2,7 @@ // This test used to cause unsoundness, since one of the two possible // resolutions was chosen at random instead of erroring due to conflicts. -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] type X = impl Into<&'static A>; //~^ ERROR the trait bound `&'static B: From<&A>` is not satisfied diff --git a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn2.rs b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn2.rs index 11756017ad846..06e1990fd7f45 100644 --- a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn2.rs +++ b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn2.rs @@ -2,7 +2,7 @@ // This test used to cause unsoundness, since one of the two possible // resolutions was chosen at random instead of erroring due to conflicts. -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] type X = impl ToString; diff --git a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn3.rs b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn3.rs index 5f25365666c7f..bcd9aeff6b451 100644 --- a/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn3.rs +++ b/src/test/ui/type-alias-impl-trait/multiple-def-uses-in-one-fn3.rs @@ -2,7 +2,7 @@ // This test used to cause unsoundness, since one of the two possible // resolutions was chosen at random instead of erroring due to conflicts. -#![feature(min_type_alias_impl_trait)] +#![feature(type_alias_impl_trait)] type X = impl ToString; diff --git a/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs b/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs index 3c059fcf7d428..6282264d8fee5 100644 --- a/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs +++ b/src/test/ui/type-alias-impl-trait/nested_type_alias_impl_trait.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] // build-pass (FIXME(62277): could be check-pass?) mod my_mod { use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.rs b/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.rs index 1672c49c604af..8787c023eb0c7 100644 --- a/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.rs +++ b/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.stderr b/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.stderr new file mode 100644 index 0000000000000..b438f84451649 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/never_reveal_concrete_type.stderr @@ -0,0 +1,24 @@ +error[E0308]: mismatched types + --> $DIR/never_reveal_concrete_type.rs:13:27 + | +LL | type NoReveal = impl std::fmt::Debug; + | -------------------- the found opaque type +... +LL | let _: &'static str = x; + | ------------ ^ expected `&str`, found opaque type + | | + | expected due to this + | + = note: expected reference `&'static str` + found opaque type `impl Debug` + +error[E0605]: non-primitive cast: `impl Debug` as `&'static str` + --> $DIR/never_reveal_concrete_type.rs:14:13 + | +LL | let _ = x as &'static str; + | ^^^^^^^^^^^^^^^^^ an `as` expression can only be used to convert between primitive types or to coerce to a specific trait object + +error: aborting due to 2 previous errors + +Some errors have detailed explanations: E0308, E0605. +For more information about an error, try `rustc --explain E0308`. diff --git a/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.rs b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.rs index 520954b50ab55..1197c7bc58ece 100644 --- a/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.rs +++ b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.rs @@ -1,9 +1,7 @@ // Issue 52985: user code provides no use case that allows a type alias `impl Trait` // We now emit a 'could not find defining uses' error -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type Foo = impl Copy; //~ could not find defining uses diff --git a/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.stderr b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.stderr new file mode 100644 index 0000000000000..61025e846921e --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.stderr @@ -0,0 +1,8 @@ +error: could not find defining uses + --> $DIR/no_inferrable_concrete_type.rs:6:12 + | +LL | type Foo = impl Copy; + | ^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.rs b/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.rs index 5ab793c0119f5..61153b1e17141 100644 --- a/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.rs +++ b/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.stderr b/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.stderr new file mode 100644 index 0000000000000..67752acb8c9af --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/no_revealing_outside_defining_module.stderr @@ -0,0 +1,31 @@ +error[E0308]: mismatched types + --> $DIR/no_revealing_outside_defining_module.rs:15:19 + | +LL | pub type Boo = impl ::std::fmt::Debug; + | ---------------------- the found opaque type +... +LL | let _: &str = bomp(); + | ---- ^^^^^^ expected `&str`, found opaque type + | | + | expected due to this + | + = note: expected reference `&str` + found opaque type `impl Debug` + +error[E0308]: mismatched types + --> $DIR/no_revealing_outside_defining_module.rs:19:5 + | +LL | pub type Boo = impl ::std::fmt::Debug; + | ---------------------- the expected opaque type +... +LL | fn bomp() -> boo::Boo { + | -------- expected `impl Debug` because of return type +LL | "" + | ^^ expected opaque type, found `&str` + | + = note: expected opaque type `impl Debug` + found reference `&'static str` + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/type-alias-impl-trait/not_a_defining_use.rs b/src/test/ui/type-alias-impl-trait/not_a_defining_use.rs index 57ccb58acc939..f29b980dfd0e5 100644 --- a/src/test/ui/type-alias-impl-trait/not_a_defining_use.rs +++ b/src/test/ui/type-alias-impl-trait/not_a_defining_use.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::fmt::Debug; diff --git a/src/test/ui/type-alias-impl-trait/not_a_defining_use.stderr b/src/test/ui/type-alias-impl-trait/not_a_defining_use.stderr new file mode 100644 index 0000000000000..2fa236b373a40 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/not_a_defining_use.stderr @@ -0,0 +1,14 @@ +error: non-defining opaque type use in defining scope + --> $DIR/not_a_defining_use.rs:9:27 + | +LL | fn two(t: T) -> Two { + | ^^^^^^^^^^^ + | +note: used non-generic type `u32` for generic parameter + --> $DIR/not_a_defining_use.rs:7:13 + | +LL | type Two = impl Debug; + | ^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/not_well_formed.rs b/src/test/ui/type-alias-impl-trait/not_well_formed.rs index c3e9895524e17..fbb7a4d58e4ba 100644 --- a/src/test/ui/type-alias-impl-trait/not_well_formed.rs +++ b/src/test/ui/type-alias-impl-trait/not_well_formed.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/not_well_formed.stderr b/src/test/ui/type-alias-impl-trait/not_well_formed.stderr new file mode 100644 index 0000000000000..91c1d031e4e5e --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/not_well_formed.stderr @@ -0,0 +1,9 @@ +error[E0220]: associated type `Assoc` not found for `V` + --> $DIR/not_well_formed.rs:9:29 + | +LL | type Foo = impl Trait; + | ^^^^^ associated type `Assoc` not found + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0220`. diff --git a/src/test/ui/type-alias-impl-trait/structural-match-no-leak.rs b/src/test/ui/type-alias-impl-trait/structural-match-no-leak.rs index 7a067c6f2d75d..51a7b6454c35e 100644 --- a/src/test/ui/type-alias-impl-trait/structural-match-no-leak.rs +++ b/src/test/ui/type-alias-impl-trait/structural-match-no-leak.rs @@ -1,7 +1,5 @@ #![feature(const_impl_trait)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type Bar = impl Send; diff --git a/src/test/ui/type-alias-impl-trait/structural-match-no-leak.stderr b/src/test/ui/type-alias-impl-trait/structural-match-no-leak.stderr new file mode 100644 index 0000000000000..7e41b374452a3 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/structural-match-no-leak.stderr @@ -0,0 +1,8 @@ +error: `impl Send` cannot be used in patterns + --> $DIR/structural-match-no-leak.rs:15:9 + | +LL | LEAK_FREE => (), + | ^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/structural-match.rs b/src/test/ui/type-alias-impl-trait/structural-match.rs index c30cd5f5958e6..73558d39ad561 100644 --- a/src/test/ui/type-alias-impl-trait/structural-match.rs +++ b/src/test/ui/type-alias-impl-trait/structural-match.rs @@ -1,7 +1,5 @@ #![feature(const_impl_trait)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type Foo = impl Send; diff --git a/src/test/ui/type-alias-impl-trait/structural-match.stderr b/src/test/ui/type-alias-impl-trait/structural-match.stderr new file mode 100644 index 0000000000000..b43f2148dea5e --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/structural-match.stderr @@ -0,0 +1,8 @@ +error: `impl Send` cannot be used in patterns + --> $DIR/structural-match.rs:16:9 + | +LL | VALUE => (), + | ^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.rs index 4432807916eba..1a8113848f923 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] // Ensures that `const` items can constrain an opaque `impl Trait`. diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.stderr new file mode 100644 index 0000000000000..e2567e87ac676 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-const.stderr @@ -0,0 +1,21 @@ +error[E0308]: mismatched types + --> $DIR/type-alias-impl-trait-const.rs:10:19 + | +LL | pub type Foo = impl Debug; + | ---------- the expected opaque type +... +LL | const _FOO: Foo = 5; + | ^ expected opaque type, found integer + | + = note: expected opaque type `impl Debug` + found type `{integer}` + +error: could not find defining uses + --> $DIR/type-alias-impl-trait-const.rs:7:16 + | +LL | pub type Foo = impl Debug; + | ^^^^^^^^^^ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0308`. diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs index e3debedbde307..07c891f0638c7 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-fns.rs @@ -1,8 +1,6 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] // Regression test for issue #61863 diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.rs index b0f6a5a2db3e7..c5e8068e5c8e9 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-sized.rs @@ -1,8 +1,6 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type A = impl Sized; fn f1() -> A { diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.rs index 5f228ec03f739..86c9d48214383 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-tuple.rs @@ -1,8 +1,6 @@ // check-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] #![allow(dead_code)] pub trait MyTrait {} diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.rs index 63bbbaa707c98..efbf4f1e351f7 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.rs @@ -1,8 +1,6 @@ // regression test for #74018 -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] trait Trait { type Associated; diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.stderr new file mode 100644 index 0000000000000..8cdce2f8e81ca --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-unconstrained-lifetime.stderr @@ -0,0 +1,9 @@ +error[E0207]: the lifetime parameter `'a` is not constrained by the impl trait, self type, or predicates + --> $DIR/type-alias-impl-trait-unconstrained-lifetime.rs:10:6 + | +LL | impl<'a, I: Iterator> Trait for (i32, I) { + | ^^ unconstrained lifetime parameter + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0207`. diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.rs index 2b3694d50100c..c009952eab750 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type Foo = impl Fn() -> Foo; //~^ ERROR: could not find defining uses diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.stderr new file mode 100644 index 0000000000000..726f4ea6e00f7 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error.stderr @@ -0,0 +1,8 @@ +error: could not find defining uses + --> $DIR/type-alias-impl-trait-with-cycle-error.rs:3:12 + | +LL | type Foo = impl Fn() -> Foo; + | ^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.rs index 2d7e213970727..f3898bca64b9b 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] pub trait Bar { type Item; diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.stderr new file mode 100644 index 0000000000000..3947cc4d27055 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-cycle-error2.stderr @@ -0,0 +1,8 @@ +error: could not find defining uses + --> $DIR/type-alias-impl-trait-with-cycle-error2.rs:7:12 + | +LL | type Foo = impl Bar; + | ^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to previous error + diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.rs index 469f3875a8d40..8ca279eec921b 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] type Foo = impl 'static; //~^ ERROR: at least one trait must be specified diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.stderr b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.stderr new file mode 100644 index 0000000000000..3f7acd3383010 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-with-no-traits.stderr @@ -0,0 +1,14 @@ +error: at least one trait must be specified + --> $DIR/type-alias-impl-trait-with-no-traits.rs:3:12 + | +LL | type Foo = impl 'static; + | ^^^^^^^^^^^^ + +error: at least one trait must be specified + --> $DIR/type-alias-impl-trait-with-no-traits.rs:10:13 + | +LL | fn bar() -> impl 'static { + | ^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.rs index 934acb0d9afa0..80192d19af98b 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait.rs @@ -3,9 +3,7 @@ #![allow(dead_code)] #![allow(unused_assignments)] #![allow(unused_variables)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() { assert_eq!(foo().to_string(), "foo"); diff --git a/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.rs b/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.rs index 8bdac325cd708..fd954801dc047 100644 --- a/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.rs +++ b/src/test/ui/type-alias-impl-trait/type-alias-nested-impl-trait.rs @@ -1,8 +1,6 @@ // run-pass -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] use std::iter::{once, Chain}; diff --git a/src/test/ui/type-alias-impl-trait/unused_generic_param.rs b/src/test/ui/type-alias-impl-trait/unused_generic_param.rs index 8c946238362c2..04a5c58cd36e9 100644 --- a/src/test/ui/type-alias-impl-trait/unused_generic_param.rs +++ b/src/test/ui/type-alias-impl-trait/unused_generic_param.rs @@ -1,6 +1,4 @@ -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] fn main() {} diff --git a/src/test/ui/type-alias-impl-trait/unused_generic_param.stderr b/src/test/ui/type-alias-impl-trait/unused_generic_param.stderr new file mode 100644 index 0000000000000..4e11854b07189 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/unused_generic_param.stderr @@ -0,0 +1,14 @@ +error: at least one trait must be specified + --> $DIR/unused_generic_param.rs:5:28 + | +LL | type PartiallyDefined = impl 'static; + | ^^^^^^^^^^^^ + +error: at least one trait must be specified + --> $DIR/unused_generic_param.rs:12:29 + | +LL | type PartiallyDefined2 = impl 'static; + | ^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + diff --git a/src/test/ui/typeck/typeck_type_placeholder_item.rs b/src/test/ui/typeck/typeck_type_placeholder_item.rs index 3d30ab32baced..a3b75543510ae 100644 --- a/src/test/ui/typeck/typeck_type_placeholder_item.rs +++ b/src/test/ui/typeck/typeck_type_placeholder_item.rs @@ -1,8 +1,6 @@ // Needed for `type Y = impl Trait<_>` and `type B = _;` #![feature(associated_type_defaults)] -// revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![feature(type_alias_impl_trait)] // This test checks that it is not possible to enable global type // inference by using the `_` type placeholder. diff --git a/src/test/ui/typeck/typeck_type_placeholder_item.stderr b/src/test/ui/typeck/typeck_type_placeholder_item.stderr new file mode 100644 index 0000000000000..4827439bfbfe4 --- /dev/null +++ b/src/test/ui/typeck/typeck_type_placeholder_item.stderr @@ -0,0 +1,638 @@ +error: expected identifier, found reserved identifier `_` + --> $DIR/typeck_type_placeholder_item.rs:154:18 + | +LL | struct BadStruct<_>(_); + | ^ expected identifier, found reserved identifier + +error: expected identifier, found reserved identifier `_` + --> $DIR/typeck_type_placeholder_item.rs:157:16 + | +LL | trait BadTrait<_> {} + | ^ expected identifier, found reserved identifier + +error: expected identifier, found reserved identifier `_` + --> $DIR/typeck_type_placeholder_item.rs:167:19 + | +LL | struct BadStruct1<_, _>(_); + | ^ expected identifier, found reserved identifier + +error: expected identifier, found reserved identifier `_` + --> $DIR/typeck_type_placeholder_item.rs:167:22 + | +LL | struct BadStruct1<_, _>(_); + | ^ expected identifier, found reserved identifier + +error: expected identifier, found reserved identifier `_` + --> $DIR/typeck_type_placeholder_item.rs:172:19 + | +LL | struct BadStruct2<_, T>(_, T); + | ^ expected identifier, found reserved identifier + +error: associated constant in `impl` without body + --> $DIR/typeck_type_placeholder_item.rs:205:5 + | +LL | const C: _; + | ^^^^^^^^^^- + | | + | help: provide a definition for the constant: `= ;` + +error[E0403]: the name `_` is already used for a generic parameter in this item's generic parameters + --> $DIR/typeck_type_placeholder_item.rs:167:22 + | +LL | struct BadStruct1<_, _>(_); + | - ^ already used + | | + | first use of `_` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:7:14 + | +LL | fn test() -> _ { 5 } + | ^ + | | + | not allowed in type signatures + | help: replace with the correct return type: `i32` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:10:16 + | +LL | fn test2() -> (_, _) { (5, 5) } + | -^--^- + | || | + | || not allowed in type signatures + | |not allowed in type signatures + | help: replace with the correct return type: `(i32, i32)` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables + --> $DIR/typeck_type_placeholder_item.rs:13:15 + | +LL | static TEST3: _ = "test"; + | ^ + | | + | not allowed in type signatures + | help: replace with the correct type: `&str` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables + --> $DIR/typeck_type_placeholder_item.rs:16:15 + | +LL | static TEST4: _ = 145; + | ^ + | | + | not allowed in type signatures + | help: replace with the correct type: `i32` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables + --> $DIR/typeck_type_placeholder_item.rs:19:15 + | +LL | static TEST5: (_, _) = (1, 2); + | ^^^^^^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:22:13 + | +LL | fn test6(_: _) { } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn test6(_: T) { } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:25:18 + | +LL | fn test6_b(_: _, _: T) { } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn test6_b(_: U, _: T) { } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:28:30 + | +LL | fn test6_c(_: _, _: (T, K, L, A, B)) { } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn test6_c(_: U, _: (T, K, L, A, B)) { } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:31:13 + | +LL | fn test7(x: _) { let _x: usize = x; } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn test7(x: T) { let _x: usize = x; } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:34:22 + | +LL | fn test8(_f: fn() -> _) { } + | ^ + | | + | not allowed in type signatures + | help: use type parameters instead: `T` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:34:22 + | +LL | fn test8(_f: fn() -> _) { } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn test8(_f: fn() -> T) { } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:48:26 + | +LL | fn test11(x: &usize) -> &_ { + | -^ + | || + | |not allowed in type signatures + | help: replace with the correct return type: `&'static &'static usize` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:53:52 + | +LL | unsafe fn test12(x: *const usize) -> *const *const _ { + | --------------^ + | | | + | | not allowed in type signatures + | help: replace with the correct return type: `*const *const usize` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs + --> $DIR/typeck_type_placeholder_item.rs:67:8 + | +LL | a: _, + | ^ not allowed in type signatures +LL | +LL | b: (_, _), + | ^ ^ not allowed in type signatures + | | + | not allowed in type signatures + | +help: use type parameters instead + | +LL | struct Test10 { +LL | a: T, +LL | +LL | b: (T, T), + | + +error: missing type for `static` item + --> $DIR/typeck_type_placeholder_item.rs:73:12 + | +LL | static A = 42; + | ^ help: provide a type for the static variable: `A: i32` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables + --> $DIR/typeck_type_placeholder_item.rs:75:15 + | +LL | static B: _ = 42; + | ^ + | | + | not allowed in type signatures + | help: replace with the correct type: `i32` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables + --> $DIR/typeck_type_placeholder_item.rs:77:15 + | +LL | static C: Option<_> = Some(42); + | ^^^^^^^^^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:79:21 + | +LL | fn fn_test() -> _ { 5 } + | ^ + | | + | not allowed in type signatures + | help: replace with the correct return type: `i32` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:82:23 + | +LL | fn fn_test2() -> (_, _) { (5, 5) } + | -^--^- + | || | + | || not allowed in type signatures + | |not allowed in type signatures + | help: replace with the correct return type: `(i32, i32)` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables + --> $DIR/typeck_type_placeholder_item.rs:85:22 + | +LL | static FN_TEST3: _ = "test"; + | ^ + | | + | not allowed in type signatures + | help: replace with the correct type: `&str` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables + --> $DIR/typeck_type_placeholder_item.rs:88:22 + | +LL | static FN_TEST4: _ = 145; + | ^ + | | + | not allowed in type signatures + | help: replace with the correct type: `i32` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for static variables + --> $DIR/typeck_type_placeholder_item.rs:91:22 + | +LL | static FN_TEST5: (_, _) = (1, 2); + | ^^^^^^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:94:20 + | +LL | fn fn_test6(_: _) { } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn fn_test6(_: T) { } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:97:20 + | +LL | fn fn_test7(x: _) { let _x: usize = x; } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn fn_test7(x: T) { let _x: usize = x; } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:100:29 + | +LL | fn fn_test8(_f: fn() -> _) { } + | ^ + | | + | not allowed in type signatures + | help: use type parameters instead: `T` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:100:29 + | +LL | fn fn_test8(_f: fn() -> _) { } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn fn_test8(_f: fn() -> T) { } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs + --> $DIR/typeck_type_placeholder_item.rs:123:12 + | +LL | a: _, + | ^ not allowed in type signatures +LL | +LL | b: (_, _), + | ^ ^ not allowed in type signatures + | | + | not allowed in type signatures + | +help: use type parameters instead + | +LL | struct FnTest10 { +LL | a: T, +LL | +LL | b: (T, T), + | + +error[E0282]: type annotations needed + --> $DIR/typeck_type_placeholder_item.rs:128:18 + | +LL | fn fn_test11(_: _) -> (_, _) { panic!() } + | ^ cannot infer type + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:128:28 + | +LL | fn fn_test11(_: _) -> (_, _) { panic!() } + | ^ ^ not allowed in type signatures + | | + | not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:132:30 + | +LL | fn fn_test12(x: i32) -> (_, _) { (x, x) } + | -^--^- + | || | + | || not allowed in type signatures + | |not allowed in type signatures + | help: replace with the correct return type: `(i32, i32)` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:135:33 + | +LL | fn fn_test13(x: _) -> (i32, _) { (x, x) } + | ------^- + | | | + | | not allowed in type signatures + | help: replace with the correct return type: `(i32, i32)` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs + --> $DIR/typeck_type_placeholder_item.rs:154:21 + | +LL | struct BadStruct<_>(_); + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | struct BadStruct(T); + | ^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for implementations + --> $DIR/typeck_type_placeholder_item.rs:159:15 + | +LL | impl BadTrait<_> for BadStruct<_> {} + | ^ ^ not allowed in type signatures + | | + | not allowed in type signatures + | +help: use type parameters instead + | +LL | impl BadTrait for BadStruct {} + | ^^^ ^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for opaque types + --> $DIR/typeck_type_placeholder_item.rs:162:34 + | +LL | fn impl_trait() -> impl BadTrait<_> { + | ^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs + --> $DIR/typeck_type_placeholder_item.rs:167:25 + | +LL | struct BadStruct1<_, _>(_); + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | struct BadStruct1(T); + | ^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for structs + --> $DIR/typeck_type_placeholder_item.rs:172:25 + | +LL | struct BadStruct2<_, T>(_, T); + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | struct BadStruct2(U, T); + | ^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for type aliases + --> $DIR/typeck_type_placeholder_item.rs:176:14 + | +LL | type X = Box<_>; + | ^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for opaque types + --> $DIR/typeck_type_placeholder_item.rs:182:21 + | +LL | type Y = impl Trait<_>; + | ^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:216:31 + | +LL | fn value() -> Option<&'static _> { + | ----------------^- + | | | + | | not allowed in type signatures + | help: replace with the correct return type: `Option<&'static u8>` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants + --> $DIR/typeck_type_placeholder_item.rs:221:10 + | +LL | const _: Option<_> = map(value); + | ^^^^^^^^^ + | | + | not allowed in type signatures + | help: replace with the correct type: `Option` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:140:31 + | +LL | fn method_test1(&self, x: _); + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn method_test1(&self, x: T); + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:142:31 + | +LL | fn method_test2(&self, x: _) -> _; + | ^ ^ not allowed in type signatures + | | + | not allowed in type signatures + | +help: use type parameters instead + | +LL | fn method_test2(&self, x: T) -> T; + | ^^^ ^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:144:31 + | +LL | fn method_test3(&self) -> _; + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn method_test3(&self) -> T; + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:146:26 + | +LL | fn assoc_fn_test1(x: _); + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn assoc_fn_test1(x: T); + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:148:26 + | +LL | fn assoc_fn_test2(x: _) -> _; + | ^ ^ not allowed in type signatures + | | + | not allowed in type signatures + | +help: use type parameters instead + | +LL | fn assoc_fn_test2(x: T) -> T; + | ^^^ ^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:150:28 + | +LL | fn assoc_fn_test3() -> _; + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn assoc_fn_test3() -> T; + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types + --> $DIR/typeck_type_placeholder_item.rs:190:14 + | +LL | type B = _; + | ^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants + --> $DIR/typeck_type_placeholder_item.rs:192:14 + | +LL | const C: _; + | ^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants + --> $DIR/typeck_type_placeholder_item.rs:194:14 + | +LL | const D: _ = 42; + | ^ + | | + | not allowed in type signatures + | help: replace with the correct type: `i32` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types + --> $DIR/typeck_type_placeholder_item.rs:197:26 + | +LL | type F: std::ops::Fn(_); + | ^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:41:24 + | +LL | fn test9(&self) -> _ { () } + | ^ + | | + | not allowed in type signatures + | help: replace with the correct return type: `()` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:44:27 + | +LL | fn test10(&self, _x : _) { } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn test10(&self, _x : T) { } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:59:24 + | +LL | fn clone(&self) -> _ { Test9 } + | ^ + | | + | not allowed in type signatures + | help: replace with the correct return type: `Test9` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:62:37 + | +LL | fn clone_from(&mut self, other: _) { *self = Test9; } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn clone_from(&mut self, other: T) { *self = Test9; } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:107:31 + | +LL | fn fn_test9(&self) -> _ { () } + | ^ + | | + | not allowed in type signatures + | help: replace with the correct return type: `()` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:110:34 + | +LL | fn fn_test10(&self, _x : _) { } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn fn_test10(&self, _x : T) { } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for return types + --> $DIR/typeck_type_placeholder_item.rs:115:28 + | +LL | fn clone(&self) -> _ { FnTest9 } + | ^ + | | + | not allowed in type signatures + | help: replace with the correct return type: `FnTest9` + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for functions + --> $DIR/typeck_type_placeholder_item.rs:118:41 + | +LL | fn clone_from(&mut self, other: _) { *self = FnTest9; } + | ^ not allowed in type signatures + | +help: use type parameters instead + | +LL | fn clone_from(&mut self, other: T) { *self = FnTest9; } + | ^^^ ^ + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types + --> $DIR/typeck_type_placeholder_item.rs:201:14 + | +LL | type A = _; + | ^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for associated types + --> $DIR/typeck_type_placeholder_item.rs:203:14 + | +LL | type B = _; + | ^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants + --> $DIR/typeck_type_placeholder_item.rs:205:14 + | +LL | const C: _; + | ^ not allowed in type signatures + +error[E0121]: the type placeholder `_` is not allowed within types on item signatures for constants + --> $DIR/typeck_type_placeholder_item.rs:208:14 + | +LL | const D: _ = 42; + | ^ + | | + | not allowed in type signatures + | help: replace with the correct type: `i32` + +error: aborting due to 69 previous errors + +Some errors have detailed explanations: E0121, E0282, E0403. +For more information about an error, try `rustc --explain E0121`. From 66dbeb5f237aa867a99a41656fad39b646f7651f Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Mon, 26 Jul 2021 20:32:55 -0300 Subject: [PATCH 33/34] existential_type was removed in favor of type_alias_impl_trait --- compiler/rustc_feature/src/removed.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/rustc_feature/src/removed.rs b/compiler/rustc_feature/src/removed.rs index 29f4423ec85ac..1e053a56ff48f 100644 --- a/compiler/rustc_feature/src/removed.rs +++ b/compiler/rustc_feature/src/removed.rs @@ -111,7 +111,7 @@ declare_features! ( Some("subsumed by `.await` syntax")), /// Allows defining `existential type`s. (removed, existential_type, "1.38.0", Some(63063), None, - Some("removed in favor of `#![feature(min_type_alias_impl_trait)]`")), + Some("removed in favor of `#![feature(type_alias_impl_trait)]`")), /// Allows using the macros: /// + `__diagnostic_used` /// + `__register_diagnostic` From 9629d798ca289934c0c0b622124c642aaf53e018 Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Mon, 26 Jul 2021 20:38:38 -0300 Subject: [PATCH 34/34] Remove min_type_alias_impl_trait feature --- compiler/rustc_feature/src/active.rs | 3 - compiler/rustc_feature/src/removed.rs | 4 + .../feature-gate-min_type_alias_impl_trait.rs | 50 -------- ...ture-gate-min_type_alias_impl_trait.stderr | 118 ------------------ 4 files changed, 4 insertions(+), 171 deletions(-) delete mode 100644 src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.rs delete mode 100644 src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.stderr diff --git a/compiler/rustc_feature/src/active.rs b/compiler/rustc_feature/src/active.rs index 27c08586f4fc8..ac4ecace042c2 100644 --- a/compiler/rustc_feature/src/active.rs +++ b/compiler/rustc_feature/src/active.rs @@ -629,9 +629,6 @@ declare_features! ( /// Allows macro attributes to observe output of `#[derive]`. (active, macro_attributes_in_derive_output, "1.51.0", Some(81119), None), - /// Allows the use of type alias impl trait in function return positions - (active, min_type_alias_impl_trait, "1.52.0", Some(63063), None), - /// Allows associated types in inherent impls. (incomplete, inherent_associated_types, "1.52.0", Some(8995), None), diff --git a/compiler/rustc_feature/src/removed.rs b/compiler/rustc_feature/src/removed.rs index 1e053a56ff48f..0aa7e82c20492 100644 --- a/compiler/rustc_feature/src/removed.rs +++ b/compiler/rustc_feature/src/removed.rs @@ -152,6 +152,10 @@ declare_features! ( (removed, impl_trait_in_bindings, "1.55.0", Some(63065), None, Some("the implementation was not maintainable, the feature may get reintroduced once the current refactorings are done")), + /// Allows the use of type alias impl trait in function return positions + (removed, min_type_alias_impl_trait, "1.55.0", Some(63063), None, + Some("removed in favor of full type_alias_impl_trait")), + // ------------------------------------------------------------------------- // feature-group-end: removed features // ------------------------------------------------------------------------- diff --git a/src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.rs b/src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.rs deleted file mode 100644 index ffe297a5a6a2f..0000000000000 --- a/src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.rs +++ /dev/null @@ -1,50 +0,0 @@ -// ignore-compare-mode-chalk -use std::fmt::Debug; - -type Foo = impl Debug; //~ ERROR `impl Trait` in type aliases is unstable - -trait Bar { - type Baa: Debug; - fn define() -> Self::Baa; -} - -impl Bar for () { - type Baa = impl Debug; //~ ERROR `impl Trait` in type aliases is unstable - fn define() -> Self::Baa { - 0 - } -} - -fn define() -> Foo { - 0 -} - -trait TraitWithDefault { - type Assoc = impl Debug; - //~^ ERROR associated type defaults are unstable - //~| ERROR `impl Trait` not allowed outside of function - //~| ERROR `impl Trait` in type aliases is unstable -} - -type NestedFree = (Vec, impl Debug, impl Iterator); -//~^ ERROR `impl Trait` in type aliases is unstable -//~| ERROR `impl Trait` in type aliases is unstable -//~| ERROR `impl Trait` in type aliases is unstable -//~| ERROR `impl Trait` in type aliases is unstable - -fn define_multiple() -> NestedFree { - (vec![true], 0u8, 0i32..1) -} - -impl Bar for u8 { - type Baa = (Vec, impl Debug, impl Iterator + Debug); - //~^ ERROR `impl Trait` in type aliases is unstable - //~| ERROR `impl Trait` in type aliases is unstable - //~| ERROR `impl Trait` in type aliases is unstable - //~| ERROR `impl Trait` in type aliases is unstable - fn define() -> Self::Baa { - (vec![true], 0u8, 0i32..1) - } -} - -fn main() {} diff --git a/src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.stderr b/src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.stderr deleted file mode 100644 index c87f1f4f00de6..0000000000000 --- a/src/test/ui/feature-gates/feature-gate-min_type_alias_impl_trait.stderr +++ /dev/null @@ -1,118 +0,0 @@ -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:4:12 - | -LL | type Foo = impl Debug; - | ^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:12:16 - | -LL | type Baa = impl Debug; - | ^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0658]: associated type defaults are unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:23:5 - | -LL | type Assoc = impl Debug; - | ^^^^^^^^^^^^^^^^^^^^^^^^ - | - = note: see issue #29661 for more information - = help: add `#![feature(associated_type_defaults)]` to the crate attributes to enable - -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:23:18 - | -LL | type Assoc = impl Debug; - | ^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:29:24 - | -LL | type NestedFree = (Vec, impl Debug, impl Iterator); - | ^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:29:37 - | -LL | type NestedFree = (Vec, impl Debug, impl Iterator); - | ^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:29:49 - | -LL | type NestedFree = (Vec, impl Debug, impl Iterator); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:29:70 - | -LL | type NestedFree = (Vec, impl Debug, impl Iterator); - | ^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:40:21 - | -LL | type Baa = (Vec, impl Debug, impl Iterator + Debug); - | ^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:40:34 - | -LL | type Baa = (Vec, impl Debug, impl Iterator + Debug); - | ^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:40:46 - | -LL | type Baa = (Vec, impl Debug, impl Iterator + Debug); - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:40:67 - | -LL | type Baa = (Vec, impl Debug, impl Iterator + Debug); - | ^^^^^^^^^^ - | - = note: see issue #63063 for more information - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0562]: `impl Trait` not allowed outside of function and method return types - --> $DIR/feature-gate-min_type_alias_impl_trait.rs:23:18 - | -LL | type Assoc = impl Debug; - | ^^^^^^^^^^ - -error: aborting due to 13 previous errors - -Some errors have detailed explanations: E0562, E0658. -For more information about an error, try `rustc --explain E0562`.