[Mesa-dev] Can we use anonymous unions?
Ian Romanick
idr at freedesktop.org
Tue Aug 18 17:36:39 PDT 2015
On 08/18/2015 10:08 AM, Connor Abbott wrote:
> On Tue, Aug 18, 2015 at 9:56 AM, Kenneth Graunke <kenneth at whitecape.org> wrote:
>> Hey,
>>
>> I was thinking about using an anonymous union. Specifically, something
>> like:
>>
>> struct shader {
>> ...
>> union {
>> struct geometry_shader_info gs;
>> struct tess_eval_shader_info tes;
>> ...
>> };
>> };
>>
>> Are those acceptable in Mesa? I don't think we've traditionally used
>> them, but I'm not sure why. Apparently they're part of C11, though not
>> part of C99. However, GCC allows them, presumably Clang, and it looks
>> like MSVC 2005 supports them in C:
>>
>> https://msdn.microsoft.com/en-us/library/y9zewe0d%28v=vs.80%29.aspx
>>
>> We might be able to use these to avoid some of our fun
>> thing->base.Base.base.program.Base.base shenanigans...
>>
>> --Ken
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
>
> Well, we already use anonymous unions in various places in NIR (for
> example, the definition of nir_dest and nir_src), so they should be ok
> for core Mesa. IIRC there was a problem with combining anonymous
> unions and C99-style initializers, but it doesn't sound like you'll be
> too worried about that.
Hm... is that why I get thousands of uninitialized field warnings? Or
are NIR_SRC_INIT and NIR_DEST_INIT just missing some things?
../../../../../src/glsl/nir/nir.h: In function 'nir_src
nir_src_for_ssa(nir_ssa_def*)':
../../../../../src/glsl/nir/nir.h:552:41: warning: missing initializer
for member 'nir_src::use_link' [-Wmissing-field-initializers]
nir_src src = NIR_SRC_INIT;
^
../../../../../src/glsl/nir/nir.h:552:41: warning: missing initializer
for member 'nir_src::<anonymous>' [-Wmissing-field-initializers]
../../../../../src/glsl/nir/nir.h:552:41: warning: missing initializer
for member 'nir_src::is_ssa' [-Wmissing-field-initializers]
../../../../../src/glsl/nir/nir.h: In function 'nir_src
nir_src_for_reg(nir_register*)':
../../../../../src/glsl/nir/nir.h:563:41: warning: missing initializer
for member 'nir_src::use_link' [-Wmissing-field-initializers]
nir_src src = NIR_SRC_INIT;
^
../../../../../src/glsl/nir/nir.h:563:41: warning: missing initializer
for member 'nir_src::<anonymous>' [-Wmissing-field-initializers]
../../../../../src/glsl/nir/nir.h:563:41: warning: missing initializer
for member 'nir_src::is_ssa' [-Wmissing-field-initializers]
../../../../../src/glsl/nir/nir.h: In function 'nir_dest
nir_dest_for_reg(nir_register*)':
../../../../../src/glsl/nir/nir.h:576:48: warning: missing initializer
for member 'nir_reg_dest::def_link' [-Wmissing-field-initializers]
nir_dest dest = NIR_DEST_INIT;
^
../../../../../src/glsl/nir/nir.h:576:48: warning: missing initializer
for member 'nir_reg_dest::reg' [-Wmissing-field-initializers]
../../../../../src/glsl/nir/nir.h:576:48: warning: missing initializer
for member 'nir_reg_dest::indirect' [-Wmissing-field-initializers]
../../../../../src/glsl/nir/nir.h:576:48: warning: missing initializer
for member 'nir_reg_dest::base_offset' [-Wmissing-field-initializers]
../../../../../src/glsl/nir/nir.h:576:48: warning: missing initializer
for member 'nir_dest::is_ssa' [-Wmissing-field-initializers]
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
More information about the mesa-dev
mailing list