diff --git a/clippy_lints/src/returns.rs b/clippy_lints/src/returns.rs
index 16f582c77c9..96b1e4e9185 100644
--- a/clippy_lints/src/returns.rs
+++ b/clippy_lints/src/returns.rs
@@ -111,6 +111,8 @@ impl ReturnPass {
             let ast::StmtKind::Expr(ref retexpr) = retexpr.node,
             let Some(stmt) = it.next_back(),
             let ast::StmtKind::Local(ref local) = stmt.node,
+            // don't lint in the presence of type inference
+            local.ty.is_none(),
             !local.attrs.iter().any(attr_is_cfg),
             let Some(ref initexpr) = local.init,
             let ast::PatKind::Ident(_, Spanned { node: id, .. }, _) = local.pat.node,
diff --git a/tests/ui/let_return.rs b/tests/ui/let_return.rs
index de0bb9b3cc1..71cdf88c887 100644
--- a/tests/ui/let_return.rs
+++ b/tests/ui/let_return.rs
@@ -36,5 +36,11 @@ fn test_nowarn_3() -> (i32, i32) {
     (x, y)
 }
 
+fn test_nowarn_4() -> i32 {
+    // this should technically warn, but not b/c of let_and_return, but b/c of useless type
+    let x: i32 = 5;
+    x
+}
+
 fn main() {
 }