Brian/Roland ping? On 12/07/2016 10:30 AM, Edward O'Callaghan wrote: > As per the C spec, it is illegal to alias pointers to different > types. This results in undefined behaviour after optimization > passes, resulting in very subtle bugs that happen only on a > full moon.. > > Use a memcpy() as a well defined coercion between the isomorphic > bit-field interpretations of memory. > > V.2: Use C99 compat STATIC_ASSERT() over C11 static_assert(). > > Signed-off-by: Edward O'Callaghan <funfunc...@folklore1984.net> > --- > src/gallium/drivers/svga/svgadump/svga_shader_dump.c | 10 +++++++++- > 1 file changed, 9 insertions(+), 1 deletion(-) > > diff --git a/src/gallium/drivers/svga/svgadump/svga_shader_dump.c > b/src/gallium/drivers/svga/svgadump/svga_shader_dump.c > index 4ee1bf2..46126a5 100644 > --- a/src/gallium/drivers/svga/svgadump/svga_shader_dump.c > +++ b/src/gallium/drivers/svga/svgadump/svga_shader_dump.c > @@ -30,6 +30,9 @@ > * @author Michal Krol <mic...@vmware.com> > */ > > +#include <assert.h> > +#include <string.h> > + > #include "svga_shader.h" > #include "svga_shader_dump.h" > #include "svga_shader_op.h" > @@ -413,6 +416,11 @@ dump_dstreg(struct sh_dstreg dstreg, > > static void dump_srcreg( struct sh_srcreg srcreg, struct sh_srcreg *indreg, > const struct dump_info *di ) > { > + struct sh_reg srcreg_sh = {0}; > + /* bit-fields carefully aligned, ensure they stay that way. */ > + STATIC_ASSERT(sizeof(struct sh_reg) == sizeof(struct sh_srcreg)); > + memcpy(&srcreg_sh, &srcreg, sizeof(srcreg_sh)); > + > switch (srcreg.modifier) { > case SVGA3DSRCMOD_NEG: > case SVGA3DSRCMOD_BIASNEG: > @@ -427,7 +435,7 @@ static void dump_srcreg( struct sh_srcreg srcreg, struct > sh_srcreg *indreg, cons > case SVGA3DSRCMOD_NOT: > _debug_printf( "!" ); > } > - dump_reg( *(struct sh_reg *) &srcreg, indreg, di ); > + dump_reg(srcreg_sh, indreg, di ); > switch (srcreg.modifier) { > case SVGA3DSRCMOD_NONE: > case SVGA3DSRCMOD_NEG: >
signature.asc
Description: OpenPGP digital signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev