E0502 - Error codes index
Description: Book listing all Rust error codes

## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# Error code E0502

A variable already borrowed with a certain mutability (either mutable or immutable) was borrowed again with a different mutability.

Erroneous code example:

    #![allow(unused)]
    fn main() {
    fn bar(x: &mut i32) {}
    fn foo(a: &mut i32) {
        let y = &a; // a is borrowed as immutable.
        bar(a); // error: cannot borrow `*a` as mutable because `a` is also borrowed
                //        as immutable
        println!("{}", y);
    }
    }

To fix this error, ensure that you don’t have any other references to the variable before trying to access it with a different mutability:

    #![allow(unused)]
    fn main() {
    fn bar(x: &mut i32) {}
    fn foo(a: &mut i32) {
        bar(a);
        let y = &a; // ok!
        println!("{}", y);
    }
    }

For more information on Rust’s ownership system, take a look at the References & Borrowing section of the Book.