Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
19ecfcd0
R
Rust
项目概览
int
/
Rust
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
19ecfcd0
编写于
2月 27, 2021
作者:
J
Jack Huey
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
resolve late lifetimes by item
This reverts commit 22ae20733515d710c1134600bc1e29cdd76f6b9b.
上级
f5fe425c
变更
21
展开全部
隐藏空白更改
内联
并排
Showing
21 changed file
with
514 addition
and
521 deletion
+514
-521
compiler/rustc_middle/src/middle/resolve_lifetime.rs
compiler/rustc_middle/src/middle/resolve_lifetime.rs
+0
-5
compiler/rustc_middle/src/query/mod.rs
compiler/rustc_middle/src/query/mod.rs
+8
-3
compiler/rustc_middle/src/ty/context.rs
compiler/rustc_middle/src/ty/context.rs
+2
-2
compiler/rustc_resolve/src/late/lifetimes.rs
compiler/rustc_resolve/src/late/lifetimes.rs
+269
-157
compiler/rustc_typeck/src/astconv/mod.rs
compiler/rustc_typeck/src/astconv/mod.rs
+8
-6
src/test/ui/error-codes/E0106.stderr
src/test/ui/error-codes/E0106.stderr
+11
-11
src/test/ui/feature-gates/feature-gate-in_band_lifetimes.stderr
...st/ui/feature-gates/feature-gate-in_band_lifetimes.stderr
+84
-84
src/test/ui/generic-associated-types/shadowing.stderr
src/test/ui/generic-associated-types/shadowing.stderr
+8
-8
src/test/ui/generics/issue-65285-incorrect-explicit-lifetime-name-needed.stderr
...ssue-65285-incorrect-explicit-lifetime-name-needed.stderr
+11
-11
src/test/ui/generics/wrong-number-of-args.stderr
src/test/ui/generics/wrong-number-of-args.stderr
+33
-33
src/test/ui/in-band-lifetimes/no_introducing_in_band_in_locals.rs
.../ui/in-band-lifetimes/no_introducing_in_band_in_locals.rs
+1
-1
src/test/ui/in-band-lifetimes/no_introducing_in_band_in_locals.stderr
...in-band-lifetimes/no_introducing_in_band_in_locals.stderr
+1
-17
src/test/ui/lifetimes/undeclared-lifetime-used-in-debug-macro-issue-70152.stderr
...ndeclared-lifetime-used-in-debug-macro-issue-70152.stderr
+10
-10
src/test/ui/methods/method-call-lifetime-args-unresolved.rs
src/test/ui/methods/method-call-lifetime-args-unresolved.rs
+2
-0
src/test/ui/methods/method-call-lifetime-args-unresolved.stderr
...st/ui/methods/method-call-lifetime-args-unresolved.stderr
+16
-1
src/test/ui/mismatched_types/issue-74918-missing-lifetime.rs
src/test/ui/mismatched_types/issue-74918-missing-lifetime.rs
+1
-1
src/test/ui/mismatched_types/issue-74918-missing-lifetime.stderr
...t/ui/mismatched_types/issue-74918-missing-lifetime.stderr
+1
-17
src/test/ui/regions/regions-name-undeclared.stderr
src/test/ui/regions/regions-name-undeclared.stderr
+20
-20
src/test/ui/suggestions/lifetimes/missing-lifetimes-in-signature.rs
...i/suggestions/lifetimes/missing-lifetimes-in-signature.rs
+1
-6
src/test/ui/suggestions/lifetimes/missing-lifetimes-in-signature.stderr
...ggestions/lifetimes/missing-lifetimes-in-signature.stderr
+3
-104
src/test/ui/suggestions/missing-lifetime-specifier.stderr
src/test/ui/suggestions/missing-lifetime-specifier.stderr
+24
-24
未找到文件。
compiler/rustc_middle/src/middle/resolve_lifetime.rs
浏览文件 @
19ecfcd0
...
...
@@ -78,9 +78,4 @@ pub struct ResolveLifetimes {
/// be late-bound if (a) it does NOT appear in a where-clause and
/// (b) it DOES appear in the arguments.
pub
late_bound
:
FxHashMap
<
LocalDefId
,
FxHashSet
<
ItemLocalId
>>
,
/// For each type and trait definition, maps type parameters
/// to the trait object lifetime defaults computed from them.
pub
object_lifetime_defaults
:
FxHashMap
<
LocalDefId
,
FxHashMap
<
ItemLocalId
,
Vec
<
ObjectLifetimeDefault
>>>
,
}
compiler/rustc_middle/src/query/mod.rs
浏览文件 @
19ecfcd0
...
...
@@ -1253,7 +1253,12 @@
}
/// Lifetime resolution. See `middle::resolve_lifetimes`.
query
resolve_lifetimes
(
_
:
CrateNum
)
->
ResolveLifetimes
{
query
resolve_lifetimes_definition
(
_
:
LocalDefId
)
->
ResolveLifetimes
{
storage
(
ArenaCacheSelector
<
'tcx
>
)
desc
{
"resolving lifetimes in a definition"
}
}
/// Lifetime resolution. See `middle::resolve_lifetimes`.
query
resolve_lifetimes
(
_
:
LocalDefId
)
->
ResolveLifetimes
{
storage
(
ArenaCacheSelector
<
'tcx
>
)
desc
{
"resolving lifetimes"
}
}
...
...
@@ -1266,8 +1271,8 @@
desc
{
"testing if a region is late bound"
}
}
query
object_lifetime_defaults_map
(
_
:
LocalDefId
)
->
Option
<
&
'tcx
FxHashMap
<
ItemLocalId
,
Vec
<
ObjectLifetimeDefault
>
>>
{
desc
{
"looking up lifetime defaults for a region"
}
->
Option
<
Vec
<
ObjectLifetimeDefault
>>
{
desc
{
"looking up lifetime defaults for a region
on an item
"
}
}
query
visibility
(
def_id
:
DefId
)
->
ty
::
Visibility
{
...
...
compiler/rustc_middle/src/ty/context.rs
浏览文件 @
19ecfcd0
...
...
@@ -2641,6 +2641,7 @@ pub fn in_scope_traits(self, id: HirId) -> Option<&'tcx StableVec<TraitCandidate
}
pub
fn
named_region
(
self
,
id
:
HirId
)
->
Option
<
resolve_lifetime
::
Region
>
{
debug!
(
?
id
,
"named_region"
);
self
.named_region_map
(
id
.owner
)
.and_then
(|
map
|
map
.get
(
&
id
.local_id
)
.cloned
())
}
...
...
@@ -2649,9 +2650,8 @@ pub fn is_late_bound(self, id: HirId) -> bool {
.map_or
(
false
,
|(
owner
,
set
)|
owner
==
id
.owner
&&
set
.contains
(
&
id
.local_id
))
}
pub
fn
object_lifetime_defaults
(
self
,
id
:
HirId
)
->
Option
<
&
'tcx
[
ObjectLifetimeDefault
]
>
{
pub
fn
object_lifetime_defaults
(
self
,
id
:
HirId
)
->
Option
<
Vec
<
ObjectLifetimeDefault
>
>
{
self
.object_lifetime_defaults_map
(
id
.owner
)
.and_then
(|
map
|
map
.get
(
&
id
.local_id
)
.map
(|
v
|
&**
v
))
}
}
...
...
compiler/rustc_resolve/src/late/lifetimes.rs
浏览文件 @
19ecfcd0
此差异已折叠。
点击以展开。
compiler/rustc_typeck/src/astconv/mod.rs
浏览文件 @
19ecfcd0
...
...
@@ -198,6 +198,7 @@ fn inferred_kind(
}
impl
<
'o
,
'tcx
>
dyn
AstConv
<
'tcx
>
+
'o
{
#[tracing::instrument(level
=
"debug"
,
skip(self))]
pub
fn
ast_region_to_region
(
&
self
,
lifetime
:
&
hir
::
Lifetime
,
...
...
@@ -237,6 +238,8 @@ pub fn ast_region_to_region(
None
=>
{
self
.re_infer
(
def
,
lifetime
.span
)
.unwrap_or_else
(||
{
debug!
(
?
lifetime
,
"unelided lifetime in signature"
);
// This indicates an illegal lifetime
// elision. `resolve_lifetime` should have
// reported an error in this case -- but if
...
...
@@ -2173,9 +2176,8 @@ pub fn ast_ty_to_ty(&self, ast_ty: &hir::Ty<'_>) -> Ty<'tcx> {
/// Turns a `hir::Ty` into a `Ty`. For diagnostics' purposes we keep track of whether trait
/// objects are borrowed like `&dyn Trait` to avoid emitting redundant errors.
#[tracing::instrument(level
=
"debug"
,
skip(self))]
fn
ast_ty_to_ty_inner
(
&
self
,
ast_ty
:
&
hir
::
Ty
<
'_
>
,
borrowed
:
bool
)
->
Ty
<
'tcx
>
{
debug!
(
"ast_ty_to_ty(id={:?}, ast_ty={:?} ty_ty={:?})"
,
ast_ty
.hir_id
,
ast_ty
,
ast_ty
.kind
);
let
tcx
=
self
.tcx
();
let
result_ty
=
match
ast_ty
.kind
{
...
...
@@ -2185,7 +2187,7 @@ fn ast_ty_to_ty_inner(&self, ast_ty: &hir::Ty<'_>, borrowed: bool) -> Ty<'tcx> {
}
hir
::
TyKind
::
Rptr
(
ref
region
,
ref
mt
)
=>
{
let
r
=
self
.ast_region_to_region
(
region
,
None
);
debug!
(
"ast_ty_to_ty: r={:?}"
,
r
);
debug!
(
?
r
);
let
t
=
self
.ast_ty_to_ty_inner
(
&
mt
.ty
,
true
);
tcx
.mk_ref
(
r
,
ty
::
TypeAndMut
{
ty
:
t
,
mutbl
:
mt
.mutbl
})
}
...
...
@@ -2209,7 +2211,7 @@ fn ast_ty_to_ty_inner(&self, ast_ty: &hir::Ty<'_>, borrowed: bool) -> Ty<'tcx> {
self
.conv_object_ty_poly_trait_ref
(
ast_ty
.span
,
bounds
,
lifetime
,
borrowed
)
}
hir
::
TyKind
::
Path
(
hir
::
QPath
::
Resolved
(
ref
maybe_qself
,
ref
path
))
=>
{
debug!
(
"ast_ty_to_ty: maybe_qself={:?} path={:?}"
,
maybe_qself
,
path
);
debug!
(
?
maybe_qself
,
?
path
);
let
opt_self_ty
=
maybe_qself
.as_ref
()
.map
(|
qself
|
self
.ast_ty_to_ty
(
qself
));
self
.res_to_ty
(
opt_self_ty
,
path
,
false
)
}
...
...
@@ -2225,7 +2227,7 @@ fn ast_ty_to_ty_inner(&self, ast_ty: &hir::Ty<'_>, borrowed: bool) -> Ty<'tcx> {
}
}
hir
::
TyKind
::
Path
(
hir
::
QPath
::
TypeRelative
(
ref
qself
,
ref
segment
))
=>
{
debug!
(
"ast_ty_to_ty: qself={:?} segment={:?}"
,
qself
,
segment
);
debug!
(
?
qself
,
?
segment
);
let
ty
=
self
.ast_ty_to_ty
(
qself
);
let
res
=
if
let
hir
::
TyKind
::
Path
(
hir
::
QPath
::
Resolved
(
_
,
ref
path
))
=
qself
.kind
{
...
...
@@ -2270,7 +2272,7 @@ fn ast_ty_to_ty_inner(&self, ast_ty: &hir::Ty<'_>, borrowed: bool) -> Ty<'tcx> {
hir
::
TyKind
::
Err
=>
tcx
.ty_error
(),
};
debug!
(
"ast_ty_to_ty: result_ty={:?}"
,
result_ty
);
debug!
(
?
result_ty
);
self
.record_ty
(
ast_ty
.hir_id
,
result_ty
,
ast_ty
.span
);
result_ty
...
...
src/test/ui/error-codes/E0106.stderr
浏览文件 @
19ecfcd0
...
...
@@ -23,17 +23,6 @@ LL | A(u8),
LL | B(&'a bool),
|
error[E0106]: missing lifetime specifier
--> $DIR/E0106.rs:10:14
|
LL | type MyStr = &str;
| ^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
LL | type MyStr<'a> = &'a str;
| ^^^^ ^^^
error[E0106]: missing lifetime specifier
--> $DIR/E0106.rs:17:10
|
...
...
@@ -61,6 +50,17 @@ LL |
LL | buzz: Buzz<'a, 'a>,
|
error[E0106]: missing lifetime specifier
--> $DIR/E0106.rs:10:14
|
LL | type MyStr = &str;
| ^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
LL | type MyStr<'a> = &'a str;
| ^^^^ ^^^
error: aborting due to 5 previous errors
For more information about this error, try `rustc --explain E0106`.
src/test/ui/feature-gates/feature-gate-in_band_lifetimes.stderr
浏览文件 @
19ecfcd0
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 `'x`
--> $DIR/feature-gate-in_band_lifetimes.rs:3:12
|
...
...
@@ -142,90 +226,6 @@ help: consider introducing lifetime `'b` here
LL | fn borrowed_lifetime<'b>(&'b self) -> &'b 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: aborting due to 17 previous errors
For more information about this error, try `rustc --explain E0261`.
src/test/ui/generic-associated-types/shadowing.stderr
浏览文件 @
19ecfcd0
...
...
@@ -14,14 +14,6 @@ LL | impl<T> NoShadowT<T> for Option<T> {
LL | type Bar<T> = i32;
| ^ already used
error[E0496]: lifetime name `'a` shadows a lifetime name that is already in scope
--> $DIR/shadowing.rs:5:14
|
LL | trait Shadow<'a> {
| -- first declared here
LL | type Bar<'a>;
| ^^ lifetime `'a` already in scope
error[E0496]: lifetime name `'a` shadows a lifetime name that is already in scope
--> $DIR/shadowing.rs:14:14
|
...
...
@@ -30,6 +22,14 @@ LL | impl<'a> NoShadow<'a> for &'a u32 {
LL | type Bar<'a> = i32;
| ^^ lifetime `'a` already in scope
error[E0496]: lifetime name `'a` shadows a lifetime name that is already in scope
--> $DIR/shadowing.rs:5:14
|
LL | trait Shadow<'a> {
| -- first declared here
LL | type Bar<'a>;
| ^^ lifetime `'a` already in scope
error: aborting due to 4 previous errors
Some errors have detailed explanations: E0403, E0496.
...
...
src/test/ui/generics/issue-65285-incorrect-explicit-lifetime-name-needed.stderr
浏览文件 @
19ecfcd0
...
...
@@ -4,6 +4,17 @@ error[E0637]: `&` without an explicit lifetime name cannot be used here
LL | fn should_error<T>() where T : Into<&u32> {}
| ^ explicit lifetime name needed here
error[E0106]: missing lifetime specifier
--> $DIR/issue-65285-incorrect-explicit-lifetime-name-needed.rs:13:17
|
LL | fn bar<'b, L: X<&'b Nested<i32>>>(){}
| ^ expected named lifetime parameter
|
help: consider using the `'b` lifetime
|
LL | fn bar<'b, L: X<'b, &'b Nested<i32>>>(){}
| ^^^
error[E0106]: missing lifetime specifier
--> $DIR/issue-65285-incorrect-explicit-lifetime-name-needed.rs:9:21
|
...
...
@@ -22,17 +33,6 @@ help: consider using one of the available lifetimes here
LL | fn foo<'b, L: X<'lifetime, &'b Nested<K>>>();
| ^^^^^^^^^^
error[E0106]: missing lifetime specifier
--> $DIR/issue-65285-incorrect-explicit-lifetime-name-needed.rs:13:17
|
LL | fn bar<'b, L: X<&'b Nested<i32>>>(){}
| ^ expected named lifetime parameter
|
help: consider using the `'b` lifetime
|
LL | fn bar<'b, L: X<'b, &'b Nested<i32>>>(){}
| ^^^
error: aborting due to 3 previous errors
Some errors have detailed explanations: E0106, E0637.
...
...
src/test/ui/generics/wrong-number-of-args.stderr
浏览文件 @
19ecfcd0
error[E0106]: missing lifetime specifier
--> $DIR/wrong-number-of-args.rs:44:14
|
LL | type A = Ty;
| ^^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
LL | type A<'a> = Ty<'a>;
| ^^^^ ^^^^^^
error[E0106]: missing lifetime specifier
--> $DIR/wrong-number-of-args.rs:54:17
|
LL | type C = Ty<usize>;
| ^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
LL | type C<'a> = Ty<'a, usize>;
| ^^^^ ^^^
error[E0106]: missing lifetime specifier
--> $DIR/wrong-number-of-args.rs:100:22
|
LL | type B = Box<dyn GenericLifetime>;
| ^^^^^^^^^^^^^^^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
LL | type B<'a> = Box<dyn GenericLifetime<'a>>;
| ^^^^ ^^^^^^^^^^^^^^^^^^^
error[E0107]: this struct takes 0 lifetime arguments but 1 lifetime argument was supplied
--> $DIR/wrong-number-of-args.rs:6:14
|
...
...
@@ -165,6 +132,17 @@ help: use angle brackets to add missing type argument
LL | type A = Ty<T>;
| ^^^
error[E0106]: missing lifetime specifier
--> $DIR/wrong-number-of-args.rs:44:14
|
LL | type A = Ty;
| ^^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
LL | type A<'a> = Ty<'a>;
| ^^^^ ^^^^^^
error[E0107]: this struct takes 1 type argument but 0 type arguments were supplied
--> $DIR/wrong-number-of-args.rs:50:14
|
...
...
@@ -181,6 +159,17 @@ help: add missing type argument
LL | type B = Ty<'static, T>;
| ^^^
error[E0106]: missing lifetime specifier
--> $DIR/wrong-number-of-args.rs:54:17
|
LL | type C = Ty<usize>;
| ^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
LL | type C<'a> = Ty<'a, usize>;
| ^^^^ ^^^
error[E0107]: missing generics for struct `type_and_type_and_type::Ty`
--> $DIR/wrong-number-of-args.rs:64:14
|
...
...
@@ -243,6 +232,17 @@ note: trait defined here, with 0 type parameters
LL | trait NonGeneric {
| ^^^^^^^^^^
error[E0106]: missing lifetime specifier
--> $DIR/wrong-number-of-args.rs:100:22
|
LL | type B = Box<dyn GenericLifetime>;
| ^^^^^^^^^^^^^^^ expected named lifetime parameter
|
help: consider introducing a named lifetime parameter
|
LL | type B<'a> = Box<dyn GenericLifetime<'a>>;
| ^^^^ ^^^^^^^^^^^^^^^^^^^
error[E0107]: this trait takes 1 lifetime argument but 2 lifetime arguments were supplied
--> $DIR/wrong-number-of-args.rs:104:22
|
...
...
src/test/ui/in-band-lifetimes/no_introducing_in_band_in_locals.rs
浏览文件 @
19ecfcd0
...
...
@@ -7,7 +7,7 @@ fn foo(x: &u32) {
fn
foo2
(
x
:
&
u32
)
{}
fn
bar
()
{
let
y
:
fn
(
&
'test
u32
)
=
foo2
;
//~ ERROR use of undeclared lifetime
let
y
:
fn
(
&
'test
u32
)
=
foo2
;
}
fn
main
()
{}
src/test/ui/in-band-lifetimes/no_introducing_in_band_in_locals.stderr
浏览文件 @
19ecfcd0
...
...
@@ -6,22 +6,6 @@ LL | fn foo(x: &u32) {
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
error: aborting due to previous error
For more information about this error, try `rustc --explain E0261`.
src/test/ui/lifetimes/undeclared-lifetime-used-in-debug-macro-issue-70152.stderr
浏览文件 @
19ecfcd0
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/undeclared-lifetime-used-in-debug-macro-issue-70152.rs:3:9
|
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
|
...
...
@@ -14,16 +24,6 @@ help: consider introducing lifetime `'b` here
LL | fn foo<'b>(&'b self) {}
| ^^^^
error[E0261]: use of undeclared lifetime name `'b`
--> $DIR/undeclared-lifetime-used-in-debug-macro-issue-70152.rs:3:9
|
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
|
...
...
src/test/ui/methods/method-call-lifetime-args-unresolved.rs
浏览文件 @
19ecfcd0
fn
main
()
{
0
.clone
::
<
'a
>
();
//~ ERROR use of undeclared lifetime name `'a`
//~^ WARNING cannot specify lifetime arguments
//~| WARNING this was previously accepted
}
src/test/ui/methods/method-call-lifetime-args-unresolved.stderr
浏览文件 @
19ecfcd0
warning: cannot specify lifetime arguments explicitly if late bound lifetime parameters are present
--> $DIR/method-call-lifetime-args-unresolved.rs:2:15
|
LL | 0.clone::<'a>();
| ^^
|
::: $SRC_DIR/core/src/clone.rs:LL:COL
|
LL | fn clone(&self) -> Self;
| - the late bound lifetime parameter is introduced here
|
= note: `#[warn(late_bound_lifetime_arguments)]` on by default
= warning: this was previously accepted by the compiler but is being phased out; it will become a hard error in a future release!
= note: for more information, see issue #42868 <https://github.com/rust-lang/rust/issues/42868>
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/method-call-lifetime-args-unresolved.rs:2:15
|
...
...
@@ -8,6 +23,6 @@ LL | 0.clone::<'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 previous error
error: aborting due to previous error
; 1 warning emitted
For more information about this error, try `rustc --explain E0261`.
src/test/ui/mismatched_types/issue-74918-missing-lifetime.rs
浏览文件 @
19ecfcd0
...
...
@@ -8,7 +8,7 @@ struct ChunkingIterator<T, S: 'static + Iterator<Item = T>> {
impl
<
T
,
S
:
Iterator
<
Item
=
T
>>
Iterator
for
ChunkingIterator
<
T
,
S
>
{
type
Item
=
IteratorChunk
<
T
,
S
>
;
//~ ERROR missing lifetime
fn
next
(
&
mut
self
)
->
Option
<
IteratorChunk
<
T
,
S
>>
{
//~ ERROR `impl`
fn
next
(
&
mut
self
)
->
Option
<
IteratorChunk
<
T
,
S
>>
{
todo!
()
}
}
...
...
src/test/ui/mismatched_types/issue-74918-missing-lifetime.stderr
浏览文件 @
19ecfcd0
...
...
@@ -9,22 +9,6 @@ help: consider introducing a named lifetime parameter
LL | type Item<'a> = IteratorChunk<'a, T, S>;
| ^^^^ ^^^
error: `impl` item signature doesn't match `trait` item signature
--> $DIR/issue-74918-missing-lifetime.rs:11:5
|
LL | fn next(&mut self) -> Option<IteratorChunk<T, S>> {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ found `fn(&mut ChunkingIterator<T, S>) -> Option<IteratorChunk<'_, T, S>>`
|
::: $SRC_DIR/core/src/iter/traits/iterator.rs:LL:COL
|
LL | fn next(&mut self) -> Option<Self::Item>;
| ----------------------------------------- expected `fn(&mut ChunkingIterator<T, S>) -> Option<IteratorChunk<'static, _, _>>`
|
= note: expected `fn(&mut ChunkingIterator<T, S>) -> Option<IteratorChunk<'static, _, _>>`
found `fn(&mut ChunkingIterator<T, S>) -> Option<IteratorChunk<'_, _, _>>`
= 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 2 previous errors
error: aborting due to previous error
For more information about this error, try `rustc --explain E0106`.
src/test/ui/regions/regions-name-undeclared.stderr
浏览文件 @
19ecfcd0
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/regions-name-undeclared.rs:28:13
|
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
|
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
|
...
...
@@ -56,26 +76,6 @@ LL | type X = Option<&'a isize>;
|
= 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:28:13
|
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
|
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 `'a`
--> $DIR/regions-name-undeclared.rs:33:14
|
...
...
src/test/ui/suggestions/lifetimes/missing-lifetimes-in-signature.rs
浏览文件 @
19ecfcd0
...
...
@@ -16,14 +16,13 @@ fn foo<G, T>(g: G, dest: &mut T) -> impl FnOnce()
where
G
:
Get
<
T
>
{
move
||
{
//~ ERROR `dest`
move
||
{
*
dest
=
g
.get
();
}
}
// After applying suggestion for `foo`:
fn
bar
<
G
,
T
>
(
g
:
G
,
dest
:
&
mut
T
)
->
impl
FnOnce
()
+
'_
//~^ ERROR the parameter type `G` may not live long enough
where
G
:
Get
<
T
>
{
...
...
@@ -45,7 +44,6 @@ fn baz<G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ //~ ERROR undeclared
// After applying suggestion for `baz`:
fn
qux
<
'a
,
G
:
'a
,
T
>
(
g
:
G
,
dest
:
&
mut
T
)
->
impl
FnOnce
()
+
'_
//~^ ERROR the parameter type `G` may not live long enough
where
G
:
Get
<
T
>
{
...
...
@@ -57,7 +55,6 @@ fn qux<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
// Same as above, but show that we pay attention to lifetime names from parent item
impl
<
'a
>
Foo
{
fn
qux
<
'b
,
G
:
Get
<
T
>
+
'b
,
T
>
(
g
:
G
,
dest
:
&
mut
T
)
->
impl
FnOnce
()
+
'_
{
//~^ ERROR the parameter type `G` may not live long enough
move
||
{
*
dest
=
g
.get
();
}
...
...
@@ -66,7 +63,6 @@ fn qux<'b, G: Get<T> + 'b, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ {
// After applying suggestion for `qux`:
fn
bat
<
'a
,
G
:
'a
,
T
>
(
g
:
G
,
dest
:
&
mut
T
)
->
impl
FnOnce
()
+
'_
+
'a
//~^ ERROR explicit lifetime required in the type of `dest`
where
G
:
Get
<
T
>
{
...
...
@@ -77,7 +73,6 @@ fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
// Potential incorrect attempt:
fn
bak
<
'a
,
G
,
T
>
(
g
:
G
,
dest
:
&
'a
mut
T
)
->
impl
FnOnce
()
+
'a
//~^ ERROR the parameter type `G` may not live long enough
where
G
:
Get
<
T
>
{
...
...
src/test/ui/suggestions/lifetimes/missing-lifetimes-in-signature.stderr
浏览文件 @
19ecfcd0
error[E0261]: use of undeclared lifetime name `'a`
--> $DIR/missing-lifetimes-in-signature.rs:3
7
:11
--> $DIR/missing-lifetimes-in-signature.rs:3
6
:11
|
LL | fn baz<G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
| - ^^ undeclared lifetime
| |
| help: consider introducing lifetime `'a` here: `'a,`
error[E0759]: `dest` has an anonymous lifetime `'_` but it needs to satisfy a `'static` lifetime requirement
--> $DIR/missing-lifetimes-in-signature.rs:19:5
|
LL | fn foo<G, T>(g: G, dest: &mut T) -> impl FnOnce()
| ------ this data with an anonymous lifetime `'_`...
...
LL | / move || {
LL | | *dest = g.get();
LL | | }
| |_____^ ...is captured here...
|
note: ...and is required to live as long as `'static` here
--> $DIR/missing-lifetimes-in-signature.rs:15:37
|
LL | fn foo<G, T>(g: G, dest: &mut T) -> impl FnOnce()
| ^^^^^^^^^^^^^
help: to declare that the `impl Trait` captures data from argument `dest`, you can add an explicit `'_` lifetime bound
|
LL | fn foo<G, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
| ^^^^
error[E0311]: the parameter type `G` may not live long enough
--> $DIR/missing-lifetimes-in-signature.rs:25:37
|
LL | fn bar<G, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
| ^^^^^^^^^^^^^^^^^^
|
note: the parameter type `G` must be valid for the anonymous lifetime defined on the function body at 25:26...
--> $DIR/missing-lifetimes-in-signature.rs:25:26
|
LL | fn bar<G, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
| ^^^^^^
note: ...so that the type `[closure@$DIR/missing-lifetimes-in-signature.rs:30:5: 32:6]` will meet its required lifetime bounds
--> $DIR/missing-lifetimes-in-signature.rs:25:37
|
LL | fn bar<G, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
| ^^^^^^^^^^^^^^^^^^
help: consider introducing an explicit lifetime bound
|
LL | fn bar<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
| ^^^^^ ^^^^
error[E0311]: the parameter type `G` may not live long enough
--> $DIR/missing-lifetimes-in-signature.rs:47:45
|
LL | fn qux<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
| ^^^^^^^^^^^^^^^^^^
|
note: the parameter type `G` must be valid for the anonymous lifetime defined on the function body at 47:34...
--> $DIR/missing-lifetimes-in-signature.rs:47:34
|
LL | fn qux<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
| ^^^^^^
note: ...so that the type `[closure@$DIR/missing-lifetimes-in-signature.rs:52:5: 54:6]` will meet its required lifetime bounds
--> $DIR/missing-lifetimes-in-signature.rs:47:45
|
LL | fn qux<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_
| ^^^^^^^^^^^^^^^^^^
help: consider introducing an explicit lifetime bound
|
LL | fn qux<'b, 'a, G: 'b + 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'b
| ^^^ ^^^^^^^ ^^^^
error[E0311]: the parameter type `G` may not live long enough
--> $DIR/missing-lifetimes-in-signature.rs:59:58
|
LL | fn qux<'b, G: Get<T> + 'b, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ {
| ^^^^^^^^^^^^^^^^^^
|
note: the parameter type `G` must be valid for the anonymous lifetime defined on the method body at 59:47...
--> $DIR/missing-lifetimes-in-signature.rs:59:47
|
LL | fn qux<'b, G: Get<T> + 'b, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ {
| ^^^^^^
note: ...so that the type `[closure@$DIR/missing-lifetimes-in-signature.rs:61:9: 63:10]` will meet its required lifetime bounds
--> $DIR/missing-lifetimes-in-signature.rs:59:58
|
LL | fn qux<'b, G: Get<T> + 'b, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ {
| ^^^^^^^^^^^^^^^^^^
help: consider introducing an explicit lifetime bound
|
LL | fn qux<'c, 'b, G: 'c + Get<T> + 'b, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'c {
| ^^^ ^^^^^^^ ^^^^
error[E0621]: explicit lifetime required in the type of `dest`
--> $DIR/missing-lifetimes-in-signature.rs:68:45
|
LL | fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
| ------ ^^^^^^^^^^^^^^^^^^^^^^^ lifetime `'a` required
| |
| help: add explicit lifetime `'a` to the type of `dest`: `&'a mut T`
error[E0309]: the parameter type `G` may not live long enough
--> $DIR/missing-lifetimes-in-signature.rs:79:44
|
LL | fn bak<'a, G, T>(g: G, dest: &'a mut T) -> impl FnOnce() + 'a
| - ^^^^^^^^^^^^^^^^^^ ...so that the type `[closure@$DIR/missing-lifetimes-in-signature.rs:84:5: 86:6]` will meet its required lifetime bounds
| |
| help: consider adding an explicit lifetime bound...: `G: 'a`
error: aborting due to 7 previous errors
error: aborting due to previous error
Some errors have detailed explanations: E0261, E0309, E0621, E0759.
For more information about an error, try `rustc --explain E0261`.
For more information about this error, try `rustc --explain E0261`.
src/test/ui/suggestions/missing-lifetime-specifier.stderr
浏览文件 @
19ecfcd0
...
...
@@ -142,30 +142,6 @@ help: consider using the `'static` lifetime
LL | static d: RefCell<HashMap<i32, Vec<Vec<&Tar<'static, 'static, i32>>>>> = RefCell::new(HashMap::new());
| ^^^^^^^^^^^^^^^^^
error[E0106]: missing lifetime specifier
--> $DIR/missing-lifetime-specifier.rs:50:44
|
LL | static f: RefCell<HashMap<i32, Vec<Vec<&Tar<'static, i32>>>>> = RefCell::new(HashMap::new());
| ^ expected named lifetime parameter
|
= 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 | static f: RefCell<HashMap<i32, Vec<Vec<&'static Tar<'static, i32>>>>> = RefCell::new(HashMap::new());
| ^^^^^^^^
error[E0106]: missing lifetime specifier
--> $DIR/missing-lifetime-specifier.rs:50:44
|
LL | static f: RefCell<HashMap<i32, Vec<Vec<&Tar<'static, i32>>>>> = RefCell::new(HashMap::new());
| ^ expected named lifetime parameter
|
= 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 | static f: RefCell<HashMap<i32, Vec<Vec<&'static Tar<'static, i32>>>>> = RefCell::new(HashMap::new());
| ^^^^^^^^
error[E0107]: this union takes 2 lifetime arguments but only 1 lifetime argument was supplied
--> $DIR/missing-lifetime-specifier.rs:43:44
|
...
...
@@ -256,6 +232,18 @@ help: add missing lifetime argument
LL | static f: RefCell<HashMap<i32, Vec<Vec<&Tar<'static, 'k, i32>>>>> = RefCell::new(HashMap::new());
| ^^^^
error[E0106]: missing lifetime specifier
--> $DIR/missing-lifetime-specifier.rs:50:44
|
LL | static f: RefCell<HashMap<i32, Vec<Vec<&Tar<'static, i32>>>>> = RefCell::new(HashMap::new());
| ^ expected named lifetime parameter
|
= 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 | static f: RefCell<HashMap<i32, Vec<Vec<&'static Tar<'static, i32>>>>> = RefCell::new(HashMap::new());
| ^^^^^^^^
error[E0107]: this trait takes 2 lifetime arguments but only 1 lifetime argument was supplied
--> $DIR/missing-lifetime-specifier.rs:50:45
|
...
...
@@ -274,6 +262,18 @@ help: add missing lifetime argument
LL | static f: RefCell<HashMap<i32, Vec<Vec<&Tar<'static, 'k, i32>>>>> = RefCell::new(HashMap::new());
| ^^^^
error[E0106]: missing lifetime specifier
--> $DIR/missing-lifetime-specifier.rs:50:44
|
LL | static f: RefCell<HashMap<i32, Vec<Vec<&Tar<'static, i32>>>>> = RefCell::new(HashMap::new());
| ^ expected named lifetime parameter
|
= 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 | static f: RefCell<HashMap<i32, Vec<Vec<&'static Tar<'static, i32>>>>> = RefCell::new(HashMap::new());
| ^^^^^^^^
error[E0107]: this trait takes 2 lifetime arguments but only 1 lifetime argument was supplied
--> $DIR/missing-lifetime-specifier.rs:50:45
|
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录