compiler: add more attributes.
authorRusty Russell <rusty@rustcorp.com.au>
Fri, 2 Nov 2018 01:01:39 +0000 (11:31 +1030)
committerRusty Russell <rusty@rustcorp.com.au>
Fri, 2 Nov 2018 01:01:39 +0000 (11:31 +1030)
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
ccan/compiler/compiler.h
tools/configurator/configurator.c

index bce4f25a122612d7f26f8e846564747a01836b3b..caa89edc5968a6b5cbcb800876d6ae66672e2720 100644 (file)
 #define WARN_UNUSED_RESULT
 #endif
 #endif
+
+
+#if HAVE_ATTRIBUTE_DEPRECATED
+/**
+ * WARN_DEPRECATED - warn that a function/type/variable is deprecated when used.
+ *
+ * Used to mark a function, type or variable should not be used.
+ *
+ * Example:
+ * WARN_DEPRECATED char *oldfunc(char *buf);
+ */
+#define WARN_DEPRECATED __attribute__((__deprecated__))
+#else
+#define WARN_DEPRECATED
+#endif
+
+
+#if HAVE_ATTRIBUTE_NONNULL
+/**
+ * NO_NULL_ARGS - specify that no arguments to this function can be NULL.
+ *
+ * The compiler will warn if any pointer args are NULL.
+ *
+ * Example:
+ * NO_NULL_ARGS char *my_copy(char *buf);
+ */
+#define NO_NULL_ARGS __attribute__((__nonnull__))
+
+/**
+ * NON_NULL_ARGS - specify that some arguments to this function can't be NULL.
+ * @...: 1-based argument numbers for which args can't be NULL.
+ *
+ * The compiler will warn if any of the specified pointer args are NULL.
+ *
+ * Example:
+ * char *my_copy2(char *buf, char *maybenull) NON_NULL_ARGS(1, 2);
+ */
+#define NON_NULL_ARGS(index, ...) __attribute__((__nonnull__(index, __VA_ARGS__)))
+#else
+#define NO_NULL_ARGS
+#define NON_NULL_ARGS(index, ...)
+#endif
+
+
+#if HAVE_ATTRIBUTE_SENTINEL
+/**
+ * LAST_ARG_NULL - specify the last argument of a variadic function must be NULL.
+ *
+ * The compiler will warn if the last argument isn't NULL.
+ *
+ * Example:
+ * char *join_string(char *buf, ...) LAST_ARG_NULL;
+ */
+#define LAST_ARG_NULL __attribute__((__sentinel__))
+#else
+#define LAST_ARG_NULL
+#endif
+
 #endif /* CCAN_COMPILER_H */
index 239e91c962b9b3af8af341818055412ad3344f9a..1386fc90c8d72be6e734eb9f21a2d661b4c6f86c 100644 (file)
@@ -136,6 +136,15 @@ static const struct test base_tests[] = {
        { "HAVE_ATTRIBUTE_CONST", "__attribute__((const)) support",
          "DEFINES_FUNC", NULL, NULL,
          "static int __attribute__((const)) func(int x) { return x; }" },
+       { "HAVE_ATTRIBUTE_DEPRECATED", "__attribute__((deprecated)) support",
+         "DEFINES_FUNC", NULL, NULL,
+         "static int __attribute__((deprecated)) func(int x) { return x; }" },
+       { "HAVE_ATTRIBUTE_NONNULL", "__attribute__((nonnull)) support",
+         "DEFINES_FUNC", NULL, NULL,
+         "static char *__attribute__((nonnull)) func(char *p) { return p; }" },
+       { "HAVE_ATTRIBUTE_SENTINEL", "__attribute__((sentinel)) support",
+         "DEFINES_FUNC", NULL, NULL,
+         "static int __attribute__((sentinel)) func(int i, ...) { return i; }" },
        { "HAVE_ATTRIBUTE_PURE", "__attribute__((pure)) support",
          "DEFINES_FUNC", NULL, NULL,
          "static int __attribute__((pure)) func(int x) { return x; }" },