error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Ast) --> $DIR/get_default.rs:33:17 | LL | match map.get() { | --- immutable borrow occurs here ... LL | map.set(String::new()); // Ideally, this would not error. | ^^^ mutable borrow occurs here ... LL | } | - immutable borrow ends here error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Ast) --> $DIR/get_default.rs:45:17 | LL | match map.get() { | --- immutable borrow occurs here LL | Some(v) => { LL | map.set(String::new()); // Both AST and MIR error here | ^^^ mutable borrow occurs here ... LL | } | - immutable borrow ends here error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Ast) --> $DIR/get_default.rs:51:17 | LL | match map.get() { | --- immutable borrow occurs here ... LL | map.set(String::new()); // Ideally, just AST would error here | ^^^ mutable borrow occurs here ... LL | } | - immutable borrow ends here error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Mir) --> $DIR/get_default.rs:33:17 | LL | match map.get() { | --- immutable borrow occurs here ... LL | map.set(String::new()); // Ideally, this would not error. | ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here | note: borrowed value must be valid for the anonymous lifetime #1 defined on the function body at 26:1... --> $DIR/get_default.rs:26:1 | LL | / fn ok(map: &mut Map) -> &String { LL | | loop { LL | | match map.get() { LL | | Some(v) => { ... | LL | | } LL | | } | |_^ error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Mir) --> $DIR/get_default.rs:45:17 | LL | match map.get() { | --- immutable borrow occurs here LL | Some(v) => { LL | map.set(String::new()); // Both AST and MIR error here | ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here | note: borrowed value must be valid for the anonymous lifetime #1 defined on the function body at 41:1... --> $DIR/get_default.rs:41:1 | LL | / fn err(map: &mut Map) -> &String { LL | | loop { LL | | match map.get() { LL | | Some(v) => { ... | LL | | } LL | | } | |_^ error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Mir) --> $DIR/get_default.rs:51:17 | LL | match map.get() { | --- immutable borrow occurs here ... LL | map.set(String::new()); // Ideally, just AST would error here | ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here | note: borrowed value must be valid for the anonymous lifetime #1 defined on the function body at 41:1... --> $DIR/get_default.rs:41:1 | LL | / fn err(map: &mut Map) -> &String { LL | | loop { LL | | match map.get() { LL | | Some(v) => { ... | LL | | } LL | | } | |_^ error: aborting due to 6 previous errors For more information about this error, try `rustc --explain E0502`.