From 5b38b945ae8a75ee5dbe22f51b3d3c6aabcd6507 Mon Sep 17 00:00:00 2001 From: Franck LeCodeur Date: Wed, 22 Sep 2021 10:15:47 +0200 Subject: [PATCH] flaticon: Fix warnings due to type punning MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Original warnings: In function ‘bool BPrivate::Icon::read_float_24(BPrivate::Icon::LittleEndianBuffer&, float&)’: /s/src/libs/icon/flat_icon/FlatIconFormat.cpp:94:20: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] _value = (float&)value; ^~~~~ /s/src/libs/icon/flat_icon/FlatIconFormat.cpp:108:26: warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] uint32 value = (uint32&)_value; ^~~~~~ Change-Id: Ibe1facde0d37beefd5bcf542c89502bac2384034 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4499 Tested-by: Commit checker robot Reviewed-by: Adrien Destugues --- src/libs/icon/flat_icon/FlatIconFormat.cpp | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/libs/icon/flat_icon/FlatIconFormat.cpp b/src/libs/icon/flat_icon/FlatIconFormat.cpp index eb5d4679ce..e557d5dfda 100644 --- a/src/libs/icon/flat_icon/FlatIconFormat.cpp +++ b/src/libs/icon/flat_icon/FlatIconFormat.cpp @@ -89,9 +89,12 @@ read_float_24(LittleEndianBuffer& buffer, float& _value) if (shortValue == 0) _value = 0.0; else { - uint32 value = (sign << 31) | ((exponent + 127) << 23) | mantissa; - - _value = (float&)value; + union { + uint32 intValue; + float floatValue; + } i2f; + i2f.intValue = (sign << 31) | ((exponent + 127) << 23) | mantissa; + _value = i2f.floatValue; } return true; @@ -105,11 +108,15 @@ write_float_24(LittleEndianBuffer& buffer, float _value) // 6 bit exponent // 17 bit mantissa // TODO: fixme for non-IEEE 754 architectures - uint32 value = (uint32&)_value; + union { + float floatValue; + uint32 intValue; + } f2i; + f2i.floatValue = _value; - int sign = (value & 0x80000000) >> 31; - int exponent = ((value & 0x7f800000) >> 23) - 127; - int mantissa = value & 0x007fffff; + int sign = (f2i.intValue & 0x80000000) >> 31; + int exponent = ((f2i.intValue & 0x7f800000) >> 23) - 127; + int mantissa = f2i.intValue & 0x007fffff; if (exponent >= 32 || exponent < -32) { uint8 zero = 0;