]>
git.proxmox.com Git - rustc.git/blob - src/test/compile-fail/borrowck/borrowck-call-is-borrow-issue-12224.rs
1 // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
11 // Ensure that invoking a closure counts as a unique immutable borrow
13 type Fn
<'a
> = Box
<FnMut() + 'a
>;
19 // FIXME (#22405): Replace `Box::new` with `box` here when/if possible.
20 fn call
<F
>(mut f
: F
) where F
: FnMut(Fn
) {
22 //~^ ERROR: cannot borrow `f` as mutable more than once
33 fn test2
<F
>(f
: &F
) where F
: FnMut() {
34 (*f
)(); //~ ERROR: cannot borrow immutable borrowed content `*f` as mutable
37 fn test3
<F
>(f
: &mut F
) where F
: FnMut() {
42 f
.f
.call_mut(()) //~ ERROR: cannot borrow immutable `Box` content `*f.f` as mutable
45 fn test5(f
: &mut Test
) {
57 fn foo
<F
>(_
: F
) where F
: FnMut(Box
<FnMut(isize)>, isize) {}
58 let mut f
= |g
: Box
<FnMut(isize)>, b
: isize| {}
;
59 // FIXME (#22405): Replace `Box::new` with `box` here when/if possible.
62 //~^ ERROR cannot move `f` into closure because it is borrowed
63 //~| ERROR cannot move out of captured outer variable in an `FnMut` closure