From b2c97c0c66e97443e092ceaa09faedd866bed928 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Thu, 29 May 2014 17:14:49 +0200
Subject: [PATCH] Build: Reduce complaint about unused functions.

We don't care if inline functions defined in the header files aren't
used in all files that include them...

Reduces the number of build warnings to reasonable levels.
---
 src/bignum.h          | 64 +++++++++++++++++++++----------------------
 src/bitvector.h       | 28 +++++++++----------
 src/block_allocator.h |  6 ++--
 src/gc.h              | 12 ++++----
 src/multiset.h        |  2 +-
 src/pike_float.h      |  2 +-
 src/pike_memory.h     | 14 +++++-----
 src/program.h         |  4 +--
 src/rbtree.h          |  2 +-
 src/stack_allocator.h | 10 +++----
 src/stralloc.h        | 10 +++----
 src/svalue.h          | 28 +++++++++----------
 12 files changed, 91 insertions(+), 91 deletions(-)

diff --git a/src/bignum.h b/src/bignum.h
index 7087d1d512..48cac829ff 100644
--- a/src/bignum.h
+++ b/src/bignum.h
@@ -28,76 +28,76 @@
  *  The family of DO_*_OVERFLOW functions sets the result only if no overflow occured.
  */
 #define GENERIC_OVERFLOW_CHECKS(type)                                                   \
-static INLINE int DO_## type ## _NEG_OVERFLOW(type a, type * res) {                     \
+static INLINE int __attribute__((unused)) DO_## type ## _NEG_OVERFLOW(type a, type * res) { \
     if (a == MIN_ ## type) return 1;                                                    \
     *res = -a;                                                                          \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int type ## _NEG_OVERFLOW(type a) {                                       \
+static INLINE int __attribute__((unused)) type ## _NEG_OVERFLOW(type a) {                                       \
     return a == MIN_ ## type;                                                           \
 }                                                                                       \
-static INLINE int type ## _DIV_OVERFLOW(type a, type b) {                               \
+static INLINE int __attribute__((unused)) type ## _DIV_OVERFLOW(type a, type b) {                               \
     return a == MIN_ ## type && b == -1;                                                \
 }                                                                                       \
-static INLINE int DO_ ## type ## _DIV_OVERFLOW(type a, type b, type * res) {            \
+static INLINE int __attribute__((unused)) DO_ ## type ## _DIV_OVERFLOW(type a, type b, type * res) {            \
     if (a == MIN_ ## type && b == -1) return 1;                                         \
     *res = a/b;                                                                         \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int U ## type ## _MUL_OVERFLOW(unsigned type a, unsigned type b) {        \
+static INLINE int __attribute__((unused)) U ## type ## _MUL_OVERFLOW(unsigned type a, unsigned type b) {        \
     unsigned type res;                                                                  \
     return DO_U ## type ## _MUL_OVERFLOW(a, b, &res);                                   \
 }                                                                                       \
-static INLINE int U ## type ## _ADD_OVERFLOW(unsigned type a, unsigned type b) {        \
+static INLINE int __attribute__((unused)) U ## type ## _ADD_OVERFLOW(unsigned type a, unsigned type b) {        \
     unsigned type res;                                                                  \
     return DO_U ## type ## _ADD_OVERFLOW(a, b, &res);                                   \
 }                                                                                       \
-static INLINE int U ## type ## _SUB_OVERFLOW(unsigned type a, unsigned type b) {        \
+static INLINE int __attribute__((unused)) U ## type ## _SUB_OVERFLOW(unsigned type a, unsigned type b) {        \
     unsigned type res;                                                                  \
     return DO_U ## type ## _SUB_OVERFLOW(a, b, &res);                                   \
 }                                                                                       \
-static INLINE int type ## _MUL_OVERFLOW(type a, type b) {                               \
+static INLINE int __attribute__((unused)) type ## _MUL_OVERFLOW(type a, type b) {                               \
     type res;                                                                           \
     return DO_ ## type ## _MUL_OVERFLOW(a, b, &res);                                    \
 }                                                                                       \
-static INLINE int type ## _ADD_OVERFLOW(type a, type b) {                               \
+static INLINE int __attribute__((unused)) type ## _ADD_OVERFLOW(type a, type b) {                               \
     type res;                                                                           \
     return DO_ ## type ## _ADD_OVERFLOW(a, b, &res);                                    \
 }                                                                                       \
-static INLINE int type ## _SUB_OVERFLOW(type a, type b) {                               \
+static INLINE int __attribute__((unused)) type ## _SUB_OVERFLOW(type a, type b) {                               \
     type res;                                                                           \
     return DO_ ## type ## _SUB_OVERFLOW(a, b, &res);                                    \
 }                                                                                       \
-static INLINE int type ## _MOD_OVERFLOW(type a, type b) {                               \
+static INLINE int __attribute__((unused)) type ## _MOD_OVERFLOW(type a, type b) {                               \
     return type ## _DIV_OVERFLOW(a, b);                                                 \
 }                                                                                       \
