Update tests

This commit is contained in:
Matthew Jasper 2019-12-28 15:54:27 +00:00
parent bb8c9911f5
commit 93ac5bc7de
18 changed files with 292 additions and 158 deletions

View File

@ -123,12 +123,9 @@ impl<T: Sync + Sized> Foo<T> {
}
struct AlanTuring<T>(T);
const fn no_rpit2() -> AlanTuring<impl std::fmt::Debug> { AlanTuring(0) }
//~^ ERROR `impl Trait` in const fn is unstable
const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
//~^ ERROR trait bounds other than `Sized`
const fn no_apit(_x: impl std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized`
const fn no_rpit() -> impl std::fmt::Debug {} //~ ERROR `impl Trait` in const fn is unstable
const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {} //~ ERROR trait bounds other than `Sized`
const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
//~^ ERROR trait bounds other than `Sized`

View File

@ -214,17 +214,8 @@ LL | impl<T: Sync + Sized> Foo<T> {
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error[E0723]: `impl Trait` in const fn is unstable
--> $DIR/min_const_fn.rs:126:24
|
LL | const fn no_rpit2() -> AlanTuring<impl std::fmt::Debug> { AlanTuring(0) }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:128:34
--> $DIR/min_const_fn.rs:126:34
|
LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
| ^^^^^^^^^^^^^^^^^^^^
@ -233,7 +224,7 @@ LL | const fn no_apit2(_x: AlanTuring<impl std::fmt::Debug>) {}
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:130:22
--> $DIR/min_const_fn.rs:128:22
|
LL | const fn no_apit(_x: impl std::fmt::Debug) {}
| ^^^^^^^^^^^^^^^^^^^^
@ -241,17 +232,8 @@ LL | const fn no_apit(_x: impl std::fmt::Debug) {}
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error[E0723]: `impl Trait` in const fn is unstable
--> $DIR/min_const_fn.rs:131:23
|
LL | const fn no_rpit() -> impl std::fmt::Debug {}
| ^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:132:23
--> $DIR/min_const_fn.rs:129:23
|
LL | const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {}
| ^^
@ -260,7 +242,7 @@ LL | const fn no_dyn_trait(_x: &dyn std::fmt::Debug) {}
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:133:32
--> $DIR/min_const_fn.rs:130:32
|
LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -269,7 +251,7 @@ LL | const fn no_dyn_trait_ret() -> &'static dyn std::fmt::Debug { &() }
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error[E0723]: trait bounds other than `Sized` on const fn parameters are unstable
--> $DIR/min_const_fn.rs:138:41
--> $DIR/min_const_fn.rs:135:41
|
LL | const fn really_no_traits_i_mean_it() { (&() as &dyn std::fmt::Debug, ()).1 }
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
@ -278,7 +260,7 @@ LL | const fn really_no_traits_i_mean_it() { (&() as &dyn std::fmt::Debug, ()).1
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error[E0723]: function pointers in const fn are unstable
--> $DIR/min_const_fn.rs:141:21
--> $DIR/min_const_fn.rs:138:21
|
LL | const fn no_fn_ptrs(_x: fn()) {}
| ^^
@ -287,7 +269,7 @@ LL | const fn no_fn_ptrs(_x: fn()) {}
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error[E0723]: function pointers in const fn are unstable
--> $DIR/min_const_fn.rs:143:27
--> $DIR/min_const_fn.rs:140:27
|
LL | const fn no_fn_ptrs2() -> fn() { fn foo() {} foo }
| ^^^^
@ -295,7 +277,7 @@ LL | const fn no_fn_ptrs2() -> fn() { fn foo() {} foo }
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error: aborting due to 34 previous errors
error: aborting due to 32 previous errors
Some errors have detailed explanations: E0493, E0723.
For more information about an error, try `rustc --explain E0493`.

View File

@ -0,0 +1,9 @@
struct AlanTuring<T>(T);
const fn no_rpit2() -> AlanTuring<impl std::fmt::Debug> {
//~^ ERROR `impl Trait` in const fn is unstable
AlanTuring(0)
}
const fn no_rpit() -> impl std::fmt::Debug {} //~ ERROR `impl Trait` in const fn is unstable
fn main() {}

View File

@ -0,0 +1,21 @@
error[E0723]: `impl Trait` in const fn is unstable
--> $DIR/min_const_fn_impl_trait.rs:2:24
|
LL | const fn no_rpit2() -> AlanTuring<impl std::fmt::Debug> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error[E0723]: `impl Trait` in const fn is unstable
--> $DIR/min_const_fn_impl_trait.rs:7:23
|
LL | const fn no_rpit() -> impl std::fmt::Debug {}
| ^^^^^^^^^^^^^^^^^^^^
|
= note: see issue #57563 <https://github.com/rust-lang/rust/issues/57563> for more information
= help: add `#![feature(const_fn)]` to the crate attributes to enable
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0723`.

View File

@ -1,9 +1,10 @@
trait Trait<'a, 'b> { }
trait Trait<'a, 'b> {}
impl<T> Trait<'_, '_> for T {}
fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> impl Trait<'a, 'b> {
//~^ ERROR ambiguous lifetime bound
//~| ERROR ambiguous lifetime bound
(x, y)
}
fn main() { }
fn main() {}

View File

@ -6,5 +6,13 @@ LL | fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> impl Trait<'a, 'b> {
|
= help: add #![feature(member_constraints)] to the crate attributes to enable
error: aborting due to previous error
error: ambiguous lifetime bound in `impl Trait`
--> $DIR/feature-gate-member-constraints.rs:4:43
|
LL | fn foo<'a, 'b>(x: &'a u32, y: &'b u32) -> impl Trait<'a, 'b> {
| ^^^^^^^^^^^^^^^^^^ the elided lifetimes here do not outlive one another
|
= help: add #![feature(member_constraints)] to the crate attributes to enable
error: aborting due to 2 previous errors

View File

@ -4,9 +4,34 @@ error[E0391]: cycle detected when processing `cycle1::{{opaque}}#0`
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^
|
note: ...which requires borrow-checking `cycle1`...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires processing `cycle1`...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires processing `cycle1`...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires unsafety-checking `cycle1`...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires building MIR for...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires type-checking `cycle1`...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
= note: ...which requires evaluating trait selection obligation `impl std::clone::Clone: std::marker::Send`...
@ -15,9 +40,34 @@ note: ...which requires processing `cycle2::{{opaque}}#0`...
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^
note: ...which requires borrow-checking `cycle2`...
--> $DIR/auto-trait-leak.rs:21:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires processing `cycle2`...
--> $DIR/auto-trait-leak.rs:22:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires processing `cycle2`...
--> $DIR/auto-trait-leak.rs:21:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires unsafety-checking `cycle2`...
--> $DIR/auto-trait-leak.rs:21:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires building MIR for...
--> $DIR/auto-trait-leak.rs:21:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires type-checking `cycle2`...
--> $DIR/auto-trait-leak.rs:21:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
= note: ...which requires evaluating trait selection obligation `impl std::clone::Clone: std::marker::Send`...
@ -40,9 +90,34 @@ error[E0391]: cycle detected when processing `cycle1::{{opaque}}#0`
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^
|
note: ...which requires borrow-checking `cycle1`...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires processing `cycle1`...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires processing `cycle1`...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires unsafety-checking `cycle1`...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires building MIR for...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires type-checking `cycle1`...
--> $DIR/auto-trait-leak.rs:12:1
|
LL | fn cycle1() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
= note: ...which requires evaluating trait selection obligation `impl std::clone::Clone: std::marker::Send`...
@ -51,6 +126,11 @@ note: ...which requires processing `cycle2::{{opaque}}#0`...
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^
note: ...which requires borrow-checking `cycle2`...
--> $DIR/auto-trait-leak.rs:21:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires processing `cycle2`...
--> $DIR/auto-trait-leak.rs:22:1
|
@ -89,6 +169,26 @@ LL | fn cycle2() -> impl Clone {
note: ...which requires processing `cycle2`...
--> $DIR/auto-trait-leak.rs:22:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires processing `cycle2`...
--> $DIR/auto-trait-leak.rs:21:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires unsafety-checking `cycle2`...
--> $DIR/auto-trait-leak.rs:21:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires building MIR for...
--> $DIR/auto-trait-leak.rs:21:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
note: ...which requires type-checking `cycle2`...
--> $DIR/auto-trait-leak.rs:21:1
|
LL | fn cycle2() -> impl Clone {
| ^^^^^^^^^^^^^^^^^^^^^^^^^
= note: ...which again requires processing `cycle1::{{opaque}}#0`, completing the cycle

View File

@ -1,6 +1,9 @@
// Test that an `impl Trait` type that expands to itself is an error.
fn test() -> impl Sized { //~ ERROR E0720
#![allow(unconditional_recursion)]
fn test() -> impl Sized {
//~^ ERROR E0720
test()
}

View File

@ -1,5 +1,5 @@
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-direct.rs:3:14
--> $DIR/recursive-impl-trait-type-direct.rs:5:14
|
LL | fn test() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type

View File

@ -2,59 +2,75 @@
// otherwise forbidden.
#![feature(generators)]
#![allow(unconditional_recursion)]
fn option(i: i32) -> impl Sized { //~ ERROR
if i < 0 {
None
} else {
Some((option(i - 1), i))
}
fn option(i: i32) -> impl Sized {
//~^ ERROR
if i < 0 { None } else { Some((option(i - 1), i)) }
}
fn tuple() -> impl Sized { //~ ERROR
fn tuple() -> impl Sized {
//~^ ERROR
(tuple(),)
}
fn array() -> impl Sized { //~ ERROR
fn array() -> impl Sized {
//~^ ERROR
[array()]
}
fn ptr() -> impl Sized { //~ ERROR
fn ptr() -> impl Sized {
//~^ ERROR
&ptr() as *const _
}
fn fn_ptr() -> impl Sized { //~ ERROR
fn fn_ptr() -> impl Sized {
//~^ ERROR
fn_ptr as fn() -> _
}
fn closure_capture() -> impl Sized { //~ ERROR
fn closure_capture() -> impl Sized {
//~^ ERROR
let x = closure_capture();
move || { x; }
move || {
x;
}
}
fn closure_ref_capture() -> impl Sized { //~ ERROR
fn closure_ref_capture() -> impl Sized {
//~^ ERROR
let x = closure_ref_capture();
move || { &x; }
move || {
&x;
}
}
fn closure_sig() -> impl Sized { //~ ERROR
fn closure_sig() -> impl Sized {
//~^ ERROR
|| closure_sig()
}
fn generator_sig() -> impl Sized { //~ ERROR
fn generator_sig() -> impl Sized {
//~^ ERROR
|| generator_sig()
}
fn generator_capture() -> impl Sized { //~ ERROR
fn generator_capture() -> impl Sized {
//~^ ERROR
let x = generator_capture();
move || { yield; x; }
move || {
yield;
x;
}
}
fn substs_change<T>() -> impl Sized { //~ ERROR
fn substs_change<T: 'static>() -> impl Sized {
//~^ ERROR
(substs_change::<&T>(),)
}
fn generator_hold() -> impl Sized { //~ ERROR
fn generator_hold() -> impl Sized {
//~^ ERROR
move || {
let x = generator_hold();
yield;
@ -62,15 +78,18 @@ fn generator_hold() -> impl Sized { //~ ERROR
}
}
fn use_fn_ptr() -> impl Sized { // OK, error already reported
fn use_fn_ptr() -> impl Sized {
// OK, error already reported
fn_ptr()
}
fn mutual_recursion() -> impl Sync { //~ ERROR
fn mutual_recursion() -> impl Sync {
//~^ ERROR
mutual_recursion_b()
}
fn mutual_recursion_b() -> impl Sized { //~ ERROR
fn mutual_recursion_b() -> impl Sized {
//~^ ERROR
mutual_recursion()
}

View File

@ -1,5 +1,5 @@
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:6:22
--> $DIR/recursive-impl-trait-type-indirect.rs:7:22
|
LL | fn option(i: i32) -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
@ -7,7 +7,7 @@ LL | fn option(i: i32) -> impl Sized {
= note: expanded type is `std::option::Option<(impl Sized, i32)>`
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:14:15
--> $DIR/recursive-impl-trait-type-indirect.rs:12:15
|
LL | fn tuple() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
@ -15,7 +15,7 @@ LL | fn tuple() -> impl Sized {
= note: expanded type is `(impl Sized,)`
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:18:15
--> $DIR/recursive-impl-trait-type-indirect.rs:17:15
|
LL | fn array() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
@ -31,7 +31,7 @@ LL | fn ptr() -> impl Sized {
= note: expanded type is `*const impl Sized`
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:26:16
--> $DIR/recursive-impl-trait-type-indirect.rs:27:16
|
LL | fn fn_ptr() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
@ -39,63 +39,63 @@ LL | fn fn_ptr() -> impl Sized {
= note: expanded type is `fn() -> impl Sized`
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:30:25
--> $DIR/recursive-impl-trait-type-indirect.rs:32:25
|
LL | fn closure_capture() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
|
= note: expanded type is `[closure@$DIR/recursive-impl-trait-type-indirect.rs:32:5: 32:19 x:impl Sized]`
= note: expanded type is `[closure@$DIR/recursive-impl-trait-type-indirect.rs:35:5: 37:6 x:impl Sized]`
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:35:29
--> $DIR/recursive-impl-trait-type-indirect.rs:40:29
|
LL | fn closure_ref_capture() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
|
= note: expanded type is `[closure@$DIR/recursive-impl-trait-type-indirect.rs:37:5: 37:20 x:impl Sized]`
= note: expanded type is `[closure@$DIR/recursive-impl-trait-type-indirect.rs:43:5: 45:6 x:impl Sized]`
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:40:21
--> $DIR/recursive-impl-trait-type-indirect.rs:48:21
|
LL | fn closure_sig() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
|
= note: expanded type is `[closure@$DIR/recursive-impl-trait-type-indirect.rs:41:5: 41:21]`
= note: expanded type is `[closure@$DIR/recursive-impl-trait-type-indirect.rs:50:5: 50:21]`
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:44:23
--> $DIR/recursive-impl-trait-type-indirect.rs:53:23
|
LL | fn generator_sig() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
|
= note: expanded type is `[closure@$DIR/recursive-impl-trait-type-indirect.rs:45:5: 45:23]`
= note: expanded type is `[closure@$DIR/recursive-impl-trait-type-indirect.rs:55:5: 55:23]`
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:48:27
--> $DIR/recursive-impl-trait-type-indirect.rs:58:27
|
LL | fn generator_capture() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
|
= note: expanded type is `[generator@$DIR/recursive-impl-trait-type-indirect.rs:50:5: 50:26 x:impl Sized {()}]`
= note: expanded type is `[generator@$DIR/recursive-impl-trait-type-indirect.rs:61:5: 64:6 x:impl Sized {()}]`
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:53:26
--> $DIR/recursive-impl-trait-type-indirect.rs:67:35
|
LL | fn substs_change<T>() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
LL | fn substs_change<T: 'static>() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
|
= note: expanded type is `(impl Sized,)`
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:57:24
--> $DIR/recursive-impl-trait-type-indirect.rs:72:24
|
LL | fn generator_hold() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type
|
= note: expanded type is `[generator@$DIR/recursive-impl-trait-type-indirect.rs:58:5: 62:6 {impl Sized, ()}]`
= note: expanded type is `[generator@$DIR/recursive-impl-trait-type-indirect.rs:74:5: 78:6 {impl Sized, ()}]`
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:69:26
--> $DIR/recursive-impl-trait-type-indirect.rs:86:26
|
LL | fn mutual_recursion() -> impl Sync {
| ^^^^^^^^^ expands to a recursive type
@ -103,7 +103,7 @@ LL | fn mutual_recursion() -> impl Sync {
= note: type resolves to itself
error[E0720]: opaque type expands to a recursive type
--> $DIR/recursive-impl-trait-type-indirect.rs:73:28
--> $DIR/recursive-impl-trait-type-indirect.rs:91:28
|
LL | fn mutual_recursion_b() -> impl Sized {
| ^^^^^^^^^^ expands to a recursive type

View File

@ -2,17 +2,17 @@
// Exercise the unused_mut attribute in some positive and negative cases
#![deny(unused_mut)]
#![warn(unused_mut)]
#![feature(async_closure, raw_ref_op)]
async fn baz_async(
mut a: i32,
//~^ ERROR: variable does not need to be mutable
//~^ WARN: variable does not need to be mutable
#[allow(unused_mut)] mut b: i32,
) {}
fn baz(
mut a: i32,
//~^ ERROR: variable does not need to be mutable
//~^ WARN: variable does not need to be mutable
#[allow(unused_mut)] mut b: i32,
#[allow(unused_mut)] (mut c, d): (i32, i32)
) {}
@ -21,13 +21,13 @@ struct RefStruct {}
impl RefStruct {
async fn baz_async(
mut a: i32,
//~^ ERROR: variable does not need to be mutable
//~^ WARN: variable does not need to be mutable
#[allow(unused_mut)] mut b: i32,
) {}
fn baz(
&self,
mut a: i32,
//~^ ERROR: variable does not need to be mutable
//~^ WARN: variable does not need to be mutable
#[allow(unused_mut)] mut b: i32,
#[allow(unused_mut)] (mut c, d): (i32, i32)
) {}
@ -37,7 +37,7 @@ trait RefTrait {
fn baz(
&self,
mut a: i32,
//~^ ERROR: variable does not need to be mutable
//~^ WARN: variable does not need to be mutable
#[allow(unused_mut)] mut b: i32,
#[allow(unused_mut)] (mut c, d): (i32, i32)
) {}
@ -46,7 +46,7 @@ impl RefTrait for () {
fn baz(
&self,
mut a: i32,
//~^ ERROR: variable does not need to be mutable
//~^ WARN: variable does not need to be mutable
#[allow(unused_mut)] mut b: i32,
#[allow(unused_mut)] (mut c, d): (i32, i32)
) {}
@ -55,32 +55,32 @@ impl RefTrait for () {
fn main() {
let _ = async move |
mut a: i32,
//~^ ERROR: variable does not need to be mutable
//~^ WARN: variable does not need to be mutable
#[allow(unused_mut)] mut b: i32,
| {};
let _ = |
mut a: i32,
//~^ ERROR: variable does not need to be mutable
//~^ WARN: variable does not need to be mutable
#[allow(unused_mut)] mut b: i32,
#[allow(unused_mut)] (mut c, d): (i32, i32)
| {};
// negative cases
let mut a = 3; //~ ERROR: variable does not need to be mutable
let mut a = 3; //~ WARN: variable does not need to be mutable
let mut a = 2; //~ ERROR: variable does not need to be mutable
let mut a = 2; //~ WARN: variable does not need to be mutable
let mut b = 3; //~ ERROR: variable does not need to be mutable
let mut b = 3; //~ WARN: variable does not need to be mutable
let mut a = vec![3]; //~ ERROR: variable does not need to be mutable
let mut a = vec![3]; //~ WARN: variable does not need to be mutable
let (mut a, b) = (1, 2); //~ ERROR: variable does not need to be mutable
let (mut a, b) = (1, 2); //~ WARN: variable does not need to be mutable
let mut a; //~ ERROR: variable does not need to be mutable
let mut a; //~ WARN: variable does not need to be mutable
a = 3;
let mut b; //~ ERROR: variable does not need to be mutable
let mut b; //~ WARN: variable does not need to be mutable
if true {
b = 3;
@ -89,11 +89,11 @@ fn main() {
}
match 30 {
mut x => {} //~ ERROR: variable does not need to be mutable
mut x => {} //~ WARN: variable does not need to be mutable
}
match (30, 2) {
(mut x, 1) | //~ ERROR: variable does not need to be mutable
(mut x, 1) | //~ WARN: variable does not need to be mutable
(mut x, 2) |
(mut x, 3) => {
@ -101,20 +101,20 @@ fn main() {
_ => {}
}
let x = |mut y: isize| 10; //~ ERROR: variable does not need to be mutable
let x = |mut y: isize| 10; //~ WARN: variable does not need to be mutable
fn what(mut foo: isize) {} //~ ERROR: variable does not need to be mutable
fn what(mut foo: isize) {} //~ WARN: variable does not need to be mutable
let mut a = &mut 5; //~ ERROR: variable does not need to be mutable
let mut a = &mut 5; //~ WARN: variable does not need to be mutable
*a = 4;
let mut a = 5;
let mut b = (&mut a,); //~ ERROR: variable does not need to be mutable
let mut b = (&mut a,); //~ WARN: variable does not need to be mutable
*b.0 = 4;
let mut x = &mut 1; //~ ERROR: variable does not need to be mutable
let mut x = &mut 1; //~ WARN: variable does not need to be mutable
let mut f = || {
*x += 1;
@ -122,11 +122,11 @@ fn main() {
f();
fn mut_ref_arg(mut arg : &mut [u8]) -> &mut [u8] {
&mut arg[..] //~^ ERROR: variable does not need to be mutable
&mut arg[..] //~^ WARN: variable does not need to be mutable
}
let mut v : &mut Vec<()> = &mut vec![]; //~ ERROR: variable does not need to be mutable
let mut v : &mut Vec<()> = &mut vec![]; //~ WARN: variable does not need to be mutable
v.push(());
@ -181,7 +181,7 @@ fn main() {
let mut raw_address_of_mut = 1; // OK
let mut_ptr = &raw mut raw_address_of_mut;
let mut raw_address_of_const = 1; //~ ERROR: variable does not need to be mutable
let mut raw_address_of_const = 1; //~ WARN: variable does not need to be mutable
let const_ptr = &raw const raw_address_of_const;
}

View File

@ -1,4 +1,4 @@
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:9:5
|
LL | mut a: i32,
@ -9,18 +9,10 @@ LL | mut a: i32,
note: the lint level is defined here
--> $DIR/lint-unused-mut-variables.rs:5:9
|
LL | #![deny(unused_mut)]
LL | #![warn(unused_mut)]
| ^^^^^^^^^^
error: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:14:5
|
LL | mut a: i32,
| ----^
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:23:9
|
LL | mut a: i32,
@ -28,7 +20,15 @@ LL | mut a: i32,
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:14:5
|
LL | mut a: i32,
| ----^
| |
| help: remove this `mut`
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:29:9
|
LL | mut a: i32,
@ -36,7 +36,7 @@ LL | mut a: i32,
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:39:9
|
LL | mut a: i32,
@ -44,7 +44,7 @@ LL | mut a: i32,
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:48:9
|
LL | mut a: i32,
@ -52,7 +52,7 @@ LL | mut a: i32,
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:57:9
|
LL | mut a: i32,
@ -60,7 +60,7 @@ LL | mut a: i32,
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:62:9
|
LL | mut a: i32,
@ -68,7 +68,7 @@ LL | mut a: i32,
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:104:14
|
LL | let x = |mut y: isize| 10;
@ -76,7 +76,7 @@ LL | let x = |mut y: isize| 10;
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:69:9
|
LL | let mut a = 3;
@ -84,7 +84,7 @@ LL | let mut a = 3;
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:71:9
|
LL | let mut a = 2;
@ -92,7 +92,7 @@ LL | let mut a = 2;
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:73:9
|
LL | let mut b = 3;
@ -100,7 +100,7 @@ LL | let mut b = 3;
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:75:9
|
LL | let mut a = vec![3];
@ -108,7 +108,7 @@ LL | let mut a = vec![3];
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:77:10
|
LL | let (mut a, b) = (1, 2);
@ -116,7 +116,7 @@ LL | let (mut a, b) = (1, 2);
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:79:9
|
LL | let mut a;
@ -124,7 +124,7 @@ LL | let mut a;
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:83:9
|
LL | let mut b;
@ -132,7 +132,7 @@ LL | let mut b;
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:92:9
|
LL | mut x => {}
@ -140,7 +140,7 @@ LL | mut x => {}
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:96:8
|
LL | (mut x, 1) |
@ -148,7 +148,7 @@ LL | (mut x, 1) |
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:109:9
|
LL | let mut a = &mut 5;
@ -156,7 +156,7 @@ LL | let mut a = &mut 5;
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:114:9
|
LL | let mut b = (&mut a,);
@ -164,7 +164,7 @@ LL | let mut b = (&mut a,);
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:117:9
|
LL | let mut x = &mut 1;
@ -172,7 +172,7 @@ LL | let mut x = &mut 1;
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:129:9
|
LL | let mut v : &mut Vec<()> = &mut vec![];
@ -180,7 +180,7 @@ LL | let mut v : &mut Vec<()> = &mut vec![];
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:184:9
|
LL | let mut raw_address_of_const = 1;
@ -188,7 +188,7 @@ LL | let mut raw_address_of_const = 1;
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:106:13
|
LL | fn what(mut foo: isize) {}
@ -196,7 +196,7 @@ LL | fn what(mut foo: isize) {}
| |
| help: remove this `mut`
error: variable does not need to be mutable
warning: variable does not need to be mutable
--> $DIR/lint-unused-mut-variables.rs:124:20
|
LL | fn mut_ref_arg(mut arg : &mut [u8]) -> &mut [u8] {
@ -218,5 +218,5 @@ note: the lint level is defined here
LL | #[deny(unused_mut)]
| ^^^^^^^^^^
error: aborting due to 26 previous errors
error: aborting due to previous error

View File

@ -7,11 +7,11 @@ fn main() {}
// test that unused generic parameters are ok
type Two<T, U> = impl Debug;
fn two<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
fn two<T: Copy + Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
(t, t)
}
fn three<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
//~^ concrete type differs from previous
fn three<T: Copy + Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
//~^ concrete type differs from previous
(u, t)
}

View File

@ -1,7 +1,7 @@
error: concrete type differs from previous defining opaque type use
--> $DIR/generic_duplicate_param_use6.rs:14:1
|
LL | / fn three<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
LL | / fn three<T: Copy + Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
LL | |
LL | | (u, t)
LL | | }
@ -10,7 +10,7 @@ LL | | }
note: previous use here
--> $DIR/generic_duplicate_param_use6.rs:10:1
|
LL | / fn two<T: Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
LL | / fn two<T: Copy + Debug, U: Debug>(t: T, u: U) -> Two<T, U> {
LL | | (t, t)
LL | | }
| |_^

View File

@ -7,7 +7,7 @@ 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 };
//~^ ERROR: concrete type differs from previous defining opaque type use
println!("{:?}", null());
}

View File

@ -1,20 +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 `std::string::String`, got `i32`
|
note: previous use here
--> $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

View File

@ -8,7 +8,7 @@ trait IterBits {
type IterBitsIter<T, E, I> = impl std::iter::Iterator<Item = I>;
//~^ ERROR could not find defining uses
impl<T, E> IterBits for T
impl<T: Copy, E> IterBits for T
where
T: std::ops::Shr<Output = T>
+ std::ops::BitAnd<T, Output = T>