1
Fork 0
mirror of https://github.com/RGBCube/cstree synced 2025-07-27 17:17:45 +00:00

Fix Stacked Borrows violations (Miri) (#37)

Co-authored-by: Domenic Quirl <DomenicQuirl@protonmail.com>
This commit is contained in:
DQ 2022-07-07 19:38:14 +02:00 committed by GitHub
parent 2ffeb0e166
commit 21dcf99f04
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 12 deletions

View file

@ -21,7 +21,7 @@ fxhash = "0.2.1"
parking_lot = "0.11.2" parking_lot = "0.11.2"
# Arc # Arc
triomphe = "0.1.3" triomphe = "0.1.7"
sptr = "0.3.2" sptr = "0.3.2"
[dependencies.serde] [dependencies.serde]

View file

@ -170,15 +170,6 @@ impl<L: Language, D> SyntaxNode<L, D> {
unsafe { &*self.data } unsafe { &*self.data }
} }
/// # Safety:
/// Caller must ensure that the access to the underlying data is unique (no active _mutable or immutable_
/// references).
#[inline]
#[allow(clippy::mut_from_ref)]
unsafe fn data_mut(&self) -> &mut NodeData<L, D> {
&mut *self.data
}
#[inline] #[inline]
pub(super) fn clone_uncounted(&self) -> Self { pub(super) fn clone_uncounted(&self) -> Self {
Self { data: self.data } Self { data: self.data }
@ -346,8 +337,11 @@ impl<L: Language, D> SyntaxNode<L, D> {
Kind::Root(green, _resolver) => green.into(), Kind::Root(green, _resolver) => green.into(),
_ => unreachable!(), _ => unreachable!(),
}; };
// safety: we have just created `ret` and have not shared it // safety: we have just created `ret` and have not shared it.
unsafe { ret.data_mut() }.green = green; // Also, we use `addr_of_mut` here in order to not have to go through a `&mut *ret.data`,
// which would invalidate the reading provenance of `green`, since `green` is contained in
// the date once we have written it here.
unsafe { ptr::addr_of_mut!((*ret.data).green).write(green) };
ret ret
} }