Skip to content

Commit

Permalink
WIPvariance
Browse files Browse the repository at this point in the history
  • Loading branch information
douglas-raillard-arm committed Nov 14, 2023
1 parent 6bb386c commit 77c09f6
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions tools/analysis/traceevent/src/buffer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -131,13 +131,15 @@ impl<'i, 'h, 'edm, InitDescF, T> EventVisitor<'i, 'h, 'edm, InitDescF, T> {
desc_map: &'edm mut EventDescMap<'h, T, InitDescF>,
) -> Self {

let desc_map: &'edm mut EventDescMap<'h, T, InitDescF> = desc_map;
// SAFETY: Erase the lifetime 'h and replace by 'static so that we stay covariant in 'h. We
// won't be using the desc_map reference past 'h since:
// * 'h outlives 'edm
// * we don't leak self.desc_map anywhere without attaching the 'edm lifetime to what was
// leaked
let desc_map: &'edm mut EventDescMap<'static, T, InitDescF> = unsafe {core::mem::transmute(desc_map)};
let desc_map: &'edm mut EventDescMap<'static, T, InitDescF> = {
let desc_map: &'edm mut EventDescMap<'h, T, InitDescF> = desc_map;
unsafe { core::mem::transmute(desc_map) }
};

EventVisitor {
data,
Expand Down Expand Up @@ -274,8 +276,12 @@ where
// borrow it mutably more than once. This makes it safe to turn it back to an &'edm
// mut.
let desc_map: *mut *mut EventDescMap<'static, T, InitDescF> = self.desc_map.get();
let desc_map: &'edm mut EventDescMap<'static, T, InitDescF> = unsafe { &mut **desc_map };
let desc_map: &'edm mut EventDescMap<'h, T, InitDescF> = unsafe{core::mem::transmute(desc_map)};
let desc_map: &'edm mut EventDescMap<'static, T, InitDescF> = unsafe {
&mut **desc_map
};
let desc_map: &'edm mut EventDescMap<'h, T, InitDescF> = unsafe {
core::mem::transmute(desc_map)
};
desc_map
}

Expand Down

0 comments on commit 77c09f6

Please sign in to comment.