Jason Ekstrand <ja...@jlekstrand.net> writes: > In C, if you partially initialize a structure, the rest of the struct gets > set to 0. C++, however, does not have this rule so GCC throws warnings > whenver NIR_SRC_INIT or NIR_DEST_INIT is used in C++.
I don't think that's right, in C++ initializers missing from an aggregate initializer list are also defined to be initialized (value-initialized to be more precise, what would set them to zero in this case just like in C). > Since nir.h contains a static inline that uses NIR_SRC_INIT, every C++ > file that includes nir.h complains about this. > I suspect the reason why this causes a warning may be that you're using compound literals? (which are a C99-specific feature and not part of C++) > This patch adds a small static inline function that makes a struct, > memsets it to 0, and returns it. NIR_SRC_INIT and NIR_DEST_INIT are then > wrappers around this function. In C++ you could just call the implicitly defined default constructor for nir_src or nir_dest, like 'nir_src()'. > --- > src/glsl/nir/nir.h | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/src/glsl/nir/nir.h b/src/glsl/nir/nir.h > index c666d93..3634f30 100644 > --- a/src/glsl/nir/nir.h > +++ b/src/glsl/nir/nir.h > @@ -511,7 +511,18 @@ typedef struct nir_src { > bool is_ssa; > } nir_src; > > +#ifdef __cplusplus > +static inline nir_src > +__nir_src_init(void) > +{ > + nir_src src; > + memset(&src, 0, sizeof(src)); > + return src; > +} > +#define NIR_SRC_INIT (__nir_src_init()) > +#else > #define NIR_SRC_INIT (nir_src) { { NULL } } > +#endif > > #define nir_foreach_use(reg_or_ssa_def, src) \ > list_for_each_entry(nir_src, src, &(reg_or_ssa_def)->uses, use_link) > @@ -534,7 +545,18 @@ typedef struct { > bool is_ssa; > } nir_dest; > > +#ifdef __cplusplus > +static inline nir_dest > +__nir_dest_init(void) > +{ > + nir_dest dest; > + memset(&dest, 0, sizeof(dest)); > + return dest; > +} > +#define NIR_DEST_INIT (__nir_dest_init()) > +#else > #define NIR_DEST_INIT (nir_dest) { { { NULL } } } > +#endif > > #define nir_foreach_def(reg, dest) \ > list_for_each_entry(nir_dest, dest, &(reg)->defs, reg.def_link) > -- > 2.4.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev