Hi Emmanuel,

On Mon, 7 Aug 2017, Emmanuel Deloget wrote:

> And yes, its seems that the get_le32() macro in xz_private.h is a bit
> illegal with respect to strict aliasing, as it casts a uint8_t * into a
> const uint32_t *.

It would seem so.

Until you realize that it is used only on s->temp.buf (or `s->temp.buf + 4
* <number>`), and that the `buf` field was carefully placed after two
fields of type `size_t` (i.e. naturally aligned *at least* to a 32-bit
boundary).

If you are worried about that magic, you can even mark the `buf` field
using ALIGN4. But that *still* does not fix GCC's compiler warning. What
fixes it is my workaround of defining a static ALWAYS_INLINE function.

Denys' fix works around the problem, alright, but it also makes the code
slower. And it is *not* necessary to make the code slower.

Ciao,
Johannes
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to