Skip to content

Commit

Permalink
Auto merge of rust-lang#6917 - MysteryJump:fix-manual-unwrap-or-const…
Browse files Browse the repository at this point in the history
…-fn, r=giraffate

Fix false-positive `manual_unwrap_or` inside const fn

Fixes rust-lang#6898

changelog:  Fix false-positive for manual_unwrap_or in const fn.
  • Loading branch information
bors committed Mar 17, 2021
2 parents 5b3e61d + 02ceeb5 commit 56161b2
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 2 deletions.
4 changes: 2 additions & 2 deletions clippy_lints/src/manual_unwrap_or.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
use crate::consts::constant_simple;
use crate::utils;
use crate::utils::{path_to_local_id, sugg};
use crate::utils::{in_constant, path_to_local_id, sugg};
use clippy_utils::diagnostics::span_lint_and_sugg;
use clippy_utils::source::{indent_of, reindent_multiline, snippet_opt};
use clippy_utils::ty::is_type_diagnostic_item;
Expand Down Expand Up @@ -45,7 +45,7 @@ declare_lint_pass!(ManualUnwrapOr => [MANUAL_UNWRAP_OR]);

impl LateLintPass<'_> for ManualUnwrapOr {
fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'tcx>) {
if in_external_macro(cx.sess(), expr.span) {
if in_external_macro(cx.sess(), expr.span) || in_constant(cx, expr.hir_id) {
return;
}
lint_manual_unwrap_or(cx, expr);
Expand Down
15 changes: 15 additions & 0 deletions tests/ui/manual_unwrap_or.fixed
Original file line number Diff line number Diff line change
Expand Up @@ -136,4 +136,19 @@ fn result_unwrap_or() {
};
}

// don't lint in const fn
const fn const_fn_option_unwrap_or() {
match Some(1) {
Some(s) => s,
None => 0,
};
}

const fn const_fn_result_unwrap_or() {
match Ok::<&str, &str>("Alice") {
Ok(s) => s,
Err(_) => "Bob",
};
}

fn main() {}
15 changes: 15 additions & 0 deletions tests/ui/manual_unwrap_or.rs
Original file line number Diff line number Diff line change
Expand Up @@ -175,4 +175,19 @@ fn result_unwrap_or() {
};
}

// don't lint in const fn
const fn const_fn_option_unwrap_or() {
match Some(1) {
Some(s) => s,
None => 0,
};
}

const fn const_fn_result_unwrap_or() {
match Ok::<&str, &str>("Alice") {
Ok(s) => s,
Err(_) => "Bob",
};
}

fn main() {}

0 comments on commit 56161b2

Please sign in to comment.