mirror of
https://github.com/rust-lang/rust-clippy
synced 2024-11-10 23:24:24 +00:00
[significant_drop_tightening] Fix #11160
This commit is contained in:
parent
1d33469658
commit
1f82f6ddf3
4 changed files with 24 additions and 7 deletions
|
@ -1,6 +1,6 @@
|
|||
use clippy_utils::diagnostics::span_lint_and_then;
|
||||
use clippy_utils::source::{indent_of, snippet};
|
||||
use clippy_utils::{expr_or_init, get_attr, path_to_local};
|
||||
use clippy_utils::{expr_or_init, get_attr, path_to_local, peel_hir_expr_unary};
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap};
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
|
@ -236,7 +236,7 @@ impl<'ap, 'lc, 'others, 'stmt, 'tcx> StmtsChecker<'ap, 'lc, 'others, 'stmt, 'tcx
|
|||
|
||||
fn manage_has_expensive_expr_after_last_attr(&mut self) {
|
||||
let has_expensive_stmt = match self.ap.curr_stmt.kind {
|
||||
hir::StmtKind::Expr(expr) if !is_expensive_expr(expr) => false,
|
||||
hir::StmtKind::Expr(expr) if is_inexpensive_expr(expr) => false,
|
||||
hir::StmtKind::Local(local) if let Some(expr) = local.init
|
||||
&& let hir::ExprKind::Path(_) = expr.kind => false,
|
||||
_ => true
|
||||
|
@ -445,6 +445,9 @@ fn has_drop(expr: &hir::Expr<'_>, first_bind_ident: &Ident, lcx: &LateContext<'_
|
|||
}
|
||||
}
|
||||
|
||||
fn is_expensive_expr(expr: &hir::Expr<'_>) -> bool {
|
||||
!matches!(expr.kind, hir::ExprKind::Path(_))
|
||||
fn is_inexpensive_expr(expr: &hir::Expr<'_>) -> bool {
|
||||
let actual = peel_hir_expr_unary(expr).0;
|
||||
let is_path = matches!(actual.kind, hir::ExprKind::Path(_));
|
||||
let is_lit = matches!(actual.kind, hir::ExprKind::Lit(_));
|
||||
is_path || is_lit
|
||||
}
|
||||
|
|
|
@ -51,6 +51,13 @@ pub fn issue_11128() {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn issue_11160() -> bool {
|
||||
let mutex = Mutex::new(1i32);
|
||||
let lock = mutex.lock().unwrap();
|
||||
let _ = lock.abs();
|
||||
true
|
||||
}
|
||||
|
||||
pub fn path_return_can_be_ignored() -> i32 {
|
||||
let mutex = Mutex::new(1);
|
||||
let lock = mutex.lock().unwrap();
|
||||
|
|
|
@ -50,6 +50,13 @@ pub fn issue_11128() {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn issue_11160() -> bool {
|
||||
let mutex = Mutex::new(1i32);
|
||||
let lock = mutex.lock().unwrap();
|
||||
let _ = lock.abs();
|
||||
true
|
||||
}
|
||||
|
||||
pub fn path_return_can_be_ignored() -> i32 {
|
||||
let mutex = Mutex::new(1);
|
||||
let lock = mutex.lock().unwrap();
|
||||
|
|
|
@ -23,7 +23,7 @@ LL + drop(lock);
|
|||
|
|
||||
|
||||
error: temporary with significant `Drop` can be early dropped
|
||||
--> $DIR/significant_drop_tightening.rs:79:13
|
||||
--> $DIR/significant_drop_tightening.rs:86:13
|
||||
|
|
||||
LL | / {
|
||||
LL | | let mutex = Mutex::new(1i32);
|
||||
|
@ -43,7 +43,7 @@ LL + drop(lock);
|
|||
|
|
||||
|
||||
error: temporary with significant `Drop` can be early dropped
|
||||
--> $DIR/significant_drop_tightening.rs:100:13
|
||||
--> $DIR/significant_drop_tightening.rs:107:13
|
||||
|
|
||||
LL | / {
|
||||
LL | | let mutex = Mutex::new(1i32);
|
||||
|
@ -67,7 +67,7 @@ LL +
|
|||
|
|
||||
|
||||
error: temporary with significant `Drop` can be early dropped
|
||||
--> $DIR/significant_drop_tightening.rs:106:17
|
||||
--> $DIR/significant_drop_tightening.rs:113:17
|
||||
|
|
||||
LL | / {
|
||||
LL | | let mutex = Mutex::new(vec![1i32]);
|
||||
|
|
Loading…
Reference in a new issue