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++. Since nir.h contains a static inline that uses NIR_SRC_INIT, every C++ file that includes nir.h complains about this.
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. --- 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