On Tue, 2011-08-09 at 16:50 -0700, Richard Henderson wrote:
> >
> > I think I like using a union to ensure the alignment of checksum better.
> > In dwarf2out.c we are always using one md5_ctx structure and one
> > checksum buffer but in fold-const.c there are routines where we use one
> > md5_ctx structure with 4 (fold_build2_stat_loc) or 6
> > (fold_build3_stat_loc) different checksum buffers.
>
> I'm not keen on this.
>
> Yes, it does happen to work, but only accidentally. The CTX
> object and the CHECKSUM object have overlapping lifetimes
> within md5_read_ctx.
>
>
> r~
I am not proposing we put the CTX object and the CHECKSUM object into
one union. I am proposing we leave the CTX object alone and put the
CHECKSUM object in a union with a dummy variable of type md5_uint32 in
order to ensure that the CHECKSUM object has the correct alignment.
So the usage would be:
union md5_resbuf
{
md5_uint32 dummy; /* Unused variable used to ensure
alignment */
unsigned char resbuf[16]; /* The buffer we are using in
md5_finish_ctx */
};
struct md5_ctx ctx; /* Same as before */
union md5_resbuf checksum; /* Instead of unsigned char
checksum[16]; */
md5_finish_ctx (&ctx, checksum.resbuf); /* instead of md5_finish_ctx (&ctx,
checksum); */
Steve Ellcey
[email protected]