~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/compiler-gcc.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /include/linux/compiler-gcc.h (Version linux-6.12-rc7) and /include/linux/compiler-gcc.h (Version linux-4.4.302)


  1 /* SPDX-License-Identifier: GPL-2.0 */         !!   1 #ifndef __LINUX_COMPILER_H
  2 #ifndef __LINUX_COMPILER_TYPES_H               << 
  3 #error "Please don't include <linux/compiler-g      2 #error "Please don't include <linux/compiler-gcc.h> directly, include <linux/compiler.h> instead."
  4 #endif                                              3 #endif
  5                                                     4 
  6 /*                                                  5 /*
  7  * Common definitions for all gcc versions go       6  * Common definitions for all gcc versions go here.
  8  */                                                 7  */
  9 #define GCC_VERSION (__GNUC__ * 10000               8 #define GCC_VERSION (__GNUC__ * 10000           \
 10                      + __GNUC_MINOR__ * 100         9                      + __GNUC_MINOR__ * 100     \
 11                      + __GNUC_PATCHLEVEL__)        10                      + __GNUC_PATCHLEVEL__)
 12                                                    11 
                                                   >>  12 /* Optimization barrier */
                                                   >>  13 
                                                   >>  14 /* The "volatile" is due to gcc bugs */
                                                   >>  15 #define barrier() __asm__ __volatile__("": : :"memory")
                                                   >>  16 /*
                                                   >>  17  * This version is i.e. to prevent dead stores elimination on @ptr
                                                   >>  18  * where gcc and llvm may behave differently when otherwise using
                                                   >>  19  * normal barrier(): while gcc behavior gets along with a normal
                                                   >>  20  * barrier(), llvm needs an explicit input variable to be assumed
                                                   >>  21  * clobbered. The issue is as follows: while the inline asm might
                                                   >>  22  * access any memory it wants, the compiler could have fit all of
                                                   >>  23  * @ptr into memory registers instead, and since @ptr never escaped
                                                   >>  24  * from that, it proofed that the inline asm wasn't touching any of
                                                   >>  25  * it. This version works well with both compilers, i.e. we're telling
                                                   >>  26  * the compiler that the inline asm absolutely may see the contents
                                                   >>  27  * of @ptr. See also: https://llvm.org/bugs/show_bug.cgi?id=15495
                                                   >>  28  */
                                                   >>  29 #define barrier_data(ptr) __asm__ __volatile__("": :"r"(ptr) :"memory")
                                                   >>  30 
 13 /*                                                 31 /*
 14  * This macro obfuscates arithmetic on a varia     32  * This macro obfuscates arithmetic on a variable address so that gcc
 15  * shouldn't recognize the original var, and m     33  * shouldn't recognize the original var, and make assumptions about it.
 16  *                                                 34  *
 17  * This is needed because the C standard makes     35  * This is needed because the C standard makes it undefined to do
 18  * pointer arithmetic on "objects" outside the     36  * pointer arithmetic on "objects" outside their boundaries and the
 19  * gcc optimizers assume this is the case. In      37  * gcc optimizers assume this is the case. In particular they
 20  * assume such arithmetic does not wrap.           38  * assume such arithmetic does not wrap.
 21  *                                                 39  *
 22  * A miscompilation has been observed because      40  * A miscompilation has been observed because of this on PPC.
 23  * To work around it we hide the relationship      41  * To work around it we hide the relationship of the pointer and the object
 24  * using this macro.                               42  * using this macro.
 25  *                                                 43  *
 26  * Versions of the ppc64 compiler before 4.1 h     44  * Versions of the ppc64 compiler before 4.1 had a bug where use of
 27  * RELOC_HIDE could trash r30. The bug can be      45  * RELOC_HIDE could trash r30. The bug can be worked around by changing
 28  * the inline assembly constraint from =g to =     46  * the inline assembly constraint from =g to =r, in this particular
 29  * case either is valid.                           47  * case either is valid.
 30  */                                                48  */
 31 #define RELOC_HIDE(ptr, off)                       49 #define RELOC_HIDE(ptr, off)                                            \
 32 ({                                                 50 ({                                                                      \
 33         unsigned long __ptr;                       51         unsigned long __ptr;                                            \
 34         __asm__ ("" : "=r"(__ptr) : ""(ptr));      52         __asm__ ("" : "=r"(__ptr) : ""(ptr));                          \
 35         (typeof(ptr)) (__ptr + (off));             53         (typeof(ptr)) (__ptr + (off));                                  \
 36 })                                                 54 })
 37                                                    55 
 38 #ifdef CONFIG_MITIGATION_RETPOLINE             !!  56 /* Make the optimizer believe the variable can be manipulated arbitrarily. */
 39 #define __noretpoline __attribute__((__indirec !!  57 #define OPTIMIZER_HIDE_VAR(var)                                         \
                                                   >>  58         __asm__ ("" : "=r" (var) : "" (var))
                                                   >>  59 
                                                   >>  60 #ifdef __CHECKER__
                                                   >>  61 #define __must_be_array(a)      0
                                                   >>  62 #else
                                                   >>  63 /* &a[0] degrades to a pointer: a different type from an array */
                                                   >>  64 #define __must_be_array(a)      BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
                                                   >>  65 #endif
                                                   >>  66 
                                                   >>  67 /*
                                                   >>  68  * Feature detection for gnu_inline (gnu89 extern inline semantics). Either
                                                   >>  69  * __GNUC_STDC_INLINE__ is defined (not using gnu89 extern inline semantics,
                                                   >>  70  * and we opt in to the gnu89 semantics), or __GNUC_STDC_INLINE__ is not
                                                   >>  71  * defined so the gnu89 semantics are the default.
                                                   >>  72  */
                                                   >>  73 #ifdef __GNUC_STDC_INLINE__
                                                   >>  74 # define __gnu_inline   __attribute__((gnu_inline))
                                                   >>  75 #else
                                                   >>  76 # define __gnu_inline
 40 #endif                                             77 #endif
 41                                                    78 
 42 #if defined(LATENT_ENTROPY_PLUGIN) && !defined !!  79 /*
 43 #define __latent_entropy __attribute__((latent !!  80  * Force always-inline if the user requests it so via the .config,
                                                   >>  81  * or if gcc is too old.
                                                   >>  82  * GCC does not warn about unused static inline functions for
                                                   >>  83  * -Wunused-function.  This turns out to avoid the need for complex #ifdef
                                                   >>  84  * directives.  Suppress the warning in clang as well by using "unused"
                                                   >>  85  * function attribute, which is redundant but not harmful for gcc.
                                                   >>  86  * Prefer gnu_inline, so that extern inline functions do not emit an
                                                   >>  87  * externally visible function. This makes extern inline behave as per gnu89
                                                   >>  88  * semantics rather than c99. This prevents multiple symbol definition errors
                                                   >>  89  * of extern inline functions at link time.
                                                   >>  90  * A lot of inline functions can cause havoc with function tracing.
                                                   >>  91  */
                                                   >>  92 #if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) ||                \
                                                   >>  93     !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
                                                   >>  94 #define inline \
                                                   >>  95         inline __attribute__((always_inline, unused)) notrace __gnu_inline
                                                   >>  96 #else
                                                   >>  97 #define inline inline           __attribute__((unused)) notrace __gnu_inline
 44 #endif                                             98 #endif
 45                                                    99 
                                                   >> 100 #define __inline__ inline
                                                   >> 101 #define __inline inline
                                                   >> 102 #define __always_inline inline __attribute__((always_inline))
                                                   >> 103 #define  noinline       __attribute__((noinline))
                                                   >> 104 
                                                   >> 105 #define __deprecated    __attribute__((deprecated))
                                                   >> 106 #define __packed        __attribute__((packed))
                                                   >> 107 #define __weak          __attribute__((weak))
                                                   >> 108 #define __alias(symbol) __attribute__((alias(#symbol)))
                                                   >> 109 
                                                   >> 110 /*
                                                   >> 111  * it doesn't make sense on ARM (currently the only user of __naked)
                                                   >> 112  * to trace naked functions because then mcount is called without
                                                   >> 113  * stack and frame pointer being set up and there is no chance to
                                                   >> 114  * restore the lr register to the value before mcount was called.
                                                   >> 115  *
                                                   >> 116  * The asm() bodies of naked functions often depend on standard calling
                                                   >> 117  * conventions, therefore they must be noinline and noclone.
                                                   >> 118  *
                                                   >> 119  * GCC 4.[56] currently fail to enforce this, so we must do so ourselves.
                                                   >> 120  * See GCC PR44290.
                                                   >> 121  */
                                                   >> 122 #define __naked         __attribute__((naked)) noinline __noclone notrace
                                                   >> 123 
                                                   >> 124 #define __noreturn      __attribute__((noreturn))
                                                   >> 125 
                                                   >> 126 /*
                                                   >> 127  * From the GCC manual:
                                                   >> 128  *
                                                   >> 129  * Many functions have no effects except the return value and their
                                                   >> 130  * return value depends only on the parameters and/or global
                                                   >> 131  * variables.  Such a function can be subject to common subexpression
                                                   >> 132  * elimination and loop optimization just as an arithmetic operator
                                                   >> 133  * would be.
                                                   >> 134  * [...]
                                                   >> 135  */
                                                   >> 136 #define __pure                  __attribute__((pure))
                                                   >> 137 #define __aligned(x)            __attribute__((aligned(x)))
                                                   >> 138 #define __printf(a, b)          __attribute__((format(printf, a, b)))
                                                   >> 139 #define __scanf(a, b)           __attribute__((format(scanf, a, b)))
                                                   >> 140 #define __attribute_const__     __attribute__((__const__))
                                                   >> 141 #define __maybe_unused          __attribute__((unused))
                                                   >> 142 #define __always_unused         __attribute__((unused))
                                                   >> 143 
                                                   >> 144 /* gcc version specific checks */
                                                   >> 145 
                                                   >> 146 #if GCC_VERSION < 30200
                                                   >> 147 # error Sorry, your compiler is too old - please upgrade it.
                                                   >> 148 #elif defined(CONFIG_ARM64) && GCC_VERSION < 50100 && !defined(__clang__)
                                                   >> 149 /*
                                                   >> 150  * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293
                                                   >> 151  * https://lore.kernel.org/r/20210107111841.GN1551@shell.armlinux.org.uk
                                                   >> 152  */
                                                   >> 153 # error Sorry, your version of GCC is too old - please use 5.1 or newer.
                                                   >> 154 #endif
                                                   >> 155 
                                                   >> 156 #if GCC_VERSION < 30300
                                                   >> 157 # define __used                 __attribute__((__unused__))
                                                   >> 158 #else
                                                   >> 159 # define __used                 __attribute__((__used__))
                                                   >> 160 #endif
                                                   >> 161 
                                                   >> 162 #ifdef CONFIG_GCOV_KERNEL
                                                   >> 163 # if GCC_VERSION < 30400
                                                   >> 164 #   error "GCOV profiling support for gcc versions below 3.4 not included"
                                                   >> 165 # endif /* __GNUC_MINOR__ */
                                                   >> 166 #endif /* CONFIG_GCOV_KERNEL */
                                                   >> 167 
                                                   >> 168 #if GCC_VERSION >= 30400
                                                   >> 169 #define __must_check            __attribute__((warn_unused_result))
                                                   >> 170 #endif
                                                   >> 171 
                                                   >> 172 #if GCC_VERSION >= 40000
                                                   >> 173 
                                                   >> 174 /* GCC 4.1.[01] miscompiles __weak */
                                                   >> 175 #ifdef __KERNEL__
                                                   >> 176 # if GCC_VERSION >= 40100 &&  GCC_VERSION <= 40101
                                                   >> 177 #  error Your version of gcc miscompiles the __weak directive
                                                   >> 178 # endif
                                                   >> 179 #endif
                                                   >> 180 
                                                   >> 181 #define __used                  __attribute__((__used__))
                                                   >> 182 #define __compiler_offsetof(a, b)                                       \
                                                   >> 183         __builtin_offsetof(a, b)
                                                   >> 184 
                                                   >> 185 #if GCC_VERSION >= 40100 && GCC_VERSION < 40600
                                                   >> 186 # define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
                                                   >> 187 #endif
                                                   >> 188 
                                                   >> 189 #if GCC_VERSION >= 40300
                                                   >> 190 /* Mark functions as cold. gcc will assume any path leading to a call
                                                   >> 191  * to them will be unlikely.  This means a lot of manual unlikely()s
                                                   >> 192  * are unnecessary now for any paths leading to the usual suspects
                                                   >> 193  * like BUG(), printk(), panic() etc. [but let's keep them for now for
                                                   >> 194  * older compilers]
                                                   >> 195  *
                                                   >> 196  * Early snapshots of gcc 4.3 don't support this and we can't detect this
                                                   >> 197  * in the preprocessor, but we can live with this because they're unreleased.
                                                   >> 198  * Maketime probing would be overkill here.
                                                   >> 199  *
                                                   >> 200  * gcc also has a __attribute__((__hot__)) to move hot functions into
                                                   >> 201  * a special section, but I don't see any sense in this right now in
                                                   >> 202  * the kernel context
                                                   >> 203  */
                                                   >> 204 #define __cold                  __attribute__((__cold__))
                                                   >> 205 
                                                   >> 206 #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
                                                   >> 207 
                                                   >> 208 #ifndef __CHECKER__
                                                   >> 209 # define __compiletime_warning(message) __attribute__((warning(message)))
                                                   >> 210 # define __compiletime_error(message) __attribute__((error(message)))
                                                   >> 211 #endif /* __CHECKER__ */
                                                   >> 212 #endif /* GCC_VERSION >= 40300 */
                                                   >> 213 
                                                   >> 214 #if GCC_VERSION >= 40500
 46 /*                                                215 /*
 47  * calling noreturn functions, __builtin_unrea    216  * calling noreturn functions, __builtin_unreachable() and __builtin_trap()
 48  * confuse the stack allocation in gcc, leadin    217  * confuse the stack allocation in gcc, leading to overly large stack
 49  * frames, see https://gcc.gnu.org/bugzilla/sh    218  * frames, see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82365
 50  *                                                219  *
 51  * Adding an empty inline assembly before it w    220  * Adding an empty inline assembly before it works around the problem
 52  */                                               221  */
 53 #define barrier_before_unreachable() asm volat    222 #define barrier_before_unreachable() asm volatile("")
 54                                                   223 
 55 /*                                                224 /*
 56  * Mark a position in code as unreachable.  Th    225  * Mark a position in code as unreachable.  This can be used to
 57  * suppress control flow warnings after asm bl    226  * suppress control flow warnings after asm blocks that transfer
 58  * control elsewhere.                             227  * control elsewhere.
                                                   >> 228  *
                                                   >> 229  * Early snapshots of gcc 4.5 don't support this and we can't detect
                                                   >> 230  * this in the preprocessor, but we can live with this because they're
                                                   >> 231  * unreleased.  Really, we need to have autoconf for the kernel.
 59  */                                               232  */
 60 #define unreachable() \                           233 #define unreachable() \
 61         do {                                      234         do {                                    \
 62                 annotate_unreachable();        << 
 63                 barrier_before_unreachable();     235                 barrier_before_unreachable();   \
 64                 __builtin_unreachable();          236                 __builtin_unreachable();        \
 65         } while (0)                               237         } while (0)
 66                                                   238 
 67 #if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP)     !! 239 /* Mark a function definition as prohibited from being cloned. */
 68 #define __HAVE_BUILTIN_BSWAP32__               !! 240 #define __noclone       __attribute__((__noclone__, __optimize__("no-tracer")))
 69 #define __HAVE_BUILTIN_BSWAP64__               << 
 70 #define __HAVE_BUILTIN_BSWAP16__               << 
 71 #endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */     << 
 72                                                << 
 73 #if GCC_VERSION >= 70000                       << 
 74 #define KASAN_ABI_VERSION 5                    << 
 75 #else                                          << 
 76 #define KASAN_ABI_VERSION 4                    << 
 77 #endif                                         << 
 78                                                << 
 79 #ifdef CONFIG_SHADOW_CALL_STACK                << 
 80 #define __noscs __attribute__((__no_sanitize__ << 
 81 #endif                                         << 
 82                                                   241 
 83 #ifdef __SANITIZE_HWADDRESS__                  !! 242 #endif /* GCC_VERSION >= 40500 */
 84 #define __no_sanitize_address __attribute__((_ << 
 85 #else                                          << 
 86 #define __no_sanitize_address __attribute__((_ << 
 87 #endif                                         << 
 88                                                   243 
 89 #if defined(__SANITIZE_THREAD__)               !! 244 #if GCC_VERSION >= 40600
 90 #define __no_sanitize_thread __attribute__((__ !! 245 /*
 91 #else                                          !! 246  * When used with Link Time Optimization, gcc can optimize away C functions or
 92 #define __no_sanitize_thread                   !! 247  * variables which are referenced only from assembly code.  __visible tells the
                                                   >> 248  * optimizer that something else uses this function or variable, thus preventing
                                                   >> 249  * this.
                                                   >> 250  */
                                                   >> 251 #define __visible       __attribute__((externally_visible))
 93 #endif                                            252 #endif
 94                                                   253 
 95 #define __no_sanitize_undefined __attribute__( << 
 96                                                   254 
                                                   >> 255 #if GCC_VERSION >= 40900 && !defined(__CHECKER__)
 97 /*                                                256 /*
 98  * Only supported since gcc >= 12              !! 257  * __assume_aligned(n, k): Tell the optimizer that the returned
                                                   >> 258  * pointer can be assumed to be k modulo n. The second argument is
                                                   >> 259  * optional (default 0), so we use a variadic macro to make the
                                                   >> 260  * shorthand.
                                                   >> 261  *
                                                   >> 262  * Beware: Do not apply this to functions which may return
                                                   >> 263  * ERR_PTRs. Also, it is probably unwise to apply it to functions
                                                   >> 264  * returning extra information in the low bits (but in that case the
                                                   >> 265  * compiler should see some alignment anyway, when the return value is
                                                   >> 266  * massaged by 'flags = ptr & 3; ptr &= ~3;').
 99  */                                               267  */
