elided_named_lifetimes: bless & add tests
This commit is contained in:
parent
f7b0b22137
commit
a9b959a020
@ -1,3 +1,14 @@
|
|||||||
|
error: elided lifetime has a name
|
||||||
|
--> tests/ui/needless_lifetimes.rs:266:52
|
||||||
|
|
|
||||||
|
LL | fn named_input_elided_output<'a>(_arg: &'a str) -> &str {
|
||||||
|
| -- ^ this elided lifetime gets resolved as `'a`
|
||||||
|
| |
|
||||||
|
| lifetime `'a` declared here
|
||||||
|
|
|
||||||
|
= note: `-D elided-named-lifetimes` implied by `-D warnings`
|
||||||
|
= help: to override `-D warnings` add `#[allow(elided_named_lifetimes)]`
|
||||||
|
|
||||||
error: the following explicit lifetimes could be elided: 'a, 'b
|
error: the following explicit lifetimes could be elided: 'a, 'b
|
||||||
--> tests/ui/needless_lifetimes.rs:17:23
|
--> tests/ui/needless_lifetimes.rs:17:23
|
||||||
|
|
|
|
||||||
@ -553,5 +564,5 @@ LL - fn one_input<'a>(x: &'a u8) -> &'a u8 {
|
|||||||
LL + fn one_input(x: &u8) -> &u8 {
|
LL + fn one_input(x: &u8) -> &u8 {
|
||||||
|
|
|
|
||||||
|
|
||||||
error: aborting due to 46 previous errors
|
error: aborting due to 47 previous errors
|
||||||
|
|
||||||
|
@ -1,3 +1,12 @@
|
|||||||
|
error: elided lifetime has a name
|
||||||
|
--> tests/ui/ptr_arg.rs:295:56
|
||||||
|
|
|
||||||
|
LL | fn cow_good_ret_ty<'a>(input: &'a Cow<'a, str>) -> &str {
|
||||||
|
| -- lifetime `'a` declared here ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
|
||||||
|
= note: `-D elided-named-lifetimes` implied by `-D warnings`
|
||||||
|
= help: to override `-D warnings` add `#[allow(elided_named_lifetimes)]`
|
||||||
|
|
||||||
error: writing `&Vec` instead of `&[_]` involves a new object where a slice will do
|
error: writing `&Vec` instead of `&[_]` involves a new object where a slice will do
|
||||||
--> tests/ui/ptr_arg.rs:13:14
|
--> tests/ui/ptr_arg.rs:13:14
|
||||||
|
|
|
|
||||||
@ -212,5 +221,5 @@ error: using a reference to `Cow` is not recommended
|
|||||||
LL | fn cow_bad_ret_ty_2<'a, 'b>(input: &'a Cow<'a, str>) -> &'b str {
|
LL | fn cow_bad_ret_ty_2<'a, 'b>(input: &'a Cow<'a, str>) -> &'b str {
|
||||||
| ^^^^^^^^^^^^^^^^ help: change this to: `&str`
|
| ^^^^^^^^^^^^^^^^ help: change this to: `&str`
|
||||||
|
|
||||||
error: aborting due to 24 previous errors
|
error: aborting due to 25 previous errors
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@ trait Foo {}
|
|||||||
impl Xyz {
|
impl Xyz {
|
||||||
async fn do_sth<'a>(
|
async fn do_sth<'a>(
|
||||||
&'a self, foo: &dyn Foo
|
&'a self, foo: &dyn Foo
|
||||||
) -> &dyn Foo
|
) -> &dyn Foo //~ WARNING elided lifetime has a name
|
||||||
{
|
{
|
||||||
//~^ ERROR explicit lifetime required in the type of `foo` [E0621]
|
//~^ ERROR explicit lifetime required in the type of `foo` [E0621]
|
||||||
foo
|
foo
|
||||||
|
@ -1,3 +1,14 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/issue-63388-1.rs:12:10
|
||||||
|
|
|
||||||
|
LL | async fn do_sth<'a>(
|
||||||
|
| -- lifetime `'a` declared here
|
||||||
|
LL | &'a self, foo: &dyn Foo
|
||||||
|
LL | ) -> &dyn Foo
|
||||||
|
| ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
error[E0621]: explicit lifetime required in the type of `foo`
|
error[E0621]: explicit lifetime required in the type of `foo`
|
||||||
--> $DIR/issue-63388-1.rs:13:5
|
--> $DIR/issue-63388-1.rs:13:5
|
||||||
|
|
|
|
||||||
@ -10,6 +21,6 @@ LL | | foo
|
|||||||
LL | | }
|
LL | | }
|
||||||
| |_____^ lifetime `'a` required
|
| |_____^ lifetime `'a` required
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error; 1 warning emitted
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0621`.
|
For more information about this error, try `rustc --explain E0621`.
|
||||||
|
@ -0,0 +1,10 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/issue-71348.rs:18:68
|
||||||
|
|
|
||||||
|
LL | fn ask<'a, const N: &'static str>(&'a self) -> &'a <Self as Get<N>>::Target
|
||||||
|
| -- lifetime `'a` declared here ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
@ -1,3 +1,11 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/issue-71348.rs:18:68
|
||||||
|
|
|
||||||
|
LL | fn ask<'a, const N: &'static str>(&'a self) -> &'a <Self as Get<N>>::Target
|
||||||
|
| -- lifetime `'a` declared here ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
error: `&'static str` is forbidden as the type of a const generic parameter
|
error: `&'static str` is forbidden as the type of a const generic parameter
|
||||||
--> $DIR/issue-71348.rs:10:24
|
--> $DIR/issue-71348.rs:10:24
|
||||||
|
|
|
|
||||||
@ -30,5 +38,5 @@ help: add `#![feature(unsized_const_params)]` to the crate attributes to enable
|
|||||||
LL + #![feature(unsized_const_params)]
|
LL + #![feature(unsized_const_params)]
|
||||||
|
|
|
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors; 1 warning emitted
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ trait Get<'a, const N: &'static str> {
|
|||||||
impl Foo {
|
impl Foo {
|
||||||
fn ask<'a, const N: &'static str>(&'a self) -> &'a <Self as Get<N>>::Target
|
fn ask<'a, const N: &'static str>(&'a self) -> &'a <Self as Get<N>>::Target
|
||||||
//[min]~^ ERROR `&'static str` is forbidden as the type of a const generic parameter
|
//[min]~^ ERROR `&'static str` is forbidden as the type of a const generic parameter
|
||||||
|
//~^^ WARNING elided lifetime has a name
|
||||||
where
|
where
|
||||||
Self: Get<'a, N>,
|
Self: Get<'a, N>,
|
||||||
{
|
{
|
||||||
|
@ -44,8 +44,8 @@ impl<T> Foo<T> {
|
|||||||
impl<'a, T> Foo<T> {
|
impl<'a, T> Foo<T> {
|
||||||
const fn new_lt(t: T) -> Self { Foo(t) }
|
const fn new_lt(t: T) -> Self { Foo(t) }
|
||||||
const fn into_inner_lt(self) -> T { self.0 } //~ destructor of
|
const fn into_inner_lt(self) -> T { self.0 } //~ destructor of
|
||||||
const fn get_lt(&'a self) -> &T { &self.0 }
|
const fn get_lt(&'a self) -> &T { &self.0 } //~ WARNING elided lifetime has a name
|
||||||
const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 }
|
const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 } //~ WARNING elided lifetime has a name
|
||||||
//~^ mutable references
|
//~^ mutable references
|
||||||
//~| mutable references
|
//~| mutable references
|
||||||
//~| mutable references
|
//~| mutable references
|
||||||
|
@ -1,3 +1,23 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/min_const_fn.rs:47:34
|
||||||
|
|
|
||||||
|
LL | impl<'a, T> Foo<T> {
|
||||||
|
| -- lifetime `'a` declared here
|
||||||
|
...
|
||||||
|
LL | const fn get_lt(&'a self) -> &T { &self.0 }
|
||||||
|
| ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/min_const_fn.rs:48:42
|
||||||
|
|
|
||||||
|
LL | impl<'a, T> Foo<T> {
|
||||||
|
| -- lifetime `'a` declared here
|
||||||
|
...
|
||||||
|
LL | const fn get_mut_lt(&'a mut self) -> &mut T { &mut self.0 }
|
||||||
|
| ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
||||||
error[E0493]: destructor of `Foo<T>` cannot be evaluated at compile-time
|
error[E0493]: destructor of `Foo<T>` cannot be evaluated at compile-time
|
||||||
--> $DIR/min_const_fn.rs:37:25
|
--> $DIR/min_const_fn.rs:37:25
|
||||||
|
|
|
|
||||||
@ -228,7 +248,7 @@ LL | const fn no_apit(_x: impl std::fmt::Debug) {}
|
|||||||
| |
|
| |
|
||||||
| the destructor for this type cannot be evaluated in constant functions
|
| the destructor for this type cannot be evaluated in constant functions
|
||||||
|
|
||||||
error: aborting due to 24 previous errors
|
error: aborting due to 24 previous errors; 2 warnings emitted
|
||||||
|
|
||||||
Some errors have detailed explanations: E0493, E0658.
|
Some errors have detailed explanations: E0493, E0658.
|
||||||
For more information about an error, try `rustc --explain E0493`.
|
For more information about an error, try `rustc --explain E0493`.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//@ run-rustfix
|
//@ run-rustfix
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code, elided_named_lifetimes)]
|
||||||
#![deny(no_mangle_generic_items)]
|
#![deny(no_mangle_generic_items)]
|
||||||
|
|
||||||
pub fn foo<T>() {} //~ ERROR functions generic over types or consts must be mangled
|
pub fn foo<T>() {} //~ ERROR functions generic over types or consts must be mangled
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
//@ run-rustfix
|
//@ run-rustfix
|
||||||
#![allow(dead_code)]
|
#![allow(dead_code, elided_named_lifetimes)]
|
||||||
#![deny(no_mangle_generic_items)]
|
#![deny(no_mangle_generic_items)]
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -13,6 +13,7 @@ fn b() -> impl for<'a> Fn(&'a u8) -> (impl Debug + 'a) {
|
|||||||
|
|
||||||
fn c() -> impl for<'a> Fn(&'a u8) -> (impl Debug + '_) {
|
fn c() -> impl for<'a> Fn(&'a u8) -> (impl Debug + '_) {
|
||||||
//~^ ERROR `impl Trait` cannot capture higher-ranked lifetime from outer `impl Trait`
|
//~^ ERROR `impl Trait` cannot capture higher-ranked lifetime from outer `impl Trait`
|
||||||
|
//~| WARNING elided lifetime has a name
|
||||||
|x| x
|
|x| x
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
error[E0106]: missing lifetime specifier
|
error[E0106]: missing lifetime specifier
|
||||||
--> $DIR/impl-fn-hrtb-bounds.rs:19:38
|
--> $DIR/impl-fn-hrtb-bounds.rs:20:38
|
||||||
|
|
|
|
||||||
LL | fn d() -> impl Fn() -> (impl Debug + '_) {
|
LL | fn d() -> impl Fn() -> (impl Debug + '_) {
|
||||||
| ^^ expected named lifetime parameter
|
| ^^ expected named lifetime parameter
|
||||||
@ -10,6 +10,14 @@ help: consider using the `'static` lifetime, but this is uncommon unless you're
|
|||||||
LL | fn d() -> impl Fn() -> (impl Debug + 'static) {
|
LL | fn d() -> impl Fn() -> (impl Debug + 'static) {
|
||||||
| ~~~~~~~
|
| ~~~~~~~
|
||||||
|
|
||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/impl-fn-hrtb-bounds.rs:14:52
|
||||||
|
|
|
||||||
|
LL | fn c() -> impl for<'a> Fn(&'a u8) -> (impl Debug + '_) {
|
||||||
|
| -- lifetime `'a` declared here ^^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
error[E0657]: `impl Trait` cannot capture higher-ranked lifetime from outer `impl Trait`
|
error[E0657]: `impl Trait` cannot capture higher-ranked lifetime from outer `impl Trait`
|
||||||
--> $DIR/impl-fn-hrtb-bounds.rs:4:41
|
--> $DIR/impl-fn-hrtb-bounds.rs:4:41
|
||||||
|
|
|
|
||||||
@ -46,7 +54,7 @@ note: lifetime declared here
|
|||||||
LL | fn c() -> impl for<'a> Fn(&'a u8) -> (impl Debug + '_) {
|
LL | fn c() -> impl for<'a> Fn(&'a u8) -> (impl Debug + '_) {
|
||||||
| ^^
|
| ^^
|
||||||
|
|
||||||
error: aborting due to 4 previous errors
|
error: aborting due to 4 previous errors; 1 warning emitted
|
||||||
|
|
||||||
Some errors have detailed explanations: E0106, E0657.
|
Some errors have detailed explanations: E0106, E0657.
|
||||||
For more information about an error, try `rustc --explain E0106`.
|
For more information about an error, try `rustc --explain E0106`.
|
||||||
|
@ -3,6 +3,7 @@ use std::fmt::Debug;
|
|||||||
|
|
||||||
fn a<'a>() -> impl Fn(&'a u8) -> (impl Debug + '_) {
|
fn a<'a>() -> impl Fn(&'a u8) -> (impl Debug + '_) {
|
||||||
//~^ ERROR cannot resolve opaque type
|
//~^ ERROR cannot resolve opaque type
|
||||||
|
//~| WARNING elided lifetime has a name
|
||||||
|x| x
|
|x| x
|
||||||
//~^ ERROR expected generic lifetime parameter, found `'_`
|
//~^ ERROR expected generic lifetime parameter, found `'_`
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,17 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/impl-fn-predefined-lifetimes.rs:4:48
|
||||||
|
|
|
||||||
|
LL | fn a<'a>() -> impl Fn(&'a u8) -> (impl Debug + '_) {
|
||||||
|
| -- lifetime `'a` declared here ^^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
error[E0792]: expected generic lifetime parameter, found `'_`
|
error[E0792]: expected generic lifetime parameter, found `'_`
|
||||||
--> $DIR/impl-fn-predefined-lifetimes.rs:6:9
|
--> $DIR/impl-fn-predefined-lifetimes.rs:7:9
|
||||||
|
|
|
|
||||||
LL | fn a<'a>() -> impl Fn(&'a u8) -> (impl Debug + '_) {
|
LL | fn a<'a>() -> impl Fn(&'a u8) -> (impl Debug + '_) {
|
||||||
| -- this generic parameter must be used with a generic lifetime parameter
|
| -- this generic parameter must be used with a generic lifetime parameter
|
||||||
LL |
|
...
|
||||||
LL | |x| x
|
LL | |x| x
|
||||||
| ^
|
| ^
|
||||||
|
|
||||||
@ -13,7 +21,7 @@ error[E0720]: cannot resolve opaque type
|
|||||||
LL | fn a<'a>() -> impl Fn(&'a u8) -> (impl Debug + '_) {
|
LL | fn a<'a>() -> impl Fn(&'a u8) -> (impl Debug + '_) {
|
||||||
| ^^^^^^^^^^^^^^^ cannot resolve opaque type
|
| ^^^^^^^^^^^^^^^ cannot resolve opaque type
|
||||||
|
|
||||||
error: aborting due to 2 previous errors
|
error: aborting due to 2 previous errors; 1 warning emitted
|
||||||
|
|
||||||
Some errors have detailed explanations: E0720, E0792.
|
Some errors have detailed explanations: E0720, E0792.
|
||||||
For more information about an error, try `rustc --explain E0720`.
|
For more information about an error, try `rustc --explain E0720`.
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
//@ check-pass
|
//@ check-pass
|
||||||
|
|
||||||
pub fn iter<'a>(v: Vec<(u32, &'a u32)>) -> impl DoubleEndedIterator<Item = (u32, &u32)> {
|
pub fn iter<'a>(v: Vec<(u32, &'a u32)>) -> impl DoubleEndedIterator<Item = (u32, &u32)> {
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
v.into_iter()
|
v.into_iter()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
tests/ui/impl-trait/rpit-assoc-pair-with-lifetime.stderr
Normal file
10
tests/ui/impl-trait/rpit-assoc-pair-with-lifetime.stderr
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/rpit-assoc-pair-with-lifetime.rs:3:82
|
||||||
|
|
|
||||||
|
LL | pub fn iter<'a>(v: Vec<(u32, &'a u32)>) -> impl DoubleEndedIterator<Item = (u32, &u32)> {
|
||||||
|
| -- lifetime `'a` declared here ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
|
warning: 1 warning emitted
|
||||||
|
|
@ -47,5 +47,6 @@ fn l<'a>(_: &'a str, _: &'a str) -> &str { "" }
|
|||||||
|
|
||||||
// This is ok because both `'a` are for the same parameter.
|
// This is ok because both `'a` are for the same parameter.
|
||||||
fn m<'a>(_: &'a Foo<'a>) -> &str { "" }
|
fn m<'a>(_: &'a Foo<'a>) -> &str { "" }
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -105,6 +105,16 @@ help: consider using the `'a` lifetime
|
|||||||
LL | fn l<'a>(_: &'a str, _: &'a str) -> &'a str { "" }
|
LL | fn l<'a>(_: &'a str, _: &'a str) -> &'a str { "" }
|
||||||
| ++
|
| ++
|
||||||
|
|
||||||
error: aborting due to 7 previous errors
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/lifetime-elision-return-type-requires-explicit-lifetime.rs:49:29
|
||||||
|
|
|
||||||
|
LL | fn m<'a>(_: &'a Foo<'a>) -> &str { "" }
|
||||||
|
| -- ^ this elided lifetime gets resolved as `'a`
|
||||||
|
| |
|
||||||
|
| lifetime `'a` declared here
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
|
error: aborting due to 7 previous errors; 1 warning emitted
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0106`.
|
For more information about this error, try `rustc --explain E0106`.
|
||||||
|
@ -4,6 +4,7 @@ struct Foo {
|
|||||||
|
|
||||||
impl Foo {
|
impl Foo {
|
||||||
fn foo<'a>(&'a self, x: &i32) -> &i32 {
|
fn foo<'a>(&'a self, x: &i32) -> &i32 {
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
|
|
||||||
if true { &self.field } else { x } //~ ERROR explicit lifetime
|
if true { &self.field } else { x } //~ ERROR explicit lifetime
|
||||||
|
|
||||||
|
@ -1,12 +1,22 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/ex1-return-one-existing-name-if-else-using-impl-3.rs:6:36
|
||||||
|
|
|
||||||
|
LL | fn foo<'a>(&'a self, x: &i32) -> &i32 {
|
||||||
|
| -- ^ this elided lifetime gets resolved as `'a`
|
||||||
|
| |
|
||||||
|
| lifetime `'a` declared here
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
error[E0621]: explicit lifetime required in the type of `x`
|
error[E0621]: explicit lifetime required in the type of `x`
|
||||||
--> $DIR/ex1-return-one-existing-name-if-else-using-impl-3.rs:8:36
|
--> $DIR/ex1-return-one-existing-name-if-else-using-impl-3.rs:9:36
|
||||||
|
|
|
|
||||||
LL | fn foo<'a>(&'a self, x: &i32) -> &i32 {
|
LL | fn foo<'a>(&'a self, x: &i32) -> &i32 {
|
||||||
| ---- help: add explicit lifetime `'a` to the type of `x`: `&'a i32`
|
| ---- help: add explicit lifetime `'a` to the type of `x`: `&'a i32`
|
||||||
LL |
|
...
|
||||||
LL | if true { &self.field } else { x }
|
LL | if true { &self.field } else { x }
|
||||||
| ^ lifetime `'a` required
|
| ^ lifetime `'a` required
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error; 1 warning emitted
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0621`.
|
For more information about this error, try `rustc --explain E0621`.
|
||||||
|
@ -0,0 +1,12 @@
|
|||||||
|
#![deny(elided_named_lifetimes)]
|
||||||
|
|
||||||
|
struct Foo;
|
||||||
|
|
||||||
|
impl Foo {
|
||||||
|
pub fn get_mut(&'static self, x: &mut u8) -> &mut u8 {
|
||||||
|
//~^ ERROR elided lifetime has a name
|
||||||
|
unsafe { &mut *(x as *mut _) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,14 @@
|
|||||||
|
error: elided lifetime has a name
|
||||||
|
--> $DIR/example-from-issue48686.rs:6:50
|
||||||
|
|
|
||||||
|
LL | pub fn get_mut(&'static self, x: &mut u8) -> &mut u8 {
|
||||||
|
| ^ this elided lifetime gets resolved as `'static`
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/example-from-issue48686.rs:1:9
|
||||||
|
|
|
||||||
|
LL | #![deny(elided_named_lifetimes)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
#![deny(elided_named_lifetimes)]
|
||||||
|
|
||||||
|
fn ampersand<'a>(x: &'a u8) -> &u8 {
|
||||||
|
//~^ ERROR elided lifetime has a name
|
||||||
|
x
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Brackets<'a>(&'a u8);
|
||||||
|
|
||||||
|
fn brackets<'a>(x: &'a u8) -> Brackets {
|
||||||
|
//~^ ERROR elided lifetime has a name
|
||||||
|
Brackets(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Comma<'a, T>(&'a T);
|
||||||
|
|
||||||
|
fn comma<'a>(x: &'a u8) -> Comma<u8> {
|
||||||
|
//~^ ERROR elided lifetime has a name
|
||||||
|
Comma(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn underscore<'a>(x: &'a u8) -> &'_ u8 {
|
||||||
|
//~^ ERROR elided lifetime has a name
|
||||||
|
x
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,40 @@
|
|||||||
|
error: elided lifetime has a name
|
||||||
|
--> $DIR/missing-lifetime-kind.rs:3:32
|
||||||
|
|
|
||||||
|
LL | fn ampersand<'a>(x: &'a u8) -> &u8 {
|
||||||
|
| -- ^ this elided lifetime gets resolved as `'a`
|
||||||
|
| |
|
||||||
|
| lifetime `'a` declared here
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/missing-lifetime-kind.rs:1:9
|
||||||
|
|
|
||||||
|
LL | #![deny(elided_named_lifetimes)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: elided lifetime has a name
|
||||||
|
--> $DIR/missing-lifetime-kind.rs:10:31
|
||||||
|
|
|
||||||
|
LL | fn brackets<'a>(x: &'a u8) -> Brackets {
|
||||||
|
| -- ^^^^^^^^ this elided lifetime gets resolved as `'a`
|
||||||
|
| |
|
||||||
|
| lifetime `'a` declared here
|
||||||
|
|
||||||
|
error: elided lifetime has a name
|
||||||
|
--> $DIR/missing-lifetime-kind.rs:17:33
|
||||||
|
|
|
||||||
|
LL | fn comma<'a>(x: &'a u8) -> Comma<u8> {
|
||||||
|
| -- ^ this elided lifetime gets resolved as `'a`
|
||||||
|
| |
|
||||||
|
| lifetime `'a` declared here
|
||||||
|
|
||||||
|
error: elided lifetime has a name
|
||||||
|
--> $DIR/missing-lifetime-kind.rs:22:34
|
||||||
|
|
|
||||||
|
LL | fn underscore<'a>(x: &'a u8) -> &'_ u8 {
|
||||||
|
| -- ^^ this elided lifetime gets resolved as `'a`
|
||||||
|
| |
|
||||||
|
| lifetime `'a` declared here
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
17
tests/ui/lint/elided-named-lifetimes/not-tied-to-crate.rs
Normal file
17
tests/ui/lint/elided-named-lifetimes/not-tied-to-crate.rs
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
#![allow(elided_named_lifetimes)]
|
||||||
|
|
||||||
|
#[warn(elided_named_lifetimes)]
|
||||||
|
mod foo {
|
||||||
|
fn bar(x: &'static u8) -> &u8 {
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
|
x
|
||||||
|
}
|
||||||
|
|
||||||
|
#[deny(elided_named_lifetimes)]
|
||||||
|
fn baz(x: &'static u8) -> &u8 {
|
||||||
|
//~^ ERROR elided lifetime has a name
|
||||||
|
x
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
@ -0,0 +1,26 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/not-tied-to-crate.rs:5:31
|
||||||
|
|
|
||||||
|
LL | fn bar(x: &'static u8) -> &u8 {
|
||||||
|
| ^ this elided lifetime gets resolved as `'static`
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/not-tied-to-crate.rs:3:8
|
||||||
|
|
|
||||||
|
LL | #[warn(elided_named_lifetimes)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: elided lifetime has a name
|
||||||
|
--> $DIR/not-tied-to-crate.rs:11:31
|
||||||
|
|
|
||||||
|
LL | fn baz(x: &'static u8) -> &u8 {
|
||||||
|
| ^ this elided lifetime gets resolved as `'static`
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/not-tied-to-crate.rs:10:12
|
||||||
|
|
|
||||||
|
LL | #[deny(elided_named_lifetimes)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: aborting due to 1 previous error; 1 warning emitted
|
||||||
|
|
46
tests/ui/lint/elided-named-lifetimes/static.rs
Normal file
46
tests/ui/lint/elided-named-lifetimes/static.rs
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#![deny(elided_named_lifetimes)]
|
||||||
|
|
||||||
|
use std::borrow::Cow;
|
||||||
|
|
||||||
|
const A: &[u8] = &[];
|
||||||
|
static B: &str = "hello";
|
||||||
|
|
||||||
|
trait Trait {
|
||||||
|
const C: &u8 = &0;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Trait for () {
|
||||||
|
const C: &u8 = &1;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn ampersand(x: &'static u8) -> &u8 {
|
||||||
|
//~^ ERROR elided lifetime has a name
|
||||||
|
x
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Brackets<'a>(&'a u8);
|
||||||
|
|
||||||
|
fn brackets(x: &'static u8) -> Brackets {
|
||||||
|
//~^ ERROR elided lifetime has a name
|
||||||
|
Brackets(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
struct Comma<'a, T>(&'a T);
|
||||||
|
|
||||||
|
fn comma(x: &'static u8) -> Comma<u8> {
|
||||||
|
//~^ ERROR elided lifetime has a name
|
||||||
|
Comma(x)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn underscore(x: &'static u8) -> &'_ u8 {
|
||||||
|
//~^ ERROR elided lifetime has a name
|
||||||
|
x
|
||||||
|
}
|
||||||
|
|
||||||
|
const NESTED: &Vec<&Box<Cow<str>>> = &vec![];
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
const HELLO: &str = "Hello";
|
||||||
|
static WORLD: &str = "world";
|
||||||
|
println!("{HELLO}, {WORLD}!")
|
||||||
|
}
|
32
tests/ui/lint/elided-named-lifetimes/static.stderr
Normal file
32
tests/ui/lint/elided-named-lifetimes/static.stderr
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
error: elided lifetime has a name
|
||||||
|
--> $DIR/static.rs:16:33
|
||||||
|
|
|
||||||
|
LL | fn ampersand(x: &'static u8) -> &u8 {
|
||||||
|
| ^ this elided lifetime gets resolved as `'static`
|
||||||
|
|
|
||||||
|
note: the lint level is defined here
|
||||||
|
--> $DIR/static.rs:1:9
|
||||||
|
|
|
||||||
|
LL | #![deny(elided_named_lifetimes)]
|
||||||
|
| ^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: elided lifetime has a name
|
||||||
|
--> $DIR/static.rs:23:32
|
||||||
|
|
|
||||||
|
LL | fn brackets(x: &'static u8) -> Brackets {
|
||||||
|
| ^^^^^^^^ this elided lifetime gets resolved as `'static`
|
||||||
|
|
||||||
|
error: elided lifetime has a name
|
||||||
|
--> $DIR/static.rs:30:34
|
||||||
|
|
|
||||||
|
LL | fn comma(x: &'static u8) -> Comma<u8> {
|
||||||
|
| ^ this elided lifetime gets resolved as `'static`
|
||||||
|
|
||||||
|
error: elided lifetime has a name
|
||||||
|
--> $DIR/static.rs:35:35
|
||||||
|
|
|
||||||
|
LL | fn underscore(x: &'static u8) -> &'_ u8 {
|
||||||
|
| ^^ this elided lifetime gets resolved as `'static`
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
@ -46,6 +46,8 @@ fn load1(ss: &dyn SomeTrait) -> &dyn SomeTrait {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn load2<'a>(ss: &'a dyn SomeTrait) -> &dyn SomeTrait {
|
fn load2<'a>(ss: &'a dyn SomeTrait) -> &dyn SomeTrait {
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
|
|
||||||
// Same as `load1` but with an explicit name thrown in for fun.
|
// Same as `load1` but with an explicit name thrown in for fun.
|
||||||
|
|
||||||
ss
|
ss
|
||||||
|
@ -1,5 +1,15 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/object-lifetime-default-elision.rs:48:40
|
||||||
|
|
|
||||||
|
LL | fn load2<'a>(ss: &'a dyn SomeTrait) -> &dyn SomeTrait {
|
||||||
|
| -- ^ this elided lifetime gets resolved as `'a`
|
||||||
|
| |
|
||||||
|
| lifetime `'a` declared here
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
error: lifetime may not live long enough
|
error: lifetime may not live long enough
|
||||||
--> $DIR/object-lifetime-default-elision.rs:71:5
|
--> $DIR/object-lifetime-default-elision.rs:73:5
|
||||||
|
|
|
|
||||||
LL | fn load3<'a,'b>(ss: &'a dyn SomeTrait) -> &'b dyn SomeTrait {
|
LL | fn load3<'a,'b>(ss: &'a dyn SomeTrait) -> &'b dyn SomeTrait {
|
||||||
| -- -- lifetime `'b` defined here
|
| -- -- lifetime `'b` defined here
|
||||||
@ -11,5 +21,5 @@ LL | ss
|
|||||||
|
|
|
|
||||||
= help: consider adding the following bound: `'a: 'b`
|
= help: consider adding the following bound: `'a: 'b`
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error; 1 warning emitted
|
||||||
|
|
||||||
|
@ -4,9 +4,11 @@ struct Foo<'a>(&'a str);
|
|||||||
|
|
||||||
impl<'b> Foo<'b> {
|
impl<'b> Foo<'b> {
|
||||||
fn a<'a>(self: Self, a: &'a str) -> &str {
|
fn a<'a>(self: Self, a: &'a str) -> &str {
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
a
|
a
|
||||||
}
|
}
|
||||||
fn b<'a>(self: Foo<'b>, a: &'a str) -> &str {
|
fn b<'a>(self: Foo<'b>, a: &'a str) -> &str {
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
a
|
a
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
16
tests/ui/self/elision/ignore-non-reference-lifetimes.stderr
Normal file
16
tests/ui/self/elision/ignore-non-reference-lifetimes.stderr
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/ignore-non-reference-lifetimes.rs:6:41
|
||||||
|
|
|
||||||
|
LL | fn a<'a>(self: Self, a: &'a str) -> &str {
|
||||||
|
| -- lifetime `'a` declared here ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/ignore-non-reference-lifetimes.rs:10:44
|
||||||
|
|
|
||||||
|
LL | fn b<'a>(self: Foo<'b>, a: &'a str) -> &str {
|
||||||
|
| -- lifetime `'a` declared here ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
||||||
|
warning: 2 warnings emitted
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
//@ edition:2018
|
//@ edition:2018
|
||||||
//@ run-rustfix
|
//@ run-rustfix
|
||||||
#![allow(non_snake_case, dead_code)]
|
#![allow(non_snake_case, dead_code, elided_named_lifetimes)]
|
||||||
|
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
//@ edition:2018
|
//@ edition:2018
|
||||||
//@ run-rustfix
|
//@ run-rustfix
|
||||||
#![allow(non_snake_case, dead_code)]
|
#![allow(non_snake_case, dead_code, elided_named_lifetimes)]
|
||||||
|
|
||||||
use std::pin::Pin;
|
use std::pin::Pin;
|
||||||
|
|
||||||
|
@ -4,11 +4,13 @@
|
|||||||
struct Foo<'a>(&'a ());
|
struct Foo<'a>(&'a ());
|
||||||
impl<'a> Foo<'a> {
|
impl<'a> Foo<'a> {
|
||||||
async fn foo<'b>(self: &'b Foo<'a>) -> &() { self.0 }
|
async fn foo<'b>(self: &'b Foo<'a>) -> &() { self.0 }
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
}
|
}
|
||||||
|
|
||||||
type Alias = Foo<'static>;
|
type Alias = Foo<'static>;
|
||||||
impl Alias {
|
impl Alias {
|
||||||
async fn bar<'a>(self: &Alias, arg: &'a ()) -> &() { arg }
|
async fn bar<'a>(self: &Alias, arg: &'a ()) -> &() { arg }
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
18
tests/ui/self/self_lifetime-async.stderr
Normal file
18
tests/ui/self/self_lifetime-async.stderr
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/self_lifetime-async.rs:6:44
|
||||||
|
|
|
||||||
|
LL | async fn foo<'b>(self: &'b Foo<'a>) -> &() { self.0 }
|
||||||
|
| -- ^ this elided lifetime gets resolved as `'b`
|
||||||
|
| |
|
||||||
|
| lifetime `'b` declared here
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/self_lifetime-async.rs:12:52
|
||||||
|
|
|
||||||
|
LL | async fn bar<'a>(self: &Alias, arg: &'a ()) -> &() { arg }
|
||||||
|
| -- lifetime `'a` declared here ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
||||||
|
warning: 2 warnings emitted
|
||||||
|
|
@ -5,11 +5,13 @@
|
|||||||
struct Foo<'a>(&'a ());
|
struct Foo<'a>(&'a ());
|
||||||
impl<'a> Foo<'a> {
|
impl<'a> Foo<'a> {
|
||||||
fn foo<'b>(self: &'b Foo<'a>) -> &() { self.0 }
|
fn foo<'b>(self: &'b Foo<'a>) -> &() { self.0 }
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
}
|
}
|
||||||
|
|
||||||
type Alias = Foo<'static>;
|
type Alias = Foo<'static>;
|
||||||
impl Alias {
|
impl Alias {
|
||||||
fn bar<'a>(self: &Alias, arg: &'a ()) -> &() { arg }
|
fn bar<'a>(self: &Alias, arg: &'a ()) -> &() { arg }
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
18
tests/ui/self/self_lifetime.stderr
Normal file
18
tests/ui/self/self_lifetime.stderr
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/self_lifetime.rs:7:38
|
||||||
|
|
|
||||||
|
LL | fn foo<'b>(self: &'b Foo<'a>) -> &() { self.0 }
|
||||||
|
| -- ^ this elided lifetime gets resolved as `'b`
|
||||||
|
| |
|
||||||
|
| lifetime `'b` declared here
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/self_lifetime.rs:13:46
|
||||||
|
|
|
||||||
|
LL | fn bar<'a>(self: &Alias, arg: &'a ()) -> &() { arg }
|
||||||
|
| -- lifetime `'a` declared here ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
||||||
|
warning: 2 warnings emitted
|
||||||
|
|
@ -64,6 +64,7 @@ mod in_path {
|
|||||||
|
|
||||||
// This must not err, as the `&` actually resolves to `'a`.
|
// This must not err, as the `&` actually resolves to `'a`.
|
||||||
fn resolved_anonymous<'a, T: 'a>(f: impl Fn(&'a str) -> &T) {
|
fn resolved_anonymous<'a, T: 'a>(f: impl Fn(&'a str) -> &T) {
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
f("f");
|
f("f");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -124,6 +124,14 @@ LL - fn g(mut x: impl Foo<()>) -> Option<&()> { x.next() }
|
|||||||
LL + fn g(mut x: impl Foo<()>) -> Option<()> { x.next() }
|
LL + fn g(mut x: impl Foo<()>) -> Option<()> { x.next() }
|
||||||
|
|
|
|
||||||
|
|
||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/impl-trait-missing-lifetime-gated.rs:66:57
|
||||||
|
|
|
||||||
|
LL | fn resolved_anonymous<'a, T: 'a>(f: impl Fn(&'a str) -> &T) {
|
||||||
|
| -- lifetime `'a` declared here ^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
error[E0658]: anonymous lifetimes in `impl Trait` are unstable
|
error[E0658]: anonymous lifetimes in `impl Trait` are unstable
|
||||||
--> $DIR/impl-trait-missing-lifetime-gated.rs:6:35
|
--> $DIR/impl-trait-missing-lifetime-gated.rs:6:35
|
||||||
|
|
|
|
||||||
@ -244,7 +252,7 @@ help: consider introducing a named lifetime parameter
|
|||||||
LL | fn g<'a>(mut x: impl Foo<'a, ()>) -> Option<&()> { x.next() }
|
LL | fn g<'a>(mut x: impl Foo<'a, ()>) -> Option<&()> { x.next() }
|
||||||
| ++++ +++
|
| ++++ +++
|
||||||
|
|
||||||
error: aborting due to 16 previous errors
|
error: aborting due to 16 previous errors; 1 warning emitted
|
||||||
|
|
||||||
Some errors have detailed explanations: E0106, E0658.
|
Some errors have detailed explanations: E0106, E0658.
|
||||||
For more information about an error, try `rustc --explain E0106`.
|
For more information about an error, try `rustc --explain E0106`.
|
||||||
|
@ -100,6 +100,7 @@ where
|
|||||||
|
|
||||||
// This also works. The `'_` isn't necessary but it's where we arrive to following the suggestions:
|
// This also works. The `'_` isn't necessary but it's where we arrive to following the suggestions:
|
||||||
fn ok2<'a, G: 'a, T>(g: G, dest: &'a mut T) -> impl FnOnce() + '_ + 'a
|
fn ok2<'a, G: 'a, T>(g: G, dest: &'a mut T) -> impl FnOnce() + '_ + 'a
|
||||||
|
//~^ WARNING elided lifetime has a name
|
||||||
where
|
where
|
||||||
G: Get<T>,
|
G: Get<T>,
|
||||||
{
|
{
|
||||||
|
@ -6,6 +6,14 @@ LL | fn baz<G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
|
|||||||
| |
|
| |
|
||||||
| help: consider introducing lifetime `'a` here: `'a,`
|
| help: consider introducing lifetime `'a` here: `'a,`
|
||||||
|
|
||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/missing-lifetimes-in-signature.rs:102:64
|
||||||
|
|
|
||||||
|
LL | fn ok2<'a, G: 'a, T>(g: G, dest: &'a mut T) -> impl FnOnce() + '_ + 'a
|
||||||
|
| -- lifetime `'a` declared here ^^ this elided lifetime gets resolved as `'a`
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
error[E0700]: hidden type for `impl FnOnce()` captures lifetime that does not appear in bounds
|
error[E0700]: hidden type for `impl FnOnce()` captures lifetime that does not appear in bounds
|
||||||
--> $DIR/missing-lifetimes-in-signature.rs:19:5
|
--> $DIR/missing-lifetimes-in-signature.rs:19:5
|
||||||
|
|
|
|
||||||
@ -125,7 +133,7 @@ help: consider adding an explicit lifetime bound
|
|||||||
LL | G: Get<T> + 'a,
|
LL | G: Get<T> + 'a,
|
||||||
| ++++
|
| ++++
|
||||||
|
|
||||||
error: aborting due to 8 previous errors
|
error: aborting due to 8 previous errors; 1 warning emitted
|
||||||
|
|
||||||
Some errors have detailed explanations: E0261, E0309, E0311, E0621, E0700.
|
Some errors have detailed explanations: E0261, E0309, E0311, E0621, E0700.
|
||||||
For more information about an error, try `rustc --explain E0261`.
|
For more information about an error, try `rustc --explain E0261`.
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
type Opaque2<T> = impl Sized;
|
type Opaque2<T> = impl Sized;
|
||||||
type Opaque<'a, T> = Opaque2<T>;
|
type Opaque<'a, T> = Opaque2<T>;
|
||||||
fn defining<'a, T>(x: &'a i32) -> Opaque<T> { x }
|
fn defining<'a, T>(x: &'a i32) -> Opaque<T> { x } //~ WARNING elided lifetime has a name
|
||||||
//~^ ERROR: hidden type for `Opaque2<T>` captures lifetime that does not appear in bounds
|
//~^ ERROR: hidden type for `Opaque2<T>` captures lifetime that does not appear in bounds
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
warning: elided lifetime has a name
|
||||||
|
--> $DIR/missing_lifetime_bound.rs:5:41
|
||||||
|
|
|
||||||
|
LL | fn defining<'a, T>(x: &'a i32) -> Opaque<T> { x }
|
||||||
|
| -- ^ this elided lifetime gets resolved as `'a`
|
||||||
|
| |
|
||||||
|
| lifetime `'a` declared here
|
||||||
|
|
|
||||||
|
= note: `#[warn(elided_named_lifetimes)]` on by default
|
||||||
|
|
||||||
error[E0700]: hidden type for `Opaque2<T>` captures lifetime that does not appear in bounds
|
error[E0700]: hidden type for `Opaque2<T>` captures lifetime that does not appear in bounds
|
||||||
--> $DIR/missing_lifetime_bound.rs:5:47
|
--> $DIR/missing_lifetime_bound.rs:5:47
|
||||||
|
|
|
|
||||||
@ -9,6 +19,6 @@ LL | fn defining<'a, T>(x: &'a i32) -> Opaque<T> { x }
|
|||||||
| |
|
| |
|
||||||
| hidden type `&'a i32` captures the lifetime `'a` as defined here
|
| hidden type `&'a i32` captures the lifetime `'a` as defined here
|
||||||
|
|
||||||
error: aborting due to 1 previous error
|
error: aborting due to 1 previous error; 1 warning emitted
|
||||||
|
|
||||||
For more information about this error, try `rustc --explain E0700`.
|
For more information about this error, try `rustc --explain E0700`.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user