|
@@ -4,22 +4,26 @@
|
|
|
|
|
|
/*
|
|
|
* The attributes in this file are unconditionally defined and they directly
|
|
|
- * map to compiler attribute(s) -- except those that are optional.
|
|
|
+ * map to compiler attribute(s), unless one of the compilers does not support
|
|
|
+ * the attribute. In that case, __has_attribute is used to check for support
|
|
|
+ * and the reason is stated in its comment ("Optional: ...").
|
|
|
*
|
|
|
* Any other "attributes" (i.e. those that depend on a configuration option,
|
|
|
* on a compiler, on an architecture, on plugins, on other attributes...)
|
|
|
* should be defined elsewhere (e.g. compiler_types.h or compiler-*.h).
|
|
|
+ * The intention is to keep this file as simple as possible, as well as
|
|
|
+ * compiler- and version-agnostic (e.g. avoiding GCC_VERSION checks).
|
|
|
*
|
|
|
* This file is meant to be sorted (by actual attribute name,
|
|
|
* not by #define identifier). Use the __attribute__((__name__)) syntax
|
|
|
* (i.e. with underscores) to avoid future collisions with other macros.
|
|
|
- * If an attribute is optional, state the reason in the comment.
|
|
|
+ * Provide links to the documentation of each supported compiler, if it exists.
|
|
|
*/
|
|
|
|
|
|
/*
|
|
|
- * To check for optional attributes, we use __has_attribute, which is supported
|
|
|
- * on gcc >= 5, clang >= 2.9 and icc >= 17. In the meantime, to support
|
|
|
- * 4.6 <= gcc < 5, we implement __has_attribute by hand.
|
|
|
+ * __has_attribute is supported on gcc >= 5, clang >= 2.9 and icc >= 17.
|
|
|
+ * In the meantime, to support 4.6 <= gcc < 5, we implement __has_attribute
|
|
|
+ * by hand.
|
|
|
*
|
|
|
* sparse does not support __has_attribute (yet) and defines __GNUC_MINOR__
|
|
|
* depending on the compiler used to build it; however, these attributes have
|