History

Compiler Attributes: improve explanation of header

Explain better what "optional" attributes are, and avoid calling them so to avoid confusion. Simply retain "Optional" as a word to look for in the comments. Moreover, add a couple sentences to explain a bit more the intention and the documentation links.

Miguel Ojeda committed 8 years ago

Commit 24efee41 parent 8bd66d11 file · +9 −5Browse files

Showing the changes to include/linux (1 of 1 file). Show all

Unified · Split

include/linux/compiler_attributes.h+9−5
@@ -4,22 +4,26 @@ · 3 unmodified lines
44
55 /*
66 * The attributes in this file are unconditionally defined and they directly
7− * map to compiler attribute(s) -- except those that are optional.
7+ * map to compiler attribute(s), unless one of the compilers does not support
8+ * the attribute. In that case, __has_attribute is used to check for support
9+ * and the reason is stated in its comment ("Optional: ...").
810 *
911 * Any other "attributes" (i.e. those that depend on a configuration option,
1012 * on a compiler, on an architecture, on plugins, on other attributes...)
1113 * should be defined elsewhere (e.g. compiler_types.h or compiler-*.h).
14+ * The intention is to keep this file as simple as possible, as well as
15+ * compiler- and version-agnostic (e.g. avoiding GCC_VERSION checks).
1216 *
1317 * This file is meant to be sorted (by actual attribute name,
1418 * not by #define identifier). Use the __attribute__((__name__)) syntax
1519 * (i.e. with underscores) to avoid future collisions with other macros.
16− * If an attribute is optional, state the reason in the comment.
20+ * Provide links to the documentation of each supported compiler, if it exists.
1721 */
1822
1923 /*
20− * To check for optional attributes, we use __has_attribute, which is supported
21− * on gcc >= 5, clang >= 2.9 and icc >= 17. In the meantime, to support
22− * 4.6 <= gcc < 5, we implement __has_attribute by hand.
24+ * __has_attribute is supported on gcc >= 5, clang >= 2.9 and icc >= 17.
25+ * In the meantime, to support 4.6 <= gcc < 5, we implement __has_attribute
26+ * by hand.
2327 *
2428 * sparse does not support __has_attribute (yet) and defines __GNUC_MINOR__
2529 * depending on the compiler used to build it; however, these attributes have