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_errors::Applicability;
|
||||||
use rustc_hir::def::{DefKind, Res};
|
use rustc_hir::def::{DefKind, Res};
|
||||||
use rustc_hir::{is_range_literal, BinOpKind, BlockCheckMode, Expr, ExprKind, PatKind, Stmt, StmtKind, UnsafeSource};
|
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 rustc_session::{declare_lint_pass, declare_tool_lint};
|
||||||
use std::ops::Deref;
|
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<'_>) {
|
fn check_unnecessary_operation(cx: &LateContext<'_>, stmt: &Stmt<'_>) {
|
||||||
if_chain! {
|
if_chain! {
|
||||||
if let StmtKind::Semi(expr) = stmt.kind;
|
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 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 {
|
then {
|
||||||
if let ExprKind::Index(..) = &expr.kind {
|
if let ExprKind::Index(..) = &expr.kind {
|
||||||
let snippet = if let (Some(arr), Some(func)) =
|
let snippet = if let (Some(arr), Some(func)) =
|
||||||
|
@ -76,4 +76,13 @@ fn main() {
|
|||||||
DropStruct { ..get_drop_struct() };
|
DropStruct { ..get_drop_struct() };
|
||||||
DropEnum::Tuple(get_number());
|
DropEnum::Tuple(get_number());
|
||||||
DropEnum::Struct { field: 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() };
|
DropStruct { ..get_drop_struct() };
|
||||||
DropEnum::Tuple(get_number());
|
DropEnum::Tuple(get_number());
|
||||||
DropEnum::Struct { field: 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