1 // Exercise the unused_unsafe attribute in some positive and negative cases
4 // [thir]compile-flags: -Zthir-unsafeck
7 #![deny(unused_unsafe)]
16 fn callback<T, F>(_f: F) -> T where F: FnOnce() -> T { panic!() }
19 fn bad1() { unsafe {} } //~ ERROR: unnecessary `unsafe` block
20 fn bad2() { unsafe { bad1() } } //~ ERROR: unnecessary `unsafe` block
21 unsafe fn bad3() { unsafe {} } //~ ERROR: unnecessary `unsafe` block
22 fn bad4() { unsafe { callback(||{}) } } //~ ERROR: unnecessary `unsafe` block
23 unsafe fn bad5() { unsafe { unsf() } } //~ ERROR: unnecessary `unsafe` block
25 unsafe { // don't put the warning here
26 unsafe { //~ ERROR: unnecessary `unsafe` block
32 unsafe { //~ ERROR: unnecessary `unsafe` block
33 unsafe { //~ ERROR: unnecessary `unsafe` block
39 unsafe fn good0() { unsf() }
40 fn good1() { unsafe { unsf() } }
42 /* bug uncovered when implementing warning about unused unsafe blocks. Be
43 sure that when purity is inherited that the source of the unsafe-ness
44 is tracked correctly */
46 unsafe fn what() -> Vec<String> { panic!() }
54 unsafe fn good3() { foo::bar() }
55 fn good4() { unsafe { foo::bar() } }
57 #[allow(unused_unsafe)] fn allowed() { unsafe {} }