diff options
Diffstat (limited to 'tests/ui/non-fmt-panic.fixed')
-rw-r--r-- | tests/ui/non-fmt-panic.fixed | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/tests/ui/non-fmt-panic.fixed b/tests/ui/non-fmt-panic.fixed new file mode 100644 index 000000000..5191f1877 --- /dev/null +++ b/tests/ui/non-fmt-panic.fixed @@ -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::panic_any(123); //~ WARN panic message is not a string literal + core::panic!("{}", &*"abc"); //~ WARN panic message is not a string literal + std::panic::panic_any(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 }; + } + + std::panic::panic_any(a!()); //~ WARN panic message is not a string literal + unreachable!("{}", a!()); //~ WARN panic message is not a string literal + + panic!("{}", 1); //~ WARN panic message is not a string literal + unreachable!("{}", 1); //~ WARN panic message is not a string literal + assert!(false, "{}", 1); //~ WARN panic message is not a string literal + debug_assert!(false, "{}", 1); //~ WARN panic message is not a string literal + + std::panic::panic_any(123); //~ WARN panic message is not a string literal + std::panic::panic_any(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<T: Send + 'static>(v: T) { + std::panic::panic_any(v); //~ WARN panic message is not a string literal + assert!(false, v); //~ WARN panic message is not a string literal +} + +fn b<T: std::fmt::Debug + Send + 'static>(v: T) { + std::panic::panic_any(v); //~ WARN panic message is not a string literal + assert!(false, "{:?}", v); //~ WARN panic message is not a string literal +} + +fn c<T: std::fmt::Display + Send + 'static>(v: T) { + std::panic::panic_any(v); //~ WARN panic message is not a string literal + assert!(false, "{}", v); //~ WARN panic message is not a string literal +} + +fn d<T: std::fmt::Display + std::fmt::Debug + Send + 'static>(v: T) { + std::panic::panic_any(v); //~ WARN panic message is not a string literal + assert!(false, "{}", v); //~ WARN panic message is not a string literal +} |