commit-slab: declare functions "static inline"
authorThomas Rast <tr@thomasrast.ch>
Mon, 25 Nov 2013 20:04:08 +0000 (21:04 +0100)
committerJunio C Hamano <gitster@pobox.com>
Wed, 27 Nov 2013 18:44:15 +0000 (10:44 -0800)
This shuts up compiler warnings about unused functions. No such
warnings are currently triggered, but if someone were to actually
use init_NAME_with_stride() as documented, they would get a warning
about init_NAME() being unused.

While there, write a comment about why the last real declaration of
the variable is without a terminating semicolon, while another
forward declarations have one.

Signed-off-by: Thomas Rast <tr@thomasrast.ch>
Helped-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
commit-slab.h
index acfef966c38c86c805f913faaed3aaf955672c9d..d068e2d5316c93cd5120d56cfd146a34b9fe2913 100644 (file)
@@ -40,6 +40,8 @@
 #define COMMIT_SLAB_SIZE (512*1024-32)
 #endif
 
+#define MAYBE_UNUSED __attribute__((__unused__))
+
 #define define_commit_slab(slabname, elemtype)                                 \
                                                                        \
 struct slabname {                                                      \
@@ -50,8 +52,8 @@ struct slabname {                                                     \
 };                                                                     \
 static int stat_ ##slabname## realloc;                                 \
                                                                        \
-static void init_ ##slabname## _with_stride(struct slabname *s,                \
-                                           unsigned stride)            \
+static MAYBE_UNUSED void init_ ##slabname## _with_stride(struct slabname *s, \
+                                                  unsigned stride)     \
 {                                                                      \
        unsigned int elem_size;                                         \
        if (!stride)                                                    \
@@ -63,12 +65,12 @@ static void init_ ##slabname## _with_stride(struct slabname *s,             \
        s->slab = NULL;                                                 \
 }                                                                      \
                                                                        \
-static void init_ ##slabname(struct slabname *s)                       \
+static MAYBE_UNUSED void init_ ##slabname(struct slabname *s)          \
 {                                                                      \
        init_ ##slabname## _with_stride(s, 1);                          \
 }                                                                      \
                                                                        \
-static void clear_ ##slabname(struct slabname *s)                      \
+static MAYBE_UNUSED void clear_ ##slabname(struct slabname *s)         \
 {                                                                      \
        int i;                                                          \
        for (i = 0; i < s->slab_count; i++)                             \
@@ -78,8 +80,8 @@ static void clear_ ##slabname(struct slabname *s)                     \
        s->slab = NULL;                                                 \
 }                                                                      \
                                                                        \
-static elemtype *slabname## _at(struct slabname *s,                    \
-                               const struct commit *c)                 \
+static MAYBE_UNUSED elemtype *slabname## _at(struct slabname *s,       \
+                                      const struct commit *c)          \
 {                                                                      \
        int nth_slab, nth_slot;                                         \
                                                                        \
@@ -103,4 +105,16 @@ static elemtype *slabname## _at(struct slabname *s,                        \
                                                                        \
 static int stat_ ##slabname## realloc
 
+/*
+ * Note that this seemingly redundant second declaration is required
+ * to allow a terminating semicolon, which makes instantiations look
+ * like function declarations.  I.e., the expansion of
+ *
+ *    define_commit_slab(indegree, int);
+ *
+ * ends in 'static int stat_indegreerealloc;'.  This would otherwise
+ * be a syntax error according (at least) to ISO C.  It's hard to
+ * catch because GCC silently parses it by default.
+ */
+
 #endif /* COMMIT_SLAB_H */