~ [ 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.16.18)


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

~ [ 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