11f5207b7SJohn Levon 21f5207b7SJohn Levon #define IDENT(n) __IDENT(n## _ident, #n, 0) 31f5207b7SJohn Levon #define IDENT_RESERVED(n) __IDENT(n## _ident, #n, 1) 41f5207b7SJohn Levon 51f5207b7SJohn Levon /* Basic C reserved words.. */ 61f5207b7SJohn Levon IDENT_RESERVED(sizeof); 71f5207b7SJohn Levon IDENT_RESERVED(if); 81f5207b7SJohn Levon IDENT_RESERVED(else); 91f5207b7SJohn Levon IDENT_RESERVED(return); 101f5207b7SJohn Levon IDENT_RESERVED(switch); 111f5207b7SJohn Levon IDENT_RESERVED(case); 121f5207b7SJohn Levon IDENT_RESERVED(default); 131f5207b7SJohn Levon IDENT_RESERVED(break); 141f5207b7SJohn Levon IDENT_RESERVED(continue); 151f5207b7SJohn Levon IDENT_RESERVED(for); 161f5207b7SJohn Levon IDENT_RESERVED(while); 171f5207b7SJohn Levon IDENT_RESERVED(do); 181f5207b7SJohn Levon IDENT_RESERVED(goto); 191f5207b7SJohn Levon 201f5207b7SJohn Levon /* C typenames. They get marked as reserved when initialized */ 211f5207b7SJohn Levon IDENT(struct); 221f5207b7SJohn Levon IDENT(union); 231f5207b7SJohn Levon IDENT(enum); 241f5207b7SJohn Levon IDENT(__attribute); IDENT(__attribute__); 251f5207b7SJohn Levon IDENT(volatile); IDENT(__volatile); IDENT(__volatile__); 261f5207b7SJohn Levon IDENT(double); 271f5207b7SJohn Levon 281f5207b7SJohn Levon /* C storage classes. They get marked as reserved when initialized */ 291f5207b7SJohn Levon IDENT(static); 301f5207b7SJohn Levon 311f5207b7SJohn Levon /* C99 keywords */ 321f5207b7SJohn Levon IDENT(restrict); IDENT(__restrict); IDENT(__restrict__); 331f5207b7SJohn Levon IDENT(_Bool); 34*eb44bcc7SJohn Levon IDENT_RESERVED(_Complex); 351f5207b7SJohn Levon IDENT_RESERVED(_Imaginary); 361f5207b7SJohn Levon 371f5207b7SJohn Levon /* C11 keywords */ 381f5207b7SJohn Levon IDENT(_Alignas); 391f5207b7SJohn Levon IDENT_RESERVED(_Alignof); 40c85f09ccSJohn Levon IDENT(_Atomic); 411f5207b7SJohn Levon IDENT_RESERVED(_Generic); 421f5207b7SJohn Levon IDENT(_Noreturn); 431f5207b7SJohn Levon IDENT_RESERVED(_Static_assert); 441f5207b7SJohn Levon IDENT(_Thread_local); 451f5207b7SJohn Levon 461f5207b7SJohn Levon /* Special case for L'\t' */ 471f5207b7SJohn Levon IDENT(L); 481f5207b7SJohn Levon 491f5207b7SJohn Levon /* Extended gcc identifiers */ 501f5207b7SJohn Levon IDENT(asm); IDENT_RESERVED(__asm); IDENT_RESERVED(__asm__); 511f5207b7SJohn Levon IDENT(alignof); IDENT_RESERVED(__alignof); IDENT_RESERVED(__alignof__); 521f5207b7SJohn Levon IDENT_RESERVED(__sizeof_ptr__); 531f5207b7SJohn Levon IDENT_RESERVED(__builtin_types_compatible_p); 541f5207b7SJohn Levon IDENT_RESERVED(__builtin_offsetof); 551f5207b7SJohn Levon IDENT_RESERVED(__label__); 561f5207b7SJohn Levon 571f5207b7SJohn Levon /* Preprocessor idents. Direct use of __IDENT avoids mentioning the keyword 581f5207b7SJohn Levon * itself by name, preventing these tokens from expanding when compiling 591f5207b7SJohn Levon * sparse. */ 601f5207b7SJohn Levon IDENT(defined); 611f5207b7SJohn Levon IDENT(once); 62c85f09ccSJohn Levon IDENT(__has_attribute); 63c85f09ccSJohn Levon IDENT(__has_builtin); 641f5207b7SJohn Levon __IDENT(pragma_ident, "__pragma__", 0); 651f5207b7SJohn Levon __IDENT(_Pragma_ident, "_Pragma", 0); 661f5207b7SJohn Levon __IDENT(__VA_ARGS___ident, "__VA_ARGS__", 0); 671f5207b7SJohn Levon __IDENT(__func___ident, "__func__", 0); 681f5207b7SJohn Levon __IDENT(__FUNCTION___ident, "__FUNCTION__", 0); 691f5207b7SJohn Levon __IDENT(__PRETTY_FUNCTION___ident, "__PRETTY_FUNCTION__", 0); 701f5207b7SJohn Levon 711f5207b7SJohn Levon /* Sparse commands */ 721f5207b7SJohn Levon IDENT_RESERVED(__context__); 731f5207b7SJohn Levon IDENT_RESERVED(__range__); 741f5207b7SJohn Levon 751f5207b7SJohn Levon /* Magic function names we recognize */ 761f5207b7SJohn Levon IDENT(memset); IDENT(memcpy); 771f5207b7SJohn Levon IDENT(copy_to_user); IDENT(copy_from_user); 781f5207b7SJohn Levon IDENT(main); 791f5207b7SJohn Levon 801f5207b7SJohn Levon #undef __IDENT 811f5207b7SJohn Levon #undef IDENT 821f5207b7SJohn Levon #undef IDENT_RESERVED 83