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 | fn ok(map: &mut Map) -> &String {
   |            - let's call the lifetime of this reference `'1`
LL |     loop {
LL |         match map.get() {
   |               --- immutable borrow occurs here
LL |             Some(v) => {
LL |                 return v;
   |                        - returning this value requires that `*map` is borrowed for `'1`
...
LL |                 map.set(String::new()); // Ideally, this would not error.
   |                 ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here

error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Mir)
  --> $DIR/get_default.rs:45:17
   |
LL | fn err(map: &mut Map) -> &String {
   |             - let's call the lifetime of this reference `'1`
LL |     loop {
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 |                 return v;
   |                        - returning this value requires that `*map` is borrowed for `'1`

error[E0502]: cannot borrow `*map` as mutable because it is also borrowed as immutable (Mir)
  --> $DIR/get_default.rs:51:17
   |
LL | fn err(map: &mut Map) -> &String {
   |             - let's call the lifetime of this reference `'1`
LL |     loop {
LL |         match map.get() {
   |               --- immutable borrow occurs here
...
LL |                 return v;
   |                        - returning this value requires that `*map` is borrowed for `'1`
...
LL |                 map.set(String::new()); // Ideally, just AST would error here
   |                 ^^^^^^^^^^^^^^^^^^^^^^ mutable borrow occurs here

error: aborting due to 6 previous errors

For more information about this error, try `rustc --explain E0502`.
