]> git.ozlabs.org Git - ccan/blobdiff - ccan/compiler/compiler.h
compiler: avoid barfing when config.h & the current -std= mode mismatch
[ccan] / ccan / compiler / compiler.h
index 74e0f1835c1207454aa1fdb364d3573df31387d1..bce4f25a122612d7f26f8e846564747a01836b3b 100644 (file)
@@ -1,3 +1,4 @@
+/* CC0 (Public domain) - see LICENSE file for details */
 #ifndef CCAN_COMPILER_H
 #define CCAN_COMPILER_H
 #include "config.h"
@@ -16,7 +17,7 @@
  *     fprintf(stderr, "Error: %s (%s)\n", reason, strerror(errno));
  * }
  */
-#define COLD __attribute__((cold))
+#define COLD __attribute__((__cold__))
 #else
 #define COLD
 #endif
@@ -36,7 +37,7 @@
  *     exit(1);
  * }
  */
-#define NORETURN __attribute__((noreturn))
+#define NORETURN __attribute__((__noreturn__))
 #else
 #define NORETURN
 #endif
 #endif
 #endif
 
-#ifndef IDEMPOTENT
+#ifndef CONST_FUNCTION
 #if HAVE_ATTRIBUTE_CONST
 /**
- * IDEMPOTENT - a function's return depends only on its argument
+ * CONST_FUNCTION - a function's return depends only on its argument
  *
  * This allows the compiler to assume that the function will return the exact
  * same value for the exact same arguments.  This implies that the function
  * must not use global variables, or dereference pointer arguments.
  */
-#define IDEMPOTENT __attribute__((const))
+#define CONST_FUNCTION __attribute__((__const__))
 #else
-#define IDEMPOTENT
+#define CONST_FUNCTION
+#endif
+
+#ifndef PURE_FUNCTION
+#if HAVE_ATTRIBUTE_PURE
+/**
+ * PURE_FUNCTION - a function is pure
+ *
+ * A pure function is one that has no side effects other than it's return value
+ * and uses no inputs other than it's arguments and global variables.
+ */
+#define PURE_FUNCTION __attribute__((__pure__))
+#else
+#define PURE_FUNCTION
+#endif
 #endif
 #endif
 
  *     counter += add;
  * }
  */
-#define UNNEEDED __attribute__((unused))
+#define UNNEEDED __attribute__((__unused__))
 #endif
 
 #ifndef NEEDED
  *             printf("Counter is %i\n", counter);
  *     }
  */
-#define NEEDED __attribute__((used))
+#define NEEDED __attribute__((__used__))
 #else
 /* Before used, unused functions and vars were always emitted. */
-#define NEEDED __attribute__((unused))
+#define NEEDED __attribute__((__unused__))
 #endif
 #endif
 
  *             return 0;
  *     }
  */
-#define UNUSED __attribute__((unused))
+#define UNUSED __attribute__((__unused__))
 #endif
 #else
 #ifndef UNNEEDED
  *     return realloc(buf, (*size) *= 2);
  * }
  */
-#define WARN_UNUSED_RESULT __attribute__((warn_unused_result))
+#define WARN_UNUSED_RESULT __attribute__((__warn_unused_result__))
 #else
 #define WARN_UNUSED_RESULT
 #endif