From 5d6c5132c130ac1250a17048249815ef1f5939ac Mon Sep 17 00:00:00 2001 From: Anthony Ramine Date: Sat, 4 Apr 2020 20:29:25 +0200 Subject: [PATCH] Don't use transmute to create PaintOrder values I checked that rustc optimises the code just as well as with the transmute. https://rust.godbolt.org/z/w6UJN4 --- components/style/values/specified/svg.rs | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/components/style/values/specified/svg.rs b/components/style/values/specified/svg.rs index 6ae1eac2d4a..e603ddfda07 100644 --- a/components/style/values/specified/svg.rs +++ b/components/style/values/specified/svg.rs @@ -146,8 +146,13 @@ impl SVGPaintOrder { /// Get variant of `paint-order` pub fn order_at(&self, pos: u8) -> PaintOrder { - // Safe because PaintOrder covers all possible patterns. - unsafe { std::mem::transmute((self.0 >> pos * PAINT_ORDER_SHIFT) & PAINT_ORDER_MASK) } + match (self.0 >> pos * PAINT_ORDER_SHIFT) & PAINT_ORDER_MASK { + 0 => PaintOrder::Normal, + 1 => PaintOrder::Fill, + 2 => PaintOrder::Stroke, + 3 => PaintOrder::Markers, + _ => unreachable!("this cannot happen"), + } } }