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
This commit is contained in:
commit
d570b36cd9
41 changed files with 156 additions and 264 deletions
|
@ -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 @@ impl<'a> LoweringContext<'a> {
|
|||
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 @@ Rust MIR: a lowered representation of Rust. Also: an experiment!
|
|||
|
||||
#![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 @@ and likely to change in the future.
|
|||
|
||||
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 @@ declare_features! (
|
|||
|
||||
(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 @@ declare_features! (
|
|||
(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() {}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
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)]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
||||
|
|
|
@ -1,15 +0,0 @@
|
|||
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`.
|
|
@ -1,15 +0,0 @@
|
|||
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
|
||||
|
|
|
@ -1,101 +1,101 @@
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
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>`:
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
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 }
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
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 {
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
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
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
// 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();
|
||||
}
|
45
src/test/ui/issues/issue-17905-2.stderr
Normal file
45
src/test/ui/issues/issue-17905-2.stderr
Normal file
|
@ -0,0 +1,45 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
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`.
|
|
@ -1,33 +0,0 @@
|
|||
// 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() {}
|
||||
|
|
|
@ -1,9 +0,0 @@
|
|||
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,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
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`
|
||||
|
|
|
@ -1,46 +0,0 @@
|
|||
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() {}
|
||||
|
|
|
@ -1,35 +1,35 @@
|
|||
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<'_>) {}
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
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`.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue