Auto merge of #9981 - Jarcho:issue_9954, r=flip1995
Don't lint `unnecessary_operation` in mixed macro contexts fixes #9954 changelog: `unnecessary_operation`: Don't lint in mixed macro contexts.
This commit is contained in:
commit
4cda21dc42
@ -6,7 +6,8 @@
|
||||
use rustc_errors::Applicability;
|
||||
use rustc_hir::def::{DefKind, Res};
|
||||
use rustc_hir::{is_range_literal, BinOpKind, BlockCheckMode, Expr, ExprKind, PatKind, Stmt, StmtKind, UnsafeSource};
|
||||
use rustc_lint::{LateContext, LateLintPass};
|
||||
use rustc_lint::{LateContext, LateLintPass, LintContext};
|
||||
use rustc_middle::lint::in_external_macro;
|
||||
use rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||
use std::ops::Deref;
|
||||
|
||||
@ -159,8 +160,11 @@ fn has_no_effect(cx: &LateContext<'_>, expr: &Expr<'_>) -> bool {
|
||||
fn check_unnecessary_operation(cx: &LateContext<'_>, stmt: &Stmt<'_>) {
|
||||
if_chain! {
|
||||
if let StmtKind::Semi(expr) = stmt.kind;
|
||||
let ctxt = stmt.span.ctxt();
|
||||
if expr.span.ctxt() == ctxt;
|
||||
if let Some(reduced) = reduce_expression(cx, expr);
|
||||
if !&reduced.iter().any(|e| e.span.from_expansion());
|
||||
if !in_external_macro(cx.sess(), stmt.span);
|
||||
if reduced.iter().all(|e| e.span.ctxt() == ctxt);
|
||||
then {
|
||||
if let ExprKind::Index(..) = &expr.kind {
|
||||
let snippet = if let (Some(arr), Some(func)) =
|
||||
|
@ -76,4 +76,13 @@ fn main() {
|
||||
DropStruct { ..get_drop_struct() };
|
||||
DropEnum::Tuple(get_number());
|
||||
DropEnum::Struct { field: get_number() };
|
||||
|
||||
// Issue #9954
|
||||
fn one() -> i8 {
|
||||
1
|
||||
}
|
||||
macro_rules! use_expr {
|
||||
($($e:expr),*) => {{ $($e;)* }}
|
||||
}
|
||||
use_expr!(isize::MIN / -(one() as isize), i8::MIN / -one());
|
||||
}
|
||||
|
@ -80,4 +80,13 @@ fn main() {
|
||||
DropStruct { ..get_drop_struct() };
|
||||
DropEnum::Tuple(get_number());
|
||||
DropEnum::Struct { field: get_number() };
|
||||
|
||||
// Issue #9954
|
||||
fn one() -> i8 {
|
||||
1
|
||||
}
|
||||
macro_rules! use_expr {
|
||||
($($e:expr),*) => {{ $($e;)* }}
|
||||
}
|
||||
use_expr!(isize::MIN / -(one() as isize), i8::MIN / -one());
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user