• Miguel Ojeda's avatar
    Compiler Attributes: use feature checks instead of version checks · a3f8a30f
    Miguel Ojeda authored
    Instead of using version checks per-compiler to define (or not)
    each attribute, use __has_attribute to test for them, following
    the cleanup started with commit 815f0ddb
    ("include/linux/compiler*.h: make compiler-*.h mutually exclusive"),
    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.
    All the attributes that can be unconditionally defined and directly
    map to compiler attribute(s) (even if optional) have been moved
    to a new file include/linux/compiler_attributes.h
    In an effort to make the file as regular as possible, comments
    stating the purpose of attributes have been removed. Instead,
    links to the compiler docs have been added (i.e. to gcc and,
    if available, to clang as well). In addition, they have been sorted.
    Finally, if an attribute is optional (i.e. if it is guarded
    by __has_attribute), the reason has been stated for future reference.
    Tested-by: Sedat Dilek <sedat.dilek@gmail.com> # on top of v4.19-rc5, clang 7
    Reviewed-by: default avatarNick Desaulniers <ndesaulniers@google.com>
    Reviewed-by: default avatarLuc Van Oostenryck <luc.vanoostenryck@gmail.com>
    Signed-off-by: default avatarMiguel Ojeda <miguel.ojeda.sandonis@gmail.com>