提交 d570b36c 编写于 作者: B bors

Auto merge of #54778 - scottmcm:stabilize-ihle, r=pnkfelix

Stabilize impl_header_lifetime_elision in 2015

~~This is currently blocked on https://github.com/rust-lang/rust/issues/54902; it should be good after that~~

It's already stable in 2018; this finishes the stabilization.

FCP completed (https://github.com/rust-lang/rust/issues/15872#issuecomment-417953153), proposal (https://github.com/rust-lang/rust/issues/15872#issuecomment-412759783).

Tracking issue: https://github.com/rust-lang/rust/issues/15872
Usage examples (from libcore): https://github.com/rust-lang/rust/pull/54687
......@@ -87,7 +87,7 @@
#![feature(doc_spotlight)]
#![feature(extern_types)]
#![feature(fundamental)]
#![feature(impl_header_lifetime_elision)]
#![cfg_attr(stage0, feature(impl_header_lifetime_elision))]
#![feature(intrinsics)]
#![feature(lang_items)]
#![feature(link_llvm_intrinsics)]
......
......@@ -19,7 +19,7 @@
#![feature(flt2dec)]
#![feature(fmt_internals)]
#![feature(hashmap_internals)]
#![feature(impl_header_lifetime_elision)]
#![cfg_attr(stage0, feature(impl_header_lifetime_elision))]
#![feature(pattern)]
#![feature(range_is_empty)]
#![feature(raw)]
......
......@@ -125,9 +125,8 @@ pub struct LoweringContext<'a> {
// Whether or not in-band lifetimes are being collected. This is used to
// indicate whether or not we're in a place where new lifetimes will result
// in in-band lifetime definitions, such a function or an impl header.
// This will always be false unless the `in_band_lifetimes` or
// `impl_header_lifetime_elision` feature is enabled.
// in in-band lifetime definitions, such a function or an impl header,
// including implicit lifetimes from `impl_header_lifetime_elision`.
is_collecting_in_band_lifetimes: bool,
// Currently in-scope lifetimes defined in impl headers, fn headers, or HRTB.
......@@ -709,12 +708,8 @@ fn collect_in_band_defs<T, F>(
assert!(self.lifetimes_to_define.is_empty());
let old_anonymous_lifetime_mode = self.anonymous_lifetime_mode;
if self.sess.features_untracked().impl_header_lifetime_elision {
self.anonymous_lifetime_mode = anonymous_lifetime_mode;
self.is_collecting_in_band_lifetimes = true;
} else if self.sess.features_untracked().in_band_lifetimes {
self.is_collecting_in_band_lifetimes = true;
}
self.anonymous_lifetime_mode = anonymous_lifetime_mode;
self.is_collecting_in_band_lifetimes = true;
let (in_band_ty_params, res) = f(self);
......
......@@ -67,7 +67,7 @@
#![feature(step_trait)]
#![feature(integer_atomics)]
#![feature(test)]
#![feature(impl_header_lifetime_elision)]
#![cfg_attr(stage0, feature(impl_header_lifetime_elision))]
#![feature(in_band_lifetimes)]
#![feature(macro_at_most_once_rep)]
#![feature(crate_visibility_modifier)]
......
......@@ -21,7 +21,7 @@
html_root_url = "https://doc.rust-lang.org/nightly/")]
#![feature(in_band_lifetimes)]
#![feature(impl_header_lifetime_elision)]
#![cfg_attr(stage0, feature(impl_header_lifetime_elision))]
#![feature(unboxed_closures)]
#![feature(fn_traits)]
#![feature(unsize)]
......
......@@ -16,7 +16,7 @@
#![feature(nll)]
#![feature(in_band_lifetimes)]
#![feature(impl_header_lifetime_elision)]
#![cfg_attr(stage0, feature(impl_header_lifetime_elision))]
#![feature(slice_patterns)]
#![feature(slice_sort_by_cached_key)]
#![feature(box_patterns)]
......
......@@ -375,15 +375,15 @@ fn main() {}
E0705: r##"
A `#![feature]` attribute was declared for a feature that is stable in
the current edition.
the current edition, but not in all editions.
Erroneous code example:
```ignore (limited to a warning during 2018 edition development)
#![feature(rust_2018_preview)]
#![feature(impl_header_lifetime_elision)] // error: the feature
// `impl_header_lifetime_elision` is
// included in the Rust 2018 edition
#![feature(test_2018_feature)] // error: the feature
// `test_2018_feature` is
// included in the Rust 2018 edition
```
"##,
......
......@@ -462,9 +462,8 @@ pub fn walk_feature_fields<F>(&self, mut f: F)
(active, abi_amdgpu_kernel, "1.29.0", Some(51575), None),
// impl<I:Iterator> Iterator for &mut Iterator
// impl Debug for Foo<'_>
(active, impl_header_lifetime_elision, "1.30.0", Some(15872), Some(Edition::Edition2018)),
// Perma-unstable; added for testing E0705
(active, test_2018_feature, "1.31.0", Some(0), Some(Edition::Edition2018)),
// Support for arbitrary delimited token streams in non-macro attributes
(active, unrestricted_attribute_tokens, "1.30.0", Some(44690), None),
......@@ -684,6 +683,9 @@ pub fn walk_feature_fields<F>(&self, mut f: F)
(accepted, min_const_fn, "1.31.0", Some(53555), None),
// Scoped lints
(accepted, tool_lints, "1.31.0", Some(44690), None),
// impl<I:Iterator> Iterator for &mut Iterator
// impl Debug for Foo<'_>
(accepted, impl_header_lifetime_elision, "1.31.0", Some(15872), None),
);
// If you change this, please modify src/doc/unstable-book as well. You must
......
......@@ -10,8 +10,11 @@
// compile-pass
#![feature(impl_header_lifetime_elision)]
//~^ WARN the feature `impl_header_lifetime_elision` is included in the Rust 2018 edition
// This is a stub feature that doesn't control anything, so to make tidy happy,
// gate-test-test_2018_feature
#![feature(test_2018_feature)]
//~^ WARN the feature `test_2018_feature` is included in the Rust 2018 edition
#![feature(rust_2018_preview)]
fn main() {}
warning[E0705]: the feature `impl_header_lifetime_elision` is included in the Rust 2018 edition
--> $DIR/E0705.rs:13:12
warning[E0705]: the feature `test_2018_feature` is included in the Rust 2018 edition
--> $DIR/E0705.rs:16:12
|
LL | #![feature(impl_header_lifetime_elision)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
LL | #![feature(test_2018_feature)]
| ^^^^^^^^^^^^^^^^^
error[E0106]: missing lifetime specifier
--> $DIR/feature-gate-impl_header_lifetime_elision-with-in_band.rs:18:22
|
LL | impl MyTrait<'a> for &u32 { }
| ^ expected lifetime parameter
error[E0106]: missing lifetime specifier
--> $DIR/feature-gate-impl_header_lifetime_elision-with-in_band.rs:24:23
|
LL | impl MarkerTrait for &'_ MyStruct { }
| ^^ expected lifetime parameter
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0106`.
error[E0106]: missing lifetime specifier
--> $DIR/feature-gate-impl_header_lifetime_elision.rs:15:26
|
LL | impl<'a> MyTrait<'a> for &u32 { }
| ^ expected lifetime parameter
error[E0106]: missing lifetime specifier
--> $DIR/feature-gate-impl_header_lifetime_elision.rs:18:18
|
LL | impl<'a> MyTrait<'_> for &'a f32 { }
| ^^ expected lifetime parameter
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0106`.
......@@ -10,9 +10,6 @@
#![allow(warnings)]
// Make sure this related feature didn't accidentally enable this
#![feature(impl_header_lifetime_elision)]
fn foo(x: &'x u8) -> &'x u8 { x }
//~^ ERROR use of undeclared lifetime name
//~^^ ERROR use of undeclared lifetime name
......
error[E0261]: use of undeclared lifetime name `'x`
--> $DIR/feature-gate-in_band_lifetimes.rs:16:12
--> $DIR/feature-gate-in_band_lifetimes.rs:13:12
|
LL | fn foo(x: &'x u8) -> &'x u8 { x }
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'x`
--> $DIR/feature-gate-in_band_lifetimes.rs:16:23
--> $DIR/feature-gate-in_band_lifetimes.rs:13:23
|
LL | fn foo(x: &'x u8) -> &'x u8 { x }
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:28:12
--> $DIR/feature-gate-in_band_lifetimes.rs:25:12
|
LL | impl<'a> X<'b> {
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:30:27
--> $DIR/feature-gate-in_band_lifetimes.rs:27:27
|
LL | fn inner_2(&self) -> &'b u8 {
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:36:8
--> $DIR/feature-gate-in_band_lifetimes.rs:33:8
|
LL | impl X<'b> {
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:38:27
--> $DIR/feature-gate-in_band_lifetimes.rs:35:27
|
LL | fn inner_3(&self) -> &'b u8 {
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/feature-gate-in_band_lifetimes.rs:46:9
--> $DIR/feature-gate-in_band_lifetimes.rs:43:9
|
LL | impl Y<&'a u8> {
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/feature-gate-in_band_lifetimes.rs:48:25
--> $DIR/feature-gate-in_band_lifetimes.rs:45:25
|
LL | fn inner(&self) -> &'a u8 {
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:56:27
--> $DIR/feature-gate-in_band_lifetimes.rs:53:27
|
LL | fn any_lifetime() -> &'b u8;
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:58:27
--> $DIR/feature-gate-in_band_lifetimes.rs:55:27
|
LL | fn borrowed_lifetime(&'b self) -> &'b u8;
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:58:40
--> $DIR/feature-gate-in_band_lifetimes.rs:55:40
|
LL | fn borrowed_lifetime(&'b self) -> &'b u8;
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/feature-gate-in_band_lifetimes.rs:63:14
--> $DIR/feature-gate-in_band_lifetimes.rs:60:14
|
LL | impl MyTrait<'a> for Y<&'a u8> {
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/feature-gate-in_band_lifetimes.rs:63:25
--> $DIR/feature-gate-in_band_lifetimes.rs:60:25
|
LL | impl MyTrait<'a> for Y<&'a u8> {
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/feature-gate-in_band_lifetimes.rs:66:31
--> $DIR/feature-gate-in_band_lifetimes.rs:63:31
|
LL | fn my_lifetime(&self) -> &'a u8 { self.0 }
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:68:27
--> $DIR/feature-gate-in_band_lifetimes.rs:65:27
|
LL | fn any_lifetime() -> &'b u8 { &0 }
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:70:27
--> $DIR/feature-gate-in_band_lifetimes.rs:67:27
|
LL | fn borrowed_lifetime(&'b self) -> &'b u8 { &*self.0 }
| ^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:70:40
--> $DIR/feature-gate-in_band_lifetimes.rs:67:40
|
LL | fn borrowed_lifetime(&'b self) -> &'b u8 { &*self.0 }
| ^^ undeclared lifetime
......
......@@ -13,8 +13,6 @@
#![allow(warnings)]
#![feature(impl_header_lifetime_elision)]
trait MyTrait {
type Output;
}
......
error[E0106]: missing lifetime specifier
--> $DIR/assoc-type.rs:23:19
--> $DIR/assoc-type.rs:21:19
|
LL | type Output = &i32;
| ^ expected lifetime parameter
error[E0106]: missing lifetime specifier
--> $DIR/assoc-type.rs:28:20
--> $DIR/assoc-type.rs:26:20
|
LL | type Output = &'_ i32;
| ^^ expected lifetime parameter
......
......@@ -13,8 +13,6 @@
#![allow(warnings)]
#![feature(impl_header_lifetime_elision)]
use std::fmt::Debug;
// Equivalent to `Box<dyn Debug + 'static>`:
......
error[E0495]: cannot infer an appropriate lifetime due to conflicting requirements
--> $DIR/dyn-trait.rs:32:16
--> $DIR/dyn-trait.rs:30:16
|
LL | static_val(x); //~ ERROR cannot infer
| ^
|
note: first, the lifetime cannot outlive the lifetime 'a as defined on the function body at 31:26...
--> $DIR/dyn-trait.rs:31:26
note: first, the lifetime cannot outlive the lifetime 'a as defined on the function body at 29:26...
--> $DIR/dyn-trait.rs:29:26
|
LL | fn with_dyn_debug_static<'a>(x: Box<dyn Debug + 'a>) {
| ^^
......
......@@ -12,8 +12,6 @@
#![allow(warnings)]
#![feature(impl_header_lifetime_elision)]
// This works for functions...
fn foo<'a>(x: &str, y: &'a str) {}
......
......@@ -8,14 +8,12 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![allow(warnings)]
// compile-pass
trait MyTrait<'a> { }
struct Foo<'a>(&'a u8);
impl<'a> MyTrait<'a> for &u32 { }
//~^ ERROR missing lifetime specifier
impl<'a> MyTrait<'_> for &'a f32 { }
//~^ ERROR missing lifetime specifier
impl Foo<'_> {
fn x() {}
}
fn main() {}
......@@ -9,8 +9,6 @@
// except according to those terms.
#![allow(warnings)]
#![feature(impl_header_lifetime_elision)]
trait MyTrait { }
struct Foo<'a> { x: &'a u32 }
......
error[E0106]: missing lifetime specifier
--> $DIR/path-elided.rs:18:18
--> $DIR/path-elided.rs:16:18
|
LL | impl MyTrait for Foo {
| ^^^ expected lifetime parameter
......
......@@ -14,8 +14,6 @@
#![allow(warnings)]
#![feature(impl_header_lifetime_elision)]
trait MyTrait { }
struct Foo<'a> { x: &'a u32 }
......
......@@ -14,8 +14,6 @@
#![allow(warnings)]
#![feature(impl_header_lifetime_elision)]
trait MyTrait { }
impl MyTrait for &i32 {
......
......@@ -9,8 +9,6 @@
// except according to those terms.
#![allow(warnings)]
#![feature(impl_header_lifetime_elision)]
trait MyTrait<'a> { }
impl MyTrait for u32 {
......
error[E0106]: missing lifetime specifier
--> $DIR/trait-elided.rs:16:6
--> $DIR/trait-elided.rs:14:6
|
LL | impl MyTrait for u32 {
| ^^^^^^^ expected lifetime parameter
......
......@@ -15,8 +15,6 @@
#![allow(warnings)]
#![feature(impl_header_lifetime_elision)]
trait MyTrait<'a> { }
// This is equivalent to `MyTrait<'a> for &'b i32`, which is proven by
......
// Copyright 2017 The Rust Project Developers. See the COPYRIGHT
// Copyright 2014 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
......@@ -8,20 +8,19 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![allow(warnings)]
#[derive(Debug)]
struct Pair<T, V> (T, V);
// Make sure this related feature didn't accidentally enable this
#![feature(in_band_lifetimes)]
impl Pair<
&str,
isize
> {
fn say(self: &Pair<&str, isize>) {
println!("{:?}", self);
}
}
trait MyTrait<'a> { }
impl MyTrait<'a> for &u32 { }
//~^ ERROR missing lifetime specifier
struct MyStruct;
trait MarkerTrait {}
impl MarkerTrait for &'_ MyStruct { }
//~^ ERROR missing lifetime specifier
fn main() {}
fn main() {
let result = &Pair("shane", 1);
result.say();
}
error[E0308]: mismatched method receiver
--> $DIR/issue-17905-2.rs:18:18
|
LL | fn say(self: &Pair<&str, isize>) {
| ^^^^^^^^^^^^^^^^^^ lifetime mismatch
|
= note: expected type `Pair<&'_ str, _>`
found type `Pair<&str, _>`
note: the anonymous lifetime #2 defined on the method body at 18:5...
--> $DIR/issue-17905-2.rs:18:5
|
LL | / fn say(self: &Pair<&str, isize>) {
LL | | println!("{:?}", self);
LL | | }
| |_____^
note: ...does not necessarily outlive the lifetime '_ as defined on the impl at 15:5
--> $DIR/issue-17905-2.rs:15:5
|
LL | &str,
| ^
error[E0308]: mismatched method receiver
--> $DIR/issue-17905-2.rs:18:18
|
LL | fn say(self: &Pair<&str, isize>) {
| ^^^^^^^^^^^^^^^^^^ lifetime mismatch
|
= note: expected type `Pair<&'_ str, _>`
found type `Pair<&str, _>`
note: the lifetime '_ as defined on the impl at 15:5...
--> $DIR/issue-17905-2.rs:15:5
|
LL | &str,
| ^
note: ...does not necessarily outlive the anonymous lifetime #2 defined on the method body at 18:5
--> $DIR/issue-17905-2.rs:18:5
|
LL | / fn say(self: &Pair<&str, isize>) {
LL | | println!("{:?}", self);
LL | | }
| |_____^
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0308`.
......@@ -8,15 +8,17 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// run-pass
#[derive(Debug)]
struct Pair<T, V> (T, V);
impl Pair<
&str, //~ ERROR missing lifetime specifier
&str,
isize
> {
fn say(self: &Pair<&str, isize>) {
println!("{}", self);
fn say(&self) {
println!("{:?}", self);
}
}
......
error[E0106]: missing lifetime specifier
--> $DIR/issue-17905.rs:15:5
|
LL | &str, //~ ERROR missing lifetime specifier
| ^ expected lifetime parameter
error: aborting due to previous error
For more information about this error, try `rustc --explain E0106`.
// Copyright 2015 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
// compile-pass
// pretty-expanded FIXME #23616
#![feature(fn_traits, unboxed_closures)]
#[allow(dead_code)]
struct Foo;
impl<'a> Fn<(&'a (),)> for Foo {
extern "rust-call" fn call(&self, (_,): (&(),)) {}
}
impl<'a> FnMut<(&'a (),)> for Foo {
extern "rust-call" fn call_mut(&mut self, (_,): (&(),)) {}
}
impl<'a> FnOnce<(&'a (),)> for Foo {
type Output = ();
extern "rust-call" fn call_once(self, (_,): (&(),)) {}
}
fn main() {}
......@@ -8,10 +8,25 @@
// option. This file may not be copied, modified, or distributed
// except according to those terms.
#![feature(unboxed_closures)]
// compile-pass
#![feature(fn_traits, unboxed_closures)]
#[allow(dead_code)]
struct Foo;
impl Fn<(&(),)> for Foo { } //~ ERROR missing lifetime specifier
impl Fn<(&(),)> for Foo {
extern "rust-call" fn call(&self, (_,): (&(),)) {}
}
impl FnMut<(&(),)> for Foo {
extern "rust-call" fn call_mut(&mut self, (_,): (&(),)) {}
}
impl FnOnce<(&(),)> for Foo {
type Output = ();
extern "rust-call" fn call_once(self, (_,): (&(),)) {}
}
fn main() {}
error[E0106]: missing lifetime specifier
--> $DIR/issue-19982.rs:15:10
|
LL | impl Fn<(&(),)> for Foo { } //~ ERROR missing lifetime specifier
| ^ expected lifetime parameter
error: aborting due to previous error
For more information about this error, try `rustc --explain E0106`.
......@@ -10,7 +10,6 @@
#![feature(nll)]
#![feature(in_band_lifetimes)]
#![feature(impl_header_lifetime_elision)]
struct Foo<'a, 'b> {
x: &'a u32,
......
error: unsatisfied lifetime constraints
--> $DIR/issue-52742.rs:26:9
--> $DIR/issue-52742.rs:25:9
|
LL | fn take_bar(&mut self, b: Bar<'_>) {
| --------- -- let's call this `'1`
......
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:12:6
|
LL | impl<'_> IceCube<'_> {}
| ^^ `'_` is a reserved lifetime name
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:17:15
|
LL | struct Struct<'_> {
| ^^ `'_` is a reserved lifetime name
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:23:11
|
LL | enum Enum<'_> {
| ^^ `'_` is a reserved lifetime name
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:29:13
|
LL | union Union<'_> {
| ^^ `'_` is a reserved lifetime name
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:35:13
|
LL | trait Trait<'_> {
| ^^ `'_` is a reserved lifetime name
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:40:8
|
LL | fn foo<'_>() {
| ^^ `'_` is a reserved lifetime name
error[E0106]: missing lifetime specifier
--> $DIR/in-binder.rs:12:18
|
LL | impl<'_> IceCube<'_> {}
| ^^ expected lifetime parameter
error: aborting due to 7 previous errors
Some errors occurred: E0106, E0637.
For more information about an error, try `rustc --explain E0106`.
......@@ -2,44 +2,34 @@
//
// Regression test for #52098.
// revisions: Rust2015 Rust2018
//[Rust2018] edition:2018
struct IceCube<'a> {
v: Vec<&'a char>
}
impl<'_> IceCube<'_> {}
//[Rust2015]~^ ERROR `'_` cannot be used here
//[Rust2015]~| ERROR missing lifetime specifier
//[Rust2018]~^^^ ERROR `'_` cannot be used here
//~^ ERROR `'_` cannot be used here
struct Struct<'_> {
//[Rust2015]~^ ERROR `'_` cannot be used here
//[Rust2018]~^^ ERROR `'_` cannot be used here
//~^ ERROR `'_` cannot be used here
v: Vec<&'static char>
}
enum Enum<'_> {
//[Rust2015]~^ ERROR `'_` cannot be used here
//[Rust2018]~^^ ERROR `'_` cannot be used here
//~^ ERROR `'_` cannot be used here
Variant
}
union Union<'_> {
//[Rust2015]~^ ERROR `'_` cannot be used here
//[Rust2018]~^^ ERROR `'_` cannot be used here
//~^ ERROR `'_` cannot be used here
a: u32
}
trait Trait<'_> {
//[Rust2015]~^ ERROR `'_` cannot be used here
//[Rust2018]~^^ ERROR `'_` cannot be used here
//~^ ERROR `'_` cannot be used here
}
fn foo<'_>() {
//[Rust2015]~^ ERROR `'_` cannot be used here
//[Rust2018]~^^ ERROR `'_` cannot be used here
//~^ ERROR `'_` cannot be used here
}
fn main() {}
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:12:6
--> $DIR/in-binder.rs:9:6
|
LL | impl<'_> IceCube<'_> {}
| ^^ `'_` is a reserved lifetime name
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:17:15
--> $DIR/in-binder.rs:12:15
|
LL | struct Struct<'_> {
| ^^ `'_` is a reserved lifetime name
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:23:11
--> $DIR/in-binder.rs:17:11
|
LL | enum Enum<'_> {
| ^^ `'_` is a reserved lifetime name
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:29:13
--> $DIR/in-binder.rs:22:13
|
LL | union Union<'_> {
| ^^ `'_` is a reserved lifetime name
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:35:13
--> $DIR/in-binder.rs:27:13
|
LL | trait Trait<'_> {
| ^^ `'_` is a reserved lifetime name
error[E0637]: `'_` cannot be used here
--> $DIR/in-binder.rs:40:8
--> $DIR/in-binder.rs:31:8
|
LL | fn foo<'_>() {
| ^^ `'_` is a reserved lifetime name
......
......@@ -11,10 +11,6 @@
struct Foo<'a>(&'a u8);
struct Baz<'a>(&'_ &'a u8); //~ ERROR missing lifetime specifier
impl Foo<'_> { //~ ERROR missing lifetime specifier
fn x() {}
}
fn foo<'_> //~ ERROR cannot be used here
(_: Foo<'_>) {}
......
error[E0637]: `'_` cannot be used here
--> $DIR/underscore-lifetime-binders.rs:18:8
--> $DIR/underscore-lifetime-binders.rs:14:8
|
LL | fn foo<'_> //~ ERROR cannot be used here
| ^^ `'_` is a reserved lifetime name
error[E0637]: `'_` cannot be used here
--> $DIR/underscore-lifetime-binders.rs:24:21
--> $DIR/underscore-lifetime-binders.rs:20:21
|
LL | fn meh() -> Box<for<'_> Meh<'_>> //~ ERROR cannot be used here
| ^^ `'_` is a reserved lifetime name
......@@ -17,13 +17,7 @@ LL | struct Baz<'a>(&'_ &'a u8); //~ ERROR missing lifetime specifier
| ^^ expected lifetime parameter
error[E0106]: missing lifetime specifier
--> $DIR/underscore-lifetime-binders.rs:14:10
|
LL | impl Foo<'_> { //~ ERROR missing lifetime specifier
| ^^ expected lifetime parameter
error[E0106]: missing lifetime specifier
--> $DIR/underscore-lifetime-binders.rs:24:29
--> $DIR/underscore-lifetime-binders.rs:20:29
|
LL | fn meh() -> Box<for<'_> Meh<'_>> //~ ERROR cannot be used here
| ^^ expected lifetime parameter
......@@ -32,14 +26,14 @@ LL | fn meh() -> Box<for<'_> Meh<'_>> //~ ERROR cannot be used here
= help: consider giving it a 'static lifetime
error[E0106]: missing lifetime specifier
--> $DIR/underscore-lifetime-binders.rs:30:35
--> $DIR/underscore-lifetime-binders.rs:26:35
|
LL | fn foo2(_: &'_ u8, y: &'_ u8) -> &'_ u8 { y } //~ ERROR missing lifetime specifier
| ^^ expected lifetime parameter
|
= help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from `_` or `y`
error: aborting due to 6 previous errors
error: aborting due to 5 previous errors
Some errors occurred: E0106, E0637.
For more information about an error, try `rustc --explain E0106`.
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册