[Spice-devel] [spice-common PATCH v1 9/12] clang-noise
Victor Toso
victortoso at redhat.com
Fri Aug 14 08:13:45 PDT 2015
Hey,
Thanks for taking time to review this.
On Thu, Aug 06, 2015 at 09:46:29AM -0400, Frediano Ziglio wrote:
> >
> > ---
> > common/canvas_base.c | 12 ++++++------
> > common/sw_canvas.c | 6 +++---
> > 2 files changed, 9 insertions(+), 9 deletions(-)
> >
> > diff --git a/common/canvas_base.c b/common/canvas_base.c
> > index 6f48340..4351334 100644
> > --- a/common/canvas_base.c
> > +++ b/common/canvas_base.c
> > @@ -396,7 +396,7 @@ static pixman_image_t *canvas_get_quic(CanvasBase
> > *canvas, SpiceImage *image,
> > quic_data->current_chunk = 0;
> >
> > if (quic_decode_begin(quic_data->quic,
> > - (uint32_t *)image->u.quic.data->chunk[0].data,
> > + (uint32_t *)(void
> > *)image->u.quic.data->chunk[0].data,
> > image->u.quic.data->chunk[0].len >> 2,
> > &type, &width, &height) == QUIC_ERROR) {
> > spice_warning("quic decode begin failed");
>
> This is fine
>
> > @@ -583,7 +583,7 @@ static pixman_image_t *canvas_get_lz4(CanvasBase *canvas,
> > SpiceImage *image)
> >
> > do {
> > // Read next compressed block
> > - enc_size = ntohl(*((uint32_t *)data));
> > + enc_size = ntohl(*((uint32_t *)(void *)data));
> > data += 4;
> > dec_size = LZ4_decompress_safe_continue(stream, (const char *) data,
> > (char *) dest, enc_size,
> > available);
>
> Here data can be not aligned.
Not sure about this one, this data is also SpiceChunk->data so I'd
expect that the memory is aligned.
>
> > @@ -607,8 +607,8 @@ static pixman_image_t *canvas_get_lz4(CanvasBase *canvas,
> > SpiceImage *image)
> > }
> > for (row = height - 1; row > 0; --row) {
> > uint32_t *dest_aligned, *dest_misaligned;
> > - dest_aligned = (uint32_t *)(dest + stride_abs*row);
> > - dest_misaligned = (uint32_t*)(dest + stride_encoded*row);
> > + dest_aligned = (uint32_t *)(void *)(dest + stride_abs*row);
> > + dest_misaligned = (uint32_t*)(void *)(dest +
> > stride_encoded*row);
> > memmove(dest_aligned, dest_misaligned, stride_encoded);
> > }
> > }
>
> Here just declare dest_aligned and dest_misaligned as void * instead
>
Sure
> > @@ -1919,7 +1919,7 @@ static int quic_usr_more_space(QuicUsrContext *usr,
> > uint32_t **io_ptr, int rows_
> > }
> > quic_data->current_chunk++;
> >
> > - *io_ptr = (uint32_t
> > *)quic_data->chunks->chunk[quic_data->current_chunk].data;
> > + *io_ptr = (uint32_t *)(void
> > *)quic_data->chunks->chunk[quic_data->current_chunk].data;
> > return quic_data->chunks->chunk[quic_data->current_chunk].len >> 2;
> > }
> >
>
> fine
>
> > @@ -2066,7 +2066,7 @@ static void canvas_mask_pixman(CanvasBase *canvas,
> > /* round down X to even 32 pixels (i.e. uint32_t) */
> > extents.x1 = extents.x1 & ~(0x1f);
> >
> > - mask_data = (uint32_t *)((uint8_t *)mask_data + mask_stride * extents.y1
> > + extents.x1 / 32);
> > + mask_data = (uint32_t *)(void *)((uint8_t *)mask_data + mask_stride *
> > extents.y1 + extents.x1 / 32);
> > mask_x -= extents.x1;
> > mask_y -= extents.y1;
> > mask_width = extents.x2 - extents.x1;
>
> This can produce not aligned pointer.
>
> > diff --git a/common/sw_canvas.c b/common/sw_canvas.c
> > index 7d67ca5..bb353c1 100644
> > --- a/common/sw_canvas.c
> > +++ b/common/sw_canvas.c
> > @@ -357,7 +357,7 @@ static void clear_dest_alpha(pixman_image_t *dest,
> > }
> >
> > stride = pixman_image_get_stride(dest);
> > - data = (uint32_t *) (
> > + data = (uint32_t *)(void *) (
> > (uint8_t *)pixman_image_get_data(dest) + y * stride + 4 * x);
> >
> > if ((*data & 0xff000000U) == 0xff000000U) {
>
> Here is fine, the compiler cannot know that stride is a multiple of 4.
>
> > @@ -1012,7 +1012,7 @@ static void canvas_put_image(SpiceCanvas *spice_canvas,
> > src = pixman_image_create_bits(PIXMAN_x8r8g8b8,
> > src_width,
> > src_height,
> > - (uint32_t*)src_data,
> > + (uint32_t*)(void *)src_data,
> > src_stride);
> >
> >
>
> Should be fine but I would change function (canvas_put_image) pointer to uint32_t instead.
That would mean changing the SpiceCanvas->put_image and the respective
implementations on gl_canvas and gdi_canvas.
>
> > @@ -1276,7 +1276,7 @@ SpiceCanvas *canvas_create_for_data(int width, int
> > height, uint32_t format,
> > pixman_image_t *image;
> >
> > image = pixman_image_create_bits(spice_surface_format_to_pixman
> > (format),
> > - width, height, (uint32_t *)data,
> > stride);
> > + width, height, (uint32_t *)(void
> > *)data, stride);
> >
> > return canvas_create_common(image, format
> > , bits_cache
>
> Not sure if this is aligned.
>
> > --
> > 2.4.3
> >
>
> You could define some define which do the conversion, hide the warning but make explicit the unaligned issue, something like
>
> #define UNALIGNED_CAST(type, ptr) ((type)(void*)(ptr))
>
> so in the future if we need to support such architectures we can just use a grep.
>
> Frediano
Sure, I'm using two defines, SPICE_ALIGNED_CAST for false-positive and
SPICE_UNALIGNED_CAST for the ones that could lead to problems.
toso
More information about the Spice-devel
mailing list