Browse Source

compiler: Add PURE_FUNCTION

CC: Rusty Russell <rusty@rustcorp.com.au>
Signed-off-by: Cody P Schafer <dev@codyps.com>
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Cody P Schafer 11 years ago
parent
commit
48c1824304
2 changed files with 16 additions and 0 deletions
  1. 14 0
      ccan/compiler/compiler.h
  2. 2 0
      tools/configurator/configurator.c

+ 14 - 0
ccan/compiler/compiler.h

@@ -75,6 +75,20 @@
 #else
 #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
 
 #if HAVE_ATTRIBUTE_UNUSED

+ 2 - 0
tools/configurator/configurator.c

@@ -79,6 +79,8 @@ static struct test tests[] = {
 	  "static int __attribute__((cold)) func(int x) { return x; }" },
 	{ "HAVE_ATTRIBUTE_CONST", DEFINES_FUNC, NULL, NULL,
 	  "static int __attribute__((const)) func(int x) { return x; }" },
+	{ "HAVE_ATTRIBUTE_PURE", DEFINES_FUNC, NULL, NULL,
+	  "static int __attribute__((pure)) func(int x) { return x; }" },
 	{ "HAVE_ATTRIBUTE_MAY_ALIAS", OUTSIDE_MAIN, NULL, NULL,
 	  "typedef short __attribute__((__may_alias__)) short_a;" },
 	{ "HAVE_ATTRIBUTE_NORETURN", DEFINES_FUNC, NULL, NULL,