-static INLINE int DO_ ## type ## _MOD_OVERFLOW(type a, type b, type * res) {            \
+static INLINE int __attribute__((unused)) DO_ ## type ## _MOD_OVERFLOW(type a, type b, type * res) {            \
     if (type ## _MOD_OVERFLOW(a, b)) {                                                  \
         return 1;                                                                       \
     }                                                                                   \
     *res = a % b;                                                                       \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int type ## _LSH_OVERFLOW(type a, type b) {                               \
+static INLINE int __attribute__((unused)) type ## _LSH_OVERFLOW(type a, type b) {                               \
     type size = (type)sizeof(type)*CHAR_BIT;                                            \
     return (b < 0 || b >= size - 1 || a < 0 || (b && (a >> (size - 1 - b))));           \
 }                                                                                       \
-static INLINE int type ## _RSH_OVERFLOW(type a, type b) {                               \
+static INLINE int __attribute__((unused)) type ## _RSH_OVERFLOW(type a, type b) {                               \
     return (b < 0 || a < 0 || b >= (type)sizeof(type)*CHAR_BIT);                        \
 }                                                                                       \
-static INLINE int DO_ ## type ## _LSH_OVERFLOW(type a, type b, type * res) {            \
+static INLINE int __attribute__((unused)) DO_ ## type ## _LSH_OVERFLOW(type a, type b, type * res) {            \
     if (type ## _LSH_OVERFLOW(a, b)) return 1;                                          \
     *res = a << b;                                                                      \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int DO_ ## type ## _RSH_OVERFLOW(type a, type b, type * res) {            \
+static INLINE int __attribute__((unused)) DO_ ## type ## _RSH_OVERFLOW(type a, type b, type * res) {            \
     if (type ## _RSH_OVERFLOW(a, b)) return 1;                                          \
     *res = a >> b;                                                                      \
     return 0;                                                                           \
 }
 
 #define _GEN_OF2(type, type2, utype2, size)                                             \
-static INLINE int DO_ ## type ## _ADD_OVERFLOW(type a, type b, type * res) {            \
+static INLINE int __attribute__((unused)) DO_ ## type ## _ADD_OVERFLOW(type a, type b, type * res) {            \
     type2 tmp;                                                                          \
     tmp = (type2)a + (type2)b;                                                          \
     if (tmp < MIN_ ## type || tmp > MAX_ ## type)                                       \
@@ -105,7 +105,7 @@ static INLINE int DO_ ## type ## _ADD_OVERFLOW(type a, type b, type * res) {
     *res = (type)tmp;                                                                   \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int DO_ ## type ## _SUB_OVERFLOW(type a, type b, type * res) {            \
+static INLINE int __attribute__((unused)) DO_ ## type ## _SUB_OVERFLOW(type a, type b, type * res) {            \
     type2 tmp;                                                                          \
     tmp = (type2)a - (type2)b;                                                          \
     if (tmp < MIN_ ## type || tmp > MAX_ ## type)                                       \
@@ -113,7 +113,7 @@ static INLINE int DO_ ## type ## _SUB_OVERFLOW(type a, type b, type * res) {
     *res = (type)tmp;                                                                   \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int DO_ ## type ## _MUL_OVERFLOW(type a, type b, type * res) {            \
+static INLINE int __attribute__((unused)) DO_ ## type ## _MUL_OVERFLOW(type a, type b, type * res) {            \
     type2 tmp;                                                                          \
     tmp = (type2)a * (type2)b;                                                          \
     if (tmp < MIN_ ## type || tmp > MAX_ ## type)                                       \
@@ -121,7 +121,7 @@ static INLINE int DO_ ## type ## _MUL_OVERFLOW(type a, type b, type * res) {
     *res = (type)tmp;                                                                   \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int DO_U ## type ## _ADD_OVERFLOW(unsigned type a, unsigned type b,       \
+static INLINE int __attribute__((unused)) DO_U ## type ## _ADD_OVERFLOW(unsigned type a, unsigned type b,       \
                                                 unsigned type * res) {                  \
     utype2 tmp;                                                                         \
     tmp = (utype2)a + (utype2)b;                                                        \
@@ -129,7 +129,7 @@ static INLINE int DO_U ## type ## _ADD_OVERFLOW(unsigned type a, unsigned type b
     *res = (unsigned type)tmp;                                                          \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int DO_U ## type ## _MUL_OVERFLOW(unsigned type a, unsigned type b,       \
+static INLINE int __attribute__((unused)) DO_U ## type ## _MUL_OVERFLOW(unsigned type a, unsigned type b,       \
                                                 unsigned type * res) {                  \
     utype2 tmp;                                                                         \
     tmp = (utype2)a * (utype2)b;                                                        \
@@ -139,21 +139,21 @@ static INLINE int DO_U ## type ## _MUL_OVERFLOW(unsigned type a, unsigned type b
 }
 
 #define _GEN_OF1(type, size)                                                            \
-static INLINE int DO_ ## type ## _ADD_OVERFLOW(type a, type b, type * res) {            \
+static INLINE int __attribute__((unused)) DO_ ## type ## _ADD_OVERFLOW(type a, type b, type * res) {            \
     if ((b > 0 && a > MAX_ ## type - b) ||                                              \
         (b < 0 && a < MIN_ ## type - b))                                                \
         return 1;                                                                       \
     *res = a + b;                                                                       \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int DO_ ## type ## _SUB_OVERFLOW(type a, type b, type * res) {            \
+static INLINE int __attribute__((unused)) DO_ ## type ## _SUB_OVERFLOW(type a, type b, type * res) {            \
     if ((b > 0 && a < MIN_ ## type + b) ||                                              \
         (b < 0 && a > MAX_ ## type + b))                                                \
         return 1;                                                                       \
     *res = a - b;                                                                       \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int DO_## type ## _MUL_OVERFLOW(type a, type b, type * res) {             \
+static INLINE int __attribute__((unused)) DO_## type ## _MUL_OVERFLOW(type a, type b, type * res) {             \
     if (a > 0) {                                                                        \
       if (b > 0) {                                                                      \
         if (a > (MAX_ ## type / b)) {                                                   \
@@ -178,14 +178,14 @@ static INLINE int DO_## type ## _MUL_OVERFLOW(type a, type b, type * res) {
     *res = a * b;                                                                       \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int DO_U ## type ## _ADD_OVERFLOW(unsigned type a, unsigned type b,       \
+static INLINE int __attribute__((unused)) DO_U ## type ## _ADD_OVERFLOW(unsigned type a, unsigned type b,       \
                                                 unsigned type * res) {                  \
     if (a > MAX_U ## type - b)                                                          \
         return 1;                                                                       \
     *res = a + b;                                                                       \
     return 0;                                                                           \
 }                                                                                       \
-static INLINE int DO_U ## type ## _MUL_OVERFLOW(unsigned type a, unsigned type b,       \
+static INLINE int __attribute__((unused)) DO_U ## type ## _MUL_OVERFLOW(unsigned type a, unsigned type b,       \
                                                 unsigned type * res) {                  \
     unsigned type tmp = 0;                                                              \
     unsigned type bits = size/2;                                                        \
@@ -206,7 +206,7 @@ static INLINE int DO_U ## type ## _MUL_OVERFLOW(unsigned type a, unsigned type b
 }                                                                                       \
 
 #define GEN_USUB_OF(type)                                                               \
-static INLINE int DO_U ## type ## _SUB_OVERFLOW(unsigned type a, unsigned type b,       \
+static INLINE int __attribute__((unused)) DO_U ## type ## _SUB_OVERFLOW(unsigned type a, unsigned type b,       \
                                                 unsigned type * res) {                  \
     if (b > a)                                                                          \
         return 1;                                                                       \
@@ -225,7 +225,7 @@ static INLINE int DO_U ## type ## _SUB_OVERFLOW(unsigned type a, unsigned type b
 
 #if PIKE_CLANG_BUILTIN(__builtin_uadd_overflow)
 #define DO_CLANG_OF(name, type, builtin)                \
-static INLINE int name(type a, type b, type * res) {    \
+static INLINE int __attribute__((unused)) name(type a, type b, type * res) {    \
     type tmp;                                           \
     if (builtin(a, b, &tmp)) return 1;                  \
     *res = tmp;                                         \
@@ -285,11 +285,11 @@ GEN_OF2(8, 32, unsigned INT32)
  *     of the correct type as temporaries, and then copying the result.
  */
 #define _GEN_UNOP(OP, type1, TYPE1, type2, name)			\
-  static INLINE int name ## _ ## OP ## _OVERFLOW(type2 a) {		\
+  static INLINE int __attribute__((unused)) name ## _ ## OP ## _OVERFLOW(type2 a) {		\
     type1 tmp;							        \
       return (DO_## TYPE1 ## _ ## OP ## _OVERFLOW(a, &tmp));		\
   }									\
-  static INLINE int DO_ ## name ## _ ## OP ## _OVERFLOW(type2 a,	\
+  static INLINE int __attribute__((unused)) DO_ ## name ## _ ## OP ## _OVERFLOW(type2 a,	\
 						        type2 *res) {	\
     type1 tmp;							        \
     if (DO_ ## TYPE1 ## _ ## OP ## _OVERFLOW(a, &tmp)) return 1;	\
@@ -297,11 +297,11 @@ GEN_OF2(8, 32, unsigned INT32)
     return 0;								\
   }
 #define _GEN_BINOP(OP, type1, TYPE1, type2, name)			\
-  static INLINE int name ## _ ## OP ## _OVERFLOW(type2 a, type2 b) {	\
+  static INLINE int __attribute__((unused)) name ## _ ## OP ## _OVERFLOW(type2 a, type2 b) {	\
     type1 tmp;							        \
     return (DO_ ## TYPE1 ## _ ## OP ## _OVERFLOW(a, b, &tmp));	        \
   }									\
-  static INLINE int DO_ ## name ## _ ## OP ## _OVERFLOW(type2 a,	\
+  static INLINE int __attribute__((unused)) DO_ ## name ## _ ## OP ## _OVERFLOW(type2 a,	\
                                                         type2 b,	\
                                                         type2 *res) {	\
     type1 tmp;	        						\
diff --git a/src/bitvector.h b/src/bitvector.h
index cbb6b4d763..a469379b61 100644
--- a/src/bitvector.h
+++ b/src/bitvector.h
@@ -20,7 +20,7 @@ static const char logTable[256] = {
 };
 #undef LT
 
-static INLINE unsigned INT32 clz32(unsigned INT32 i) {
+static INLINE unsigned INT32 __attribute__((unused)) clz32(unsigned INT32 i) {
 #ifdef HAS___BUILTIN_CLZ
     return i ? __builtin_clz(i) : 32;
 #elif defined(HAS__BIT_SCAN_REVERSE)
@@ -51,7 +51,7 @@ static INLINE unsigned INT32 clz32(unsigned INT32 i) {
 #define clz16(i) (clz32(i) - 16)
 #define clz8(i) (clz32(i) - 24)
 
-static INLINE unsigned INT32 ctz32(unsigned INT32 i) {
+static INLINE unsigned INT32 __attribute__((unused)) ctz32(unsigned INT32 i) {
 #ifdef HAS___BUILTIN_CTZ
     return i ? __builtin_ctz(i) : 32;
 #elif defined(HAS__BIT_SCAN_FORWARD)
@@ -77,7 +77,7 @@ static INLINE unsigned INT32 ctz32(unsigned INT32 i) {
 #define ctz8(i) (i ? ctz32(i) : 8)
 
 
-static INLINE unsigned INT32 bswap32(unsigned INT32 x) {
+static INLINE unsigned INT32 __attribute__((unused)) bswap32(unsigned INT32 x) {
 #ifdef HAS___BUILTIN_BSWAP32
     return __builtin_bswap32(x);
 #elif defined(HAS__BSWAP)
@@ -92,7 +92,7 @@ static INLINE unsigned INT32 bswap32(unsigned INT32 x) {
 
 #ifdef INT64
 
-static INLINE unsigned INT32 clz64(unsigned INT64 i) {
+static INLINE unsigned INT32 __attribute__((unused)) clz64(unsigned INT64 i) {
 # if SIZEOF_LONG == 8 && defined(HAS___BUILTIN_CLZL)
     return i ? __builtin_clzl(i) : 64;
 # elif SIZEOF_LONG_LONG == 8 && defined(HAS___BUILTIN_CLZLL)
@@ -127,7 +127,7 @@ static INLINE unsigned INT32 clz64(unsigned INT64 i) {
 # endif
 }
 
-static INLINE unsigned INT32 ctz64(unsigned INT64 i) {
+static INLINE unsigned INT32 __attribute__((unused)) ctz64(unsigned INT64 i) {
 # if SIZEOF_LONG == 8 && defined(HAS___BUILTIN_CTZL)
     return i ? __builtin_ctzl(i) : 64;
 # elif SIZEOF_LONG_LONG == 8 && defined(HAS___BUILTIN_CTZLL)
@@ -151,7 +151,7 @@ static INLINE unsigned INT32 ctz64(unsigned INT64 i) {
 # endif
 }
 
-static INLINE unsigned INT64 bswap64(unsigned INT64 x) {
+static INLINE unsigned INT64 __attribute__((unused)) bswap64(unsigned INT64 x) {
 #ifdef HAS___BUILTIN_BSWAP64
     return __builtin_bswap64(x);
 #elif defined(HAS__BSWAP64)
@@ -163,7 +163,7 @@ static INLINE unsigned INT64 bswap64(unsigned INT64 x) {
 #endif
 }
 
-static INLINE unsigned INT64 round_up64(unsigned INT64 v) {
+static INLINE unsigned INT64 __attribute__((unused)) round_up64(unsigned INT64 v) {
     unsigned INT64 i;
 
     if (!v) return 0;
@@ -171,21 +171,21 @@ static INLINE unsigned INT64 round_up64(unsigned INT64 v) {
     return (unsigned INT64)1 << (64 - clz64(v));
 }
 
-static INLINE unsigned INT32 ffs64(unsigned INT64 v) {
+static INLINE unsigned INT32 __attribute__((unused)) ffs64(unsigned INT64 v) {
     return ctz64(v) + 1;
 }
 
-static INLINE unsigned INT32 fls64(unsigned INT64 v) {
+static INLINE unsigned INT32 __attribute__((unused)) fls64(unsigned INT64 v) {
     return 64 - clz64(v);
 }
 
 /* returns -1 for 0 */
-static INLINE unsigned INT32 log2_u64(unsigned INT64 v) {
+static INLINE unsigned INT32 __attribute__((unused)) log2_u64(unsigned INT64 v) {
     return fls64(v) - 1;
 }
 #endif /* INT64 */
 
-static INLINE unsigned INT32 round_up32(unsigned INT32 v) {
+static INLINE unsigned INT32 __attribute__((unused)) round_up32(unsigned INT32 v) {
     unsigned INT32 i;
 
     if (!v) return 0;
@@ -193,16 +193,16 @@ static INLINE unsigned INT32 round_up32(unsigned INT32 v) {
     return 1U << (32 - clz32(v));
 }
 
-static INLINE unsigned INT32 ffs32(unsigned INT32 v) {
+static INLINE unsigned INT32 __attribute__((unused)) ffs32(unsigned INT32 v) {
     return ctz32(v) + 1;
 }
 
-static INLINE unsigned INT32 fls32(unsigned INT32 v) {
+static INLINE unsigned INT32 __attribute__((unused)) fls32(unsigned INT32 v) {
     return 32 - clz32(v);
 }
 
 /* returns -1 for 0 */
-static INLINE unsigned INT32 log2_u32(unsigned INT32 v) {
+static INLINE unsigned INT32 __attribute__((unused)) log2_u32(unsigned INT32 v) {
     return fls32(v) - 1;
 }
 
diff --git a/src/block_allocator.h b/src/block_allocator.h
index 4ffbc1cc4b..566830df41 100644
--- a/src/block_allocator.h
+++ b/src/block_allocator.h
@@ -52,13 +52,13 @@ typedef void (*ba_walk_callback)(struct ba_iterator *,void*);
 PMOD_EXPORT
 void ba_walk(struct block_allocator * a, ba_walk_callback cb, void * data);
 
-static INLINE int ba_it_step(struct ba_iterator * it) {
+static INLINE int __attribute__((unused)) ba_it_step(struct ba_iterator * it) {
     it->cur = (char*)it->cur + it->l.block_size;
 
     return (char*)it->cur < (char*)it->end;
 }
 
-static INLINE void * ba_it_val(struct ba_iterator * it) {
+static INLINE void __attribute__((unused)) * ba_it_val(struct ba_iterator * it) {
     return it->cur;
 }
 
@@ -83,7 +83,7 @@ PMOD_EXPORT void ba_free_all(struct block_allocator * a);
 PMOD_EXPORT size_t ba_count(const struct block_allocator * a);
 PMOD_EXPORT void ba_count_all(const struct block_allocator * a, size_t * num, size_t * size);
 
-static INLINE void ba_init(struct block_allocator * a, unsigned INT32 block_size, unsigned INT32 blocks) {
+static INLINE void __attribute__((unused)) ba_init(struct block_allocator * a, unsigned INT32 block_size, unsigned INT32 blocks) {
     ba_init_aligned(a, block_size, blocks, 0);
 }
 #endif
diff --git a/src/gc.h b/src/gc.h
index bba6963195..41fcc991df 100644
--- a/src/gc.h
+++ b/src/gc.h
@@ -426,7 +426,7 @@ PMOD_EXPORT extern const char *gc_found_place;
     gc_found_in_type = orig_gc_found_in_type;				\
   } while (0)
 
-static INLINE int debug_gc_check (void *a, const char *place)
+static INLINE int __attribute__((unused)) debug_gc_check (void *a, const char *place)
 {
   int res;
   const char *orig_gc_found_place = gc_found_place;
@@ -436,7 +436,7 @@ static INLINE int debug_gc_check (void *a, const char *place)
   return res;
 }
 
-static INLINE int debug_gc_check_weak (void *a, const char *place)
+static INLINE int __attribute__((unused)) debug_gc_check_weak (void *a, const char *place)
 {
   int res;
   const char *orig_gc_found_place = gc_found_place;
@@ -679,7 +679,7 @@ PMOD_EXPORT TYPE_T type_from_visit_fn (visit_thing_fn *fn);
 PMOD_EXPORT TYPE_FIELD real_visit_svalues (struct svalue *s, size_t num,
 					   int ref_type);
 
-static INLINE int real_visit_short_svalue (union anything *u, TYPE_T t,
+static INLINE int __attribute__((unused)) real_visit_short_svalue (union anything *u, TYPE_T t,
 					   int ref_type)
 {
   check_short_svalue (u, t);
@@ -691,14 +691,14 @@ static INLINE int real_visit_short_svalue (union anything *u, TYPE_T t,
   (real_visit_short_svalue (debug_malloc_pass ((U)->ptr), (T), (REF_TYPE)))
 
 #ifdef DEBUG_MALLOC
-static INLINE TYPE_FIELD dmalloc_visit_svalues (struct svalue *s, size_t num,
+static INLINE TYPE_FIELD __attribute__((unused)) dmalloc_visit_svalues (struct svalue *s, size_t num,
 						int ref_type, char *l)
 {
   return real_visit_svalues (dmalloc_check_svalues (s, num, l), num, ref_type);
 }
 #define visit_svalues(S, NUM, REF_TYPE)					\
   dmalloc_visit_svalues ((S), (NUM), (REF_TYPE), DMALLOC_LOCATION())
-static INLINE void dmalloc_visit_svalue (struct svalue *s,
+static INLINE void __attribute__((unused)) dmalloc_visit_svalue (struct svalue *s,
 					 int ref_type, char *l)
 {
   int t = TYPEOF(*s);
@@ -713,7 +713,7 @@ static INLINE void dmalloc_visit_svalue (struct svalue *s,
   dmalloc_visit_svalue ((S), (REF_TYPE), DMALLOC_LOCATION())
 #else
 #define visit_svalues real_visit_svalues
-static INLINE void visit_svalue (struct svalue *s, int ref_type)
+static INLINE void __attribute__((unused)) visit_svalue (struct svalue *s, int ref_type)
 {
   int t = TYPEOF(*s);
   check_svalue (s);
diff --git a/src/multiset.h b/src/multiset.h
index 10a73018e1..06c84270d0 100644
--- a/src/multiset.h
+++ b/src/multiset.h
@@ -149,7 +149,7 @@ PMOD_EXPORT void multiset_clear_node_refs (struct multiset *l);
 
 #ifdef PIKE_DEBUG
 /* To get good type checking. */
-static INLINE union msnode *msnode_check (union msnode *x)
+static INLINE union msnode __attribute__((unused)) *msnode_check (union msnode *x)
   {return x;}
 PMOD_EXPORT extern const char msg_no_multiset_flag_marker[];
 #else
diff --git a/src/pike_float.h b/src/pike_float.h
index 15dd120d22..2e16812928 100644
--- a/src/pike_float.h
+++ b/src/pike_float.h
@@ -33,7 +33,7 @@
 #define PIKE_ISNAN(X)	_isnan(X)
 #else /* !HAVE__ISNAN */
 /* Fallback function */
-static INLINE int pike_isnan(double x)
+static INLINE int __attribute__((unused)) pike_isnan(double x)
 {
   return ((x == 0.0) == (x < 0.0)) &&
     ((x == 0.0) == (x > 0.0));
diff --git a/src/pike_memory.h b/src/pike_memory.h
index 96c1796634..49f81d5993 100644
--- a/src/pike_memory.h
+++ b/src/pike_memory.h
@@ -152,39 +152,39 @@ struct mem_searcher
  * The purpose of this function is to avoid dead store elimination in cases when
  * sensitive data has to be cleared from memory.
  */
-static INLINE void * guaranteed_memset(void * p, int c, size_t n) {
+static INLINE void __attribute__((unused)) * guaranteed_memset(void * p, int c, size_t n) {
     volatile char * _p = (char *)p;
     while (n--) *_p++ = c;
     return (void *)p;
 }
 
-static INLINE unsigned INT64 get_unaligned64(const void * ptr) {
+static INLINE unsigned INT64 __attribute__((unused)) get_unaligned64(const void * ptr) {
     unsigned INT64 v;
     memcpy(&v, ptr, 8);
     return v;
 }
 
-static INLINE void set_unaligned64(void * ptr, unsigned INT64 v) {
+static INLINE void __attribute__((unused)) set_unaligned64(void * ptr, unsigned INT64 v) {
     memcpy(ptr, &v, 8);
 }
 
-static INLINE unsigned INT64 get_unaligned32(const void * ptr) {
+static INLINE unsigned INT64 __attribute__((unused)) get_unaligned32(const void * ptr) {
     unsigned INT32 v;
     memcpy(&v, ptr, 4);
     return v;
 }
 
-static INLINE void set_unaligned32(void * ptr, unsigned INT32 v) {
+static INLINE void __attribute__((unused)) set_unaligned32(void * ptr, unsigned INT32 v) {
     memcpy(ptr, &v, 4);
 }
 
-static INLINE unsigned INT16 get_unaligned16(const void * ptr) {
+static INLINE unsigned INT16 __attribute__((unused)) get_unaligned16(const void * ptr) {
     unsigned INT16 v;
     memcpy(&v, ptr, 2);
     return v;
 }
 
-static INLINE void set_unaligned16(void * ptr, unsigned INT16 v) {
+static INLINE void __attribute__((unused)) set_unaligned16(void * ptr, unsigned INT16 v) {
     memcpy(ptr, &v, 2);
 }
 
diff --git a/src/program.h b/src/program.h
index b58173e934..9947d5c229 100644
--- a/src/program.h
+++ b/src/program.h
@@ -644,7 +644,7 @@ struct program
 
 PMOD_EXPORT void dump_program_tables (const struct program *p, int indent);
 #ifdef PIKE_DEBUG
-static INLINE int CHECK_IDREF_RANGE (int x, const struct program *p)
+static INLINE int __attribute__((unused)) CHECK_IDREF_RANGE (int x, const struct program *p)
 {
   if (x < 0 || x >= p->num_identifier_references) {
     dump_program_tables(p, 4);
@@ -1070,7 +1070,7 @@ void make_area_executable (char *start, size_t len);
 void make_program_executable(struct program *p);
 /* Prototypes end here */
 
-static INLINE int FIND_LFUN(struct program * p, int lfun) {
+static INLINE int __attribute__((unused)) FIND_LFUN(struct program * p, int lfun) {
 #ifdef PIKE_DEBUG
     dmalloc_touch(struct program*, p);
     if (lfun < 0) return find_lfun_fatal(p, lfun);
diff --git a/src/rbtree.h b/src/rbtree.h
index 096421b638..eac23b8231 100644
--- a/src/rbtree.h
+++ b/src/rbtree.h
@@ -91,7 +91,7 @@ PMOD_EXPORT struct rb_node_hdr *rb_link_next (struct rb_node_hdr *node);
 
 #ifdef PIKE_DEBUG
 /* To get good type checking. */
-static INLINE struct rb_node_hdr *rb_node_check (struct rb_node_hdr *node)
+static INLINE struct rb_node_hdr __attribute__((unused)) *rb_node_check (struct rb_node_hdr *node)
   {return node;}
 #else
 #define rb_node_check(node) ((struct rb_node_hdr *) (node))
diff --git a/src/stack_allocator.h b/src/stack_allocator.h
index a60f11e8d1..7f6dd4185d 100644
--- a/src/stack_allocator.h
+++ b/src/stack_allocator.h
@@ -16,16 +16,16 @@ void stack_alloc_enlarge(struct stack_allocator * a, size_t size);
 void stack_alloc_destroy(struct stack_allocator * a);
 size_t stack_alloc_count(struct stack_allocator * a);
 
-static INLINE void stack_alloc_init(struct stack_allocator * a, size_t initial) {
+static INLINE void __attribute__((unused)) stack_alloc_init(struct stack_allocator * a, size_t initial) {
     a->cur = NULL;
     a->initial = initial;
 }
 
-static INLINE size_t left(struct chunk * c) {
+static INLINE size_t __attribute__((unused)) left(struct chunk * c) {
     return (size_t)(((char*)c->data + c->size) - (char*)c->top);
 }
 
-static INLINE void sa_alloc_enlarge(struct stack_allocator * a, size_t size) {
+static INLINE void __attribute__((unused)) sa_alloc_enlarge(struct stack_allocator * a, size_t size) {
     struct chunk * c = a->cur;
 
     if (!c || left(c) < size)
@@ -33,7 +33,7 @@ static INLINE void sa_alloc_enlarge(struct stack_allocator * a, size_t size) {
 }
 
 MALLOC_FUNCTION
-static INLINE void * sa_alloc_fast(struct stack_allocator * a, size_t size) {
+static INLINE void __attribute__((unused)) * sa_alloc_fast(struct stack_allocator * a, size_t size) {
     struct chunk * c = a->cur;
     void * ret = c->top;
     c->top = (char*)c->top + size;
@@ -41,7 +41,7 @@ static INLINE void * sa_alloc_fast(struct stack_allocator * a, size_t size) {
 }
 
 MALLOC_FUNCTION
-static INLINE void * sa_alloc(struct stack_allocator * a, size_t size) {
+static INLINE void __attribute__((unused)) * sa_alloc(struct stack_allocator * a, size_t size) {
     sa_alloc_enlarge(a, size);
     return sa_alloc_fast(a, size);
 }
diff --git a/src/stralloc.h b/src/stralloc.h
index 72f2369fa0..56681599be 100644
--- a/src/stralloc.h
+++ b/src/stralloc.h
@@ -124,7 +124,7 @@ struct pike_string *debug_findstring(const struct pike_string *foo);
 #ifndef PIKE_DEBUG
 static p_wchar2 generic_extract (const void *str, int size, ptrdiff_t pos) ATTRIBUTE((pure));
 
-static INLINE p_wchar2 generic_extract (const void *str, int size, ptrdiff_t pos)
+static INLINE p_wchar2 __attribute__((unused)) generic_extract (const void *str, int size, ptrdiff_t pos)
 {
 /* this gives better code than a lot of other versions I have tested.
 
@@ -137,7 +137,7 @@ expanded code for the oldINDEX_CHARP.
   return ((p_wchar2 *)str)[pos];
 }
 
-static INLINE p_wchar2 index_shared_string(const struct pike_string *s,  ptrdiff_t pos)
+static INLINE p_wchar2 __attribute__((unused)) index_shared_string(const struct pike_string *s,  ptrdiff_t pos)
 {
   return generic_extract(s->str,s->size_shift,pos);
 }
@@ -181,7 +181,7 @@ PMOD_EXPORT p_wchar2 index_shared_string(const struct pike_string *s, ptrdiff_t
 #define COMPARE_PCHARP(X,CMP,Y) LOW_COMPARE_PCHARP((X),CMP,(Y))
 #endif
 
-static INLINE PCHARP MKPCHARP(const void *ptr, int shift)
+static INLINE PCHARP __attribute__((unused)) MKPCHARP(const void *ptr, int shift)
 {
   PCHARP tmp;
   tmp.ptr=(p_wchar0 *)ptr;
@@ -473,14 +473,14 @@ PMOD_EXPORT p_wchar2 *require_wstring2(struct pike_string *s,
 /* Compat alias. */
 #define do_really_free_pike_string do_free_unlinked_pike_string
 
-static INLINE void string_builder_binary_strcat(struct string_builder *s,
+static INLINE void __attribute__((unused)) string_builder_binary_strcat(struct string_builder *s,
 						const char *str, ptrdiff_t len)
 {
   string_builder_binary_strcat0 (s, (const p_wchar0 *) str, len);
 }
 
 /* Note: Does not work 100% correctly with shift==2 strings. */
-static INLINE int string_has_null( struct pike_string *x )
+static INLINE int __attribute__((unused)) string_has_null( struct pike_string *x )
 {
     INT32 min;
     if( !x->len ) return 0;
diff --git a/src/svalue.h b/src/svalue.h
index ba129c341b..7359dbb264 100644
--- a/src/svalue.h
+++ b/src/svalue.h
@@ -485,20 +485,20 @@ if(REFCOUNTED_TYPE(T) && (S)->refs && (S)->refs[0] <= 0) {\
   debug_check_type_hint ((SVALS), (NUM), (TYPE_HINT))
 
 #ifdef DEBUG_MALLOC
-static INLINE struct svalue *dmalloc_check_svalue(struct svalue *s, char *l)
+static INLINE struct svalue __attribute__((unused)) *dmalloc_check_svalue(struct svalue *s, char *l)
 {
   if(s && REFCOUNTED_TYPE(TYPEOF(*s)))
     debug_malloc_update_location(s->u.refs,l);
   return s;
 }
 
-static INLINE struct svalue *dmalloc_check_svalues(struct svalue *s, size_t num, char *l)
+static INLINE struct svalue __attribute__((unused)) *dmalloc_check_svalues(struct svalue *s, size_t num, char *l)
 {
   while (num--) dmalloc_check_svalue (s + num, l);
   return s;
 }
 
-static INLINE union anything *dmalloc_check_union(union anything *u,int type, char * l)
+static INLINE union anything __attribute__((unused)) *dmalloc_check_union(union anything *u,int type, char * l)
 {
   if(u && REFCOUNTED_TYPE(type))
     debug_malloc_update_location(u->refs,l);
@@ -517,14 +517,14 @@ static INLINE union anything *dmalloc_check_union(union anything *u,int type, ch
 #endif	/* !DEBUG_MALLOC */
 
 /* To be used for type checking in macros. */
-static INLINE struct array *pass_array (struct array *a) {return a;}
-static INLINE struct mapping *pass_mapping (struct mapping *m) {return m;}
-static INLINE struct multiset *pass_multiset (struct multiset *l) {return l;}
-static INLINE struct object *pass_object (struct object *o) {return o;}
-static INLINE struct program *pass_program (struct program *p) {return p;}
-static INLINE struct pike_string *pass_string (struct pike_string *s) {return s;}
-static INLINE struct pike_type *pass_type (struct pike_type *t) {return t;}
-static INLINE struct callable *pass_callable (struct callable *c) {return c;}
+static INLINE struct array __attribute__((unused)) *pass_array (struct array *a) {return a;}
+static INLINE struct mapping __attribute__((unused)) *pass_mapping (struct mapping *m) {return m;}
+static INLINE struct multiset __attribute__((unused)) *pass_multiset (struct multiset *l) {return l;}
+static INLINE struct object __attribute__((unused)) *pass_object (struct object *o) {return o;}
+static INLINE struct program __attribute__((unused)) *pass_program (struct program *p) {return p;}
+static INLINE struct pike_string __attribute__((unused)) *pass_string (struct pike_string *s) {return s;}
+static INLINE struct pike_type __attribute__((unused)) *pass_type (struct pike_type *t) {return t;}
+static INLINE struct callable __attribute__((unused)) *pass_callable (struct callable *c) {return c;}
 
 #else  /* !PIKE_DEBUG */
 
@@ -794,7 +794,7 @@ int svalues_are_constant(const struct svalue *s,
 			 TYPE_FIELD hint,
 			 struct processing *p);
 
-static INLINE TYPE_FIELD BITOF(struct svalue sv) {
+static INLINE TYPE_FIELD __attribute__((unused)) BITOF(struct svalue sv) {
     if (TYPEOF(sv) >= sizeof(TYPE_FIELD) * 8) {
         return BIT_MIXED | BIT_UNFINISHED;
     }
@@ -817,10 +817,10 @@ static INLINE TYPE_FIELD BITOF(struct svalue sv) {
   } while (0)
 
 #ifdef DEBUG_MALLOC
-static INLINE TYPE_FIELD dmalloc_gc_mark_svalues (struct svalue *s, size_t num, char *l)
+static INLINE TYPE_FIELD __attribute__((unused)) dmalloc_gc_mark_svalues (struct svalue *s, size_t num, char *l)
   {return real_gc_mark_svalues (dmalloc_check_svalues (s, num, l), num);}
 #define gc_mark_svalues(S, NUM) dmalloc_gc_mark_svalues ((S), (NUM), DMALLOC_LOCATION())
-static INLINE TYPE_FIELD dmalloc_gc_cycle_check_svalues (struct svalue *s, size_t num, char *l)
+static INLINE TYPE_FIELD __attribute__((unused)) dmalloc_gc_cycle_check_svalues (struct svalue *s, size_t num, char *l)
   {return real_gc_cycle_check_svalues (dmalloc_check_svalues (s, num, l), num);}
 #define gc_cycle_check_svalues(S, NUM) dmalloc_gc_cycle_check_svalues ((S), (NUM), DMALLOC_LOCATION())
 #else
-- 
GitLab