[Date Prev][Date Next] [Chronological] [Thread] [Top]

Re: (ITS#4078) test001 fails on sparcv9

At 12:11 PM 10/12/2005, h.b.furuseth@usit.uio.no wrote:
>Howard Chu writes:
>> Could be. If it's an alignment issue, this diff ought to fix it:
>> +       Operation *op;
>> +       char opbuf[OPERATION_BUFFER_SIZE];
>...followed by op = (Operation *)opbuf;
>This is still buggy, the compiler is free to align opbuf any
>way it wants.  To ensure correct alignment, use something like:

I note that LBER_ALIGNED_BUFFER should be used here.  It works.

>        typedef union {
>                Operation *op;
>                char buf[OPERATION_BUFFER_SIZE];
>        } Operation_buffer;
>        Operation_buffer opbuf;
>        Operation *op = (Operation *) opbuf;
>'grep OPERATION_BUFFER_SIZE *.c */*.c' finds 15 such places to fix.
>(Actually I'm not entirely sure even that code is strictly correct under
>C99's anal aliasing rules, but if not I think it is an issue for a C99
>defect report rather than an OpenLDAP ITS.)