commit-slab: declare functions "static inline"

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>
This commit is contained in:
Thomas Rast 2013-11-25 21:04:08 +01:00 коммит произвёл Junio C Hamano
Родитель dcbbc8fa2e
Коммит e9e03a7799
1 изменённых файлов: 20 добавлений и 6 удалений

Просмотреть файл

@ -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 */