]> git.lizzy.rs Git - rust.git/blob - src/test/ui/span/lint-unused-unsafe.rs
Rollup merge of #87922 - Manishearth:c-enum-target-spec, r=nagisa,eddyb
[rust.git] / src / test / ui / span / lint-unused-unsafe.rs
1 // Exercise the unused_unsafe attribute in some positive and negative cases
2
3 // revisions: mir thir
4 // [thir]compile-flags: -Zthir-unsafeck
5
6 #![allow(dead_code)]
7 #![deny(unused_unsafe)]
8
9
10 mod foo {
11     extern "C" {
12         pub fn bar();
13     }
14 }
15
16 fn callback<T, F>(_f: F) -> T where F: FnOnce() -> T { panic!() }
17 unsafe fn unsf() {}
18
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
24 fn bad6() {
25     unsafe {                             // don't put the warning here
26         unsafe {                         //~ ERROR: unnecessary `unsafe` block
27             unsf()
28         }
29     }
30 }
31 unsafe fn bad7() {
32     unsafe {                             //~ ERROR: unnecessary `unsafe` block
33         unsafe {                         //~ ERROR: unnecessary `unsafe` block
34             unsf()
35         }
36     }
37 }
38
39 unsafe fn good0() { unsf() }
40 fn good1() { unsafe { unsf() } }
41 fn good2() {
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 */
45     unsafe {
46         unsafe fn what() -> Vec<String> { panic!() }
47
48         callback(|| {
49             what();
50         });
51     }
52 }
53
54 unsafe fn good3() { foo::bar() }
55 fn good4() { unsafe { foo::bar() } }
56
57 #[allow(unused_unsafe)] fn allowed() { unsafe {} }
58
59 fn main() {}