100 #if defined(CONFIG_KCOV) && __has_attribute(__ !! 268 #define __assume_aligned(a, ...) __attribute__((__assume_aligned__(a, ## __VA_ARGS__)))
101 #define __no_sanitize_coverage __attribute__(( << 
102 #else                                          << 
103 #define __no_sanitize_coverage                 << 
104 #endif                                            269 #endif
105                                                   270 
106 /*                                                271 /*
107  * Treat __SANITIZE_HWADDRESS__ the same as __ !! 272  * GCC 'asm goto' miscompiles certain code sequences:
108  * matching the defines used by Clang.         !! 273  *
                                                   >> 274  *   http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
                                                   >> 275  *
                                                   >> 276  * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
                                                   >> 277  *
                                                   >> 278  * (asm goto is automatically volatile - the naming reflects this.)
109  */                                               279  */
110 #ifdef __SANITIZE_HWADDRESS__                  !! 280 #define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
111 #define __SANITIZE_ADDRESS__                   !! 281 
                                                   >> 282 #ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
                                                   >> 283 #if GCC_VERSION >= 40400
                                                   >> 284 #define __HAVE_BUILTIN_BSWAP32__
                                                   >> 285 #define __HAVE_BUILTIN_BSWAP64__
                                                   >> 286 #endif
                                                   >> 287 #if GCC_VERSION >= 40800 || (defined(__powerpc__) && GCC_VERSION >= 40600)
                                                   >> 288 #define __HAVE_BUILTIN_BSWAP16__
