From 3d056cbfb3484f4037b34c908b26e1c6776c86b5 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Tue, 28 Jan 2020 07:58:29 -0800 Subject: 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. --- libcpp/internal.h | 2 -- 1 file changed, 2 deletions(-) (limited to 'libcpp/internal.h') diff --git a/libcpp/internal.h b/libcpp/internal.h index 5453c3b..97d9bdb 100644 --- a/libcpp/internal.h +++ b/libcpp/internal.h @@ -290,8 +290,6 @@ struct spec_nodes cpp_hashnode *n_false; /* C++ keyword false */ cpp_hashnode *n__VA_ARGS__; /* C99 vararg macros */ cpp_hashnode *n__VA_OPT__; /* C++ vararg macros */ - cpp_hashnode *n__has_include; /* __has_include operator */ - cpp_hashnode *n__has_include_next; /* __has_include_next operator */ }; typedef struct _cpp_line_note _cpp_line_note; -- cgit v1.1