Auto merge of #8592 - c410-f3r:stuff, r=flip1995

Do not fire `panic` in a constant environment

Let rustc handle panics in constant environments.

Since https://github.com/rust-lang/rust-clippy/issues/8348 I thought that such modification would require a lot of work but thanks to https://github.com/rust-lang/rust-clippy/pull/8588 I now know that it is not the case.

changelog: [`panic`]: No longer lint in constant context. `rustc` already handles this.
This commit is contained in:
bors 2022-03-30 16:04:14 +00:00
commit 0031f69999
3 changed files with 36 additions and 17 deletions

View file

@ -78,6 +78,10 @@ impl<'tcx> LateLintPass<'tcx> for PanicUnimplemented {
fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) { fn check_expr(&mut self, cx: &LateContext<'tcx>, expr: &'tcx Expr<'_>) {
let Some(macro_call) = root_macro_call_first_node(cx, expr) else { return }; let Some(macro_call) = root_macro_call_first_node(cx, expr) else { return };
if is_panic(cx, macro_call.def_id) { if is_panic(cx, macro_call.def_id) {
if cx.tcx.hir().is_inside_const_context(expr.hir_id) {
return;
}
span_lint( span_lint(
cx, cx,
PANIC, PANIC,

View file

@ -1,8 +1,23 @@
#![warn(clippy::unimplemented, clippy::unreachable, clippy::todo, clippy::panic)]
#![allow(clippy::assertions_on_constants, clippy::eq_op)] #![allow(clippy::assertions_on_constants, clippy::eq_op)]
#![feature(inline_const)]
#![warn(clippy::unimplemented, clippy::unreachable, clippy::todo, clippy::panic)]
extern crate core; extern crate core;
const _: () = {
if 1 == 0 {
panic!("A balanced diet means a cupcake in each hand");
}
};
fn inline_const() {
let _ = const {
if 1 == 0 {
panic!("When nothing goes right, go left")
}
};
}
fn panic() { fn panic() {
let a = 2; let a = 2;
panic!(); panic!();

View file

@ -1,5 +1,5 @@
error: `panic` should not be present in production code error: `panic` should not be present in production code
--> $DIR/panicking_macros.rs:8:5 --> $DIR/panicking_macros.rs:23:5
| |
LL | panic!(); LL | panic!();
| ^^^^^^^^ | ^^^^^^^^
@ -7,19 +7,19 @@ LL | panic!();
= note: `-D clippy::panic` implied by `-D warnings` = note: `-D clippy::panic` implied by `-D warnings`
error: `panic` should not be present in production code error: `panic` should not be present in production code
--> $DIR/panicking_macros.rs:9:5 --> $DIR/panicking_macros.rs:24:5
| |
LL | panic!("message"); LL | panic!("message");
| ^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^
error: `panic` should not be present in production code error: `panic` should not be present in production code
--> $DIR/panicking_macros.rs:10:5 --> $DIR/panicking_macros.rs:25:5
| |
LL | panic!("{} {}", "panic with", "multiple arguments"); LL | panic!("{} {}", "panic with", "multiple arguments");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: `todo` should not be present in production code error: `todo` should not be present in production code
--> $DIR/panicking_macros.rs:16:5 --> $DIR/panicking_macros.rs:31:5
| |
LL | todo!(); LL | todo!();
| ^^^^^^^ | ^^^^^^^
@ -27,19 +27,19 @@ LL | todo!();
= note: `-D clippy::todo` implied by `-D warnings` = note: `-D clippy::todo` implied by `-D warnings`
error: `todo` should not be present in production code error: `todo` should not be present in production code
--> $DIR/panicking_macros.rs:17:5 --> $DIR/panicking_macros.rs:32:5
| |
LL | todo!("message"); LL | todo!("message");
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
error: `todo` should not be present in production code error: `todo` should not be present in production code
--> $DIR/panicking_macros.rs:18:5 --> $DIR/panicking_macros.rs:33:5
| |
LL | todo!("{} {}", "panic with", "multiple arguments"); LL | todo!("{} {}", "panic with", "multiple arguments");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: `unimplemented` should not be present in production code error: `unimplemented` should not be present in production code
--> $DIR/panicking_macros.rs:24:5 --> $DIR/panicking_macros.rs:39:5
| |
LL | unimplemented!(); LL | unimplemented!();
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
@ -47,19 +47,19 @@ LL | unimplemented!();
= note: `-D clippy::unimplemented` implied by `-D warnings` = note: `-D clippy::unimplemented` implied by `-D warnings`
error: `unimplemented` should not be present in production code error: `unimplemented` should not be present in production code
--> $DIR/panicking_macros.rs:25:5 --> $DIR/panicking_macros.rs:40:5
| |
LL | unimplemented!("message"); LL | unimplemented!("message");
| ^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^
error: `unimplemented` should not be present in production code error: `unimplemented` should not be present in production code
--> $DIR/panicking_macros.rs:26:5 --> $DIR/panicking_macros.rs:41:5
| |
LL | unimplemented!("{} {}", "panic with", "multiple arguments"); LL | unimplemented!("{} {}", "panic with", "multiple arguments");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: usage of the `unreachable!` macro error: usage of the `unreachable!` macro
--> $DIR/panicking_macros.rs:32:5 --> $DIR/panicking_macros.rs:47:5
| |
LL | unreachable!(); LL | unreachable!();
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^
@ -67,37 +67,37 @@ LL | unreachable!();
= note: `-D clippy::unreachable` implied by `-D warnings` = note: `-D clippy::unreachable` implied by `-D warnings`
error: usage of the `unreachable!` macro error: usage of the `unreachable!` macro
--> $DIR/panicking_macros.rs:33:5 --> $DIR/panicking_macros.rs:48:5
| |
LL | unreachable!("message"); LL | unreachable!("message");
| ^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^
error: usage of the `unreachable!` macro error: usage of the `unreachable!` macro
--> $DIR/panicking_macros.rs:34:5 --> $DIR/panicking_macros.rs:49:5
| |
LL | unreachable!("{} {}", "panic with", "multiple arguments"); LL | unreachable!("{} {}", "panic with", "multiple arguments");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
error: `panic` should not be present in production code error: `panic` should not be present in production code
--> $DIR/panicking_macros.rs:40:5 --> $DIR/panicking_macros.rs:55:5
| |
LL | panic!(); LL | panic!();
| ^^^^^^^^ | ^^^^^^^^
error: `todo` should not be present in production code error: `todo` should not be present in production code
--> $DIR/panicking_macros.rs:41:5 --> $DIR/panicking_macros.rs:56:5
| |
LL | todo!(); LL | todo!();
| ^^^^^^^ | ^^^^^^^
error: `unimplemented` should not be present in production code error: `unimplemented` should not be present in production code
--> $DIR/panicking_macros.rs:42:5 --> $DIR/panicking_macros.rs:57:5
| |
LL | unimplemented!(); LL | unimplemented!();
| ^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^
error: usage of the `unreachable!` macro error: usage of the `unreachable!` macro
--> $DIR/panicking_macros.rs:43:5 --> $DIR/panicking_macros.rs:58:5
| |
LL | unreachable!(); LL | unreachable!();
| ^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^