preprocessor: Make __has_include a builtin macro [PR93452]
The clever hack of '#define __has_include __has_include' breaks -dD and -fdirectives-only, because that emits definitions. This turns __has_include into a proper builtin macro. Thus it's never emitted via -dD, and because use outside of directive processing is undefined, we can just expand it anywhere. PR preprocessor/93452 * internal.h (struct spec_nodes): Drop n__has_include{,_next}. * directives.c (lex_macro_node): Don't check __has_include redef. * expr.c (eval_token): Drop __has_include eval. (parse_has_include): Move to ... * macro.c (builtin_has_include): ... here. (_cpp_builtin_macro_text): Eval __has_include{,_next}. * include/cpplib.h (enum cpp_builtin_type): Add BT_HAS_INCLUDE{,_NEXT}. * init.c (builtin_array): Add them. (cpp_init_builtins): Drop __has_include{,_next} init here ... * pch.c (cpp_read_state): ... and here. * traditional.c (enum ls): Drop has_include states ... (_cpp_scan_out_logical_line): ... and here.
This commit is contained in:
parent
a5d81aaab6
commit
3d056cbfb3
11 changed files with 103 additions and 93 deletions
|
@ -860,7 +860,9 @@ enum cpp_builtin_type
|
|||
BT_TIMESTAMP, /* `__TIMESTAMP__' */
|
||||
BT_COUNTER, /* `__COUNTER__' */
|
||||
BT_HAS_ATTRIBUTE, /* `__has_attribute(x)' */
|
||||
BT_HAS_BUILTIN /* `__has_builtin(x)' */
|
||||
BT_HAS_BUILTIN, /* `__has_builtin(x)' */
|
||||
BT_HAS_INCLUDE, /* `__has_include(x)' */
|
||||
BT_HAS_INCLUDE_NEXT, /* `__has_include_next(x)' */
|
||||
};
|
||||
|
||||
#define CPP_HASHNODE(HNODE) ((cpp_hashnode *) (HNODE))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue