[Mesa-dev] [PATCH] st/mesa: init hash keys with memset(), not designated initializers
Brian Paul
brianp at vmware.com
Tue Mar 12 01:36:08 UTC 2019
On 03/11/2019 04:47 PM, Eric Anholt wrote:
> Brian Paul <brianp at vmware.com> writes:
>
>> Since the compiler may not zero-out padding in the object.
>> Add a couple comments about this to prevent misunderstandings in
>> the future.
>>
>> Fixes: 67d96816ff5 ("st/mesa: move, clean-up shader variant key decls/inits")
>> ---
>> src/mesa/state_tracker/st_atom_shader.c | 9 +++++++--
>> src/mesa/state_tracker/st_program.c | 13 ++++++++++---
>> 2 files changed, 17 insertions(+), 5 deletions(-)
>>
>> diff --git a/src/mesa/state_tracker/st_atom_shader.c b/src/mesa/state_tracker/st_atom_shader.c
>> index ac7a1a5..a4475e2 100644
>> --- a/src/mesa/state_tracker/st_atom_shader.c
>> +++ b/src/mesa/state_tracker/st_atom_shader.c
>> @@ -112,7 +112,10 @@ st_update_fp( struct st_context *st )
>> !stfp->variants->key.bitmap) {
>> shader = stfp->variants->driver_shader;
>> } else {
>> - struct st_fp_variant_key key = {0};
>> + struct st_fp_variant_key key;
>> +
>> + /* use memset, not an initializer to be sure all memory is zeroed */
>> + memset(&key, 0, sizeof(key));
>
> Wait, what? We rely on this form of initialization all over, what's
> changed?
The question is do all compilers, when presented with
struct st_fp_variant_key key = {0};
initialize the entire object to zero, or just the individual fields
(skipping padding).
This matters for hash keys but shouldn't matter otherwise.
-Brian
More information about the mesa-dev
mailing list