1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 219261401SArnaldo Carvalho de Melo #ifndef _TOOLS_LINUX_COMPILER_H_ 3*a7306f3cSNataniel Farzan #error "Please do not include <linux/compiler-gcc.h> directly, include <linux/compiler.h> instead." 419261401SArnaldo Carvalho de Melo #endif 519261401SArnaldo Carvalho de Melo 619261401SArnaldo Carvalho de Melo /* 719261401SArnaldo Carvalho de Melo * Common definitions for all gcc versions go here. 819261401SArnaldo Carvalho de Melo */ 98918dc42SQuentin Monnet #ifndef GCC_VERSION 1019261401SArnaldo Carvalho de Melo #define GCC_VERSION (__GNUC__ * 10000 \ 1119261401SArnaldo Carvalho de Melo + __GNUC_MINOR__ * 100 \ 1219261401SArnaldo Carvalho de Melo + __GNUC_PATCHLEVEL__) 138918dc42SQuentin Monnet #endif 1419261401SArnaldo Carvalho de Melo 15f7a858bfSLiam Howlett #if __has_attribute(__fallthrough__) 16f7a858bfSLiam Howlett # define fallthrough __attribute__((__fallthrough__)) 17f7a858bfSLiam Howlett #else 18f7a858bfSLiam Howlett # define fallthrough do {} while (0) /* fallthrough */ 1919261401SArnaldo Carvalho de Melo #endif 2049006538SArnaldo Carvalho de Melo 21d0ee23f9SNathan Chancellor #if __has_attribute(__error__) 2249006538SArnaldo Carvalho de Melo # define __compiletime_error(message) __attribute__((error(message))) 23d0ee23f9SNathan Chancellor #endif 24f6441affSArnaldo Carvalho de Melo 25f6441affSArnaldo Carvalho de Melo /* &a[0] degrades to a pointer: a different type from an array */ 26f6441affSArnaldo Carvalho de Melo #define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0])) 276c346643SArnaldo Carvalho de Melo 286e1690c4SArnaldo Carvalho de Melo #ifndef __pure 296e1690c4SArnaldo Carvalho de Melo #define __pure __attribute__((pure)) 306e1690c4SArnaldo Carvalho de Melo #endif 319dd4ca47SArnaldo Carvalho de Melo #define noinline __attribute__((noinline)) 32259d4077SArnaldo Carvalho de Melo #ifndef __packed 33c9f5da74SArnaldo Carvalho de Melo #define __packed __attribute__((packed)) 34259d4077SArnaldo Carvalho de Melo #endif 35259d4077SArnaldo Carvalho de Melo #ifndef __noreturn 366c346643SArnaldo Carvalho de Melo #define __noreturn __attribute__((noreturn)) 37259d4077SArnaldo Carvalho de Melo #endif 38259d4077SArnaldo Carvalho de Melo #ifndef __aligned 395c97cac6SArnaldo Carvalho de Melo #define __aligned(x) __attribute__((aligned(x))) 40259d4077SArnaldo Carvalho de Melo #endif 41afaed6d3SArnaldo Carvalho de Melo #define __printf(a, b) __attribute__((format(printf, a, b))) 423ee350fbSArnaldo Carvalho de Melo #define __scanf(a, b) __attribute__((format(scanf, a, b))) 43