diff options
| author | Oli Scherer <github35764891676564198441@oli-obk.de> | 2021-03-12 12:02:29 +0000 |
|---|---|---|
| committer | Oli Scherer <github35764891676564198441@oli-obk.de> | 2021-03-15 17:36:57 +0000 |
| commit | 4a6dc8e20328ecb627a519c6704afadcf378a72b (patch) | |
| tree | ee5607fbd29dd70d9a2bfce4f3e4ea15c8653db9 /src/test | |
| parent | cdbb0ff8ca7d6a4d6d858e03ffcc5360ddf60a3f (diff) | |
| download | rust-4a6dc8e20328ecb627a519c6704afadcf378a72b.tar.gz rust-4a6dc8e20328ecb627a519c6704afadcf378a72b.zip | |
Only allow tait defining uses in function and method return position
Diffstat (limited to 'src/test')
37 files changed, 333 insertions, 97 deletions
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 3b31bc159c0..dfd82a25f4c 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 @@ -13,7 +13,7 @@ fn define() -> Bar { type Foo2 = impl Debug; fn define2() { - let x = || -> Foo2 { 42 }; + let x = || -> Foo2 { 42 }; //~ ERROR not permitted here } type Foo3 = impl Debug; @@ -31,7 +31,7 @@ type Foo4 = impl Debug; fn define4() { let y: Foo4 = 42; - //~^ ERROR mismatched types + //~^ ERROR not permitted here } fn main() {} 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 da3ddb1c509..43fd76ef0ed 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,6 +10,15 @@ 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 <https://github.com/rust-lang/rust/issues/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 | @@ -36,19 +45,14 @@ LL | define3(42) = note: expected opaque type `impl Debug` found type `{integer}` -error[E0308]: mismatched types - --> $DIR/feature-gate-type_alias_impl_trait.rs:33:19 +error[E0658]: type alias impl trait is not permitted here + --> $DIR/feature-gate-type_alias_impl_trait.rs:33:12 | -LL | type Foo4 = impl Debug; - | ---------- the expected opaque type -... LL | let y: Foo4 = 42; - | ---- ^^ expected opaque type, found integer - | | - | expected due to this + | ^^^^ | - = note: expected opaque type `impl Debug` - found type `{integer}` + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable error: could not find defining uses --> $DIR/feature-gate-type_alias_impl_trait.rs:5:12 @@ -68,6 +72,7 @@ error: could not find defining uses LL | type Foo4 = impl Debug; | ^^^^^^^^^^ -error: aborting due to 7 previous errors +error: aborting due to 8 previous errors -For more information about this error, try `rustc --explain E0308`. +Some errors have detailed explanations: E0308, E0658. +For more information about an error, try `rustc --explain E0308`. diff --git a/src/test/ui/generator/layout-error.min_tait.stderr b/src/test/ui/generator/layout-error.min_tait.stderr index 1be39856883..be469d781b5 100644 --- a/src/test/ui/generator/layout-error.min_tait.stderr +++ b/src/test/ui/generator/layout-error.min_tait.stderr @@ -4,6 +4,37 @@ error[E0425]: cannot find value `Foo` in this scope LL | let a = Foo; | ^^^ not found in this scope -error: aborting due to previous error +error[E0658]: type alias impl trait is not permitted here + --> $DIR/layout-error.rs:31:27 + | +LL | Task::spawn(&POOL, || cb()); + | ^ + | + = note: see issue #63063 <https://github.com/rust-lang/rust/issues/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/layout-error.rs:30:28 + | +LL | static POOL: Task<F> = Task::new(); + | ^^^^^^^^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable + +error: concrete type differs from previous defining opaque type use + --> $DIR/layout-error.rs:31:24 + | +LL | Task::spawn(&POOL, || cb()); + | ^^^^^^^ expected `[type error]`, got `impl Future` + | +note: previous use here + --> $DIR/layout-error.rs:30:5 + | +LL | static POOL: Task<F> = Task::new(); + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 4 previous errors -For more information about this error, try `rustc --explain E0425`. +Some errors have detailed explanations: E0425, E0658. +For more information about an error, try `rustc --explain E0425`. diff --git a/src/test/ui/generator/layout-error.rs b/src/test/ui/generator/layout-error.rs index 549c6f6ebe7..9f15a6b2eca 100644 --- a/src/test/ui/generator/layout-error.rs +++ b/src/test/ui/generator/layout-error.rs @@ -12,7 +12,7 @@ use std::future::Future; pub struct Task<F: Future>(F); impl<F: Future> Task<F> { - fn new() -> Self { + const fn new() -> Self { todo!() } fn spawn(&self, _: impl FnOnce() -> F) { @@ -27,6 +27,7 @@ fn main() { type F = impl Future; // Check that statics are inhabited computes they layout. - static POOL: Task<F> = Task::new(); - Task::spawn(&POOL, || cb()); + static POOL: Task<F> = Task::new(); //[min_tait]~ ERROR not permitted here + Task::spawn(&POOL, || cb()); //[min_tait]~ ERROR type alias impl trait is not permitted here + //[min_tait]~^ ERROR concrete type differs from previous } 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 59cd8e04513..ce874c1518c 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,5 +1,5 @@ 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:11:32 + --> $DIR/metadata-sufficient-for-layout.rs:10:32 | LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] | ^^^^^^^^^^^^^^^^^^^^^ @@ -8,12 +8,18 @@ LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_binding = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/metadata-sufficient-for-layout.rs:11:55 + --> $DIR/metadata-sufficient-for-layout.rs:10:55 | LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] | ^^^^^^^^^^^^^^^^^^^^^^ | = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information -warning: 2 warnings emitted +error: fatal error triggered by #[rustc_error] + --> $DIR/metadata-sufficient-for-layout.rs:29:1 + | +LL | fn main() {} + | ^^^^^^^^^ + +error: aborting due to previous error; 2 warnings emitted 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 new file mode 100644 index 00000000000..e2b0d3622a6 --- /dev/null +++ b/src/test/ui/generator/metadata-sufficient-for-layout.min_tait.stderr @@ -0,0 +1,24 @@ +error[E0658]: type alias impl trait is not permitted here + --> $DIR/metadata-sufficient-for-layout.rs:22:23 + | +LL | static A: Option<F> = None; + | ^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable + +error: concrete type differs from previous defining opaque type use + --> $DIR/metadata-sufficient-for-layout.rs:25:1 + | +LL | fn f() -> F { metadata_sufficient_for_layout::g() } + | ^^^^^^^^^^^ expected `[type error]`, got `impl Generator` + | +note: previous use here + --> $DIR/metadata-sufficient-for-layout.rs:22:1 + | +LL | static A: Option<F> = None; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +error: aborting due to 2 previous errors + +For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/generator/metadata-sufficient-for-layout.rs b/src/test/ui/generator/metadata-sufficient-for-layout.rs index 7d474c82eef..f206093d971 100644 --- a/src/test/ui/generator/metadata-sufficient-for-layout.rs +++ b/src/test/ui/generator/metadata-sufficient-for-layout.rs @@ -4,10 +4,9 @@ // Regression test for #80998. // // aux-build:metadata-sufficient-for-layout.rs -// check-pass // revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] +#![feature(min_type_alias_impl_trait, rustc_attrs)] #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] //[full_tait]~^ WARN incomplete //[full_tait]~| WARN incomplete @@ -21,7 +20,10 @@ type F = impl Generator<(), Yield = (), Return = ()>; // Static queries the layout of the generator. static A: Option<F> = None; +//[min_tait]~^ ERROR not permitted here fn f() -> F { metadata_sufficient_for_layout::g() } +//[min_tait]~^ ERROR concrete type differs -fn main() {} +#[rustc_error] +fn main() {} //[full_tait]~ ERROR diff --git a/src/test/ui/mir/issue-75053.full_tait.stderr b/src/test/ui/mir/issue-75053.full_tait.stderr index 0737c666f85..aff19094b7a 100644 --- a/src/test/ui/mir/issue-75053.full_tait.stderr +++ b/src/test/ui/mir/issue-75053.full_tait.stderr @@ -7,11 +7,15 @@ LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait))] = note: `#[warn(incomplete_features)]` on by default = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information -error: fatal error triggered by #[rustc_error] - --> $DIR/issue-75053.rs:51:1 +error[E0658]: type alias impl trait is not permitted here + --> $DIR/issue-75053.rs:52:15 | -LL | fn main() { - | ^^^^^^^^^ +LL | let _pos: Phantom1<DummyT<()>> = Scope::new().my_index(); + | ^^^^^^^^^^^^^^^^^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable error: aborting due to previous error; 1 warning emitted +For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/mir/issue-75053.in_bindings.stderr b/src/test/ui/mir/issue-75053.in_bindings.stderr index 1c473d99139..a43fabc8f5d 100644 --- a/src/test/ui/mir/issue-75053.in_bindings.stderr +++ b/src/test/ui/mir/issue-75053.in_bindings.stderr @@ -8,7 +8,7 @@ LL | #![cfg_attr(in_bindings, feature(impl_trait_in_bindings))] = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information error[E0282]: type annotations needed - --> $DIR/issue-75053.rs:53:38 + --> $DIR/issue-75053.rs:52:38 | LL | type O; | ------- `<Self as MyIndex<T>>::O` defined here diff --git a/src/test/ui/mir/issue-75053.min_tait.stderr b/src/test/ui/mir/issue-75053.min_tait.stderr index 180a4094ff2..7ce91e851a7 100644 --- a/src/test/ui/mir/issue-75053.min_tait.stderr +++ b/src/test/ui/mir/issue-75053.min_tait.stderr @@ -1,8 +1,12 @@ -error: fatal error triggered by #[rustc_error] - --> $DIR/issue-75053.rs:51:1 +error[E0658]: type alias impl trait is not permitted here + --> $DIR/issue-75053.rs:52:15 | -LL | fn main() { - | ^^^^^^^^^ +LL | let _pos: Phantom1<DummyT<()>> = Scope::new().my_index(); + | ^^^^^^^^^^^^^^^^^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable error: aborting due to previous error +For more information about this error, try `rustc --explain E0658`. diff --git a/src/test/ui/mir/issue-75053.rs b/src/test/ui/mir/issue-75053.rs index 80c0c796100..fc88d00c0c3 100644 --- a/src/test/ui/mir/issue-75053.rs +++ b/src/test/ui/mir/issue-75053.rs @@ -49,7 +49,6 @@ impl<T: MyFrom<Phantom2<DummyT<U>>>, U> MyIndex<Phantom1<T>> for Scope<U> { #[rustc_error] fn main() { - //[min_tait,full_tait]~^ ERROR rustc_error - let _pos: Phantom1<DummyT<()>> = Scope::new().my_index(); + let _pos: Phantom1<DummyT<()>> = Scope::new().my_index(); //[min_tait,full_tait]~ ERROR not permitted here //[in_bindings]~^ ERROR type annotations needed } 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 d71e12c60ff..c2cb4829fb7 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,8 +1,17 @@ +error[E0658]: type alias impl trait is not permitted here + --> $DIR/issue-52843-closure-constrain.rs:13:22 + | +LL | let null = || -> Opaque { 0 }; + | ^^^^^^ + | + = note: see issue #63063 <https://github.com/rust-lang/rust/issues/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:13:16 | LL | let null = || -> Opaque { 0 }; - | ^^^^^^^^^^^^^^^^^^ expected `String`, got `i32` + | ^^^^^^^^^^^^^^^^^^ expected `String`, got `[type error]` | note: previous use here --> $DIR/issue-52843-closure-constrain.rs:12:5 @@ -10,5 +19,6 @@ note: previous use here LL | fn _unused() -> Opaque { String::new() } | ^^^^^^^^^^^^^^^^^^^^^^ -error: aborting due to previous error +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 e4ccb3742bc..01f874155fa 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 @@ -10,7 +10,7 @@ use std::fmt::Debug; fn main() { type Opaque = impl Debug; fn _unused() -> Opaque { String::new() } - let null = || -> Opaque { 0 }; + let null = || -> Opaque { 0 }; //[min_tait]~ ERROR: not permitted here //~^ ERROR: concrete type differs from previous defining opaque type use println!("{:?}", null()); } 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 38756ce4eb8..1a03ce79661 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,5 +1,5 @@ warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-53096.rs:5:32 + --> $DIR/issue-53096.rs:4:32 | LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))] | ^^^^^^^^^^^^^^^^^^^^^^ @@ -8,12 +8,18 @@ LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trai = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information 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:5:56 + --> $DIR/issue-53096.rs:4:56 | LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))] | ^^^^^^^^^^^^^^^^^^^^^ | = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information -warning: 2 warnings emitted +error: fatal error triggered by #[rustc_error] + --> $DIR/issue-53096.rs:14:1 + | +LL | fn main() {} + | ^^^^^^^^^ + +error: aborting due to previous error; 2 warnings emitted 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 new file mode 100644 index 00000000000..c6c7a51618d --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-53096.min_tait.stderr @@ -0,0 +1,12 @@ +error[E0658]: type alias impl trait is not permitted here + --> $DIR/issue-53096.rs:10:19 + | +LL | const BAZR: Foo = bar(); + | ^^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0658`. 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 00c04935e50..fb621dc0bce 100644 --- a/src/test/ui/type-alias-impl-trait/issue-53096.rs +++ b/src/test/ui/type-alias-impl-trait/issue-53096.rs @@ -1,5 +1,4 @@ -// check-pass -#![feature(const_impl_trait, const_fn_fn_ptr_basics)] +#![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(impl_trait_in_bindings, type_alias_impl_trait))] @@ -9,5 +8,7 @@ type Foo = impl Fn() -> usize; const fn bar() -> Foo { || 0usize } const BAZR: Foo = bar(); +//[min_tait]~^ ERROR not permitted here -fn main() {} +#[rustc_error] +fn main() {} //[full_tait]~ ERROR 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 fe3b739dd0b..70d049ffa76 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,5 +1,5 @@ warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-53678-generator-and-const-fn.rs:6:32 + --> $DIR/issue-53678-generator-and-const-fn.rs:4:32 | LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))] | ^^^^^^^^^^^^^^^^^^^^^^ @@ -8,12 +8,18 @@ LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trai = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information 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:6:56 + --> $DIR/issue-53678-generator-and-const-fn.rs:4:56 | LL | #![cfg_attr(full_tait, feature(impl_trait_in_bindings, type_alias_impl_trait))] | ^^^^^^^^^^^^^^^^^^^^^ | = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information -warning: 2 warnings emitted +error: fatal error triggered by #[rustc_error] + --> $DIR/issue-53678-generator-and-const-fn.rs:23:1 + | +LL | fn main() {} + | ^^^^^^^^^ + +error: aborting due to previous error; 2 warnings emitted 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 new file mode 100644 index 00000000000..a3dea45a6a5 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-53678-generator-and-const-fn.min_tait.stderr @@ -0,0 +1,12 @@ +error[E0658]: type alias impl trait is not permitted here + --> $DIR/issue-53678-generator-and-const-fn.rs:20:36 + | +LL | const FOO: GenOnce<usize, usize> = const_generator(10, 100); + | ^^^^^^^^^^^^^^^^^^^^^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable + +error: aborting due to previous error + +For more information about this error, try `rustc --explain E0658`. 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 35001eb70a0..bf607d29ce4 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,6 +1,4 @@ -// check-pass - -#![feature(const_impl_trait, generators, generator_trait)] +#![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(impl_trait_in_bindings, type_alias_impl_trait))] @@ -19,6 +17,7 @@ const fn const_generator<Y, R>(yielding: Y, returning: R) -> GenOnce<Y, R> { } } -const FOO: GenOnce<usize, usize> = const_generator(10, 100); +const FOO: GenOnce<usize, usize> = const_generator(10, 100); //[min_tait]~ ERROR not permitted here -fn main() {} +#[rustc_error] +fn main() {} //[full_tait]~ ERROR diff --git a/src/test/ui/type-alias-impl-trait/issue-60371.rs b/src/test/ui/type-alias-impl-trait/issue-60371.rs index 14d21418ae8..4ac7f9423ff 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60371.rs +++ b/src/test/ui/type-alias-impl-trait/issue-60371.rs @@ -12,6 +12,7 @@ impl Bug for &() { //~^^ ERROR could not find defining uses const FUN: fn() -> Self::Item = || (); + //~^ ERROR type alias impl trait is not permitted here } fn main() {} 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 461b8517ca4..255d381bf06 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60371.stderr +++ b/src/test/ui/type-alias-impl-trait/issue-60371.stderr @@ -7,6 +7,15 @@ LL | type Item = impl Bug; = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information = help: add `#![feature(min_type_alias_impl_trait)]` to the crate attributes to enable +error[E0658]: type alias impl trait is not permitted here + --> $DIR/issue-60371.rs:14:37 + | +LL | const FUN: fn() -> Self::Item = || (); + | ^^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable + error[E0277]: the trait bound `(): Bug` is not satisfied --> $DIR/issue-60371.rs:10:17 | @@ -22,7 +31,7 @@ error: could not find defining uses LL | type Item = impl Bug; | ^^^^^^^^ -error: aborting due to 3 previous errors +error: aborting due to 4 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/type-alias-impl-trait/issue-60407.full_tait.stderr b/src/test/ui/type-alias-impl-trait/issue-60407.full_tait.stderr index 31f7a77818c..5edf73c8ced 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,5 +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-60407.rs:5:32 + --> $DIR/issue-60407.rs:3:32 | LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] | ^^^^^^^^^^^^^^^^^^^^^ @@ -8,12 +8,18 @@ LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_binding = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-60407.rs:5:55 + --> $DIR/issue-60407.rs:3:55 | LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] | ^^^^^^^^^^^^^^^^^^^^^^ | = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information -warning: 2 warnings emitted +error: fatal error triggered by #[rustc_error] + --> $DIR/issue-60407.rs:12:1 + | +LL | fn main() { + | ^^^^^^^^^ + +error: aborting due to previous error; 2 warnings emitted 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 new file mode 100644 index 00000000000..edb8141c1b1 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-60407.min_tait.stderr @@ -0,0 +1,24 @@ +error[E0658]: type alias impl trait is not permitted here + --> $DIR/issue-60407.rs:9:39 + | +LL | static mut TEST: Option<Debuggable> = None; + | ^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable + +error: concrete type differs from previous defining opaque type use + --> $DIR/issue-60407.rs:16:1 + | +LL | fn foo() -> Debuggable { + | ^^^^^^^^^^^^^^^^^^^^^^ expected `[type error]`, got `u32` + | +note: previous use here + --> $DIR/issue-60407.rs:9:1 + | +LL | static mut TEST: Option<Debuggable> = None; + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +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-60407.rs b/src/test/ui/type-alias-impl-trait/issue-60407.rs index e2a2fb838b9..afcbf313cc8 100644 --- a/src/test/ui/type-alias-impl-trait/issue-60407.rs +++ b/src/test/ui/type-alias-impl-trait/issue-60407.rs @@ -1,19 +1,18 @@ -// check-pass - // revisions: min_tait full_tait -#![feature(min_type_alias_impl_trait)] +#![feature(min_type_alias_impl_trait, rustc_attrs)] #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] //[full_tait]~^ WARN incomplete //[full_tait]~| WARN incomplete type Debuggable = impl core::fmt::Debug; -static mut TEST: Option<Debuggable> = None; +static mut TEST: Option<Debuggable> = None; //[min_tait]~ ERROR not permitted here -fn main() { +#[rustc_error] +fn main() { //[full_tait]~ ERROR unsafe { TEST = Some(foo()) } } -fn foo() -> Debuggable { +fn foo() -> Debuggable { //[min_tait]~ ERROR concrete type differs 0u32 } 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 3ecca1270a9..bdf414d0bad 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,3 +1,12 @@ +error[E0658]: type alias impl trait is not permitted here + --> $DIR/issue-63279.rs:11:11 + | +LL | || -> Closure { || () } + | ^^^^^^^ + | + = note: see issue #63063 <https://github.com/rust-lang/rust/issues/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 | @@ -7,6 +16,7 @@ LL | type Closure = impl FnOnce(); = note: expected opaque type `impl FnOnce<()>` found unit type `()` -error: aborting due to previous error +error: aborting due to 2 previous errors -For more information about this error, try `rustc --explain E0271`. +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 3b0bddf8f7b..086715626bc 100644 --- a/src/test/ui/type-alias-impl-trait/issue-63279.rs +++ b/src/test/ui/type-alias-impl-trait/issue-63279.rs @@ -8,7 +8,7 @@ type Closure = impl FnOnce(); //~ ERROR: type mismatch resolving fn c() -> Closure { - || -> Closure { || () } + || -> Closure { || () } //[min_tait]~ ERROR: not permitted here } fn main() {} 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 8a51c14a008..cf668fc6e06 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,5 +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-65679-inst-opaque-ty-from-val-twice.rs:6:32 + --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:5:32 | LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] | ^^^^^^^^^^^^^^^^^^^^^ @@ -8,12 +8,18 @@ LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_binding = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes - --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:6:55 + --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:5:55 | LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] | ^^^^^^^^^^^^^^^^^^^^^^ | = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information -warning: 2 warnings emitted +error: fatal error triggered by #[rustc_error] + --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:19:1 + | +LL | fn main() { + | ^^^^^^^^^ + +error: aborting due to previous error; 2 warnings emitted 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 new file mode 100644 index 00000000000..5b6c4b5cda1 --- /dev/null +++ b/src/test/ui/type-alias-impl-trait/issue-65679-inst-opaque-ty-from-val-twice.min_tait.stderr @@ -0,0 +1,21 @@ +error[E0658]: type alias impl trait is not permitted here + --> $DIR/issue-65679-inst-opaque-ty-from-val-twice.rs:20:13 + | +LL | take(|| {}); + | ^ + | + = note: see issue #63063 <https://github.com/rust-lang/rust/issues/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:22:13 + | +LL | take(|| {}); + | ^ + | + = note: see issue #63063 <https://github.com/rust-lang/rust/issues/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 09709639c7b..b7f05bd83ed 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,5 +1,4 @@ // compile-flags: -Zsave-analysis -// check-pass // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait, rustc_attrs)] @@ -16,7 +15,10 @@ type T = impl Sized; fn take(_: fn() -> T) {} -fn main() { +#[rustc_error] +fn main() { //[full_tait]~ 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/no_inferrable_concrete_type.full_tait.stderr b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.full_tait.stderr index faddecb2176..40949c84d23 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,25 @@ 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))] +LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] | ^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(incomplete_features)]` on by default = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information +warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes + --> $DIR/no_inferrable_concrete_type.rs:6:55 + | +LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] + | ^^^^^^^^^^^^^^^^^^^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + error: could not find defining uses - --> $DIR/no_inferrable_concrete_type.rs:9:12 + --> $DIR/no_inferrable_concrete_type.rs:10:12 | LL | type Foo = impl Copy; | ^^^^^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error; 2 warnings emitted 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 3194bd76107..d69e4cccdf0 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,8 +1,18 @@ +error[E0658]: type alias impl trait is not permitted here + --> $DIR/no_inferrable_concrete_type.rs:16:12 + | +LL | let _: Foo = std::mem::transmute(0u8); + | ^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable + error: could not find defining uses - --> $DIR/no_inferrable_concrete_type.rs:9:12 + --> $DIR/no_inferrable_concrete_type.rs:10:12 | LL | type Foo = impl Copy; | ^^^^^^^^^ -error: aborting due to previous error +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/no_inferrable_concrete_type.rs b/src/test/ui/type-alias-impl-trait/no_inferrable_concrete_type.rs index 4fdaa033fb0..8ff588ef278 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 @@ -3,8 +3,9 @@ // revisions: min_tait full_tait #![feature(min_type_alias_impl_trait)] -#![cfg_attr(full_tait, feature(type_alias_impl_trait))] +#![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] //[full_tait]~^ WARN incomplete +//[full_tait]~| WARN incomplete type Foo = impl Copy; //~ could not find defining uses @@ -12,5 +13,5 @@ type Foo = impl Copy; //~ could not find defining uses fn bar(x: Foo) -> Foo { x } fn main() { - let _: Foo = std::mem::transmute(0u8); + let _: Foo = std::mem::transmute(0u8); //[min_tait]~ ERROR not permitted here } 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 f1ac45ba5db..e962b23a587 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,8 +1,12 @@ -error: `impl Send` cannot be used in patterns - --> $DIR/structural-match-no-leak.rs:19:9 +error[E0658]: type alias impl trait is not permitted here + --> $DIR/structural-match-no-leak.rs:15:24 | -LL | LEAK_FREE => (), - | ^^^^^^^^^ +LL | const LEAK_FREE: Bar = leak_free(); + | ^^^^^^^^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable error: aborting due to previous error +For more information about this error, try `rustc --explain E0658`. 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 34d9663223b..d0bae30f996 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 @@ -12,12 +12,12 @@ type Bar = impl Send; const fn leak_free() -> Bar { 7i32 } -const LEAK_FREE: Bar = leak_free(); +const LEAK_FREE: Bar = leak_free(); //[min_tait]~ ERROR not permitted here fn leak_free_test() { match todo!() { LEAK_FREE => (), - //~^ `impl Send` cannot be used in patterns + //[full_tait]~^ `impl Send` cannot be used in patterns _ => (), } } 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 4202d0fff43..b94e06e6d0e 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,25 @@ 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:36 + --> $DIR/structural-match.rs:4:32 | -LL | #![cfg_attr(not(min_tait), feature(type_alias_impl_trait, min_type_alias_impl_trait))] - | ^^^^^^^^^^^^^^^^^^^^^ +LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] + | ^^^^^^^^^^^^^^^^^^^^^ | = note: `#[warn(incomplete_features)]` on by default = note: see issue #63063 <https://github.com/rust-lang/rust/issues/63063> for more information +warning: the feature `impl_trait_in_bindings` is incomplete and may not be safe to use and/or cause compiler crashes + --> $DIR/structural-match.rs:4:55 + | +LL | #![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] + | ^^^^^^^^^^^^^^^^^^^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + error: `impl Send` cannot be used in patterns - --> $DIR/structural-match.rs:19:9 + --> $DIR/structural-match.rs:20:9 | LL | VALUE => (), | ^^^^^ -error: aborting due to previous error; 1 warning emitted +error: aborting due to previous error; 2 warnings emitted 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 f63b1fb23df..36c49a954bd 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,8 +1,12 @@ -error: `impl Send` cannot be used in patterns - --> $DIR/structural-match.rs:19:9 +error[E0658]: type alias impl trait is not permitted here + --> $DIR/structural-match.rs:16:20 | -LL | VALUE => (), - | ^^^^^ +LL | const VALUE: Foo = value(); + | ^^^^^^^ + | + = note: see issue #63065 <https://github.com/rust-lang/rust/issues/63065> for more information + = help: add `#![feature(impl_trait_in_bindings)]` to the crate attributes to enable error: aborting due to previous error +For more information about this error, try `rustc --explain E0658`. 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 ceab13ba487..daf914cc494 100644 --- a/src/test/ui/type-alias-impl-trait/structural-match.rs +++ b/src/test/ui/type-alias-impl-trait/structural-match.rs @@ -1,8 +1,9 @@ #![feature(const_impl_trait)] // revisions: min_tait full_tait -#![cfg_attr(min_tait, feature(min_type_alias_impl_trait))] -#![cfg_attr(not(min_tait), feature(type_alias_impl_trait, min_type_alias_impl_trait))] +#![feature(min_type_alias_impl_trait)] +#![cfg_attr(full_tait, feature(type_alias_impl_trait, impl_trait_in_bindings))] //[full_tait]~^ WARN incomplete +//[full_tait]~| WARN incomplete type Foo = impl Send; @@ -12,12 +13,12 @@ struct A; const fn value() -> Foo { A } -const VALUE: Foo = value(); +const VALUE: Foo = value(); //[min_tait]~ ERROR not permitted here fn test() { match todo!() { VALUE => (), - //~^ `impl Send` cannot be used in patterns + //[full_tait]~^ `impl Send` cannot be used in patterns _ => (), } } |
