1 
   2 #define IDENT(n) __IDENT(n## _ident, #n, 0)
   3 #define IDENT_RESERVED(n) __IDENT(n## _ident, #n, 1)
   4 
   5 /* Basic C reserved words.. */
   6 IDENT_RESERVED(sizeof);
   7 IDENT_RESERVED(if);
   8 IDENT_RESERVED(else);
   9 IDENT_RESERVED(return);
  10 IDENT_RESERVED(switch);
  11 IDENT_RESERVED(case);
  12 IDENT_RESERVED(default);
  13 IDENT_RESERVED(break);
  14 IDENT_RESERVED(continue);
  15 IDENT_RESERVED(for);
  16 IDENT_RESERVED(while);
  17 IDENT_RESERVED(do);
  18 IDENT_RESERVED(goto);
  19 
  20 /* C typenames. They get marked as reserved when initialized */
  21 IDENT(struct);
  22 IDENT(union);
  23 IDENT(enum);
  24 IDENT(__attribute); IDENT(__attribute__);
  25 IDENT(volatile); IDENT(__volatile); IDENT(__volatile__);
  26 IDENT(double);
  27 
  28 /* C storage classes. They get marked as reserved when initialized */
  29 IDENT(static);
  30 
  31 /* C99 keywords */
  32 IDENT(restrict); IDENT(__restrict); IDENT(__restrict__);
  33 IDENT(_Bool);
  34 IDENT(_Complex);
  35 IDENT_RESERVED(_Imaginary);
  36 
  37 /* C11 keywords */
  38 IDENT(_Alignas);
  39 IDENT_RESERVED(_Alignof);
  40 IDENT_RESERVED(_Atomic);
  41 IDENT_RESERVED(_Generic);
  42 IDENT(_Noreturn);
  43 IDENT_RESERVED(_Static_assert);
  44 IDENT(_Thread_local);
  45 
  46 /* Special case for L'\t' */
  47 IDENT(L);
  48 
  49 /* Extended gcc identifiers */
  50 IDENT(asm); IDENT_RESERVED(__asm); IDENT_RESERVED(__asm__);
  51 IDENT(alignof); IDENT_RESERVED(__alignof); IDENT_RESERVED(__alignof__); 
  52 IDENT_RESERVED(__sizeof_ptr__);
  53 IDENT_RESERVED(__builtin_types_compatible_p);
  54 IDENT_RESERVED(__builtin_offsetof);
  55 IDENT_RESERVED(__label__);
  56 
  57 /* Preprocessor idents.  Direct use of __IDENT avoids mentioning the keyword
  58  * itself by name, preventing these tokens from expanding when compiling
  59  * sparse. */
  60 IDENT(defined);
  61 IDENT(once);
  62 __IDENT(pragma_ident, "__pragma__", 0);
  63 __IDENT(_Pragma_ident, "_Pragma", 0);
  64 __IDENT(__VA_ARGS___ident, "__VA_ARGS__", 0);
  65 __IDENT(__LINE___ident, "__LINE__", 0);
  66 __IDENT(__FILE___ident, "__FILE__", 0);
  67 __IDENT(__DATE___ident, "__DATE__", 0);
  68 __IDENT(__TIME___ident, "__TIME__", 0);
  69 __IDENT(__func___ident, "__func__", 0);
  70 __IDENT(__FUNCTION___ident, "__FUNCTION__", 0);
  71 __IDENT(__PRETTY_FUNCTION___ident, "__PRETTY_FUNCTION__", 0);
  72 __IDENT(__COUNTER___ident, "__COUNTER__", 0);
  73 
  74 /* Sparse commands */
  75 IDENT_RESERVED(__context__);
  76 IDENT_RESERVED(__range__);
  77 
  78 /* Magic function names we recognize */
  79 IDENT(memset); IDENT(memcpy);
  80 IDENT(copy_to_user); IDENT(copy_from_user);
  81 IDENT(main);
  82 
  83 #undef __IDENT
  84 #undef IDENT
  85 #undef IDENT_RESERVED