From a4b7ed7a42c716ab9f05e351f003d589124fd55d Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Wed, 17 Apr 2024 14:18:58 +0200 Subject: Adding upstream version 1.68.2+dfsg1. Signed-off-by: Daniel Baumann --- tests/ui/non-fmt-panic.rs | 89 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 tests/ui/non-fmt-panic.rs (limited to 'tests/ui/non-fmt-panic.rs') diff --git a/tests/ui/non-fmt-panic.rs b/tests/ui/non-fmt-panic.rs new file mode 100644 index 000000000..d0d06b797 --- /dev/null +++ b/tests/ui/non-fmt-panic.rs @@ -0,0 +1,89 @@ +// run-rustfix +// rustfix-only-machine-applicable +// build-pass (FIXME(62277): should be check-pass) +// aux-build:fancy-panic.rs + +extern crate fancy_panic; + +const C: &str = "abc {}"; +static S: &str = "{bla}"; + +#[allow(unreachable_code)] +fn main() { + panic!("here's a brace: {"); //~ WARN panic message contains a brace + unreachable!("here's a brace: {"); //~ WARN panic message contains a brace + std::panic!("another one: }"); //~ WARN panic message contains a brace + core::panic!("Hello {}"); //~ WARN panic message contains an unused formatting placeholder + assert!(false, "{:03x} {test} bla"); + //~^ WARN panic message contains unused formatting placeholders + assert!(false, S); + //~^ WARN panic message is not a string literal + assert!(false, 123); + //~^ WARN panic message is not a string literal + assert!(false, Some(123)); + //~^ WARN panic message is not a string literal + debug_assert!(false, "{{}} bla"); //~ WARN panic message contains braces + panic!(C); //~ WARN panic message is not a string literal + panic!(S); //~ WARN panic message is not a string literal + unreachable!(S); //~ WARN panic message is not a string literal + unreachable!(S); //~ WARN panic message is not a string literal + std::panic!(123); //~ WARN panic message is not a string literal + core::panic!(&*"abc"); //~ WARN panic message is not a string literal + panic!(Some(123)); //~ WARN panic message is not a string literal + panic!(concat!("{", "}")); //~ WARN panic message contains an unused formatting placeholder + panic!(concat!("{", "{")); //~ WARN panic message contains braces + + fancy_panic::fancy_panic!("test {} 123"); + //~^ WARN panic message contains an unused formatting placeholder + + fancy_panic::fancy_panic!(); // OK + fancy_panic::fancy_panic!(S); // OK + + macro_rules! a { + () => { 123 }; + } + + panic!(a!()); //~ WARN panic message is not a string literal + unreachable!(a!()); //~ WARN panic message is not a string literal + + panic!(format!("{}", 1)); //~ WARN panic message is not a string literal + unreachable!(format!("{}", 1)); //~ WARN panic message is not a string literal + assert!(false, format!("{}", 1)); //~ WARN panic message is not a string literal + debug_assert!(false, format!("{}", 1)); //~ WARN panic message is not a string literal + + panic![123]; //~ WARN panic message is not a string literal + panic!{123}; //~ WARN panic message is not a string literal + + // Check that the lint only triggers for std::panic and core::panic, + // not any panic macro: + macro_rules! panic { + ($e:expr) => (); + } + panic!("{}"); // OK + panic!(S); // OK + + a(1); + b(1); + c(1); + d(1); +} + +fn a(v: T) { + panic!(v); //~ WARN panic message is not a string literal + assert!(false, v); //~ WARN panic message is not a string literal +} + +fn b(v: T) { + panic!(v); //~ WARN panic message is not a string literal + assert!(false, v); //~ WARN panic message is not a string literal +} + +fn c(v: T) { + panic!(v); //~ WARN panic message is not a string literal + assert!(false, v); //~ WARN panic message is not a string literal +} + +fn d(v: T) { + panic!(v); //~ WARN panic message is not a string literal + assert!(false, v); //~ WARN panic message is not a string literal +} -- cgit v1.2.3