3. Perform the actions that would also happen when an actual access happens
through this reference (for shared references a read access, for mutable
references a write access).
-4. Check if the new tag is `Shr(Some(t))` and the location is inside an `UnsafeCell`.
+4. Check if the new tag is `Shr(Some(t))` and the location is *not* inside an `UnsafeCell`.
- If both conditions apply, freeze the location with timestamp `t`. If it
is already frozen, do nothing.
- Otherwise, push a new item onto the stack: `Shr` if the tag is a `Shr(_)`,
Now the location cannot be frozen any more: If the fresh tag is `Uniq`, we
just unfroze; if the fresh tag is `Shr` and the location was already frozen,
then the redundancy check (step 3) would have kicked in.
-5. Check if the new tag is `Shr(Some(t))` and the location is inside an `UnsafeCell`.
- - If both conditions apply, freeze the location with timestamp `t`. If it
- is already frozen, do nothing.
+5. Check if the new tag is `Shr(Some(t))` and the location is *not* inside an `UnsafeCell`.
+ - If both conditions apply, freeze the location with timestamp `t`.
- Otherwise, push a new item onto the stack: `Shr` if the tag is a `Shr(_)`,
`Uniq(id)` if the tag is `Uniq(id)`.