Avoid unused lifetime warning for lifetimes introduced when desugering async.
This commit is contained in:
parent
b50520835f
commit
d82c1c546d
3 changed files with 81 additions and 1 deletions
|
@ -709,15 +709,22 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
|
||||||
match param.kind {
|
match param.kind {
|
||||||
GenericParamKind::Lifetime { .. } => {
|
GenericParamKind::Lifetime { .. } => {
|
||||||
let (name, reg) = Region::early(&self.tcx.hir(), &mut index, ¶m);
|
let (name, reg) = Region::early(&self.tcx.hir(), &mut index, ¶m);
|
||||||
|
let def_id = if let Region::EarlyBound(_ ,def_id , _) = reg {
|
||||||
|
def_id
|
||||||
|
} else {
|
||||||
|
bug!();
|
||||||
|
};
|
||||||
if let hir::ParamName::Plain(param_name) = name {
|
if let hir::ParamName::Plain(param_name) = name {
|
||||||
if param_name.name == kw::UnderscoreLifetime {
|
if param_name.name == kw::UnderscoreLifetime {
|
||||||
// Pick the elided lifetime "definition" if one exists
|
// Pick the elided lifetime "definition" if one exists
|
||||||
// and use it to make an elision scope.
|
// and use it to make an elision scope.
|
||||||
|
self.lifetime_uses.insert(def_id.clone(), LifetimeUseSet::Many);
|
||||||
elision = Some(reg);
|
elision = Some(reg);
|
||||||
} else {
|
} else {
|
||||||
lifetimes.insert(name, reg);
|
lifetimes.insert(name, reg);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
self.lifetime_uses.insert(def_id.clone(), LifetimeUseSet::Many);
|
||||||
lifetimes.insert(name, reg);
|
lifetimes.insert(name, reg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1623,7 +1630,6 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
||||||
_ => None,
|
_ => None,
|
||||||
} {
|
} {
|
||||||
debug!("id = {:?} span = {:?} name = {:?}", id, span, name);
|
debug!("id = {:?} span = {:?} name = {:?}", id, span, name);
|
||||||
|
|
||||||
if name.name == kw::UnderscoreLifetime {
|
if name.name == kw::UnderscoreLifetime {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
42
src/test/ui/async-await/unused-lifetime.rs
Normal file
42
src/test/ui/async-await/unused-lifetime.rs
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// edition:2018
|
||||||
|
|
||||||
|
// Avoid spurious warnings of unused lifetime. The below async functions
|
||||||
|
// are desugered to have an unused lifetime
|
||||||
|
// but we don't want to warn about that as there's nothing they can do about it.
|
||||||
|
|
||||||
|
#![deny(unused_lifetimes)]
|
||||||
|
#![allow(dead_code)]
|
||||||
|
|
||||||
|
pub async fn october(s: &str) {
|
||||||
|
println!("{}", s);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn async_fn(&mut ref s: &mut[i32]) {
|
||||||
|
println!("{:?}", s);
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! foo_macro {
|
||||||
|
() => {
|
||||||
|
pub async fn async_fn_in_macro(&mut ref _s: &mut[i32]) {}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
foo_macro!();
|
||||||
|
|
||||||
|
pub async fn func_with_unused_lifetime<'a>(s: &'a str) {
|
||||||
|
//~^ ERROR lifetime parameter `'a` never used
|
||||||
|
println!("{}", s);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn func_with_two_unused_lifetime<'a, 'b>(s: &'a str, t: &'b str) {
|
||||||
|
//~^ ERROR lifetime parameter `'a` never used
|
||||||
|
//~^^ ERROR lifetime parameter `'b` never used
|
||||||
|
println!("{}", s);
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn func_with_unused_lifetime_in_two_params<'c>(s: &'c str, t: &'c str) {
|
||||||
|
//~^ ERROR lifetime parameter `'c` never used
|
||||||
|
println!("{}", s);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {}
|
32
src/test/ui/async-await/unused-lifetime.stderr
Normal file
32
src/test/ui/async-await/unused-lifetime.stderr
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
error: lifetime parameter `'a` never used
|
||||||
|
--> $DIR/unused-lifetime.rs:26:40
|
||||||
|
|
|
||||||
|
LL | pub async fn func_with_unused_lifetime<'a>(s: &'a str) {
|
||||||
|
| ^^
|
||||||
|
|
|
||||||
|
note: lint level defined here
|
||||||
|
--> $DIR/unused-lifetime.rs:7:9
|
||||||
|
|
|
||||||
|
LL | #![deny(unused_lifetimes)]
|
||||||
|
| ^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
error: lifetime parameter `'a` never used
|
||||||
|
--> $DIR/unused-lifetime.rs:31:44
|
||||||
|
|
|
||||||
|
LL | pub async fn func_with_two_unused_lifetime<'a, 'b>(s: &'a str, t: &'b str) {
|
||||||
|
| ^^
|
||||||
|
|
||||||
|
error: lifetime parameter `'b` never used
|
||||||
|
--> $DIR/unused-lifetime.rs:31:48
|
||||||
|
|
|
||||||
|
LL | pub async fn func_with_two_unused_lifetime<'a, 'b>(s: &'a str, t: &'b str) {
|
||||||
|
| ^^
|
||||||
|
|
||||||
|
error: lifetime parameter `'c` never used
|
||||||
|
--> $DIR/unused-lifetime.rs:37:54
|
||||||
|
|
|
||||||
|
LL | pub async fn func_with_unused_lifetime_in_two_params<'c>(s: &'c str, t: &'c str) {
|
||||||
|
| ^^
|
||||||
|
|
||||||
|
error: aborting due to 4 previous errors
|
||||||
|
|
Loading…
Add table
Reference in a new issue