Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
bb548a91
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
bb548a91
编写于
2月 09, 2022
作者:
M
Michael Goulet
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Remove in-band lifetimes
上级
4e82f354
变更
67
隐藏空白更改
内联
并排
Showing
67 changed file
with
58 addition
and
1459 deletion
+58
-1459
compiler/rustc_ast_lowering/src/lib.rs
compiler/rustc_ast_lowering/src/lib.rs
+12
-45
compiler/rustc_error_codes/src/error_codes/E0687.md
compiler/rustc_error_codes/src/error_codes/E0687.md
+3
-1
compiler/rustc_error_codes/src/error_codes/E0688.md
compiler/rustc_error_codes/src/error_codes/E0688.md
+3
-1
compiler/rustc_feature/src/active.rs
compiler/rustc_feature/src/active.rs
+0
-2
compiler/rustc_feature/src/removed.rs
compiler/rustc_feature/src/removed.rs
+3
-0
compiler/rustc_hir/src/hir.rs
compiler/rustc_hir/src/hir.rs
+0
-5
compiler/rustc_middle/src/middle/resolve_lifetime.rs
compiler/rustc_middle/src/middle/resolve_lifetime.rs
+0
-3
compiler/rustc_resolve/src/late/diagnostics.rs
compiler/rustc_resolve/src/late/diagnostics.rs
+0
-11
compiler/rustc_resolve/src/late/lifetimes.rs
compiler/rustc_resolve/src/late/lifetimes.rs
+2
-68
src/test/ui/async-await/generics-and-bounds.rs
src/test/ui/async-await/generics-and-bounds.rs
+0
-11
src/test/ui/error-codes/E0261.stderr
src/test/ui/error-codes/E0261.stderr
+0
-4
src/test/ui/feature-gates/feature-gate-in_band_lifetimes.rs
src/test/ui/feature-gates/feature-gate-in_band_lifetimes.rs
+0
-62
src/test/ui/feature-gates/feature-gate-in_band_lifetimes.stderr
...st/ui/feature-gates/feature-gate-in_band_lifetimes.stderr
+0
-231
src/test/ui/generic-associated-types/gat-in-trait-path-undeclared-lifetime.stderr
...ciated-types/gat-in-trait-path-undeclared-lifetime.stderr
+0
-2
src/test/ui/generic-associated-types/generic_associated_type_undeclared_lifetimes.stderr
...types/generic_associated_type_undeclared_lifetimes.stderr
+0
-2
src/test/ui/generic-associated-types/issue-67510.stderr
src/test/ui/generic-associated-types/issue-67510.stderr
+0
-4
src/test/ui/impl-trait/region-escape-via-bound-contravariant-closure.rs
...pl-trait/region-escape-via-bound-contravariant-closure.rs
+1
-2
src/test/ui/impl-trait/region-escape-via-bound-contravariant.rs
...st/ui/impl-trait/region-escape-via-bound-contravariant.rs
+2
-3
src/test/ui/impl-trait/region-escape-via-bound.rs
src/test/ui/impl-trait/region-escape-via-bound.rs
+2
-3
src/test/ui/impl-trait/region-escape-via-bound.stderr
src/test/ui/impl-trait/region-escape-via-bound.stderr
+7
-8
src/test/ui/in-band-lifetimes/E0687.rs
src/test/ui/in-band-lifetimes/E0687.rs
+0
-16
src/test/ui/in-band-lifetimes/E0687.stderr
src/test/ui/in-band-lifetimes/E0687.stderr
+0
-27
src/test/ui/in-band-lifetimes/E0687_where.rs
src/test/ui/in-band-lifetimes/E0687_where.rs
+0
-8
src/test/ui/in-band-lifetimes/E0687_where.stderr
src/test/ui/in-band-lifetimes/E0687_where.stderr
+0
-15
src/test/ui/in-band-lifetimes/E0688.rs
src/test/ui/in-band-lifetimes/E0688.rs
+0
-16
src/test/ui/in-band-lifetimes/E0688.stderr
src/test/ui/in-band-lifetimes/E0688.stderr
+0
-27
src/test/ui/in-band-lifetimes/elided-lifetimes.fixed
src/test/ui/in-band-lifetimes/elided-lifetimes.fixed
+0
-119
src/test/ui/in-band-lifetimes/elided-lifetimes.rs
src/test/ui/in-band-lifetimes/elided-lifetimes.rs
+0
-119
src/test/ui/in-band-lifetimes/elided-lifetimes.stderr
src/test/ui/in-band-lifetimes/elided-lifetimes.stderr
+0
-120
src/test/ui/in-band-lifetimes/in-band-lifetimes.rs
src/test/ui/in-band-lifetimes/in-band-lifetimes.rs
+0
-96
src/test/ui/in-band-lifetimes/issue-61124-anon-lifetime-in-struct-declaration.rs
...etimes/issue-61124-anon-lifetime-in-struct-declaration.rs
+0
-10
src/test/ui/in-band-lifetimes/issue-61124-anon-lifetime-in-struct-declaration.stderr
...es/issue-61124-anon-lifetime-in-struct-declaration.stderr
+0
-14
src/test/ui/in-band-lifetimes/mismatched.nll.stderr
src/test/ui/in-band-lifetimes/mismatched.nll.stderr
+0
-22
src/test/ui/in-band-lifetimes/mismatched.rs
src/test/ui/in-band-lifetimes/mismatched.rs
+0
-8
src/test/ui/in-band-lifetimes/mismatched.stderr
src/test/ui/in-band-lifetimes/mismatched.stderr
+0
-20
src/test/ui/in-band-lifetimes/mismatched_trait.rs
src/test/ui/in-band-lifetimes/mismatched_trait.rs
+0
-10
src/test/ui/in-band-lifetimes/mismatched_trait.stderr
src/test/ui/in-band-lifetimes/mismatched_trait.stderr
+0
-11
src/test/ui/in-band-lifetimes/mismatched_trait_impl-2.rs
src/test/ui/in-band-lifetimes/mismatched_trait_impl-2.rs
+0
-14
src/test/ui/in-band-lifetimes/mismatched_trait_impl-2.stderr
src/test/ui/in-band-lifetimes/mismatched_trait_impl-2.stderr
+0
-18
src/test/ui/in-band-lifetimes/mismatched_trait_impl.nll.stderr
...est/ui/in-band-lifetimes/mismatched_trait_impl.nll.stderr
+0
-16
src/test/ui/in-band-lifetimes/mismatched_trait_impl.rs
src/test/ui/in-band-lifetimes/mismatched_trait_impl.rs
+0
-14
src/test/ui/in-band-lifetimes/mismatched_trait_impl.stderr
src/test/ui/in-band-lifetimes/mismatched_trait_impl.stderr
+0
-27
src/test/ui/in-band-lifetimes/mut_while_borrow.rs
src/test/ui/in-band-lifetimes/mut_while_borrow.rs
+0
-11
src/test/ui/in-band-lifetimes/mut_while_borrow.stderr
src/test/ui/in-band-lifetimes/mut_while_borrow.stderr
+0
-13
src/test/ui/in-band-lifetimes/nested-items.rs
src/test/ui/in-band-lifetimes/nested-items.rs
+0
-20
src/test/ui/in-band-lifetimes/no_in_band_in_struct.rs
src/test/ui/in-band-lifetimes/no_in_band_in_struct.rs
+0
-12
src/test/ui/in-band-lifetimes/no_in_band_in_struct.stderr
src/test/ui/in-band-lifetimes/no_in_band_in_struct.stderr
+0
-19
src/test/ui/in-band-lifetimes/no_introducing_in_band_in_locals.rs
.../ui/in-band-lifetimes/no_introducing_in_band_in_locals.rs
+0
-13
src/test/ui/in-band-lifetimes/no_introducing_in_band_in_locals.stderr
...in-band-lifetimes/no_introducing_in_band_in_locals.stderr
+0
-27
src/test/ui/lifetimes/missing-lifetime-in-alias.rs
src/test/ui/lifetimes/missing-lifetime-in-alias.rs
+0
-1
src/test/ui/lifetimes/missing-lifetime-in-alias.stderr
src/test/ui/lifetimes/missing-lifetime-in-alias.stderr
+5
-5
src/test/ui/lifetimes/nested.rs
src/test/ui/lifetimes/nested.rs
+7
-0
src/test/ui/lifetimes/shadow.rs
src/test/ui/lifetimes/shadow.rs
+1
-4
src/test/ui/lifetimes/shadow.stderr
src/test/ui/lifetimes/shadow.stderr
+6
-6
src/test/ui/lifetimes/undeclared-lifetime-used-in-debug-macro-issue-70152.stderr
...ndeclared-lifetime-used-in-debug-macro-issue-70152.stderr
+0
-5
src/test/ui/methods/method-call-lifetime-args-unresolved.stderr
...st/ui/methods/method-call-lifetime-args-unresolved.stderr
+0
-2
src/test/ui/nll/issue-52742.nll.stderr
src/test/ui/nll/issue-52742.nll.stderr
+1
-1
src/test/ui/nll/issue-52742.rs
src/test/ui/nll/issue-52742.rs
+0
-2
src/test/ui/nll/issue-52742.stderr
src/test/ui/nll/issue-52742.stderr
+3
-3
src/test/ui/regions/regions-in-enums.stderr
src/test/ui/regions/regions-in-enums.stderr
+0
-4
src/test/ui/regions/regions-in-structs.stderr
src/test/ui/regions/regions-in-structs.stderr
+0
-4
src/test/ui/regions/regions-name-undeclared.stderr
src/test/ui/regions/regions-name-undeclared.stderr
+0
-18
src/test/ui/regions/regions-undeclared.stderr
src/test/ui/regions/regions-undeclared.stderr
+0
-8
src/test/ui/single-use-lifetime/one-use-in-fn-argument-in-band.fixed
.../single-use-lifetime/one-use-in-fn-argument-in-band.fixed
+0
-18
src/test/ui/single-use-lifetime/one-use-in-fn-argument-in-band.rs
.../ui/single-use-lifetime/one-use-in-fn-argument-in-band.rs
+0
-18
src/test/ui/single-use-lifetime/one-use-in-fn-argument-in-band.stderr
...single-use-lifetime/one-use-in-fn-argument-in-band.stderr
+0
-26
src/test/ui/where-clauses/where-lifetime-resolution.stderr
src/test/ui/where-clauses/where-lifetime-resolution.stderr
+0
-4
未找到文件。
compiler/rustc_ast_lowering/src/lib.rs
浏览文件 @
bb548a91
...
...
@@ -142,13 +142,9 @@ struct LoweringContext<'a, 'hir: 'a> {
/// 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,
/// including implicit lifetimes from `impl_header_lifetime_elision`.
is_collecting_
in_band
_lifetimes
:
bool
,
is_collecting_
anonymous
_lifetimes
:
bool
,
/// Currently in-scope lifetimes defined in impl headers, fn headers, or HRTB.
/// When `is_collecting_in_band_lifetimes` is true, each lifetime is checked
/// against this list to see if it is already in-scope, or if a definition
/// needs to be created for it.
///
/// We always store a `normalize_to_macros_2_0()` version of the param-name in this
/// vector.
in_scope_lifetimes
:
Vec
<
ParamName
>
,
...
...
@@ -379,7 +375,7 @@ pub fn lower_crate<'a, 'hir>(
task_context
:
None
,
current_item
:
None
,
lifetimes_to_define
:
Vec
::
new
(),
is_collecting_
in_band
_lifetimes
:
false
,
is_collecting_
anonymous
_lifetimes
:
false
,
in_scope_lifetimes
:
Vec
::
new
(),
allow_try_trait
:
Some
([
sym
::
try_trait_v2
][
..
]
.into
()),
allow_gen_future
:
Some
([
sym
::
gen_future
][
..
]
.into
()),
...
...
@@ -726,13 +722,13 @@ fn collect_in_band_defs<T>(
&
mut
self
,
f
:
impl
FnOnce
(
&
mut
Self
)
->
T
,
)
->
(
Vec
<
(
Span
,
ParamName
)
>
,
T
)
{
let
was_collecting
=
std
::
mem
::
replace
(
&
mut
self
.is_collecting_
in_band
_lifetimes
,
true
);
let
was_collecting
=
std
::
mem
::
replace
(
&
mut
self
.is_collecting_
anonymous
_lifetimes
,
true
);
let
len
=
self
.lifetimes_to_define
.len
();
let
res
=
f
(
self
);
let
lifetimes_to_define
=
self
.lifetimes_to_define
.split_off
(
len
);
self
.is_collecting_
in_band
_lifetimes
=
was_collecting
;
self
.is_collecting_
anonymous
_lifetimes
=
was_collecting
;
(
lifetimes_to_define
,
res
)
}
...
...
@@ -749,7 +745,7 @@ fn lifetime_to_generic_param(
// that collisions are ok here and this shouldn't
// really show up for end-user.
let
(
str_name
,
kind
)
=
match
hir_name
{
ParamName
::
Plain
(
ident
)
=>
(
ident
.name
,
hir
::
LifetimeParamKind
::
InBand
),
ParamName
::
Plain
(
ident
)
=>
(
ident
.name
,
hir
::
LifetimeParamKind
::
Explicit
),
ParamName
::
Fresh
(
_
)
=>
(
kw
::
UnderscoreLifetime
,
hir
::
LifetimeParamKind
::
Elided
),
ParamName
::
Error
=>
(
kw
::
UnderscoreLifetime
,
hir
::
LifetimeParamKind
::
Error
),
};
...
...
@@ -773,38 +769,10 @@ fn lifetime_to_generic_param(
}
}
/// When there is a reference to some lifetime `'a`, and in-band
/// lifetimes are enabled, then we want to push that lifetime into
/// the vector of names to define later. In that case, it will get
/// added to the appropriate generics.
fn
maybe_collect_in_band_lifetime
(
&
mut
self
,
ident
:
Ident
)
{
if
!
self
.is_collecting_in_band_lifetimes
{
return
;
}
if
!
self
.sess
.features_untracked
()
.in_band_lifetimes
{
return
;
}
if
self
.in_scope_lifetimes
.contains
(
&
ParamName
::
Plain
(
ident
.normalize_to_macros_2_0
()))
{
return
;
}
let
hir_name
=
ParamName
::
Plain
(
ident
);
if
self
.lifetimes_to_define
.iter
()
.any
(|(
_
,
lt_name
)|
{
lt_name
.normalize_to_macros_2_0
()
==
hir_name
.normalize_to_macros_2_0
()
})
{
return
;
}
self
.lifetimes_to_define
.push
((
ident
.span
,
hir_name
));
}
/// When we have either an elided or `'_` lifetime in an impl
/// header, we convert it to an in-band lifetime.
fn
collect_fresh_
in_band
_lifetime
(
&
mut
self
,
span
:
Span
)
->
ParamName
{
assert
!
(
self
.is_collecting_
in_band
_lifetimes
);
fn
collect_fresh_
anonymous
_lifetime
(
&
mut
self
,
span
:
Span
)
->
ParamName
{
assert
!
(
self
.is_collecting_
anonymous
_lifetimes
);
let
index
=
self
.lifetimes_to_define
.len
()
+
self
.in_scope_lifetimes
.len
();
let
hir_name
=
ParamName
::
Fresh
(
index
);
self
.lifetimes_to_define
.push
((
span
,
hir_name
));
...
...
@@ -1946,7 +1914,7 @@ fn lower_lifetime(&mut self, l: &Lifetime) -> hir::Lifetime {
}
ident
if
ident
.name
==
kw
::
UnderscoreLifetime
=>
match
self
.anonymous_lifetime_mode
{
AnonymousLifetimeMode
::
CreateParameter
=>
{
let
fresh_name
=
self
.collect_fresh_
in_band
_lifetime
(
span
);
let
fresh_name
=
self
.collect_fresh_
anonymous
_lifetime
(
span
);
self
.new_named_lifetime
(
l
.id
,
span
,
hir
::
LifetimeName
::
Param
(
fresh_name
))
}
...
...
@@ -1957,7 +1925,6 @@ fn lower_lifetime(&mut self, l: &Lifetime) -> hir::Lifetime {
AnonymousLifetimeMode
::
ReportError
=>
self
.new_error_lifetime
(
Some
(
l
.id
),
span
),
},
ident
=>
{
self
.maybe_collect_in_band_lifetime
(
ident
);
let
param_name
=
ParamName
::
Plain
(
self
.lower_ident
(
ident
));
self
.new_named_lifetime
(
l
.id
,
span
,
hir
::
LifetimeName
::
Param
(
param_name
))
}
...
...
@@ -2001,8 +1968,8 @@ fn lower_generic_param(
let
(
name
,
kind
)
=
match
param
.kind
{
GenericParamKind
::
Lifetime
=>
{
let
was_collecting_in_band
=
self
.is_collecting_
in_band
_lifetimes
;
self
.is_collecting_
in_band
_lifetimes
=
false
;
let
was_collecting_in_band
=
self
.is_collecting_
anonymous
_lifetimes
;
self
.is_collecting_
anonymous
_lifetimes
=
false
;
let
lt
=
self
.with_anonymous_lifetime_mode
(
AnonymousLifetimeMode
::
ReportError
,
|
this
|
{
...
...
@@ -2025,7 +1992,7 @@ fn lower_generic_param(
let
kind
=
hir
::
GenericParamKind
::
Lifetime
{
kind
:
hir
::
LifetimeParamKind
::
Explicit
};
self
.is_collecting_
in_band
_lifetimes
=
was_collecting_in_band
;
self
.is_collecting_
anonymous
_lifetimes
=
was_collecting_in_band
;
(
param_name
,
kind
)
}
...
...
@@ -2384,7 +2351,7 @@ fn elided_ref_lifetime(&mut self, span: Span) -> hir::Lifetime {
// Hence `impl Foo for &u32` becomes `impl<'f> Foo for &'f u32` for some fresh
// `'f`.
AnonymousLifetimeMode
::
CreateParameter
=>
{
let
fresh_name
=
self
.collect_fresh_
in_band
_lifetime
(
span
);
let
fresh_name
=
self
.collect_fresh_
anonymous
_lifetime
(
span
);
hir
::
Lifetime
{
hir_id
:
self
.next_id
(),
span
:
self
.lower_span
(
span
),
...
...
compiler/rustc_error_codes/src/error_codes/E0687.md
浏览文件 @
bb548a91
#### Note: this error code is no longer emitted by the compiler.
In-band lifetimes cannot be used in
`fn`
/
`Fn`
syntax.
Erroneous code examples:
```
compile_fail,E0687
```
ignore (feature got removed)
#![feature(in_band_lifetimes)]
fn foo(x: fn(&'a u32)) {} // error!
...
...
compiler/rustc_error_codes/src/error_codes/E0688.md
浏览文件 @
bb548a91
#### Note: this error code is no longer emitted by the compiler.
In-band lifetimes were mixed with explicit lifetime binders.
Erroneous code example:
```
compile_fail,E0688
```
ignore (feature got removed)
#![feature(in_band_lifetimes)]
fn foo<'a>(x: &'a u32, y: &'b u32) {} // error!
...
...
compiler/rustc_feature/src/active.rs
浏览文件 @
bb548a91
...
...
@@ -400,8 +400,6 @@ pub fn set(&self, features: &mut Features, span: Span) {
(
active
,
if_let_guard
,
"1.47.0"
,
Some
(
51114
),
None
),
/// Allows using imported `main` function
(
active
,
imported_main
,
"1.53.0"
,
Some
(
28937
),
None
),
/// Allows in-band quantification of lifetime bindings (e.g., `fn foo(x: &'a u8) -> &'a u8`).
(
active
,
in_band_lifetimes
,
"1.23.0"
,
Some
(
44524
),
None
),
/// Allows inferring `'static` outlives requirements (RFC 2093).
(
active
,
infer_static_outlives_requirements
,
"1.26.0"
,
Some
(
54185
),
None
),
/// Allows associated types in inherent impls.
...
...
compiler/rustc_feature/src/removed.rs
浏览文件 @
bb548a91
...
...
@@ -104,6 +104,9 @@
(
removed
,
impl_trait_in_bindings
,
"1.55.0"
,
Some
(
63065
),
None
,
Some
(
"the implementation was not maintainable, the feature may get reintroduced once the current refactorings are done"
)),
(
removed
,
import_shadowing
,
"1.0.0"
,
None
,
None
,
None
),
/// Allows in-band quantification of lifetime bindings (e.g., `fn foo(x: &'a u8) -> &'a u8`).
(
removed
,
in_band_lifetimes
,
"1.23.0"
,
Some
(
44524
),
None
,
Some
(
"removed due to unsolved ergonomic questions and added lifetime resolution complexity"
)),
/// Lazily evaluate constants. This allows constants to depend on type parameters.
(
removed
,
lazy_normalization_consts
,
"1.46.0"
,
Some
(
72219
),
None
,
Some
(
"superseded by `generic_const_exprs`"
)),
/// Allows using the `#[link_args]` attribute.
...
...
compiler/rustc_hir/src/hir.rs
浏览文件 @
bb548a91
...
...
@@ -471,11 +471,6 @@ pub enum LifetimeParamKind {
// `fn foo<'a>(x: &'a u8) -> &'a u8 { x }`).
Explicit
,
// Indicates that the lifetime definition was synthetically added
// as a result of an in-band lifetime usage (e.g., in
// `fn foo(x: &'a u8) -> &'a u8 { x }`).
InBand
,
// Indication that the lifetime was elided (e.g., in both cases in
// `fn foo(x: &u8) -> &'_ u8 { x }`).
Elided
,
...
...
compiler/rustc_middle/src/middle/resolve_lifetime.rs
浏览文件 @
bb548a91
...
...
@@ -15,8 +15,6 @@
pub
enum
LifetimeDefOrigin
{
// Explicit binders like `fn foo<'a>(x: &'a u8)` or elided like `impl Foo<&u32>`
ExplicitOrElided
,
// In-band declarations like `fn foo(x: &'a u8)`
InBand
,
// Some kind of erroneous origin
Error
,
}
...
...
@@ -25,7 +23,6 @@ impl LifetimeDefOrigin {
pub
fn
from_param
(
param
:
&
GenericParam
<
'_
>
)
->
Self
{
match
param
.kind
{
GenericParamKind
::
Lifetime
{
kind
}
=>
match
kind
{
LifetimeParamKind
::
InBand
=>
LifetimeDefOrigin
::
InBand
,
LifetimeParamKind
::
Explicit
=>
LifetimeDefOrigin
::
ExplicitOrElided
,
LifetimeParamKind
::
Elided
=>
LifetimeDefOrigin
::
ExplicitOrElided
,
LifetimeParamKind
::
Error
=>
LifetimeDefOrigin
::
Error
,
...
...
compiler/rustc_resolve/src/late/diagnostics.rs
浏览文件 @
bb548a91
...
...
@@ -1844,7 +1844,6 @@ impl<'tcx> LifetimeContext<'_, 'tcx> {
lifetime_ref
);
err
.span_label
(
lifetime_ref
.span
,
"undeclared lifetime"
);
let
mut
suggests_in_band
=
false
;
let
mut
suggested_spans
=
vec!
[];
for
missing
in
&
self
.missing_named_lifetime_spots
{
match
missing
{
...
...
@@ -1860,7 +1859,6 @@ impl<'tcx> LifetimeContext<'_, 'tcx> {
})
{
(
param
.span
.shrink_to_lo
(),
format!
(
"{}, "
,
lifetime_ref
))
}
else
{
suggests_in_band
=
true
;
(
generics
.span
,
format!
(
"<{}>"
,
lifetime_ref
))
};
if
suggested_spans
.contains
(
&
span
)
{
...
...
@@ -1895,15 +1893,6 @@ impl<'tcx> LifetimeContext<'_, 'tcx> {
_
=>
{}
}
}
if
self
.tcx.sess
.is_nightly_build
()
&&
!
self
.tcx
.features
()
.in_band_lifetimes
&&
suggests_in_band
{
err
.help
(
"if you want to experiment with in-band lifetime bindings,
\
add `#![feature(in_band_lifetimes)]` to the crate attributes"
,
);
}
err
.emit
();
}
...
...
compiler/rustc_resolve/src/late/lifetimes.rs
浏览文件 @
bb548a91
...
...
@@ -16,7 +16,7 @@
use
rustc_hir
::
hir_id
::
ItemLocalId
;
use
rustc_hir
::
intravisit
::{
self
,
Visitor
};
use
rustc_hir
::{
GenericArg
,
GenericParam
,
LifetimeName
,
Node
,
ParamName
,
QPath
};
use
rustc_hir
::{
GenericParamKind
,
HirIdMap
,
HirIdSet
,
LifetimeParamKind
};
use
rustc_hir
::{
GenericParamKind
,
HirIdMap
,
HirIdSet
};
use
rustc_middle
::
hir
::
map
::
Map
;
use
rustc_middle
::
hir
::
nested_filter
;
use
rustc_middle
::
middle
::
resolve_lifetime
::
*
;
...
...
@@ -1325,9 +1325,6 @@ fn visit_fn_decl(&mut self, fd: &'tcx hir::FnDecl<'tcx>) {
}
fn
visit_generics
(
&
mut
self
,
generics
:
&
'tcx
hir
::
Generics
<
'tcx
>
)
{
if
!
self
.trait_definition_only
{
check_mixed_explicit_and_in_band_defs
(
self
.tcx
,
&
generics
.params
);
}
let
scope
=
Scope
::
TraitRefBoundary
{
s
:
self
.scope
};
self
.with
(
scope
,
|
_
,
this
|
{
for
param
in
generics
.params
{
...
...
@@ -1535,30 +1532,6 @@ fn desc(&self) -> &'static str {
}
}
fn
check_mixed_explicit_and_in_band_defs
(
tcx
:
TyCtxt
<
'_
>
,
params
:
&
[
hir
::
GenericParam
<
'_
>
])
{
let
lifetime_params
:
Vec
<
_
>
=
params
.iter
()
.filter_map
(|
param
|
match
param
.kind
{
GenericParamKind
::
Lifetime
{
kind
,
..
}
=>
Some
((
kind
,
param
.span
)),
_
=>
None
,
})
.collect
();
let
explicit
=
lifetime_params
.iter
()
.find
(|(
kind
,
_
)|
*
kind
==
LifetimeParamKind
::
Explicit
);
let
in_band
=
lifetime_params
.iter
()
.find
(|(
kind
,
_
)|
*
kind
==
LifetimeParamKind
::
InBand
);
if
let
(
Some
((
_
,
explicit_span
)),
Some
((
_
,
in_band_span
)))
=
(
explicit
,
in_band
)
{
struct_span_err!
(
tcx
.sess
,
*
in_band_span
,
E0688
,
"cannot mix in-band and explicit lifetime definitions"
)
.span_label
(
*
in_band_span
,
"in-band lifetime definition here"
)
.span_label
(
*
explicit_span
,
"explicit lifetime definition here"
)
.emit
();
}
}
fn
signal_shadowing_problem
(
tcx
:
TyCtxt
<
'_
>
,
name
:
Symbol
,
orig
:
Original
,
shadower
:
Shadower
)
{
let
mut
err
=
if
let
(
ShadowKind
::
Lifetime
,
ShadowKind
::
Lifetime
)
=
(
orig
.kind
,
shadower
.kind
)
{
// lifetime/lifetime shadowing is an error
...
...
@@ -1845,13 +1818,7 @@ fn with<F>(&mut self, wrap_scope: Scope<'_>, f: F)
fn
lifetime_deletion_span
(
&
self
,
name
:
Ident
,
generics
:
&
hir
::
Generics
<
'_
>
)
->
Option
<
Span
>
{
generics
.params
.iter
()
.enumerate
()
.find_map
(|(
i
,
param
)|
{
if
param
.name
.ident
()
==
name
{
let
in_band
=
matches!
(
param
.kind
,
hir
::
GenericParamKind
::
Lifetime
{
kind
:
hir
::
LifetimeParamKind
::
InBand
}
);
if
in_band
{
Some
(
param
.span
)
}
else
if
generics
.params
.len
()
==
1
{
if
generics
.params
.len
()
==
1
{
// if sole lifetime, remove the entire `<>` brackets
Some
(
generics
.span
)
}
else
{
...
...
@@ -2337,39 +2304,6 @@ fn resolve_lifetime_ref(&mut self, lifetime_ref: &'tcx hir::Lifetime) {
}
}
// Check for fn-syntax conflicts with in-band lifetime definitions
if
!
self
.trait_definition_only
&&
self
.is_in_fn_syntax
{
match
def
{
Region
::
EarlyBound
(
_
,
_
,
LifetimeDefOrigin
::
InBand
)
|
Region
::
LateBound
(
_
,
_
,
_
,
LifetimeDefOrigin
::
InBand
)
=>
{
struct_span_err!
(
self
.tcx.sess
,
lifetime_ref
.span
,
E0687
,
"lifetimes used in `fn` or `Fn` syntax must be
\
explicitly declared using `<...>` binders"
)
.span_label
(
lifetime_ref
.span
,
"in-band lifetime definition"
)
.emit
();
}
Region
::
Static
|
Region
::
EarlyBound
(
_
,
_
,
LifetimeDefOrigin
::
ExplicitOrElided
|
LifetimeDefOrigin
::
Error
,
)
|
Region
::
LateBound
(
_
,
_
,
_
,
LifetimeDefOrigin
::
ExplicitOrElided
|
LifetimeDefOrigin
::
Error
,
)
|
Region
::
LateBoundAnon
(
..
)
|
Region
::
Free
(
..
)
=>
{}
}
}
self
.insert_lifetime
(
lifetime_ref
,
def
);
}
else
{
self
.emit_undeclared_lifetime_error
(
lifetime_ref
);
...
...
src/test/ui/async-await/generics-and-bounds.rs
浏览文件 @
bb548a91
...
...
@@ -2,8 +2,6 @@
// edition:2018
// compile-flags: --crate-type lib
#![feature(in_band_lifetimes)]
use
std
::
future
::
Future
;
pub
async
fn
simple_generic
<
T
>
()
{}
...
...
@@ -73,10 +71,6 @@ pub fn call_with_ref_block<'a>(f: &'a (impl Foo + 'a)) -> impl Future<Output = (
async
move
{
f
.foo
()
}
}
pub
fn
call_with_ref_block_in_band
(
f
:
&
'a
(
impl
Foo
+
'a
))
->
impl
Future
<
Output
=
()
>
+
'a
{
async
move
{
f
.foo
()
}
}
pub
fn
async_block_with_same_generic_params_unifies
()
{
let
mut
a
=
call_generic_bound_block
(
FooType
);
a
=
call_generic_bound_block
(
FooType
);
...
...
@@ -91,9 +85,4 @@ pub fn async_block_with_same_generic_params_unifies() {
let
f_two
=
FooType
;
let
mut
d
=
call_with_ref_block
(
&
f_one
);
d
=
call_with_ref_block
(
&
f_two
);
let
f_one
=
FooType
;
let
f_two
=
FooType
;
let
mut
d
=
call_with_ref_block_in_band
(
&
f_one
);
d
=
call_with_ref_block_in_band
(
&
f_two
);
}
src/test/ui/error-codes/E0261.stderr
浏览文件 @
bb548a91
...
...
@@ -5,8 +5,6 @@ LL | fn foo(x: &'a str) { }
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'a` here: `<'a>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/E0261.rs:5:9
...
...
@@ -15,8 +13,6 @@ LL | struct Foo {
| - help: consider introducing lifetime `'a` here: `<'a>`
LL | x: &'a str,
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error: aborting due to 2 previous errors
...
...
src/test/ui/feature-gates/feature-gate-in_band_lifetimes.rs
已删除
100644 → 0
浏览文件 @
4e82f354
#![allow(warnings)]
fn
foo
(
x
:
&
'x
u8
)
->
&
'x
u8
{
x
}
//~^ ERROR use of undeclared lifetime name
//~^^ ERROR use of undeclared lifetime name
struct
X
<
'a
>
(
&
'a
u8
);
impl
<
'a
>
X
<
'a
>
{
fn
inner
(
&
self
)
->
&
'a
u8
{
self
.0
}
}
impl
<
'a
>
X
<
'b
>
{
//~^ ERROR use of undeclared lifetime name
fn
inner_2
(
&
self
)
->
&
'b
u8
{
//~^ ERROR use of undeclared lifetime name
self
.0
}
}
impl
X
<
'b
>
{
//~^ ERROR use of undeclared lifetime name
fn
inner_3
(
&
self
)
->
&
'b
u8
{
//~^ ERROR use of undeclared lifetime name
self
.0
}
}
struct
Y
<
T
>
(
T
);
impl
Y
<&
'a
u8
>
{
//~^ ERROR use of undeclared lifetime name
fn
inner
(
&
self
)
->
&
'a
u8
{
//~^ ERROR use of undeclared lifetime name
self
.0
}
}
trait
MyTrait
<
'a
>
{
fn
my_lifetime
(
&
self
)
->
&
'a
u8
;
fn
any_lifetime
()
->
&
'b
u8
;
//~^ ERROR use of undeclared lifetime name
fn
borrowed_lifetime
(
&
'b
self
)
->
&
'b
u8
;
//~^ ERROR use of undeclared lifetime name
//~^^ ERROR use of undeclared lifetime name
}
impl
MyTrait
<
'a
>
for
Y
<&
'a
u8
>
{
//~^ ERROR use of undeclared lifetime name
//~^^ ERROR use of undeclared lifetime name
fn
my_lifetime
(
&
self
)
->
&
'a
u8
{
self
.0
}
//~^ ERROR use of undeclared lifetime name
fn
any_lifetime
()
->
&
'b
u8
{
&
0
}
//~^ ERROR use of undeclared lifetime name
fn
borrowed_lifetime
(
&
'b
self
)
->
&
'b
u8
{
&*
self
.0
}
//~^ ERROR use of undeclared lifetime name
//~^^ ERROR use of undeclared lifetime name
}
fn
main
()
{}
src/test/ui/feature-gates/feature-gate-in_band_lifetimes.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error[E0261]: use of undeclared lifetime name `'x`
--> $DIR/feature-gate-in_band_lifetimes.rs:3:12
|
LL | fn foo(x: &'x u8) -> &'x u8 { x }
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'x` here: `<'x>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'x`
--> $DIR/feature-gate-in_band_lifetimes.rs:3:23
|
LL | fn foo(x: &'x u8) -> &'x u8 { x }
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'x` here: `<'x>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:15:12
|
LL | impl<'a> X<'b> {
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'b` here: `'b,`
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:17:27
|
LL | fn inner_2(&self) -> &'b u8 {
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | impl<'b, 'a> X<'b> {
| +++
help: consider introducing lifetime `'b` here
|
LL | fn inner_2<'b>(&self) -> &'b u8 {
| ++++
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:23:8
|
LL | impl X<'b> {
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'b` here: `<'b>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:25:27
|
LL | fn inner_3(&self) -> &'b u8 {
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | impl<'b> X<'b> {
| ++++
help: consider introducing lifetime `'b` here
|
LL | fn inner_3<'b>(&self) -> &'b u8 {
| ++++
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/feature-gate-in_band_lifetimes.rs:33:9
|
LL | impl Y<&'a u8> {
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'a` here: `<'a>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/feature-gate-in_band_lifetimes.rs:35:25
|
LL | fn inner(&self) -> &'a u8 {
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'a` here
|
LL | impl<'a> Y<&'a u8> {
| ++++
help: consider introducing lifetime `'a` here
|
LL | fn inner<'a>(&self) -> &'a u8 {
| ++++
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/feature-gate-in_band_lifetimes.rs:50:14
|
LL | impl MyTrait<'a> for Y<&'a u8> {
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'a` here: `<'a>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/feature-gate-in_band_lifetimes.rs:50:25
|
LL | impl MyTrait<'a> for Y<&'a u8> {
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'a` here: `<'a>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/feature-gate-in_band_lifetimes.rs:53:31
|
LL | fn my_lifetime(&self) -> &'a u8 { self.0 }
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'a` here
|
LL | impl<'a> MyTrait<'a> for Y<&'a u8> {
| ++++
help: consider introducing lifetime `'a` here
|
LL | fn my_lifetime<'a>(&self) -> &'a u8 { self.0 }
| ++++
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:55:27
|
LL | fn any_lifetime() -> &'b u8 { &0 }
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | impl<'b> MyTrait<'a> for Y<&'a u8> {
| ++++
help: consider introducing lifetime `'b` here
|
LL | fn any_lifetime<'b>() -> &'b u8 { &0 }
| ++++
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:57:27
|
LL | fn borrowed_lifetime(&'b self) -> &'b u8 { &*self.0 }
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | impl<'b> MyTrait<'a> for Y<&'a u8> {
| ++++
help: consider introducing lifetime `'b` here
|
LL | fn borrowed_lifetime<'b>(&'b self) -> &'b u8 { &*self.0 }
| ++++
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:57:40
|
LL | fn borrowed_lifetime(&'b self) -> &'b u8 { &*self.0 }
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | impl<'b> MyTrait<'a> for Y<&'a u8> {
| ++++
help: consider introducing lifetime `'b` here
|
LL | fn borrowed_lifetime<'b>(&'b self) -> &'b u8 { &*self.0 }
| ++++
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:43:27
|
LL | fn any_lifetime() -> &'b u8;
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | trait MyTrait<'b, 'a> {
| +++
help: consider introducing lifetime `'b` here
|
LL | fn any_lifetime<'b>() -> &'b u8;
| ++++
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:45:27
|
LL | fn borrowed_lifetime(&'b self) -> &'b u8;
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | trait MyTrait<'b, 'a> {
| +++
help: consider introducing lifetime `'b` here
|
LL | fn borrowed_lifetime<'b>(&'b self) -> &'b u8;
| ++++
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/feature-gate-in_band_lifetimes.rs:45:40
|
LL | fn borrowed_lifetime(&'b self) -> &'b u8;
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | trait MyTrait<'b, 'a> {
| +++
help: consider introducing lifetime `'b` here
|
LL | fn borrowed_lifetime<'b>(&'b self) -> &'b u8;
| ++++
error: aborting due to 17 previous errors
For more information about this error, try `rustc --explain E0261`.
src/test/ui/generic-associated-types/gat-in-trait-path-undeclared-lifetime.stderr
浏览文件 @
bb548a91
...
...
@@ -5,8 +5,6 @@ LL | fn _f(arg : Box<dyn for<'a> X<Y<'x> = &'a [u32]>>) {}
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'x` here: `<'x>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0582]: binding for associated type `Y` references lifetime `'a`, which does not appear in the trait input types
--> $DIR/gat-in-trait-path-undeclared-lifetime.rs:8:33
...
...
src/test/ui/generic-associated-types/generic_associated_type_undeclared_lifetimes.stderr
浏览文件 @
bb548a91
...
...
@@ -4,7 +4,6 @@ error[E0261]: use of undeclared lifetime name `'b`
LL | + Deref<Target = Self::Item<'b>>;
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | trait Iterable<'b> {
...
...
@@ -20,7 +19,6 @@ error[E0261]: use of undeclared lifetime name `'undeclared`
LL | fn iter<'a>(&'a self) -> Self::Iter<'undeclared>;
| ^^^^^^^^^^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'undeclared` here
|
LL | trait Iterable<'undeclared> {
...
...
src/test/ui/generic-associated-types/issue-67510.stderr
浏览文件 @
bb548a91
...
...
@@ -5,8 +5,6 @@ LL | fn f(x: Box<dyn X<Y<'a>=&'a ()>>) {}
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'a` here: `<'a>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/issue-67510.rs:7:26
...
...
@@ -15,8 +13,6 @@ LL | fn f(x: Box<dyn X<Y<'a>=&'a ()>>) {}
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'a` here: `<'a>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error: aborting due to 2 previous errors
...
...
src/test/ui/impl-trait/region-escape-via-bound-contravariant-closure.rs
浏览文件 @
bb548a91
...
...
@@ -8,9 +8,8 @@
// run-pass
#![allow(dead_code)]
#![feature(in_band_lifetimes)]
fn
foo
(
x
:
&
'x
u32
)
->
impl
Fn
()
->
&
'y
u32
fn
foo
<
'x
,
'y
>
(
x
:
&
'x
u32
)
->
impl
Fn
()
->
&
'y
u32
where
'x
:
'y
{
move
||
x
...
...
src/test/ui/impl-trait/region-escape-via-bound-contravariant.rs
浏览文件 @
bb548a91
...
...
@@ -8,13 +8,12 @@
// run-pass
#![allow(dead_code)]
#![feature(in_band_lifetimes)]
trait
Trait
<
'a
>
{
}
impl
Trait
<
'b
>
for
&
'a
u32
{
}
impl
<
'a
,
'b
>
Trait
<
'b
>
for
&
'a
u32
{
}
fn
foo
(
x
:
&
'x
u32
)
->
impl
Trait
<
'y
>
fn
foo
<
'x
,
'y
>
(
x
:
&
'x
u32
)
->
impl
Trait
<
'y
>
where
'x
:
'y
{
x
...
...
src/test/ui/impl-trait/region-escape-via-bound.rs
浏览文件 @
bb548a91
...
...
@@ -4,15 +4,14 @@
// See https://github.com/rust-lang/rust/issues/46541 for more details.
#![allow(dead_code)]
#![feature(in_band_lifetimes)]
use
std
::
cell
::
Cell
;
trait
Trait
<
'a
>
{
}
impl
Trait
<
'b
>
for
Cell
<&
'a
u32
>
{
}
impl
<
'a
,
'b
>
Trait
<
'b
>
for
Cell
<&
'a
u32
>
{
}
fn
foo
(
x
:
Cell
<&
'x
u32
>
)
->
impl
Trait
<
'y
>
fn
foo
<
'x
,
'y
>
(
x
:
Cell
<&
'x
u32
>
)
->
impl
Trait
<
'y
>
//~^ ERROR hidden type for `impl Trait` captures lifetime that does not appear in bounds [E0700]
where
'x
:
'y
{
...
...
src/test/ui/impl-trait/region-escape-via-bound.stderr
浏览文件 @
bb548a91
error[E0700]: hidden type for `impl Trait` captures lifetime that does not appear in bounds
--> $DIR/region-escape-via-bound.rs:1
5:29
--> $DIR/region-escape-via-bound.rs:1
4:37
|
LL | fn foo(x: Cell<&'x u32>) -> impl Trait<'y>
| ^^^^^^^^^^^^^^
LL |
LL | where 'x: 'y
| -- hidden type `Cell<&'x u32>` captures the lifetime `'x` as defined here
LL | fn foo<'x, 'y>(x: Cell<&'x u32>) -> impl Trait<'y>
| -- ^^^^^^^^^^^^^^
| |
| hidden type `Cell<&'x u32>` captures the lifetime `'x` as defined here
|
help: to declare that the `impl Trait` captures `'x`, you can add an explicit `'x` lifetime bound
|
LL | fn foo(x: Cell<&'x u32>) -> impl Trait<'y> + 'x
| ++++
LL | fn foo
<'x, 'y>
(x: Cell<&'x u32>) -> impl Trait<'y> + 'x
|
++++
error: aborting due to previous error
...
...
src/test/ui/in-band-lifetimes/E0687.rs
已删除
100644 → 0
浏览文件 @
4e82f354
#![allow(warnings)]
#![feature(in_band_lifetimes)]
fn
foo
(
x
:
fn
(
&
'a
u32
))
{}
//~ ERROR must be explicitly
fn
bar
(
x
:
&
Fn
(
&
'a
u32
))
{}
//~ ERROR must be explicitly
fn
baz
(
x
:
fn
(
&
'a
u32
),
y
:
&
'a
u32
)
{}
//~ ERROR must be explicitly
struct
Foo
<
'a
>
{
x
:
&
'a
u32
}
impl
Foo
<
'a
>
{
fn
bar
(
&
self
,
x
:
fn
(
&
'a
u32
))
{}
//~ ERROR must be explicitly
}
fn
main
()
{}
src/test/ui/in-band-lifetimes/E0687.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error[E0687]: lifetimes used in `fn` or `Fn` syntax must be explicitly declared using `<...>` binders
--> $DIR/E0687.rs:4:15
|
LL | fn foo(x: fn(&'a u32)) {}
| ^^ in-band lifetime definition
error[E0687]: lifetimes used in `fn` or `Fn` syntax must be explicitly declared using `<...>` binders
--> $DIR/E0687.rs:6:16
|
LL | fn bar(x: &Fn(&'a u32)) {}
| ^^ in-band lifetime definition
error[E0687]: lifetimes used in `fn` or `Fn` syntax must be explicitly declared using `<...>` binders
--> $DIR/E0687.rs:8:15
|
LL | fn baz(x: fn(&'a u32), y: &'a u32) {}
| ^^ in-band lifetime definition
error[E0687]: lifetimes used in `fn` or `Fn` syntax must be explicitly declared using `<...>` binders
--> $DIR/E0687.rs:13:26
|
LL | fn bar(&self, x: fn(&'a u32)) {}
| ^^ in-band lifetime definition
error: aborting due to 4 previous errors
For more information about this error, try `rustc --explain E0687`.
src/test/ui/in-band-lifetimes/E0687_where.rs
已删除
100644 → 0
浏览文件 @
4e82f354
#![allow(warnings)]
#![feature(in_band_lifetimes)]
fn
bar
<
F
>
(
x
:
&
F
)
where
F
:
Fn
(
&
'a
u32
)
{}
//~ ERROR must be explicitly
fn
baz
(
x
:
&
impl
Fn
(
&
'a
u32
))
{}
//~ ERROR must be explicitly
fn
main
()
{}
src/test/ui/in-band-lifetimes/E0687_where.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error[E0687]: lifetimes used in `fn` or `Fn` syntax must be explicitly declared using `<...>` binders
--> $DIR/E0687_where.rs:4:31
|
LL | fn bar<F>(x: &F) where F: Fn(&'a u32) {}
| ^^ in-band lifetime definition
error[E0687]: lifetimes used in `fn` or `Fn` syntax must be explicitly declared using `<...>` binders
--> $DIR/E0687_where.rs:6:21
|
LL | fn baz(x: &impl Fn(&'a u32)) {}
| ^^ in-band lifetime definition
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0687`.
src/test/ui/in-band-lifetimes/E0688.rs
已删除
100644 → 0
浏览文件 @
4e82f354
#![allow(warnings)]
#![feature(in_band_lifetimes)]
fn
foo
<
'a
>
(
x
:
&
'a
u32
,
y
:
&
'b
u32
)
{}
//~ ERROR cannot mix
struct
Foo
<
'a
>
{
x
:
&
'a
u32
}
impl
Foo
<
'a
>
{
fn
bar
<
'b
>
(
x
:
&
'a
u32
,
y
:
&
'b
u32
,
z
:
&
'c
u32
)
{}
//~ ERROR cannot mix
}
impl
<
'b
>
Foo
<
'a
>
{
//~ ERROR cannot mix
fn
baz
()
{}
}
fn
main
()
{}
src/test/ui/in-band-lifetimes/E0688.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error[E0688]: cannot mix in-band and explicit lifetime definitions
--> $DIR/E0688.rs:4:28
|
LL | fn foo<'a>(x: &'a u32, y: &'b u32) {}
| -- ^^ in-band lifetime definition here
| |
| explicit lifetime definition here
error[E0688]: cannot mix in-band and explicit lifetime definitions
--> $DIR/E0688.rs:9:44
|
LL | fn bar<'b>(x: &'a u32, y: &'b u32, z: &'c u32) {}
| -- ^^ in-band lifetime definition here
| |
| explicit lifetime definition here
error[E0688]: cannot mix in-band and explicit lifetime definitions
--> $DIR/E0688.rs:12:14
|
LL | impl<'b> Foo<'a> {
| -- ^^ in-band lifetime definition here
| |
| explicit lifetime definition here
error: aborting due to 3 previous errors
For more information about this error, try `rustc --explain E0688`.
src/test/ui/in-band-lifetimes/elided-lifetimes.fixed
已删除
100644 → 0
浏览文件 @
4e82f354
// run-rustfix
// edition:2018
#![allow(unused)]
#![deny(elided_lifetimes_in_paths)]
//~^ NOTE the lint level is defined here
use std::cell::{Ref, RefCell};
struct Foo<'a> {
x: &'a u32,
}
fn foo(x: &Foo<'_>) {
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
}
fn bar(x: &Foo<'_>) {}
struct Wrapped<'a>(&'a str);
struct WrappedWithBow<'a> {
gift: &'a str,
}
struct MatchedSet<'a, 'b> {
one: &'a str,
another: &'b str,
}
fn wrap_gift(gift: &str) -> Wrapped<'_> {
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
Wrapped(gift)
}
fn wrap_gift_with_bow(gift: &str) -> WrappedWithBow<'_> {
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
WrappedWithBow { gift }
}
fn inspect_matched_set(set: MatchedSet<'_, '_>) {
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected 2 lifetime parameters
//~| HELP consider using the `'_` lifetime
println!("{} {}", set.one, set.another);
}
// Verify that the lint does not fire, because the added `'_` wouldn't be resolved correctly.
fn match_sets() -> MatchedSet<'static, 'static> {
//~^ ERROR missing lifetime specifiers
//~| NOTE expected 2 lifetime parameters
//~| HELP this function's return type contains a borrowed value
//~| HELP consider using the `'static` lifetime
MatchedSet { one: "one", another: "another" }
}
macro_rules! autowrapper {
($type_name:ident, $fn_name:ident, $lt:lifetime) => {
struct $type_name<$lt> {
gift: &$lt str
}
fn $fn_name(gift: &str) -> $type_name<'_> {
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
//~| ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
$type_name { gift }
}
}
}
autowrapper!(Autowrapped, autowrap_gift, 'a);
//~^ NOTE in this expansion of autowrapper!
//~| NOTE in this expansion of autowrapper!
// Verify that rustfix does not try to apply the fix twice.
autowrapper!(AutowrappedAgain, autowrap_gift_again, 'a);
//~^ NOTE in this expansion of autowrapper!
//~| NOTE in this expansion of autowrapper!
macro_rules! anytuple_ref_ty {
($($types:ty),*) => {
Ref<'_, ($($types),*)>
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
}
}
#[allow(elided_lifetimes_in_paths)]
mod blah {
struct Thing<'a>(&'a i32);
struct Bar<T>(T);
fn foo(b: Bar<Thing>) {}
}
fn main() {
let honesty = RefCell::new((4, 'e'));
let loyalty: Ref<'_, (u32, char)> = honesty.borrow();
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
let generosity = Ref::map(loyalty, |t| &t.0);
let laughter = RefCell::new((true, "magic"));
let yellow: anytuple_ref_ty!(bool, &str) = laughter.borrow();
//~^ NOTE in this expansion of anytuple_ref_ty!
//~| NOTE in this expansion of anytuple_ref_ty!
}
src/test/ui/in-band-lifetimes/elided-lifetimes.rs
已删除
100644 → 0
浏览文件 @
4e82f354
// run-rustfix
// edition:2018
#![allow(unused)]
#![deny(elided_lifetimes_in_paths)]
//~^ NOTE the lint level is defined here
use
std
::
cell
::{
Ref
,
RefCell
};
struct
Foo
<
'a
>
{
x
:
&
'a
u32
,
}
fn
foo
(
x
:
&
Foo
)
{
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
}
fn
bar
(
x
:
&
Foo
<
'_
>
)
{}
struct
Wrapped
<
'a
>
(
&
'a
str
);
struct
WrappedWithBow
<
'a
>
{
gift
:
&
'a
str
,
}
struct
MatchedSet
<
'a
,
'b
>
{
one
:
&
'a
str
,
another
:
&
'b
str
,
}
fn
wrap_gift
(
gift
:
&
str
)
->
Wrapped
{
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
Wrapped
(
gift
)
}
fn
wrap_gift_with_bow
(
gift
:
&
str
)
->
WrappedWithBow
{
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
WrappedWithBow
{
gift
}
}
fn
inspect_matched_set
(
set
:
MatchedSet
)
{
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected 2 lifetime parameters
//~| HELP consider using the `'_` lifetime
println!
(
"{} {}"
,
set
.one
,
set
.another
);
}
// Verify that the lint does not fire, because the added `'_` wouldn't be resolved correctly.
fn
match_sets
()
->
MatchedSet
{
//~^ ERROR missing lifetime specifiers
//~| NOTE expected 2 lifetime parameters
//~| HELP this function's return type contains a borrowed value
//~| HELP consider using the `'static` lifetime
MatchedSet
{
one
:
"one"
,
another
:
"another"
}
}
macro_rules!
autowrapper
{
(
$type_name:ident
,
$fn_name:ident
,
$lt:lifetime
)
=>
{
struct
$type_name
<
$lt
>
{
gift
:
&
$lt
str
}
fn
$fn_name
(
gift
:
&
str
)
->
$type_name
{
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
//~| ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
$type_name
{
gift
}
}
}
}
autowrapper!
(
Autowrapped
,
autowrap_gift
,
'a
);
//~^ NOTE in this expansion of autowrapper!
//~| NOTE in this expansion of autowrapper!
// Verify that rustfix does not try to apply the fix twice.
autowrapper!
(
AutowrappedAgain
,
autowrap_gift_again
,
'a
);
//~^ NOTE in this expansion of autowrapper!
//~| NOTE in this expansion of autowrapper!
macro_rules!
anytuple_ref_ty
{
(
$
(
$types:ty
),
*
)
=>
{
Ref
<
(
$
(
$types
),
*
)
>
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
}
}
#[allow(elided_lifetimes_in_paths)]
mod
blah
{
struct
Thing
<
'a
>
(
&
'a
i32
);
struct
Bar
<
T
>
(
T
);
fn
foo
(
b
:
Bar
<
Thing
>
)
{}
}
fn
main
()
{
let
honesty
=
RefCell
::
new
((
4
,
'e'
));
let
loyalty
:
Ref
<
(
u32
,
char
)
>
=
honesty
.borrow
();
//~^ ERROR hidden lifetime parameters in types are deprecated
//~| NOTE expected named lifetime parameter
//~| HELP consider using the `'_` lifetime
let
generosity
=
Ref
::
map
(
loyalty
,
|
t
|
&
t
.0
);
let
laughter
=
RefCell
::
new
((
true
,
"magic"
));
let
yellow
:
anytuple_ref_ty!
(
bool
,
&
str
)
=
laughter
.borrow
();
//~^ NOTE in this expansion of anytuple_ref_ty!
//~| NOTE in this expansion of anytuple_ref_ty!
}
src/test/ui/in-band-lifetimes/elided-lifetimes.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error: hidden lifetime parameters in types are deprecated
--> $DIR/elided-lifetimes.rs:14:12
|
LL | fn foo(x: &Foo) {
| ^^^ expected named lifetime parameter
|
note: the lint level is defined here
--> $DIR/elided-lifetimes.rs:5:9
|
LL | #![deny(elided_lifetimes_in_paths)]
| ^^^^^^^^^^^^^^^^^^^^^^^^^
help: consider using the `'_` lifetime
|
LL | fn foo(x: &Foo<'_>) {
| ~~~~~~~
error: hidden lifetime parameters in types are deprecated
--> $DIR/elided-lifetimes.rs:33:29
|
LL | fn wrap_gift(gift: &str) -> Wrapped {
| ^^^^^^^ expected named lifetime parameter
|
help: consider using the `'_` lifetime
|
LL | fn wrap_gift(gift: &str) -> Wrapped<'_> {
| ~~~~~~~~~~~
error: hidden lifetime parameters in types are deprecated
--> $DIR/elided-lifetimes.rs:40:38
|
LL | fn wrap_gift_with_bow(gift: &str) -> WrappedWithBow {
| ^^^^^^^^^^^^^^ expected named lifetime parameter
|
help: consider using the `'_` lifetime
|
LL | fn wrap_gift_with_bow(gift: &str) -> WrappedWithBow<'_> {
| ~~~~~~~~~~~~~~~~~~
error: hidden lifetime parameters in types are deprecated
--> $DIR/elided-lifetimes.rs:47:29
|
LL | fn inspect_matched_set(set: MatchedSet) {
| ^^^^^^^^^^ expected 2 lifetime parameters
|
help: consider using the `'_` lifetime
|
LL | fn inspect_matched_set(set: MatchedSet<'_, '_>) {
| ~~~~~~~~~~~~~~~~~~
error[E0106]: missing lifetime specifiers
--> $DIR/elided-lifetimes.rs:55:20
|
LL | fn match_sets() -> MatchedSet {
| ^^^^^^^^^^ expected 2 lifetime parameters
|
= help: this function's return type contains a borrowed value, but there is no value for it to be borrowed from
help: consider using the `'static` lifetime
|
LL | fn match_sets() -> MatchedSet<'static, 'static> {
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
error: hidden lifetime parameters in types are deprecated
--> $DIR/elided-lifetimes.rs:69:36
|
LL | fn $fn_name(gift: &str) -> $type_name {
| ^^^^^^^^^^ expected named lifetime parameter
...
LL | autowrapper!(Autowrapped, autowrap_gift, 'a);
| -------------------------------------------- in this macro invocation
|
= note: this error originates in the macro `autowrapper` (in Nightly builds, run with -Z macro-backtrace for more info)
help: consider using the `'_` lifetime
|
LL | fn $fn_name(gift: &str) -> $type_name<'_> {
| ~~~~~~~~~~~~~~
error: hidden lifetime parameters in types are deprecated
--> $DIR/elided-lifetimes.rs:69:36
|
LL | fn $fn_name(gift: &str) -> $type_name {
| ^^^^^^^^^^ expected named lifetime parameter
...
LL | autowrapper!(AutowrappedAgain, autowrap_gift_again, 'a);
| ------------------------------------------------------- in this macro invocation
|
= note: this error originates in the macro `autowrapper` (in Nightly builds, run with -Z macro-backtrace for more info)
help: consider using the `'_` lifetime
|
LL | fn $fn_name(gift: &str) -> $type_name<'_> {
| ~~~~~~~~~~~~~~
error: hidden lifetime parameters in types are deprecated
--> $DIR/elided-lifetimes.rs:109:22
|
LL | let loyalty: Ref<(u32, char)> = honesty.borrow();
| ^ expected named lifetime parameter
|
help: consider using the `'_` lifetime
|
LL | let loyalty: Ref<'_, (u32, char)> = honesty.borrow();
| +++
error: hidden lifetime parameters in types are deprecated
--> $DIR/elided-lifetimes.rs:92:13
|
LL | Ref<($($types),*)>
| ^ expected named lifetime parameter
...
LL | let yellow: anytuple_ref_ty!(bool, &str) = laughter.borrow();
| ---------------------------- in this macro invocation
|
= note: this error originates in the macro `anytuple_ref_ty` (in Nightly builds, run with -Z macro-backtrace for more info)
help: consider using the `'_` lifetime
|
LL | Ref<'_, ($($types),*)>
| +++
error: aborting due to 9 previous errors
For more information about this error, try `rustc --explain E0106`.
src/test/ui/in-band-lifetimes/in-band-lifetimes.rs
已删除
100644 → 0
浏览文件 @
4e82f354
// run-pass
#![allow(warnings)]
#![feature(in_band_lifetimes)]
fn
foo
(
x
:
&
'x
u8
)
->
&
'x
u8
{
x
}
fn
foo2
(
x
:
&
'a
u8
,
y
:
&
u8
)
->
&
'a
u8
{
x
}
fn
check_in_band_can_be_late_bound
()
{
let
_
:
for
<
'x
>
fn
(
&
'x
u8
,
&
u8
)
->
&
'x
u8
=
foo2
;
}
struct
ForInherentNoParams
;
impl
ForInherentNoParams
{
fn
foo
(
x
:
&
'a
u32
,
y
:
&
u32
)
->
&
'a
u32
{
x
}
}
struct
X
<
'a
>
(
&
'a
u8
);
impl
<
'a
>
X
<
'a
>
{
fn
inner
(
&
self
)
->
&
'a
u8
{
self
.0
}
fn
same_lifetime_as_parameter
(
&
mut
self
,
x
:
&
'a
u8
)
{
self
.0
=
x
;
}
}
impl
X
<
'b
>
{
fn
inner_2
(
&
self
)
->
&
'b
u8
{
self
.0
}
fn
reference_already_introduced_in_band_from_method_with_explicit_binders
<
'a
>
(
&
'b
self
,
x
:
&
'a
u32
)
{}
}
struct
Y
<
T
>
(
T
);
impl
Y
<&
'a
u8
>
{
fn
inner
(
&
self
)
->
&
'a
u8
{
self
.0
}
}
trait
MyTrait
<
'a
>
{
fn
my_lifetime
(
&
self
)
->
&
'a
u8
;
fn
any_lifetime
()
->
&
'b
u8
;
fn
borrowed_lifetime
(
&
'b
self
)
->
&
'b
u8
;
fn
default_impl
(
&
self
,
x
:
&
'b
u32
,
y
:
&
u32
)
->
&
'b
u32
{
x
}
fn
in_band_def_explicit_impl
(
&
self
,
x
:
&
'b
u8
);
}
impl
MyTrait
<
'a
>
for
Y
<&
'a
u8
>
{
fn
my_lifetime
(
&
self
)
->
&
'a
u8
{
self
.0
}
fn
any_lifetime
()
->
&
'b
u8
{
&
0
}
fn
borrowed_lifetime
(
&
'b
self
)
->
&
'b
u8
{
&*
self
.0
}
fn
in_band_def_explicit_impl
<
'b
>
(
&
self
,
x
:
&
'b
u8
)
{}
}
fn
test_hrtb_defined_lifetime_where
<
F
>
(
_
:
F
)
where
for
<
'a
>
F
:
Fn
(
&
'a
u8
)
{}
fn
test_hrtb_defined_lifetime_polytraitref
<
F
>
(
_
:
F
)
where
F
:
for
<
'a
>
Fn
(
&
'a
u8
)
{}
fn
reference_in_band_from_locals
(
x
:
&
'test
u32
)
->
&
'test
u32
{
let
y
:
&
'test
u32
=
x
;
y
}
fn
in_generics_in_band
<
T
:
MyTrait
<
'a
>>
(
x
:
&
T
)
{}
fn
where_clause_in_band
<
T
>
(
x
:
&
T
)
where
T
:
MyTrait
<
'a
>
{}
fn
impl_trait_in_band
(
x
:
&
impl
MyTrait
<
'a
>
)
{}
// Tests around using in-band lifetimes within existential traits.
trait
FunkyTrait
<
'a
>
{
}
impl
<
'a
,
T
>
FunkyTrait
<
'a
>
for
T
{
}
fn
ret_pos_impl_trait_in_band_outlives
(
x
:
&
'a
u32
)
->
impl
::
std
::
fmt
::
Debug
+
'a
{
x
}
fn
ret_pos_impl_trait_in_band_param
(
x
:
&
'a
u32
)
->
impl
FunkyTrait
<
'a
>
{
x
}
fn
ret_pos_impl_trait_in_band_param_static
(
x
:
&
'a
u32
)
->
impl
FunkyTrait
<
'static
>
+
'a
{
x
}
fn
ret_pos_impl_trait_in_band_param_outlives
(
x
:
&
'a
u32
)
->
impl
FunkyTrait
<
'a
>
+
'a
{
x
}
fn
ret_pos_impl_trait_in_band_higher_ranked
(
x
:
&
'a
u32
)
->
impl
for
<
'b
>
FunkyTrait
<
'b
>
+
'a
{
x
}
fn
main
()
{}
src/test/ui/in-band-lifetimes/issue-61124-anon-lifetime-in-struct-declaration.rs
已删除
100644 → 0
浏览文件 @
4e82f354
#![deny(elided_lifetimes_in_paths)]
// Previously, the elided-lifetimes-in-path lint would fire, but we don't want
// that, because `'_` isn't legal in struct declarations.
struct
Betrayal
<
'a
>
{
x
:
&
'a
u8
}
struct
Heartbreak
(
Betrayal
);
//~ ERROR missing lifetime specifier
fn
main
()
{}
src/test/ui/in-band-lifetimes/issue-61124-anon-lifetime-in-struct-declaration.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error[E0106]: missing lifetime specifier
--> $DIR/issue-61124-anon-lifetime-in-struct-declaration.rs:8:19
|
LL | struct Heartbreak(Betrayal);
| ^^^^^^^^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
LL | struct Heartbreak<'a>(Betrayal<'a>);
| ++++ ~~~~~~~~~~~~
error: aborting due to previous error
For more information about this error, try `rustc --explain E0106`.
src/test/ui/in-band-lifetimes/mismatched.nll.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error[E0621]: explicit lifetime required in the type of `y`
--> $DIR/mismatched.rs:4:42
|
LL | fn foo(x: &'a u32, y: &u32) -> &'a u32 { y }
| ---- ^ lifetime `'a` required
| |
| help: add explicit lifetime `'a` to the type of `y`: `&'a u32`
error: lifetime may not live long enough
--> $DIR/mismatched.rs:6:46
|
LL | fn foo2(x: &'a u32, y: &'b u32) -> &'a u32 { y }
| -- -- ^ function was supposed to return data with lifetime `'a` but it is returning data with lifetime `'b`
| | |
| | lifetime `'b` defined here
| lifetime `'a` defined here
|
= help: consider adding the following bound: `'b: 'a`
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0621`.
src/test/ui/in-band-lifetimes/mismatched.rs
已删除
100644 → 0
浏览文件 @
4e82f354
#![allow(warnings)]
#![feature(in_band_lifetimes)]
fn
foo
(
x
:
&
'a
u32
,
y
:
&
u32
)
->
&
'a
u32
{
y
}
//~ ERROR explicit lifetime required
fn
foo2
(
x
:
&
'a
u32
,
y
:
&
'b
u32
)
->
&
'a
u32
{
y
}
//~ ERROR lifetime mismatch
fn
main
()
{}
src/test/ui/in-band-lifetimes/mismatched.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error[E0621]: explicit lifetime required in the type of `y`
--> $DIR/mismatched.rs:4:42
|
LL | fn foo(x: &'a u32, y: &u32) -> &'a u32 { y }
| ---- ^ lifetime `'a` required
| |
| help: add explicit lifetime `'a` to the type of `y`: `&'a u32`
error[E0623]: lifetime mismatch
--> $DIR/mismatched.rs:6:46
|
LL | fn foo2(x: &'a u32, y: &'b u32) -> &'a u32 { y }
| ------- ------- ^ ...but data from `y` is returned here
| |
| this parameter and the return type are declared with different lifetimes...
error: aborting due to 2 previous errors
Some errors have detailed explanations: E0621, E0623.
For more information about an error, try `rustc --explain E0621`.
src/test/ui/in-band-lifetimes/mismatched_trait.rs
已删除
100644 → 0
浏览文件 @
4e82f354
#![allow(warnings)]
#![feature(in_band_lifetimes)]
trait
Get
{
fn
baz
(
&
self
,
x
:
&
'a
u32
,
y
:
&
u32
)
->
&
'a
u32
{
y
//~ ERROR explicit lifetime required
}
}
fn
main
()
{}
src/test/ui/in-band-lifetimes/mismatched_trait.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error[E0621]: explicit lifetime required in the type of `y`
--> $DIR/mismatched_trait.rs:6:9
|
LL | fn baz(&self, x: &'a u32, y: &u32) -> &'a u32 {
| ---- help: add explicit lifetime `'a` to the type of `y`: `&'a u32`
LL | y
| ^ lifetime `'a` required
error: aborting due to previous error
For more information about this error, try `rustc --explain E0621`.
src/test/ui/in-band-lifetimes/mismatched_trait_impl-2.rs
已删除
100644 → 0
浏览文件 @
4e82f354
use
std
::
ops
::
Deref
;
trait
Trait
{}
struct
Struct
;
impl
Deref
for
Struct
{
type
Target
=
dyn
Trait
;
fn
deref
(
&
self
)
->
&
dyn
Trait
{
//~^ ERROR `impl` item signature doesn't match `trait` item signature
unimplemented!
();
}
}
fn
main
()
{}
src/test/ui/in-band-lifetimes/mismatched_trait_impl-2.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error: `impl` item signature doesn't match `trait` item signature
--> $DIR/mismatched_trait_impl-2.rs:8:5
|
LL | fn deref(&self) -> &dyn Trait {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ found `fn(&'1 Struct) -> &'1 (dyn Trait + '1)`
|
::: $SRC_DIR/core/src/ops/deref.rs:LL:COL
|
LL | fn deref(&self) -> &Self::Target;
| --------------------------------- expected `fn(&'1 Struct) -> &'1 (dyn Trait + 'static)`
|
= note: expected `fn(&'1 Struct) -> &'1 (dyn Trait + 'static)`
found `fn(&'1 Struct) -> &'1 (dyn Trait + '1)`
= help: the lifetime requirements from the `impl` do not correspond to the requirements in the `trait`
= help: verify the lifetime relationships in the `trait` and `impl` between the `self` argument, the other inputs and its output
error: aborting due to previous error
src/test/ui/in-band-lifetimes/mismatched_trait_impl.nll.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error: `impl` item signature doesn't match `trait` item signature
--> $DIR/mismatched_trait_impl.rs:9:5
|
LL | fn foo(&self, x: &'a u32, y: &u32) -> &'a u32;
| ---------------------------------------------- expected `fn(&'1 i32, &'a u32, &'2 u32) -> &'a u32`
...
LL | fn foo(&self, x: &u32, y: &'a u32) -> &'a u32 {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ found `fn(&'1 i32, &'2 u32, &'3 u32) -> &'3 u32`
|
= note: expected `fn(&'1 i32, &'a u32, &'2 u32) -> &'a u32`
found `fn(&'1 i32, &'2 u32, &'3 u32) -> &'3 u32`
= help: the lifetime requirements from the `impl` do not correspond to the requirements in the `trait`
= help: verify the lifetime relationships in the `trait` and `impl` between the `self` argument, the other inputs and its output
error: aborting due to previous error
src/test/ui/in-band-lifetimes/mismatched_trait_impl.rs
已删除
100644 → 0
浏览文件 @
4e82f354
#![allow(warnings)]
#![feature(in_band_lifetimes)]
trait
Get
{
fn
foo
(
&
self
,
x
:
&
'a
u32
,
y
:
&
u32
)
->
&
'a
u32
;
}
impl
Get
for
i32
{
fn
foo
(
&
self
,
x
:
&
u32
,
y
:
&
'a
u32
)
->
&
'a
u32
{
//~ ERROR `impl` item signature doesn't match
x
//~ ERROR lifetime mismatch
}
}
fn
main
()
{}
src/test/ui/in-band-lifetimes/mismatched_trait_impl.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error: `impl` item signature doesn't match `trait` item signature
--> $DIR/mismatched_trait_impl.rs:9:5
|
LL | fn foo(&self, x: &'a u32, y: &u32) -> &'a u32;
| ---------------------------------------------- expected `fn(&'1 i32, &'a u32, &'2 u32) -> &'a u32`
...
LL | fn foo(&self, x: &u32, y: &'a u32) -> &'a u32 {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ found `fn(&'1 i32, &'2 u32, &'3 u32) -> &'3 u32`
|
= note: expected `fn(&'1 i32, &'a u32, &'2 u32) -> &'a u32`
found `fn(&'1 i32, &'2 u32, &'3 u32) -> &'3 u32`
= help: the lifetime requirements from the `impl` do not correspond to the requirements in the `trait`
= help: verify the lifetime relationships in the `trait` and `impl` between the `self` argument, the other inputs and its output
error[E0623]: lifetime mismatch
--> $DIR/mismatched_trait_impl.rs:10:9
|
LL | fn foo(&self, x: &u32, y: &'a u32) -> &'a u32 {
| ---- -------
| |
| this parameter and the return type are declared with different lifetimes...
LL | x
| ^ ...but data from `x` is returned here
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0623`.
src/test/ui/in-band-lifetimes/mut_while_borrow.rs
已删除
100644 → 0
浏览文件 @
4e82f354
#![allow(warnings)]
#![feature(in_band_lifetimes)]
fn
foo
(
x
:
&
'a
u32
)
->
&
'a
u32
{
x
}
fn
main
()
{
let
mut
p
=
3
;
let
r
=
foo
(
&
p
);
p
+=
1
;
//~ ERROR cannot assign to `p` because it is borrowed
println!
(
"{}"
,
r
);
}
src/test/ui/in-band-lifetimes/mut_while_borrow.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error[E0506]: cannot assign to `p` because it is borrowed
--> $DIR/mut_while_borrow.rs:9:5
|
LL | let r = foo(&p);
| -- borrow of `p` occurs here
LL | p += 1;
| ^^^^^^ assignment to borrowed `p` occurs here
LL | println!("{}", r);
| - borrow later used here
error: aborting due to previous error
For more information about this error, try `rustc --explain E0506`.
src/test/ui/in-band-lifetimes/nested-items.rs
已删除
100644 → 0
浏览文件 @
4e82f354
// Test that the `'a` from the impl doesn't
// prevent us from creating a `'a` parameter
// on the `blah` function.
//
// check-pass
#![feature(in_band_lifetimes)]
struct
Foo
<
'a
>
{
x
:
&
'a
u32
}
impl
Foo
<
'a
>
{
fn
method
(
&
self
)
{
fn
blah
(
f
:
Foo
<
'a
>
)
{
}
}
}
fn
main
()
{
}
src/test/ui/in-band-lifetimes/no_in_band_in_struct.rs
已删除
100644 → 0
浏览文件 @
4e82f354
#![allow(warnings)]
#![feature(in_band_lifetimes)]
struct
Foo
{
x
:
&
'test
u32
,
//~ ERROR undeclared lifetime
}
enum
Bar
{
Baz
(
&
'test
u32
),
//~ ERROR undeclared lifetime
}
fn
main
()
{}
src/test/ui/in-band-lifetimes/no_in_band_in_struct.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error[E0261]: use of undeclared lifetime name `'test`
--> $DIR/no_in_band_in_struct.rs:5:9
|
LL | struct Foo {
| - help: consider introducing lifetime `'test` here: `<'test>`
LL | x: &'test u32,
| ^^^^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'test`
--> $DIR/no_in_band_in_struct.rs:9:10
|
LL | enum Bar {
| - help: consider introducing lifetime `'test` here: `<'test>`
LL | Baz(&'test u32),
| ^^^^^ undeclared lifetime
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0261`.
src/test/ui/in-band-lifetimes/no_introducing_in_band_in_locals.rs
已删除
100644 → 0
浏览文件 @
4e82f354
#![allow(warnings)]
#![feature(in_band_lifetimes)]
fn
foo
(
x
:
&
u32
)
{
let
y
:
&
'test
u32
=
x
;
//~ ERROR use of undeclared lifetime
}
fn
foo2
(
x
:
&
u32
)
{}
fn
bar
()
{
let
y
:
fn
(
&
'test
u32
)
=
foo2
;
//~ ERROR use of undeclared lifetime
}
fn
main
()
{}
src/test/ui/in-band-lifetimes/no_introducing_in_band_in_locals.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error[E0261]: use of undeclared lifetime name `'test`
--> $DIR/no_introducing_in_band_in_locals.rs:5:13
|
LL | fn foo(x: &u32) {
| - help: consider introducing lifetime `'test` here: `<'test>`
LL | let y: &'test u32 = x;
| ^^^^^ undeclared lifetime
error[E0261]: use of undeclared lifetime name `'test`
--> $DIR/no_introducing_in_band_in_locals.rs:10:16
|
LL | let y: fn(&'test u32) = foo2;
| ^^^^^ undeclared lifetime
|
= note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html
help: consider introducing lifetime `'test` here
|
LL | fn bar<'test>() {
| +++++++
help: consider making the type lifetime-generic with a new `'test` lifetime
|
LL | let y: for<'test> fn(&'test u32) = foo2;
| ++++++++++
error: aborting due to 2 previous errors
For more information about this error, try `rustc --explain E0261`.
src/test/ui/
in-band-
lifetimes/missing-lifetime-in-alias.rs
→
src/test/ui/lifetimes/missing-lifetime-in-alias.rs
浏览文件 @
bb548a91
#![feature(generic_associated_types)]
#![allow(unused)]
trait
Trait
<
'a
>
{
type
Foo
;
...
...
src/test/ui/
in-band-
lifetimes/missing-lifetime-in-alias.stderr
→
src/test/ui/lifetimes/missing-lifetime-in-alias.stderr
浏览文件 @
bb548a91
error[E0106]: missing lifetime specifier
--> $DIR/missing-lifetime-in-alias.rs:2
3
:24
--> $DIR/missing-lifetime-in-alias.rs:2
2
:24
|
LL | type B<'a> = <A<'a> as Trait>::Foo;
| ^^^^^ expected named lifetime parameter
...
...
@@ -10,25 +10,25 @@ LL | type B<'a> = <A<'a> as Trait<'a>>::Foo;
| ~~~~~~~~~
error[E0106]: missing lifetime specifier
--> $DIR/missing-lifetime-in-alias.rs:2
7
:28
--> $DIR/missing-lifetime-in-alias.rs:2
6
:28
|
LL | type C<'a, 'b> = <A<'a> as Trait>::Bar;
| ^^^^^ expected named lifetime parameter
|
note: these named lifetimes are available to use
--> $DIR/missing-lifetime-in-alias.rs:2
7
:8
--> $DIR/missing-lifetime-in-alias.rs:2
6
:8
|
LL | type C<'a, 'b> = <A<'a> as Trait>::Bar;
| ^^ ^^
error[E0107]: missing generics for associated type `Trait::Bar`
--> $DIR/missing-lifetime-in-alias.rs:2
7
:36
--> $DIR/missing-lifetime-in-alias.rs:2
6
:36
|
LL | type C<'a, 'b> = <A<'a> as Trait>::Bar;
| ^^^ expected 1 lifetime argument
|
note: associated type defined here, with 1 lifetime parameter: `'b`
--> $DIR/missing-lifetime-in-alias.rs:
7
:10
--> $DIR/missing-lifetime-in-alias.rs:
6
:10
|
LL | type Bar<'b>
| ^^^ --
...
...
src/test/ui/lifetimes/nested.rs
0 → 100644
浏览文件 @
bb548a91
// check-pass
fn
method
<
'a
>
(
_
i
:
&
'a
i32
)
{
fn
inner
<
'a
>
(
_
j
:
&
'a
f32
)
{}
}
fn
main
()
{}
src/test/ui/
in-band-
lifetimes/shadow.rs
→
src/test/ui/lifetimes/shadow.rs
浏览文件 @
bb548a91
#![allow(warnings)]
#![feature(in_band_lifetimes)]
struct
Foo
<
T
>
(
T
);
impl
Foo
<&
's
u8
>
{
impl
<
's
>
Foo
<&
's
u8
>
{
fn
bar
<
's
>
(
&
self
,
x
:
&
's
u8
)
{}
//~ ERROR shadows a lifetime name
fn
baz
(
x
:
for
<
's
>
fn
(
&
's
u32
))
{}
//~ ERROR shadows a lifetime name
}
...
...
src/test/ui/
in-band-
lifetimes/shadow.stderr
→
src/test/ui/lifetimes/shadow.stderr
浏览文件 @
bb548a91
error[E0496]: lifetime name `'s` shadows a lifetime name that is already in scope
--> $DIR/shadow.rs:
7
:12
--> $DIR/shadow.rs:
4
:12
|
LL | impl Foo<&'s u8> {
|
-- first declared here
LL | impl
<'s>
Foo<&'s u8> {
| -- first declared here
LL | fn bar<'s>(&self, x: &'s u8) {}
| ^^ lifetime `'s` already in scope
error[E0496]: lifetime name `'s` shadows a lifetime name that is already in scope
--> $DIR/shadow.rs:
8
:19
--> $DIR/shadow.rs:
5
:19
|
LL | impl Foo<&'s u8> {
|
-- first declared here
LL | impl
<'s>
Foo<&'s u8> {
| -- first declared here
LL | fn bar<'s>(&self, x: &'s u8) {}
LL | fn baz(x: for<'s> fn(&'s u32)) {}
| ^^ lifetime `'s` already in scope
...
...
src/test/ui/lifetimes/undeclared-lifetime-used-in-debug-macro-issue-70152.stderr
浏览文件 @
bb548a91
...
...
@@ -5,8 +5,6 @@ LL | struct Test {
| - help: consider introducing lifetime `'b` here: `<'b>`
LL | a: &'b str,
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/undeclared-lifetime-used-in-debug-macro-issue-70152.rs:3:9
...
...
@@ -15,8 +13,6 @@ LL | struct Test {
| - help: consider introducing lifetime `'b` here: `<'b>`
LL | a: &'b str,
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/undeclared-lifetime-used-in-debug-macro-issue-70152.rs:13:13
...
...
@@ -24,7 +20,6 @@ error[E0261]: use of undeclared lifetime name `'b`
LL | fn foo(&'b self) {}
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | impl<'b> T for Test {
...
...
src/test/ui/methods/method-call-lifetime-args-unresolved.stderr
浏览文件 @
bb548a91
...
...
@@ -5,8 +5,6 @@ LL | fn main() {
| - help: consider introducing lifetime `'a` here: `<'a>`
LL | 0.clone::<'a>();
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error: aborting due to previous error
...
...
src/test/ui/nll/issue-52742.nll.stderr
浏览文件 @
bb548a91
error: lifetime may not live long enough
--> $DIR/issue-52742.rs:1
4
:9
--> $DIR/issue-52742.rs:1
2
:9
|
LL | fn take_bar(&mut self, b: Bar<'_>) {
| --------- -- let's call this `'1`
...
...
src/test/ui/nll/issue-52742.rs
浏览文件 @
bb548a91
#![feature(in_band_lifetimes)]
struct
Foo
<
'a
,
'b
>
{
x
:
&
'a
u32
,
y
:
&
'b
u32
,
...
...
src/test/ui/nll/issue-52742.stderr
浏览文件 @
bb548a91
error[E0312]: lifetime of reference outlives lifetime of borrowed content...
--> $DIR/issue-52742.rs:1
4
:18
--> $DIR/issue-52742.rs:1
2
:18
|
LL | self.y = b.z
| ^^^
|
note: ...the reference is valid for the lifetime `'_` as defined here...
--> $DIR/issue-52742.rs:1
2
:10
--> $DIR/issue-52742.rs:1
0
:10
|
LL | impl Foo<'_, '_> {
| ^^
note: ...but the borrowed content is only valid for the anonymous lifetime defined here
--> $DIR/issue-52742.rs:1
3
:31
--> $DIR/issue-52742.rs:1
1
:31
|
LL | fn take_bar(&mut self, b: Bar<'_>) {
| ^^^^^^^
...
...
src/test/ui/regions/regions-in-enums.stderr
浏览文件 @
bb548a91
...
...
@@ -5,8 +5,6 @@ LL | enum No0 {
| - help: consider introducing lifetime `'foo` here: `<'foo>`
LL | X5(&'foo usize)
| ^^^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/regions-in-enums.rs:17:9
...
...
@@ -15,8 +13,6 @@ LL | enum No1 {
| - help: consider introducing lifetime `'a` here: `<'a>`
LL | X6(&'a usize)
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error: aborting due to 2 previous errors
...
...
src/test/ui/regions/regions-in-structs.stderr
浏览文件 @
bb548a91
...
...
@@ -5,8 +5,6 @@ LL | struct StructDecl {
| - help: consider introducing lifetime `'a` here: `<'a>`
LL | a: &'a isize,
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/regions-in-structs.rs:11:9
...
...
@@ -16,8 +14,6 @@ LL | struct StructDecl {
LL | a: &'a isize,
LL | b: &'a isize,
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error: aborting due to 2 previous errors
...
...
src/test/ui/regions/regions-name-undeclared.stderr
浏览文件 @
bb548a91
...
...
@@ -5,8 +5,6 @@ LL | enum E {
| - help: consider introducing lifetime `'a` here: `<'a>`
LL | E1(&'a isize)
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/regions-name-undeclared.rs:31:13
...
...
@@ -15,8 +13,6 @@ LL | struct S {
| - help: consider introducing lifetime `'a` here: `<'a>`
LL | f: &'a isize
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/regions-name-undeclared.rs:16:24
...
...
@@ -24,7 +20,6 @@ error[E0261]: use of undeclared lifetime name `'b`
LL | fn m4(&self, arg: &'b isize) { }
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | impl<'b, 'a> Foo<'a> {
...
...
@@ -40,7 +35,6 @@ error[E0261]: use of undeclared lifetime name `'b`
LL | fn m5(&'b self) { }
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | impl<'b, 'a> Foo<'a> {
...
...
@@ -56,7 +50,6 @@ error[E0261]: use of undeclared lifetime name `'b`
LL | fn m6(&self, arg: Foo<'b>) { }
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | impl<'b, 'a> Foo<'a> {
...
...
@@ -73,8 +66,6 @@ LL | type X = Option<&'a isize>;
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'a` here: `<'a>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/regions-name-undeclared.rs:33:14
...
...
@@ -83,8 +74,6 @@ LL | fn f(a: &'a isize) { }
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'a` here: `<'a>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/regions-name-undeclared.rs:41:17
...
...
@@ -93,8 +82,6 @@ LL | fn fn_types(a: &'a isize,
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'a` here: `<'a>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/regions-name-undeclared.rs:43:36
...
...
@@ -103,7 +90,6 @@ LL | ... &'b isize,
| ^^ undeclared lifetime
|
= note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | fn fn_types<'b>(a: &'a isize,
...
...
@@ -120,7 +106,6 @@ LL | ... &'b isize)>,
| ^^ undeclared lifetime
|
= note: for more information on higher-ranked polymorphism, visit https://doc.rust-lang.org/nomicon/hrtb.html
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'b` here
|
LL | fn fn_types<'b>(a: &'a isize,
...
...
@@ -138,8 +123,6 @@ LL | fn fn_types(a: &'a isize,
...
LL | c: &'a isize)
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/regions-name-undeclared.rs:53:31
...
...
@@ -147,7 +130,6 @@ error[E0261]: use of undeclared lifetime name `'a`
LL | async fn buggy(&self) -> &'a str {
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
help: consider introducing lifetime `'a` here
|
LL | impl<'a> Bug {
...
...
src/test/ui/regions/regions-undeclared.stderr
浏览文件 @
bb548a91
...
...
@@ -11,8 +11,6 @@ LL | enum EnumDecl {
| - help: consider introducing lifetime `'a` here: `<'a>`
LL | Foo(&'a isize),
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/regions-undeclared.rs:5:10
...
...
@@ -22,8 +20,6 @@ LL | enum EnumDecl {
LL | Foo(&'a isize),
LL | Bar(&'a isize),
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/regions-undeclared.rs:8:15
...
...
@@ -32,8 +28,6 @@ LL | fn fnDecl(x: &'a isize,
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'a` here: `<'a>`
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/regions-undeclared.rs:9:15
...
...
@@ -42,8 +36,6 @@ LL | fn fnDecl(x: &'a isize,
| - help: consider introducing lifetime `'a` here: `<'a>`
LL | y: &'a isize)
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error: aborting due to 5 previous errors
...
...
src/test/ui/single-use-lifetime/one-use-in-fn-argument-in-band.fixed
已删除
100644 → 0
浏览文件 @
4e82f354
// run-rustfix
#![feature(in_band_lifetimes)]
#![deny(single_use_lifetimes)]
#![allow(dead_code)]
#![allow(unused_variables)]
// Test that we DO warn when lifetime name is used only
// once in a fn argument, even with in band lifetimes.
fn a(x: &u32, y: &u32) {
//~^ ERROR `'a` only used once
//~| ERROR `'b` only used once
//~| HELP elide the single-use lifetime
//~| HELP elide the single-use lifetime
}
fn main() { }
src/test/ui/single-use-lifetime/one-use-in-fn-argument-in-band.rs
已删除
100644 → 0
浏览文件 @
4e82f354
// run-rustfix
#![feature(in_band_lifetimes)]
#![deny(single_use_lifetimes)]
#![allow(dead_code)]
#![allow(unused_variables)]
// Test that we DO warn when lifetime name is used only
// once in a fn argument, even with in band lifetimes.
fn
a
(
x
:
&
'a
u32
,
y
:
&
'b
u32
)
{
//~^ ERROR `'a` only used once
//~| ERROR `'b` only used once
//~| HELP elide the single-use lifetime
//~| HELP elide the single-use lifetime
}
fn
main
()
{
}
src/test/ui/single-use-lifetime/one-use-in-fn-argument-in-band.stderr
已删除
100644 → 0
浏览文件 @
4e82f354
error: lifetime parameter `'a` only used once
--> $DIR/one-use-in-fn-argument-in-band.rs:11:10
|
LL | fn a(x: &'a u32, y: &'b u32) {
| ^^-
| |
| this lifetime is only used here
| help: elide the single-use lifetime
|
note: the lint level is defined here
--> $DIR/one-use-in-fn-argument-in-band.rs:4:9
|
LL | #![deny(single_use_lifetimes)]
| ^^^^^^^^^^^^^^^^^^^^
error: lifetime parameter `'b` only used once
--> $DIR/one-use-in-fn-argument-in-band.rs:11:22
|
LL | fn a(x: &'a u32, y: &'b u32) {
| ^^-
| |
| this lifetime is only used here
| help: elide the single-use lifetime
error: aborting due to 2 previous errors
src/test/ui/where-clauses/where-lifetime-resolution.stderr
浏览文件 @
bb548a91
...
...
@@ -6,8 +6,6 @@ LL | fn f() where
LL | for<'a> dyn Trait1<'a>: Trait1<'a>, // OK
LL | (dyn for<'a> Trait1<'a>): Trait1<'a>,
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/where-lifetime-resolution.rs:8:52
...
...
@@ -17,8 +15,6 @@ LL | fn f() where
...
LL | for<'a> dyn for<'b> Trait2<'a, 'b>: Trait2<'a, 'b>,
| ^^ undeclared lifetime
|
= help: if you want to experiment with in-band lifetime bindings, add `#![feature(in_band_lifetimes)]` to the crate attributes
error: aborting due to 2 previous errors
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录