Author: pfg
Date: Thu Mar 26 16:00:35 2015
New Revision: 280700
URL: https://svnweb.freebsd.org/changeset/base/280700

Log:
  Introduce some allocation function attributes.
  
  Bring support for two gcc function attributes that are likely to be used
  in our system headers:
  
  __alloc_size
  The alloc_size attribute is used to tell the compiler that the function
  return value points to memory, where the size is given by one or two of
  the functions parameters.
  
  __result_use_check
  Causes a warning to be emitted if a caller of the function with this
  attribute does not use its return value. This is known in gcc as
  "warn_unused_result" but we considered the original naming unsuitable
  for an attribute.
  
  The __alloc_size attribute required some workarounds for lint(1).
  Both attributes are supported by clang.
  
  Also see: D2107
  
  MFC after:    3 days

Modified:
  head/sys/sys/cdefs.h

Modified: head/sys/sys/cdefs.h
==============================================================================
--- head/sys/sys/cdefs.h        Thu Mar 26 15:54:54 2015        (r280699)
+++ head/sys/sys/cdefs.h        Thu Mar 26 16:00:35 2015        (r280700)
@@ -40,6 +40,9 @@
  * Testing against Clang-specific extensions.
  */
 
+#ifndef        __has_attribute
+#define        __has_attribute(x)      0
+#endif
 #ifndef        __has_extension
 #define        __has_extension         __has_feature
 #endif
@@ -209,6 +212,7 @@
 #define        __unused
 #define        __packed
 #define        __aligned(x)
+#define        __alloc_size(...)
 #define        __section(x)
 #define        __weak
 #else
@@ -233,6 +237,11 @@
 #define        __aligned(x)    __attribute__((__aligned__(x)))
 #define        __section(x)    __attribute__((__section__(x)))
 #endif
+#if __has_attribute(alloc_size) || __GNUC_PREREQ__(4, 3)
+#define        __alloc_size(...)       __attribute__((alloc_size(__VA_ARGS__)))
+#else
+#define        __alloc_size(...)
+#endif
 #if defined(__INTEL_COMPILER)
 #define        __dead2         __attribute__((__noreturn__))
 #define        __pure2         __attribute__((__const__))
@@ -242,7 +251,7 @@
 #define        __aligned(x)    __attribute__((__aligned__(x)))
 #define        __section(x)    __attribute__((__section__(x)))
 #endif
-#endif
+#endif /* lint */
 
 #if !__GNUC_PREREQ__(2, 95)
 #define        __alignof(x)    __offsetof(struct { char __a; x __b; }, __b)
@@ -363,8 +372,10 @@
 
 #if __GNUC_PREREQ__(3, 4)
 #define        __fastcall      __attribute__((__fastcall__))
+#define        __result_use_check      __attribute__((__warn_unused_result__))
 #else
 #define        __fastcall
+#define        __result_use_check
 #endif
 
 #if __GNUC_PREREQ__(4, 1)
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to