diff --git a/src/block_in_if_condition.rs b/src/block_in_if_condition.rs index b4e81ac6a2b..f7c181f5fd8 100644 --- a/src/block_in_if_condition.rs +++ b/src/block_in_if_condition.rs @@ -74,23 +74,25 @@ impl LateLintPass for BlockInIfCondition { fn check_expr(&mut self, cx: &LateContext, expr: &Expr) { if let ExprIf(ref check, ref then, _) = expr.node { if let ExprBlock(ref block) = check.node { - if block.stmts.is_empty() { - if let Some(ref ex) = block.expr { - // don't dig into the expression here, just suggest that they remove - // the block + if block.rules == DefaultBlock { + if block.stmts.is_empty() { + if let Some(ref ex) = block.expr { + // don't dig into the expression here, just suggest that they remove + // the block - span_help_and_lint(cx, BLOCK_IN_IF_CONDITION_EXPR, check.span, - BRACED_EXPR_MESSAGE, - &format!("try\nif {} {} ... ", snippet_block(cx, ex.span, ".."), + span_help_and_lint(cx, BLOCK_IN_IF_CONDITION_EXPR, check.span, + BRACED_EXPR_MESSAGE, + &format!("try\nif {} {} ... ", snippet_block(cx, ex.span, ".."), + snippet_block(cx, then.span, ".."))); + } + } else { + // move block higher + span_help_and_lint(cx, BLOCK_IN_IF_CONDITION_STMT, check.span, + COMPLEX_BLOCK_MESSAGE, + &format!("try\nlet res = {};\nif res {} ... ", + snippet_block(cx, block.span, ".."), snippet_block(cx, then.span, ".."))); } - } else { - // move block higher - span_help_and_lint(cx, BLOCK_IN_IF_CONDITION_STMT, check.span, - COMPLEX_BLOCK_MESSAGE, - &format!("try\nlet res = {};\nif res {} ... ", - snippet_block(cx, block.span, ".."), - snippet_block(cx, then.span, ".."))); } } else { let mut visitor = ExVisitor { found_block: None }; diff --git a/tests/compile-fail/block_in_if_condition.rs b/tests/compile-fail/block_in_if_condition.rs index c075d48297e..cd95fbd202c 100644 --- a/tests/compile-fail/block_in_if_condition.rs +++ b/tests/compile-fail/block_in_if_condition.rs @@ -60,5 +60,14 @@ fn closure_without_block() { } } +fn condition_is_unsafe_block() { + let a: i32 = 1; + + // this should not warn because the condition is an unsafe block + if unsafe { 1u32 == std::mem::transmute(a) } { + println!("1u32 == a"); + } +} + fn main() { }