[Date Prev][Date Next]
[Chronological]
[Thread]
[Top]
Re: (ITS#4078) test001 fails on sparcv9
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:
slap.h:
typedef union {
Operation *op;
char buf[OPERATION_BUFFER_SIZE];
} Operation_buffer;
*.c:
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.)
--
Hallvard