From 962c06e9dae7a3b72ff8f776d9f569a996293acd Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Sat, 28 Nov 2015 21:29:08 -0800 Subject: [PATCH] Fix false positive in unrooted_must_root lint. Encountered in #8725. --- components/plugins/lints/unrooted_must_root.rs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/components/plugins/lints/unrooted_must_root.rs b/components/plugins/lints/unrooted_must_root.rs index 2c8a09e2a319..c64f127e0947 100644 --- a/components/plugins/lints/unrooted_must_root.rs +++ b/components/plugins/lints/unrooted_must_root.rs @@ -4,6 +4,7 @@ use rustc::front::map as ast_map; use rustc::lint::{LateContext, LintPass, LintArray, LateLintPass, LintContext}; +use rustc::middle::pat_util::pat_is_binding; use rustc::middle::ty; use rustc_front::hir; use rustc_front::intravisit as visit; @@ -206,11 +207,13 @@ impl<'a, 'b: 'a, 'tcx: 'a+'b> visit::Visitor<'a> for FnDefVisitor<'a, 'b, 'tcx> let cx = self.cx; if let hir::PatIdent(hir::BindByValue(_), _, _) = pat.node { - let ty = cx.tcx.pat_ty(pat); - if is_unrooted_ty(cx, ty, self.in_new_function) { - cx.span_lint(UNROOTED_MUST_ROOT, - pat.span, - &format!("Expression of type {:?} must be rooted", ty)) + if pat_is_binding(&cx.tcx.def_map.borrow(), pat) { + let ty = cx.tcx.pat_ty(pat); + if is_unrooted_ty(cx, ty, self.in_new_function) { + cx.span_lint(UNROOTED_MUST_ROOT, + pat.span, + &format!("Expression of type {:?} must be rooted", ty)) + } } }