1 // Make sure validation can handle many overlapping shared borrows for different parts of a data structure
2 use std::cell::RefCell;
11 let t = &mut Test { a: 0, b: 0 };
24 fn test2(r: &mut RefCell<i32>) {
25 let x = &*r; // releasing write lock, first suspension recorded
26 let mut x_ref = x.borrow_mut();
27 let x_inner: &mut i32 = &mut *x_ref; // new inner write lock, with same lifetime as outer lock
28 let _x_inner_shr = &*x_inner; // releasing inner write lock, recording suspension
29 let _y = &*r; // second suspension for the outer write lock
30 let _x_inner_shr2 = &*x_inner; // 2nd suspension for inner write lock
35 test2(&mut RefCell::new(0));