compiler: don't override existing definitions.
[ccan] / ccan / compiler / compiler.h
index 1e0d8efbaacc1be66aa291f861560a513b69887a..74e0f1835c1207454aa1fdb364d3573df31387d1 100644 (file)
@@ -2,6 +2,7 @@
 #define CCAN_COMPILER_H
 #include "config.h"
 
 #define CCAN_COMPILER_H
 #include "config.h"
 
+#ifndef COLD
 #if HAVE_ATTRIBUTE_COLD
 /**
  * COLD - a function is unlikely to be called.
 #if HAVE_ATTRIBUTE_COLD
 /**
  * COLD - a function is unlikely to be called.
@@ -19,7 +20,9 @@
 #else
 #define COLD
 #endif
 #else
 #define COLD
 #endif
+#endif
 
 
+#ifndef NORETURN
 #if HAVE_ATTRIBUTE_NORETURN
 /**
  * NORETURN - a function does not return
 #if HAVE_ATTRIBUTE_NORETURN
 /**
  * NORETURN - a function does not return
@@ -37,7 +40,9 @@
 #else
 #define NORETURN
 #endif
 #else
 #define NORETURN
 #endif
+#endif
 
 
+#ifndef PRINTF_FMT
 #if HAVE_ATTRIBUTE_PRINTF
 /**
  * PRINTF_FMT - a function takes printf-style arguments
 #if HAVE_ATTRIBUTE_PRINTF
 /**
  * PRINTF_FMT - a function takes printf-style arguments
@@ -54,7 +59,9 @@
 #else
 #define PRINTF_FMT(nfmt, narg)
 #endif
 #else
 #define PRINTF_FMT(nfmt, narg)
 #endif
+#endif
 
 
+#ifndef IDEMPOTENT
 #if HAVE_ATTRIBUTE_CONST
 /**
  * IDEMPOTENT - a function's return depends only on its argument
 #if HAVE_ATTRIBUTE_CONST
 /**
  * IDEMPOTENT - a function's return depends only on its argument
 #else
 #define IDEMPOTENT
 #endif
 #else
 #define IDEMPOTENT
 #endif
+#endif
 
 #if HAVE_ATTRIBUTE_UNUSED
 
 #if HAVE_ATTRIBUTE_UNUSED
+#ifndef UNNEEDED
 /**
  * UNNEEDED - a variable/function may not be needed
  *
 /**
  * UNNEEDED - a variable/function may not be needed
  *
@@ -86,7 +95,9 @@
  * }
  */
 #define UNNEEDED __attribute__((unused))
  * }
  */
 #define UNNEEDED __attribute__((unused))
+#endif
 
 
+#ifndef NEEDED
 #if HAVE_ATTRIBUTE_USED
 /**
  * NEEDED - a variable/function is needed
 #if HAVE_ATTRIBUTE_USED
 /**
  * NEEDED - a variable/function is needed
 /* Before used, unused functions and vars were always emitted. */
 #define NEEDED __attribute__((unused))
 #endif
 /* Before used, unused functions and vars were always emitted. */
 #define NEEDED __attribute__((unused))
 #endif
+#endif
 
 
+#ifndef UNUSED
 /**
  * UNUSED - a parameter is unused
  *
 /**
  * UNUSED - a parameter is unused
  *
  *     }
  */
 #define UNUSED __attribute__((unused))
  *     }
  */
 #define UNUSED __attribute__((unused))
+#endif
 #else
 #else
+#ifndef UNNEEDED
 #define UNNEEDED
 #define UNNEEDED
+#endif
+#ifndef NEEDED
 #define NEEDED
 #define NEEDED
+#endif
+#ifndef UNUSED
 #define UNUSED
 #endif
 #define UNUSED
 #endif
+#endif
 
 
+#ifndef IS_COMPILE_CONSTANT
 #if HAVE_BUILTIN_CONSTANT_P
 /**
  * IS_COMPILE_CONSTANT - does the compiler know the value of this expression?
 #if HAVE_BUILTIN_CONSTANT_P
 /**
  * IS_COMPILE_CONSTANT - does the compiler know the value of this expression?
  *     const char *greek_name(enum greek greek);
  *
  *     // Inline version.
  *     const char *greek_name(enum greek greek);
  *
  *     // Inline version.
- *     static inline char *_greek_name(enum greek greek)
+ *     static inline const char *_greek_name(enum greek greek)
  *     {
  *             switch (greek) {
  *             case ALPHA: return "alpha";
  *     {
  *             switch (greek) {
  *             case ALPHA: return "alpha";
 /* If we don't know, assume it's not. */
 #define IS_COMPILE_CONSTANT(expr) 0
 #endif
 /* If we don't know, assume it's not. */
 #define IS_COMPILE_CONSTANT(expr) 0
 #endif
+#endif
 
 
+#ifndef WARN_UNUSED_RESULT
 #if HAVE_WARN_UNUSED_RESULT
 /**
  * WARN_UNUSED_RESULT - warn if a function return value is unused.
 #if HAVE_WARN_UNUSED_RESULT
 /**
  * WARN_UNUSED_RESULT - warn if a function return value is unused.
 #else
 #define WARN_UNUSED_RESULT
 #endif
 #else
 #define WARN_UNUSED_RESULT
 #endif
+#endif
 #endif /* CCAN_COMPILER_H */
 #endif /* CCAN_COMPILER_H */