[Mesa-dev] [PATCH 2/9] util: fix uninitialized table

Brian Paul brianp at vmware.com
Mon Apr 2 07:44:01 PDT 2012


On 04/01/2012 04:24 PM, nobled wrote:
> Most of the 256 values in the 'generic_to_slot' table were supposed to
> be initialized with the default value 0xff, but were left at zero
> (from CALLOC_STRUCT()) instead.
>
> Noticed by clang:
>
> u_linkage.h:60:31: warning: argument to 'sizeof' in 'memset' call is
> the same expression as the destination;
>        did you mean to provide an explicit length? [-Wsizeof-pointer-memaccess]
>     memset(table, 0xff, sizeof(table));
>            ~~~~~               ^~~~~
>
> Also fix a signed/unsigned comparison and a comment typo here.
>
> NOTE: This is a candidate for the 8.0 branch.
> ---
>   src/gallium/auxiliary/util/u_linkage.h   |    9 +++++----
>   src/gallium/drivers/nvfx/nvfx_fragprog.c |    3 ++-
>   2 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/src/gallium/auxiliary/util/u_linkage.h
> b/src/gallium/auxiliary/util/u_linkage.h
> index 43ec917..7b23123 100644
> --- a/src/gallium/auxiliary/util/u_linkage.h
> +++ b/src/gallium/auxiliary/util/u_linkage.h
> @@ -49,15 +49,16 @@ unsigned
> util_semantic_set_from_program_file(struct util_semantic_set *set,
> cons
>    *
>    * num_slots is the size of the layout array and hardware limit instead.
>    *
> - * efficient_slots == 0 or efficient_solts == num_slots are typical settings.
> + * efficient_slots == 0 or efficient_slots == num_slots are typical settings.
>    */
>   void util_semantic_layout_from_set(unsigned char *layout, const
> struct util_semantic_set *set, unsigned efficient_slots, unsigned
> num_slots);
>
>   static INLINE void
> -util_semantic_table_from_layout(unsigned char *table, unsigned char
> *layout, unsigned char first_slot_value, unsigned char num_slots)
> +util_semantic_table_from_layout(unsigned char *table, size_t
> table_size, unsigned char *layout,
> +                                unsigned char first_slot_value,
> unsigned char num_slots)
>   {
> -   int i;
> -   memset(table, 0xff, sizeof(table));
> +   unsigned char i;
> +   memset(table, 0xff, table_size);
>
>      for(i = 0; i<  num_slots; ++i)
>         table[layout[i]] = first_slot_value + i;
> diff --git a/src/gallium/drivers/nvfx/nvfx_fragprog.c
> b/src/gallium/drivers/nvfx/nvfx_fragprog.c
> index dbd7c77..0babcbb 100644
> --- a/src/gallium/drivers/nvfx/nvfx_fragprog.c
> +++ b/src/gallium/drivers/nvfx/nvfx_fragprog.c
> @@ -977,7 +977,8 @@ nvfx_fragprog_prepare(struct nvfx_context* nvfx,
> struct nvfx_fpc *fpc)
>   	if(fpc->fp->num_slots>  num_texcoords)
>   		return FALSE;
>   	util_semantic_layout_from_set(fpc->fp->slot_to_generic,&set, 0,
> num_texcoords);
> -	util_semantic_table_from_layout(fpc->generic_to_slot,
> fpc->fp->slot_to_generic, 0, num_texcoords);
> +	util_semantic_table_from_layout(fpc->generic_to_slot, sizeof
> fpc->generic_to_slot,
> +                                        fpc->fp->slot_to_generic, 0,
> num_texcoords);
>
>   	memset(fpc->fp->slot_to_fp_input, 0xff, sizeof(fpc->fp->slot_to_fp_input));
>

Reviewed-by: Brian Paul <brianp at vmware.com>



More information about the mesa-dev mailing list