in which we decline to lint single-use lifetimes in derived impls

Resolves #53738.
This commit is contained in:
Zack M. Davis 2019-06-13 23:16:47 -07:00
parent cdd743755a
commit 17653dd3da
2 changed files with 18 additions and 0 deletions

View file

@ -1591,6 +1591,17 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
continue;
}
if let Some(parent_def_id) = self.tcx.parent(def_id) {
if let Some(parent_hir_id) = self.tcx.hir()
.as_local_hir_id(parent_def_id) {
// lifetimes in `derive` expansions don't count (Issue #53738)
if self.tcx.hir().attrs_by_hir_id(parent_hir_id).iter()
.any(|attr| attr.check_name(sym::automatically_derived)) {
continue;
}
}
}
let mut err = self.tcx.struct_span_lint_hir(
lint::builtin::SINGLE_USE_LIFETIMES,
id,

View file

@ -18,4 +18,11 @@ enum Bar<'f> {
trait Baz<'f> { }
// `Derive`d impls shouldn't trigger a warning, either (Issue #53738).
#[derive(Debug)]
struct Quux<'a> {
priors: &'a u32,
}
fn main() { }