]> git.lizzy.rs Git - rust.git/blob - tests/ui/unboxed-closures/unboxed-closures-unsafe-extern-fn.rs
Auto merge of #107054 - petrochenkov:effvisdoc3, r=GuillaumeGomez
[rust.git] / tests / ui / unboxed-closures / unboxed-closures-unsafe-extern-fn.rs
1 // Tests that unsafe extern fn pointers do not implement any Fn traits.
2
3 use std::ops::{Fn, FnMut, FnOnce};
4
5 unsafe fn square(x: &isize) -> isize {
6     (*x) * (*x)
7 }
8
9 fn call_it<F: Fn(&isize) -> isize>(_: &F, _: isize) -> isize {
10     0
11 }
12 fn call_it_mut<F: FnMut(&isize) -> isize>(_: &mut F, _: isize) -> isize {
13     0
14 }
15 fn call_it_once<F: FnOnce(&isize) -> isize>(_: F, _: isize) -> isize {
16     0
17 }
18
19 fn a() {
20     let x = call_it(&square, 22);
21     //~^ ERROR E0277
22 }
23
24 fn b() {
25     let y = call_it_mut(&mut square, 22);
26     //~^ ERROR E0277
27 }
28
29 fn c() {
30     let z = call_it_once(square, 22);
31     //~^ ERROR E0277
32 }
33
34 fn main() {}