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;
}
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
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();
// Do not warn
get_number();
+ unsafe { unsafe_fn() };
Tuple(get_number()); //~ERROR statement can be reduced
//~^HELP replace it with
[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();
}