2 #define IDENT(n) __IDENT(n## _ident, #n, 0)
3 #define IDENT_RESERVED(n) __IDENT(n## _ident, #n, 1)
5 /* Basic C reserved words.. */
6 IDENT_RESERVED(sizeof);
9 IDENT_RESERVED(return);
10 IDENT_RESERVED(switch);
12 IDENT_RESERVED(default);
13 IDENT_RESERVED(break);
14 IDENT_RESERVED(continue);
16 IDENT_RESERVED(while);
20 /* C typenames. They get marked as reserved when initialized */
24 IDENT(__attribute
); IDENT(__attribute__
);
25 IDENT(volatile); IDENT(__volatile
); IDENT(__volatile__
);
28 /* C storage classes. They get marked as reserved when initialized */
32 IDENT(restrict
); IDENT(__restrict
); IDENT(__restrict__
);
34 IDENT_RESERVED(_Complex
);
35 IDENT_RESERVED(_Imaginary
);
39 IDENT_RESERVED(_Alignof
);
40 IDENT_RESERVED(_Atomic
);
41 IDENT_RESERVED(_Generic
);
43 IDENT_RESERVED(_Static_assert
);
46 /* Special case for L'\t' */
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__
);
57 /* Preprocessor idents. Direct use of __IDENT avoids mentioning the keyword
58 * itself by name, preventing these tokens from expanding when compiling
62 __IDENT(pragma_ident
, "__pragma__", 0);
63 __IDENT(__VA_ARGS___ident
, "__VA_ARGS__", 0);
64 __IDENT(__LINE___ident
, "__LINE__", 0);
65 __IDENT(__FILE___ident
, "__FILE__", 0);
66 __IDENT(__DATE___ident
, "__DATE__", 0);
67 __IDENT(__TIME___ident
, "__TIME__", 0);
68 __IDENT(__func___ident
, "__func__", 0);
69 __IDENT(__FUNCTION___ident
, "__FUNCTION__", 0);
70 __IDENT(__PRETTY_FUNCTION___ident
, "__PRETTY_FUNCTION__", 0);
71 __IDENT(__COUNTER___ident
, "__COUNTER__", 0);
74 IDENT_RESERVED(__context__
);
75 IDENT_RESERVED(__range__
);
77 /* Magic function names we recognize */
78 IDENT(memset
); IDENT(memcpy
);
79 IDENT(copy_to_user
); IDENT(copy_from_user
);