[Mesa-dev] [PATCH 5/9] glsl: Fix memcpy size in ir_constant

Ian Romanick idr at freedesktop.org
Fri Feb 7 16:30:52 PST 2014


On 02/07/2014 04:44 AM, Juha-Pekka Heikkila wrote:
> ir_constant::ir_constant(const struct glsl_type,
> const ir_constant_data *) was copying too much memory.

The code looks correct as-is to me.  This copies one ir_constant_data
union to another... they're declared as the same type, and they have the
same size.  What is the actual error?  Is there some code somewhere
that's casting a different type to ir_constant_data* to pass into this
constructor?

> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
> ---
>  src/glsl/ir.cpp | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
> index 1a36bd6..abc5568 100644
> --- a/src/glsl/ir.cpp
> +++ b/src/glsl/ir.cpp
> @@ -622,7 +622,7 @@ ir_constant::ir_constant(const struct glsl_type *type,
>  
>     this->ir_type = ir_type_constant;
>     this->type = type;
> -   memcpy(& this->value, data, sizeof(this->value));
> +   memcpy(& this->value, data, type->std140_size(false));
>  }
>  
>  ir_constant::ir_constant(float f, unsigned vector_elements)
> 



More information about the mesa-dev mailing list