diff --git a/tools/analysis/traceevent/src/buffer.rs b/tools/analysis/traceevent/src/buffer.rs index d5a7838b86..80d6fd7b27 100644 --- a/tools/analysis/traceevent/src/buffer.rs +++ b/tools/analysis/traceevent/src/buffer.rs @@ -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, @@ -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 }