diff options
-rw-r--r-- | configure.ac | 1 | ||||
-rw-r--r-- | m4/ax_gcc_func_attribute.m4 | 7 | ||||
-rw-r--r-- | src/util/macros.h | 6 |
3 files changed, 14 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index 023110e184..9fbfe4d5ea 100644 --- a/configure.ac +++ b/configure.ac @@ -224,6 +224,7 @@ AX_GCC_FUNC_ATTRIBUTE([format]) AX_GCC_FUNC_ATTRIBUTE([malloc]) AX_GCC_FUNC_ATTRIBUTE([packed]) AX_GCC_FUNC_ATTRIBUTE([pure]) +AX_GCC_FUNC_ATTRIBUTE([returns_nonnull]) AX_GCC_FUNC_ATTRIBUTE([unused]) AX_GCC_FUNC_ATTRIBUTE([warn_unused_result]) diff --git a/m4/ax_gcc_func_attribute.m4 b/m4/ax_gcc_func_attribute.m4 index 4e0ecbb56c..2e67ea2926 100644 --- a/m4/ax_gcc_func_attribute.m4 +++ b/m4/ax_gcc_func_attribute.m4 @@ -53,6 +53,7 @@ # optimize # packed # pure +# returns_nonnull # unused # used # visibility @@ -76,6 +77,9 @@ #serial 2 +# mattst88: +# Added support for returns_nonnull attribute + AC_DEFUN([AX_GCC_FUNC_ATTRIBUTE], [ AS_VAR_PUSHDEF([ac_var], [ax_cv_have_func_attribute_$1]) @@ -175,6 +179,9 @@ AC_DEFUN([AX_GCC_FUNC_ATTRIBUTE], [ [pure], [ int foo( void ) __attribute__(($1)); ], + [returns_nonnull], [ + int *foo( void ) __attribute__(($1)); + ], [unused], [ int foo( void ) __attribute__(($1)); ], diff --git a/src/util/macros.h b/src/util/macros.h index c0bfb15a47..9ddf675965 100644 --- a/src/util/macros.h +++ b/src/util/macros.h @@ -154,6 +154,12 @@ do { \ #define ATTRIBUTE_PURE #endif +#ifdef HAVE_FUNC_ATTRIBUTE_RETURNS_NONNULL +#define ATTRIBUTE_RETURNS_NONNULL __attribute__((__returns_nonnull__)) +#else +#define ATTRIBUTE_RETURNS_NONNULL +#endif + #ifdef __cplusplus /** * Macro function that evaluates to true if T is a trivially |