svn commit: r280700 - head/sys/sys
Pedro F. Giffuni
pfg at FreeBSD.org
Thu Mar 26 16:00:36 UTC 2015
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)
More information about the svn-src-head
mailing list