[Mesa-dev] [PATCH] nir: Make C++ more happy with NIR_SRC_INIT and NIR_DEST_INIT

Jason Ekstrand jason at jlekstrand.net
Fri Jun 26 11:24:12 PDT 2015


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



More information about the mesa-dev mailing list