From: Oliver Schneider Date: Wed, 25 May 2016 16:51:35 +0000 (+0200) Subject: fix no_effect lint X-Git-Url: https://git.lizzy.rs/?a=commitdiff_plain;h=bb69e60b3088f5db72e359c19271b8561e882a39;p=rust.git fix no_effect lint --- diff --git a/src/no_effect.rs b/src/no_effect.rs index 593a6c4ad59..ae3bac00455 100644 --- a/src/no_effect.rs +++ b/src/no_effect.rs @@ -1,6 +1,6 @@ use rustc::lint::{LateContext, LateLintPass, LintArray, LintPass}; use rustc::hir::def::{Def, PathResolution}; -use rustc::hir::{Expr, Expr_, Stmt, StmtSemi}; +use rustc::hir::{Expr, Expr_, Stmt, StmtSemi, BlockCheckMode, UnsafeSource}; use utils::{in_macro, span_lint, snippet_opt, span_lint_and_then}; use std::ops::Deref; @@ -140,11 +140,11 @@ fn reduce_expression<'a>(cx: &LateContext, expr: &'a Expr) -> Option { if block.stmts.is_empty() { - block.expr.as_ref().and_then(|e| if e.span == expr.span { + block.expr.as_ref().and_then(|e| match block.rules { + BlockCheckMode::UnsafeBlock(UnsafeSource::UserProvided) => None, + BlockCheckMode::DefaultBlock => Some(vec![&**e]), // in case of compiler-inserted signaling blocks - reduce_expression(cx, e) - } else { - Some(vec![e]) + _ => reduce_expression(cx, e), }) } else { None diff --git a/tests/compile-fail/no_effect.rs b/tests/compile-fail/no_effect.rs index ce6daa8d562..c1d9b175428 100644 --- a/tests/compile-fail/no_effect.rs +++ b/tests/compile-fail/no_effect.rs @@ -18,6 +18,8 @@ enum Enum { fn get_number() -> i32 { 0 } fn get_struct() -> Struct { Struct { field: 0 } } +unsafe fn unsafe_fn() -> i32 { 0 } + fn main() { let s = get_struct(); let s2 = get_struct(); @@ -50,6 +52,7 @@ fn main() { // Do not warn get_number(); + unsafe { unsafe_fn() }; Tuple(get_number()); //~ERROR statement can be reduced //~^HELP replace it with @@ -105,4 +108,7 @@ fn main() { [42; 55][get_number() as usize]; //~ERROR statement can be reduced //~^HELP replace it with //~|SUGGESTION [42; 55];get_number() as usize; + {get_number()}; //~ERROR statement can be reduced + //~^HELP replace it with + //~|SUGGESTION get_number(); }