From 70c8839f7cc14436a0ed3ab21d2ee14082e29e46 Mon Sep 17 00:00:00 2001 From: varkor Date: Thu, 1 Aug 2019 00:40:42 +0100 Subject: [PATCH] Fix fallout after rebase --- src/librustc/infer/opaque_types/mod.rs | 2 +- src/librustc/ty/mod.rs | 2 +- src/librustc_typeck/collect.rs | 2 +- src/librustdoc/html/item_type.rs | 2 +- src/test/ui/async-await/await-macro.rs | 230 ------------------ .../issue-52843-closure-constrain.rs | 12 - .../issue-52843-closure-constrain.stderr | 20 -- .../generic_duplicate_param_use.rs | 14 -- .../generic_duplicate_param_use.stderr | 17 -- .../generic_duplicate_param_use2.rs | 17 -- .../generic_duplicate_param_use3.rs | 22 -- .../generic_duplicate_param_use4.rs | 17 -- src/test/ui/existential_types/issue-58887.rs | 23 -- .../ui/existential_types/issue-58887.stderr | 30 --- src/test/ui/existential_types/issue-60371.rs | 15 -- .../ui/existential_types/issue-60371.stderr | 29 --- .../no_inferrable_concrete_type.rs | 13 - .../no_inferrable_concrete_type.stderr | 8 - .../existential_types/not_a_defining_use.rs | 40 --- .../not_a_defining_use.stderr | 27 -- .../ui/impl-trait/bound-normalization-pass.rs | 4 +- src/test/ui/traits/trait-bounds-in-arc.rs | 2 +- .../issue-52843-closure-constrain.rs | 13 + .../issue-52843-closure-constrain.stderr | 20 ++ .../issue-53678-generator-and-const-fn.rs | 4 +- .../issue-60407.rs | 4 +- .../issue-60564.rs | 4 +- .../issue-60564.stderr | 6 +- .../no_inferrable_concrete_type.rs | 2 +- .../type-alias-impl-trait-pass.rs} | 0 30 files changed, 50 insertions(+), 551 deletions(-) delete mode 100644 src/test/ui/async-await/await-macro.rs delete mode 100644 src/test/ui/existential-type/issue-52843-closure-constrain.rs delete mode 100644 src/test/ui/existential-type/issue-52843-closure-constrain.stderr delete mode 100644 src/test/ui/existential_types/generic_duplicate_param_use.rs delete mode 100644 src/test/ui/existential_types/generic_duplicate_param_use.stderr delete mode 100644 src/test/ui/existential_types/generic_duplicate_param_use2.rs delete mode 100644 src/test/ui/existential_types/generic_duplicate_param_use3.rs delete mode 100644 src/test/ui/existential_types/generic_duplicate_param_use4.rs delete mode 100644 src/test/ui/existential_types/issue-58887.rs delete mode 100644 src/test/ui/existential_types/issue-58887.stderr delete mode 100644 src/test/ui/existential_types/issue-60371.rs delete mode 100644 src/test/ui/existential_types/issue-60371.stderr delete mode 100644 src/test/ui/existential_types/no_inferrable_concrete_type.rs delete mode 100644 src/test/ui/existential_types/no_inferrable_concrete_type.stderr delete mode 100644 src/test/ui/existential_types/not_a_defining_use.rs delete mode 100644 src/test/ui/existential_types/not_a_defining_use.stderr create mode 100644 src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.rs create mode 100644 src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.stderr rename src/test/ui/{existential_types => type-alias-impl-trait}/issue-53678-generator-and-const-fn.rs (66%) rename src/test/ui/{existential_types => type-alias-impl-trait}/issue-60407.rs (65%) rename src/test/ui/{existential_types => type-alias-impl-trait}/issue-60564.rs (86%) rename src/test/ui/{existential_types => type-alias-impl-trait}/issue-60564.stderr (86%) rename src/test/ui/{existential_types/existential_type-pass.rs => type-alias-impl-trait/type-alias-impl-trait-pass.rs} (100%) diff --git a/src/librustc/infer/opaque_types/mod.rs b/src/librustc/infer/opaque_types/mod.rs index d7b93cd01a7d6..b3577bea31381 100644 --- a/src/librustc/infer/opaque_types/mod.rs +++ b/src/librustc/infer/opaque_types/mod.rs @@ -1207,7 +1207,7 @@ pub fn may_define_opaque_type( // Syntactically, we are allowed to define the concrete type if: let res = hir_id == scope; trace!( - "may_define_existential_type(def={:?}, opaque_node={:?}) = {}", + "may_define_opaque_type(def={:?}, opaque_node={:?}) = {}", tcx.hir().get(hir_id), tcx.hir().get(opaque_hir_id), res diff --git a/src/librustc/ty/mod.rs b/src/librustc/ty/mod.rs index dbc0abcd2226b..45ca5cfebfcf1 100644 --- a/src/librustc/ty/mod.rs +++ b/src/librustc/ty/mod.rs @@ -221,7 +221,7 @@ impl AssocItem { tcx.fn_sig(self.def_id).skip_binder().to_string() } ty::AssocKind::Type => format!("type {};", self.ident), - // FIXME(trait_alias_impl_trait): we should print bounds here too. + // FIXME(type_alias_impl_trait): we should print bounds here too. ty::AssocKind::OpaqueTy => format!("type {};", self.ident), ty::AssocKind::Const => { format!("const {}: {:?};", self.ident, tcx.type_of(self.def_id)) diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs index e1334b60e53bc..abb0bcad0dd61 100644 --- a/src/librustc_typeck/collect.rs +++ b/src/librustc_typeck/collect.rs @@ -1713,7 +1713,7 @@ fn find_opaque_ty_constraints(tcx: TyCtxt<'_>, def_id: DefId) -> Ty<'_> { // For example, this code: // ``` // fn foo() { - // existential type Blah: Debug; + // type Blah = impl Debug; // let my_closure = || -> Blah { true }; // } // ``` diff --git a/src/librustdoc/html/item_type.rs b/src/librustdoc/html/item_type.rs index dde729b655d09..cf51a4eb5a5be 100644 --- a/src/librustdoc/html/item_type.rs +++ b/src/librustdoc/html/item_type.rs @@ -144,7 +144,7 @@ impl ItemType { ItemType::AssocConst => "associatedconstant", ItemType::ForeignType => "foreigntype", ItemType::Keyword => "keyword", - ItemType::OpaqueTy => "opaque", + ItemType::OpaqueTy => "opaque", ItemType::ProcAttribute => "attr", ItemType::ProcDerive => "derive", ItemType::TraitAlias => "traitalias", diff --git a/src/test/ui/async-await/await-macro.rs b/src/test/ui/async-await/await-macro.rs deleted file mode 100644 index 05176848b01fa..0000000000000 --- a/src/test/ui/async-await/await-macro.rs +++ /dev/null @@ -1,230 +0,0 @@ -// run-pass - -// edition:2018 -// aux-build:arc_wake.rs - -#![feature(async_await, async_closure, await_macro)] - -extern crate arc_wake; - -use std::pin::Pin; -use std::future::Future; -use std::sync::{ - Arc, - atomic::{self, AtomicUsize}, -}; -use std::task::{Context, Poll}; -use arc_wake::ArcWake; - -struct Counter { - wakes: AtomicUsize, -} - -impl ArcWake for Counter { - fn wake(self: Arc) { - Self::wake_by_ref(&self) - } - fn wake_by_ref(arc_self: &Arc) { - arc_self.wakes.fetch_add(1, atomic::Ordering::SeqCst); - } -} - -struct WakeOnceThenComplete(bool); - -fn wake_and_yield_once() -> WakeOnceThenComplete { WakeOnceThenComplete(false) } - -impl Future for WakeOnceThenComplete { - type Output = (); - fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<()> { - if self.0 { - Poll::Ready(()) - } else { - cx.waker().wake_by_ref(); - self.0 = true; - Poll::Pending - } - } -} - -fn async_block(x: u8) -> impl Future { - async move { - await!(wake_and_yield_once()); - x - } -} - -fn async_block_with_borrow_named_lifetime<'a>(x: &'a u8) -> impl Future + 'a { - async move { - await!(wake_and_yield_once()); - *x - } -} - -fn async_nonmove_block(x: u8) -> impl Future { - async move { - let future = async { - await!(wake_and_yield_once()); - x - }; - await!(future) - } -} - -fn async_closure(x: u8) -> impl Future { - (async move |x: u8| -> u8 { - await!(wake_and_yield_once()); - x - })(x) -} - -fn async_closure_in_unsafe_block(x: u8) -> impl Future { - (unsafe { - async move |x: u8| unsafe_fn(await!(unsafe_async_fn(x))) - })(x) -} - -async fn async_fn(x: u8) -> u8 { - await!(wake_and_yield_once()); - x -} - -async fn generic_async_fn(x: T) -> T { - await!(wake_and_yield_once()); - x -} - -async fn async_fn_with_borrow(x: &u8) -> u8 { - await!(wake_and_yield_once()); - *x -} - -async fn async_fn_with_borrow_named_lifetime<'a>(x: &'a u8) -> u8 { - await!(wake_and_yield_once()); - *x -} - -fn async_fn_with_impl_future_named_lifetime<'a>(x: &'a u8) -> impl Future + 'a { - async move { - await!(wake_and_yield_once()); - *x - } -} - -/* FIXME(cramertj) support when `type T<'a, 'b> = impl;` works -async fn async_fn_multiple_args(x: &u8, _y: &u8) -> u8 { - await!(wake_and_yield_once()); - *x -} -*/ - -async fn async_fn_multiple_args_named_lifetime<'a>(x: &'a u8, _y: &'a u8) -> u8 { - await!(wake_and_yield_once()); - *x -} - -fn async_fn_with_internal_borrow(y: u8) -> impl Future { - async move { - await!(async_fn_with_borrow_named_lifetime(&y)) - } -} - -async unsafe fn unsafe_async_fn(x: u8) -> u8 { - await!(wake_and_yield_once()); - x -} - -unsafe fn unsafe_fn(x: u8) -> u8 { - x -} - -fn async_block_in_unsafe_block(x: u8) -> impl Future { - unsafe { - async move { - unsafe_fn(await!(unsafe_async_fn(x))) - } - } -} - -struct Foo; - -trait Bar { - fn foo() {} -} - -impl Foo { - async fn async_assoc_item(x: u8) -> u8 { - unsafe { - await!(unsafe_async_fn(x)) - } - } - - async unsafe fn async_unsafe_assoc_item(x: u8) -> u8 { - await!(unsafe_async_fn(x)) - } -} - -fn test_future_yields_once_then_returns(f: F) -where - F: FnOnce(u8) -> Fut, - Fut: Future, -{ - let mut fut = Box::pin(f(9)); - let counter = Arc::new(Counter { wakes: AtomicUsize::new(0) }); - let waker = ArcWake::into_waker(counter.clone()); - let mut cx = Context::from_waker(&waker); - assert_eq!(0, counter.wakes.load(atomic::Ordering::SeqCst)); - assert_eq!(Poll::Pending, fut.as_mut().poll(&mut cx)); - assert_eq!(1, counter.wakes.load(atomic::Ordering::SeqCst)); - assert_eq!(Poll::Ready(9), fut.as_mut().poll(&mut cx)); -} - -fn main() { - macro_rules! test { - ($($fn_name:expr,)*) => { $( - test_future_yields_once_then_returns($fn_name); - )* } - } - - macro_rules! test_with_borrow { - ($($fn_name:expr,)*) => { $( - test_future_yields_once_then_returns(|x| { - async move { - await!($fn_name(&x)) - } - }); - )* } - } - - test! { - async_block, - async_nonmove_block, - async_closure, - async_closure_in_unsafe_block, - async_fn, - generic_async_fn, - async_fn_with_internal_borrow, - async_block_in_unsafe_block, - Foo::async_assoc_item, - |x| { - async move { - unsafe { await!(unsafe_async_fn(x)) } - } - }, - |x| { - async move { - unsafe { await!(Foo::async_unsafe_assoc_item(x)) } - } - }, - } - test_with_borrow! { - async_block_with_borrow_named_lifetime, - async_fn_with_borrow, - async_fn_with_borrow_named_lifetime, - async_fn_with_impl_future_named_lifetime, - |x| { - async move { - await!(async_fn_multiple_args_named_lifetime(x, x)) - } - }, - } -} diff --git a/src/test/ui/existential-type/issue-52843-closure-constrain.rs b/src/test/ui/existential-type/issue-52843-closure-constrain.rs deleted file mode 100644 index b2bbc1f154998..0000000000000 --- a/src/test/ui/existential-type/issue-52843-closure-constrain.rs +++ /dev/null @@ -1,12 +0,0 @@ -// Checks to ensure that we properly detect when a closure constrains an existential type -#![feature(existential_type)] - -use std::fmt::Debug; - -fn main() { - existential type Existential: Debug; - fn _unused() -> Existential { String::new() } - //~^ ERROR: concrete type differs from previous defining existential type use - let null = || -> Existential { 0 }; - println!("{:?}", null()); -} diff --git a/src/test/ui/existential-type/issue-52843-closure-constrain.stderr b/src/test/ui/existential-type/issue-52843-closure-constrain.stderr deleted file mode 100644 index 424d65a193c92..0000000000000 --- a/src/test/ui/existential-type/issue-52843-closure-constrain.stderr +++ /dev/null @@ -1,20 +0,0 @@ -error: concrete type differs from previous defining existential type use - --> $DIR/issue-52843-closure-constrain.rs:8:5 - | -LL | fn _unused() -> Existential { String::new() } - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `i32`, got `std::string::String` - | -note: previous use here - --> $DIR/issue-52843-closure-constrain.rs:6:1 - | -LL | / fn main() { -LL | | existential type Existential: Debug; -LL | | fn _unused() -> Existential { String::new() } -LL | | -LL | | let null = || -> Existential { 0 }; -LL | | println!("{:?}", null()); -LL | | } - | |_^ - -error: aborting due to previous error - diff --git a/src/test/ui/existential_types/generic_duplicate_param_use.rs b/src/test/ui/existential_types/generic_duplicate_param_use.rs deleted file mode 100644 index 165e320be5e9a..0000000000000 --- a/src/test/ui/existential_types/generic_duplicate_param_use.rs +++ /dev/null @@ -1,14 +0,0 @@ -#![feature(type_alias_impl_trait)] - -use std::fmt::Debug; - -fn main() {} - -// test that unused generic parameters are ok -type Two = impl Debug; -//~^ could not find defining uses - -fn one(t: T) -> Two { -//~^ ERROR defining opaque type use restricts opaque type - t -} diff --git a/src/test/ui/existential_types/generic_duplicate_param_use.stderr b/src/test/ui/existential_types/generic_duplicate_param_use.stderr deleted file mode 100644 index e1794034e20dd..0000000000000 --- a/src/test/ui/existential_types/generic_duplicate_param_use.stderr +++ /dev/null @@ -1,17 +0,0 @@ -error: defining opaque type use restricts opaque type by using the generic parameter `T` twice - --> $DIR/generic_duplicate_param_use.rs:11:1 - | -LL | / fn one(t: T) -> Two { -LL | | -LL | | t -LL | | } - | |_^ - -error: could not find defining uses - --> $DIR/generic_duplicate_param_use.rs:8:1 - | -LL | type Two = impl Debug; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/existential_types/generic_duplicate_param_use2.rs b/src/test/ui/existential_types/generic_duplicate_param_use2.rs deleted file mode 100644 index 0adce817c5c37..0000000000000 --- a/src/test/ui/existential_types/generic_duplicate_param_use2.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![feature(type_alias_impl_trait)] - -use std::fmt::Debug; - -fn main() {} - -// test that unused generic parameters are ok -type Two = impl Debug; - -fn one(t: T) -> Two { -//~^ defining opaque type use restricts opaque type - t -} - -fn two(t: T, _: U) -> Two { - t -} diff --git a/src/test/ui/existential_types/generic_duplicate_param_use3.rs b/src/test/ui/existential_types/generic_duplicate_param_use3.rs deleted file mode 100644 index 8d3e7f9f42497..0000000000000 --- a/src/test/ui/existential_types/generic_duplicate_param_use3.rs +++ /dev/null @@ -1,22 +0,0 @@ -#![feature(type_alias_impl_trait)] - -use std::fmt::Debug; - -fn main() {} - -// test that unused generic parameters are ok -type Two = impl Debug; - -fn one(t: T) -> Two { -//~^ defining opaque type use restricts opaque type - t -} - -fn two(t: T, _: U) -> Two { - t -} - -fn three(_: T, u: U) -> Two { -//~^ concrete type's generic parameters differ from previous defining use - u -} diff --git a/src/test/ui/existential_types/generic_duplicate_param_use4.rs b/src/test/ui/existential_types/generic_duplicate_param_use4.rs deleted file mode 100644 index 65f7d7f485d49..0000000000000 --- a/src/test/ui/existential_types/generic_duplicate_param_use4.rs +++ /dev/null @@ -1,17 +0,0 @@ -#![feature(type_alias_impl_trait)] - -use std::fmt::Debug; - -fn main() {} - -// test that unused generic parameters are ok -type Two = impl Debug; - -fn one(t: T) -> Two { -//~^ ERROR defining opaque type use restricts opaque type - t -} - -fn three(_: T, u: U) -> Two { - u -} diff --git a/src/test/ui/existential_types/issue-58887.rs b/src/test/ui/existential_types/issue-58887.rs deleted file mode 100644 index 92ba50ae6cf1f..0000000000000 --- a/src/test/ui/existential_types/issue-58887.rs +++ /dev/null @@ -1,23 +0,0 @@ -#![feature(type_alias_impl_trait)] - -trait UnwrapItemsExt { - type Iter; - fn unwrap_items(self) -> Self::Iter; -} - -impl UnwrapItemsExt for I -where - I: Iterator>, - E: std::fmt::Debug, -{ - type Iter = impl Iterator; - //~^ ERROR: could not find defining uses - - fn unwrap_items(self) -> Self::Iter { - //~^ ERROR: type parameter `T` is part of concrete type - //~| ERROR: type parameter `E` is part of concrete type - self.map(|x| x.unwrap()) - } -} - -fn main() {} diff --git a/src/test/ui/existential_types/issue-58887.stderr b/src/test/ui/existential_types/issue-58887.stderr deleted file mode 100644 index 7e2895711d345..0000000000000 --- a/src/test/ui/existential_types/issue-58887.stderr +++ /dev/null @@ -1,30 +0,0 @@ -error: type parameter `T` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-58887.rs:16:41 - | -LL | fn unwrap_items(self) -> Self::Iter { - | _________________________________________^ -LL | | -LL | | -LL | | self.map(|x| x.unwrap()) -LL | | } - | |_____^ - -error: type parameter `E` is part of concrete type but not used in parameter list for the `impl Trait` type alias - --> $DIR/issue-58887.rs:16:41 - | -LL | fn unwrap_items(self) -> Self::Iter { - | _________________________________________^ -LL | | -LL | | -LL | | self.map(|x| x.unwrap()) -LL | | } - | |_____^ - -error: could not find defining uses - --> $DIR/issue-58887.rs:13:5 - | -LL | type Iter = impl Iterator; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 3 previous errors - diff --git a/src/test/ui/existential_types/issue-60371.rs b/src/test/ui/existential_types/issue-60371.rs deleted file mode 100644 index 50b9d1ac7933c..0000000000000 --- a/src/test/ui/existential_types/issue-60371.rs +++ /dev/null @@ -1,15 +0,0 @@ -trait Bug { - type Item: Bug; - - const FUN: fn() -> Self::Item; -} - -impl Bug for &() { - type Item = impl Bug; //~ ERROR `impl Trait` in type aliases is unstable - //~^ ERROR the trait bound `(): Bug` is not satisfied - //~^^ ERROR could not find defining uses - - const FUN: fn() -> Self::Item = || (); -} - -fn main() {} diff --git a/src/test/ui/existential_types/issue-60371.stderr b/src/test/ui/existential_types/issue-60371.stderr deleted file mode 100644 index 1e9b12ebc39aa..0000000000000 --- a/src/test/ui/existential_types/issue-60371.stderr +++ /dev/null @@ -1,29 +0,0 @@ -error[E0658]: `impl Trait` in type aliases is unstable - --> $DIR/issue-60371.rs:8:5 - | -LL | type Item = impl Bug; - | ^^^^^^^^^^^^^^^^^^^^^ - | - = note: for more information, see https://github.com/rust-lang/rust/issues/63063 - = help: add `#![feature(type_alias_impl_trait)]` to the crate attributes to enable - -error[E0277]: the trait bound `(): Bug` is not satisfied - --> $DIR/issue-60371.rs:8:5 - | -LL | type Item = impl Bug; - | ^^^^^^^^^^^^^^^^^^^^^ the trait `Bug` is not implemented for `()` - | - = help: the following implementations were found: - <&() as Bug> - = note: the return type of a function must have a statically known size - -error: could not find defining uses - --> $DIR/issue-60371.rs:8:5 - | -LL | type Item = impl Bug; - | ^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to 3 previous errors - -Some errors have detailed explanations: E0277, E0658. -For more information about an error, try `rustc --explain E0277`. diff --git a/src/test/ui/existential_types/no_inferrable_concrete_type.rs b/src/test/ui/existential_types/no_inferrable_concrete_type.rs deleted file mode 100644 index c9ca504f78097..0000000000000 --- a/src/test/ui/existential_types/no_inferrable_concrete_type.rs +++ /dev/null @@ -1,13 +0,0 @@ -// 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 - -#![feature(type_alias_impl_trait)] - -type Foo = impl Copy; //~ could not find defining uses - -// make compiler happy about using 'Foo' -fn bar(x: Foo) -> Foo { x } - -fn main() { - let _: Foo = std::mem::transmute(0u8); -} diff --git a/src/test/ui/existential_types/no_inferrable_concrete_type.stderr b/src/test/ui/existential_types/no_inferrable_concrete_type.stderr deleted file mode 100644 index 444e6e8214ff2..0000000000000 --- a/src/test/ui/existential_types/no_inferrable_concrete_type.stderr +++ /dev/null @@ -1,8 +0,0 @@ -error: could not find defining uses - --> $DIR/no_inferrable_concrete_type.rs:6:1 - | -LL | type Foo = impl Copy; - | ^^^^^^^^^^^^^^^^^^^^^ - -error: aborting due to previous error - diff --git a/src/test/ui/existential_types/not_a_defining_use.rs b/src/test/ui/existential_types/not_a_defining_use.rs deleted file mode 100644 index ca00e582d3442..0000000000000 --- a/src/test/ui/existential_types/not_a_defining_use.rs +++ /dev/null @@ -1,40 +0,0 @@ -#![feature(type_alias_impl_trait)] - -use std::fmt::Debug; - -fn main() {} - -type Two = impl Debug; - -fn two(t: T) -> Two { - //~^ ERROR defining opaque type use does not fully define opaque type - (t, 4i8) -} - -fn three(t: T) -> Two { - (t, 5i8) -} - -trait Bar { - type Blub: Debug; - const FOO: Self::Blub; -} - -impl Bar for u32 { - type Blub = i32; - const FOO: i32 = 42; -} - -// this should work! But it requires `two` and `three` not to be defining uses, -// just restricting uses -fn four(t: T) -> Two { //~ concrete type differs from previous - (t, ::FOO) -} - -fn is_sync() {} - -fn asdfl() { - //FIXME(oli-obk): these currently cause cycle errors - //is_sync::>(); - //is_sync::>(); -} diff --git a/src/test/ui/existential_types/not_a_defining_use.stderr b/src/test/ui/existential_types/not_a_defining_use.stderr deleted file mode 100644 index 7bb8939ccf5a2..0000000000000 --- a/src/test/ui/existential_types/not_a_defining_use.stderr +++ /dev/null @@ -1,27 +0,0 @@ -error: defining opaque type use does not fully define opaque type - --> $DIR/not_a_defining_use.rs:9:1 - | -LL | / fn two(t: T) -> Two { -LL | | -LL | | (t, 4i8) -LL | | } - | |_^ - -error: concrete type differs from previous defining opaque type use - --> $DIR/not_a_defining_use.rs:30:1 - | -LL | / fn four(t: T) -> Two { -LL | | (t, ::FOO) -LL | | } - | |_^ expected `(T, i8)`, got `(T, ::Blub)` - | -note: previous use here - --> $DIR/not_a_defining_use.rs:14:1 - | -LL | / fn three(t: T) -> Two { -LL | | (t, 5i8) -LL | | } - | |_^ - -error: aborting due to 2 previous errors - diff --git a/src/test/ui/impl-trait/bound-normalization-pass.rs b/src/test/ui/impl-trait/bound-normalization-pass.rs index 33348340bce97..5b634e3106e3b 100644 --- a/src/test/ui/impl-trait/bound-normalization-pass.rs +++ b/src/test/ui/impl-trait/bound-normalization-pass.rs @@ -81,9 +81,9 @@ mod impl_trait_in_bindings { } ///////////////////////////////////////////// -// The same applied to `existential type`s +// The same applied to `type Foo = impl Bar`s -mod existential_types { +mod opaque_types { trait Implemented { type Assoc; } diff --git a/src/test/ui/traits/trait-bounds-in-arc.rs b/src/test/ui/traits/trait-bounds-in-arc.rs index a45d834297eed..15e942970048f 100644 --- a/src/test/ui/traits/trait-bounds-in-arc.rs +++ b/src/test/ui/traits/trait-bounds-in-arc.rs @@ -1,6 +1,6 @@ // run-pass #![allow(unused_must_use)] -// Tests that a heterogeneous list of existential types can be put inside an Arc +// Tests that a heterogeneous list of opaque types can be put inside an Arc // and shared between threads as long as all types fulfill Send. // ignore-emscripten no threads support 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 new file mode 100644 index 0000000000000..a102d16078bed --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.rs @@ -0,0 +1,13 @@ +// Checks to ensure that we properly detect when a closure constrains an opaque type + +#![feature(type_alias_impl_trait)] + +use std::fmt::Debug; + +fn main() { + type Opaque = impl Debug; + fn _unused() -> Opaque { String::new() } + //~^ ERROR: concrete type differs from previous defining opaque type use + let null = || -> Opaque { 0 }; + 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..c994eb5986cb2 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-52843-closure-constrain.stderr @@ -0,0 +1,20 @@ +error: concrete type differs from previous defining opaque type use + --> $DIR/issue-52843-closure-constrain.rs:9:5 + | +LL | fn _unused() -> Opaque { String::new() } + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected `i32`, got `std::string::String` + | +note: previous use here + --> $DIR/issue-52843-closure-constrain.rs:7:1 + | +LL | / fn main() { +LL | | type Opaque = impl Debug; +LL | | fn _unused() -> Opaque { String::new() } +LL | | +LL | | let null = || -> Opaque { 0 }; +LL | | println!("{:?}", null()); +LL | | } + | |_^ + +error: aborting due to previous error + diff --git a/src/test/ui/existential_types/issue-53678-generator-and-const-fn.rs b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs similarity index 66% rename from src/test/ui/existential_types/issue-53678-generator-and-const-fn.rs rename to src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs index d964f2b74ff69..e7f93732430e7 100644 --- a/src/test/ui/existential_types/issue-53678-generator-and-const-fn.rs +++ b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.rs @@ -1,10 +1,10 @@ // check-pass -#![feature(const_fn, generators, generator_trait, existential_type)] +#![feature(const_fn, generators, generator_trait, type_alias_impl_trait)] use std::ops::Generator; -existential type GenOnce: Generator; +type GenOnce = impl Generator; const fn const_generator(yielding: Y, returning: R) -> GenOnce { move || { diff --git a/src/test/ui/existential_types/issue-60407.rs b/src/test/ui/type-alias-impl-trait/issue-60407.rs similarity index 65% rename from src/test/ui/existential_types/issue-60407.rs rename to src/test/ui/type-alias-impl-trait/issue-60407.rs index 52162c491b5c8..7d462f057cb84 100644 --- a/src/test/ui/existential_types/issue-60407.rs +++ b/src/test/ui/type-alias-impl-trait/issue-60407.rs @@ -1,8 +1,8 @@ // check-pass -#![feature(existential_type)] +#![feature(type_alias_impl_trait)] -existential type Debuggable: core::fmt::Debug; +type Debuggable = impl core::fmt::Debug; static mut TEST: Option = None; diff --git a/src/test/ui/existential_types/issue-60564.rs b/src/test/ui/type-alias-impl-trait/issue-60564.rs similarity index 86% rename from src/test/ui/existential_types/issue-60564.rs rename to src/test/ui/type-alias-impl-trait/issue-60564.rs index cb3914ddd1deb..91c4576597ea4 100644 --- a/src/test/ui/existential_types/issue-60564.rs +++ b/src/test/ui/type-alias-impl-trait/issue-60564.rs @@ -1,11 +1,11 @@ -#![feature(existential_type)] +#![feature(type_alias_impl_trait)] trait IterBits { type BitsIter: Iterator; fn iter_bits(self, n: u8) -> Self::BitsIter; } -existential type IterBitsIter: std::iter::Iterator; +type IterBitsIter = impl std::iter::Iterator; //~^ ERROR could not find defining uses impl IterBits for T diff --git a/src/test/ui/existential_types/issue-60564.stderr b/src/test/ui/type-alias-impl-trait/issue-60564.stderr similarity index 86% rename from src/test/ui/existential_types/issue-60564.stderr rename to src/test/ui/type-alias-impl-trait/issue-60564.stderr index d8480b521570a..ebb13fca1da92 100644 --- a/src/test/ui/existential_types/issue-60564.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-60564.stderr @@ -2,7 +2,7 @@ error[E0601]: `main` function not found in crate `issue_60564` | = note: consider adding a `main` function to `$DIR/issue-60564.rs` -error: type parameter `E` is part of concrete type but not used in parameter list for existential type +error: type parameter `E` is part of concrete type but not used in parameter list for the `impl Trait` type alias --> $DIR/issue-60564.rs:20:49 | LL | fn iter_bits(self, n: u8) -> Self::BitsIter { @@ -17,8 +17,8 @@ LL | | } error: could not find defining uses --> $DIR/issue-60564.rs:8:1 | -LL | existential type IterBitsIter: std::iter::Iterator; - | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +LL | type IterBitsIter = impl std::iter::Iterator; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ error: aborting due to 3 previous errors 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 f096dd162d507..c9ca504f78097 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,4 +1,4 @@ -// Issue 52985: user code provides no use case that allows an existential type +// 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 #![feature(type_alias_impl_trait)] diff --git a/src/test/ui/existential_types/existential_type-pass.rs b/src/test/ui/type-alias-impl-trait/type-alias-impl-trait-pass.rs similarity index 100% rename from src/test/ui/existential_types/existential_type-pass.rs rename to src/test/ui/type-alias-impl-trait/type-alias-impl-trait-pass.rs