112 #endif                                            289 #endif
                                                   >> 290 #endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
113                                                   291 
114 /*                                             !! 292 #if GCC_VERSION >= 70000
115  * GCC does not support KMSAN.                 !! 293 #define KASAN_ABI_VERSION 5
116  */                                            !! 294 #elif GCC_VERSION >= 50000
117 #define __no_sanitize_memory                   !! 295 #define KASAN_ABI_VERSION 4
118 #define __no_kmsan_checks                      !! 296 #elif GCC_VERSION >= 40902
                                                   >> 297 #define KASAN_ABI_VERSION 3
                                                   >> 298 #endif
119                                                   299 
                                                   >> 300 #if GCC_VERSION >= 40902
120 /*                                                301 /*
121  * Turn individual warnings and errors on and  !! 302  * Tell the compiler that address safety instrumentation (KASAN)
122  * on version.                                 !! 303  * should not be applied to that function.
                                                   >> 304  * Conflicts with inlining: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67368
123  */                                               305  */
124 #define __diag_GCC(version, severity, s) \     !! 306 #define __no_sanitize_address __attribute__((no_sanitize_address))
125         __diag_GCC_ ## version(__diag_GCC_ ##  !! 307 #endif
126                                                << 
127 /* Severity used in pragma directives */       << 
128 #define __diag_GCC_ignore       ignored        << 
129 #define __diag_GCC_warn         warning        << 
130 #define __diag_GCC_error        error          << 
131                                                   308 
132 #define __diag_str1(s)          #s             !! 309 #endif  /* gcc version >= 40000 specific checks */
133 #define __diag_str(s)           __diag_str1(s) << 
134 #define __diag(s)               _Pragma(__diag << 
135                                                   310 
136 #if GCC_VERSION >= 80000                       !! 311 #if !defined(__noclone)
137 #define __diag_GCC_8(s)         __diag(s)      !! 312 #define __noclone       /* not needed */
138 #else                                          << 
139 #define __diag_GCC_8(s)                        << 
140 #endif                                            313 #endif
141                                                   314 
142 #define __diag_ignore_all(option, comment) \   !! 315 #if !defined(__no_sanitize_address)
143         __diag(__diag_GCC_ignore option)       !! 316 #define __no_sanitize_address
                                                   >> 317 #endif
144                                                   318 
145 /*                                                319 /*
146  * Prior to 9.1, -Wno-alloc-size-larger-than ( !! 320  * A trick to suppress uninitialized variable warning without generating any
147  * attribute) do not work, and must be disable !! 321  * code
148  */                                               322  */
149 #if GCC_VERSION < 90100                        !! 323 #define uninitialized_var(x) x = x
150 #undef __alloc_size__                          !! 324 
                                                   >> 325 #if GCC_VERSION >= 50100
                                                   >> 326 #define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
151 #endif                                            327 #endif
152                                                   328 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php