]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - include/linux/compiler-gcc.h
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[mirror_ubuntu-artful-kernel.git] / include / linux / compiler-gcc.h
index 0efef9cf014fb1c9467ee293eb22f130912e4f8f..cd4bbe8242bd89802c0440329615c6c64fedbd69 100644 (file)
 
 /*
  * Force always-inline if the user requests it so via the .config,
- * or if gcc is too old:
+ * or if gcc is too old.
+ * GCC does not warn about unused static inline functions for
+ * -Wunused-function.  This turns out to avoid the need for complex #ifdef
+ * directives.  Suppress the warning in clang as well by using "unused"
+ * function attribute, which is redundant but not harmful for gcc.
  */
 #if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) ||               \
     !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
-#define inline         inline          __attribute__((always_inline)) notrace
-#define __inline__     __inline__      __attribute__((always_inline)) notrace
-#define __inline       __inline        __attribute__((always_inline)) notrace
+#define inline inline          __attribute__((always_inline,unused)) notrace
+#define __inline__ __inline__  __attribute__((always_inline,unused)) notrace
+#define __inline __inline      __attribute__((always_inline,unused)) notrace
 #else
 /* A lot of inline functions can cause havoc with function tracing */
-#define inline         inline          notrace
-#define __inline__     __inline__      notrace
-#define __inline       __inline        notrace
+#define inline inline          __attribute__((unused)) notrace
+#define __inline__ __inline__  __attribute__((unused)) notrace
+#define __inline __inline      __attribute__((unused)) notrace
 #endif
 
 #define __always_inline        inline __attribute__((always_inline))
 /* Mark a function definition as prohibited from being cloned. */
 #define __noclone      __attribute__((__noclone__, __optimize__("no-tracer")))
 
+#ifdef RANDSTRUCT_PLUGIN
+#define __randomize_layout __attribute__((randomize_layout))
+#define __no_randomize_layout __attribute__((no_randomize_layout))
+#endif
+
 #endif /* GCC_VERSION >= 40500 */
 
 #if GCC_VERSION >= 40600
 #define __no_sanitize_address __attribute__((no_sanitize_address))
 #endif
 
+#if GCC_VERSION >= 50100
+/*
+ * Mark structures as requiring designated initializers.
+ * https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
+ */
+#define __designated_init __attribute__((designated_init))
+#endif
+
 #endif /* gcc version >= 40000 specific checks */
 
 #if !defined(__noclone)