Invalid compilation without -fno-strict-aliasing

From: Jean Tourrilhes (jt@bougret.hpl.hp.com)
Date: Tue Feb 25 2003 - 18:46:46 EST


        Hi,

        It looks like a compiler bug to me...
        Some users have complained that when the following code is
compiled without the -fno-strict-aliasing, the order of the write and
memcpy is inverted (which mean a bogus len is mem-copied into the
stream).
        Code (from linux/include/net/iw_handler.h) :
--------------------------------------------
static inline char *
iwe_stream_add_event(char * stream, /* Stream of events */
                     char * ends, /* End of stream */
                     struct iw_event *iwe, /* Payload */
                     int event_len) /* Real size of payload */
{
        /* Check if it's possible */
        if((stream + event_len) < ends) {
                iwe->len = event_len;
                memcpy(stream, (char *) iwe, event_len);
                stream += event_len;
        }
        return stream;
}
--------------------------------------------
        IMHO, the compiler should have enough context to know that the
reordering is dangerous. Any suggestion to make this simple code more
bullet proof is welcomed.

        Have fun...

        Jean
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Feb 28 2003 - 22:00:33 EST