]> git.lizzy.rs Git - rust.git/commitdiff
fix no_effect lint
authorOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Wed, 25 May 2016 16:51:35 +0000 (18:51 +0200)
committerOliver Schneider <git-spam-no-reply9815368754983@oli-obk.de>
Wed, 25 May 2016 16:51:35 +0000 (18:51 +0200)
src/no_effect.rs
tests/compile-fail/no_effect.rs

index 593a6c4ad591687bf353a33943b4838187acb915..ae3bac0045518dca45409346edf1f7b962ae5442 100644 (file)
@@ -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<Vec<&'a Exp
         }
         Expr_::ExprBlock(ref block) => {
             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
index ce6daa8d5625247afc576f90c04c820e7b95329c..c1d9b1754284cf72bbb98713a796e80c484ccae6 100644 (file)
@@ -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();
 }