Skip to content

Commit

Permalink
Auto merge of #7067 - TaKO8Ki:fix-false-negative-on-needless-return, …
Browse files Browse the repository at this point in the history
…r=llogiq

Fix a false negative on `needless return`

closes #7042

changelog: fix a false negative on `needless return`
  • Loading branch information
bors committed Apr 12, 2021
2 parents 411c0df + e6c67ad commit 2a96bc4
Show file tree
Hide file tree
Showing 4 changed files with 268 additions and 31 deletions.
1 change: 1 addition & 0 deletions clippy_lints/src/returns.rs
Original file line number Diff line number Diff line change
Expand Up @@ -223,6 +223,7 @@ fn check_final_expr<'tcx>(
},
_ => (),
},
ExprKind::DropTemps(expr) => check_final_expr(cx, expr, None, RetReplacement::Empty),
_ => (),
}
}
Expand Down
88 changes: 82 additions & 6 deletions tests/ui/needless_return.fixed
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// run-rustfix
// edition:2018

#![allow(unused)]
#![allow(
Expand Down Expand Up @@ -125,10 +126,85 @@ mod issue6501 {
}
}

fn main() {
let _ = test_end_of_fn();
let _ = test_no_semicolon();
let _ = test_if_block();
let _ = test_match(true);
test_closure();
async fn async_test_end_of_fn() -> bool {
if true {
// no error!
return true;
}
true
}

async fn async_test_no_semicolon() -> bool {
true
}

async fn async_test_if_block() -> bool {
if true {
true
} else {
false
}
}

async fn async_test_match(x: bool) -> bool {
match x {
true => false,
false => {
true
},
}
}

async fn async_test_closure() {
let _ = || {
true
};
let _ = || true;
}

async fn async_test_macro_call() -> i32 {
return the_answer!();
}

async fn async_test_void_fun() {

}

async fn async_test_void_if_fun(b: bool) {
if b {

} else {

}
}

async fn async_test_void_match(x: u32) {
match x {
0 => (),
_ => {},
}
}

async fn async_read_line() -> String {
use std::io::BufRead;
let stdin = ::std::io::stdin();
return stdin.lock().lines().next().unwrap().unwrap();
}

async fn async_borrows_but_not_last(value: bool) -> String {
if value {
use std::io::BufRead;
let stdin = ::std::io::stdin();
let _a = stdin.lock().lines().next().unwrap().unwrap();
String::from("test")
} else {
String::new()
}
}

async fn async_test_return_in_macro() {
needed_return!(10);
needed_return!(0);
}

fn main() {}
88 changes: 82 additions & 6 deletions tests/ui/needless_return.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
// run-rustfix
// edition:2018

#![allow(unused)]
#![allow(
Expand Down Expand Up @@ -125,10 +126,85 @@ mod issue6501 {
}
}

fn main() {
let _ = test_end_of_fn();
let _ = test_no_semicolon();
let _ = test_if_block();
let _ = test_match(true);
test_closure();
async fn async_test_end_of_fn() -> bool {
if true {
// no error!
return true;
}
return true;
}

async fn async_test_no_semicolon() -> bool {
return true;
}

async fn async_test_if_block() -> bool {
if true {
return true;
} else {
return false;
}
}

async fn async_test_match(x: bool) -> bool {
match x {
true => return false,
false => {
return true;
},
}
}

async fn async_test_closure() {
let _ = || {
return true;
};
let _ = || return true;
}

async fn async_test_macro_call() -> i32 {
return the_answer!();
}

async fn async_test_void_fun() {
return;
}

async fn async_test_void_if_fun(b: bool) {
if b {
return;
} else {
return;
}
}

async fn async_test_void_match(x: u32) {
match x {
0 => (),
_ => return,
}
}

async fn async_read_line() -> String {
use std::io::BufRead;
let stdin = ::std::io::stdin();
return stdin.lock().lines().next().unwrap().unwrap();
}

async fn async_borrows_but_not_last(value: bool) -> String {
if value {
use std::io::BufRead;
let stdin = ::std::io::stdin();
let _a = stdin.lock().lines().next().unwrap().unwrap();
return String::from("test");
} else {
return String::new();
}
}

async fn async_test_return_in_macro() {
needed_return!(10);
needed_return!(0);
}

fn main() {}
Loading

0 comments on commit 2a96bc4

Please sign in to comment.