blob: 95c072b70d0e832f70a4ac07470bcd0d1ed46deb [file] [log] [blame]
Andrew Scullb4b6d4a2019-01-02 15:54:55 +00001/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _TOOLS_LINUX_COMPILER_H_
3#error "Please don't include <linux/compiler-gcc.h> directly, include <linux/compiler.h> instead."
4#endif
5
6/*
7 * Common definitions for all gcc versions go here.
8 */
David Brazdil0f672f62019-12-10 10:32:29 +00009#ifndef GCC_VERSION
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000010#define GCC_VERSION (__GNUC__ * 10000 \
11 + __GNUC_MINOR__ * 100 \
12 + __GNUC_PATCHLEVEL__)
David Brazdil0f672f62019-12-10 10:32:29 +000013#endif
Andrew Scullb4b6d4a2019-01-02 15:54:55 +000014
15#if GCC_VERSION >= 70000 && !defined(__CHECKER__)
16# define __fallthrough __attribute__ ((fallthrough))
17#endif
18
19#if GCC_VERSION >= 40300
20# define __compiletime_error(message) __attribute__((error(message)))
21#endif /* GCC_VERSION >= 40300 */
22
23/* &a[0] degrades to a pointer: a different type from an array */
24#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
25
26#ifndef __pure
27#define __pure __attribute__((pure))
28#endif
29#define noinline __attribute__((noinline))
30#ifndef __packed
31#define __packed __attribute__((packed))
32#endif
33#ifndef __noreturn
34#define __noreturn __attribute__((noreturn))
35#endif
36#ifndef __aligned
37#define __aligned(x) __attribute__((aligned(x)))
38#endif
39#define __printf(a, b) __attribute__((format(printf, a, b)))
40#define __scanf(a, b) __attribute__((format(scanf, a, b)))
41
42#if GCC_VERSION >= 50100
43#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
44#endif