2 Copyright (C) 1986-2022 Free Software Foundation, Inc.
3 Contributed by Per Bothner, 1994-95.
4 Based on CCCP program by Paul Rubin, June 1986
5 Adapted to ANSI C, Richard Stallman, Jan 1987
7 This program is free software; you can redistribute it and/or modify it
8 under the terms of the GNU General Public License as published by the
9 Free Software Foundation; either version 3, or (at your option) any
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
26 #include "localedir.h"
27 #include "filenames.h"
29 #ifndef ENABLE_CANONICAL_SYSTEM_HEADERS
30 #ifdef HAVE_DOS_BASED_FILE_SYSTEM
31 #define ENABLE_CANONICAL_SYSTEM_HEADERS 1
33 #define ENABLE_CANONICAL_SYSTEM_HEADERS 0
37 static void init_library (void);
38 static void mark_named_operators (cpp_reader
*, int);
39 static bool read_original_filename (cpp_reader
*);
40 static void read_original_directory (cpp_reader
*);
41 static void post_options (cpp_reader
*);
43 /* If we have designated initializers (GCC >2.7) these tables can be
44 initialized, constant data. Otherwise, they have to be filled in at
46 #if HAVE_DESIGNATED_INITIALIZERS
48 #define init_trigraph_map() /* Nothing. */
49 #define TRIGRAPH_MAP \
50 __extension__ const uchar _cpp_trigraph_map[UCHAR_MAX + 1] = {
53 #define s(p, v) [p] = v,
57 #define TRIGRAPH_MAP uchar _cpp_trigraph_map[UCHAR_MAX + 1] = { 0 }; \
58 static void init_trigraph_map (void) { \
59 unsigned char *x = _cpp_trigraph_map;
62 #define s(p, v) x[p] = v;
67 s('=', '#') s(')', ']') s('!', '|')
68 s('(', '[') s('\'', '^') s('>', '}')
69 s('/', '\\') s('<', '{') s('-', '~')
76 /* A set of booleans indicating what CPP features each source language
82 char extended_numbers
;
83 char extended_identifiers
;
90 char binary_constants
;
91 char digit_separators
;
93 char utf8_char_literals
;
99 char warning_directive
;
100 char delimited_escape_seqs
;
104 static const struct lang_flags lang_defaults
[] =
105 { /* c99 c++ xnum xid c11 std digr ulit rlit udlit bincst digsep trig u8chlit vaopt scope dfp szlit elifdef warndir delim trufal */
106 /* GNUC89 */ { 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
107 /* GNUC99 */ { 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
108 /* GNUC11 */ { 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
109 /* GNUC17 */ { 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0 },
110 /* GNUC2X */ { 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1 },
111 /* STDC89 */ { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
112 /* STDC94 */ { 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
113 /* STDC99 */ { 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
114 /* STDC11 */ { 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
115 /* STDC17 */ { 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
116 /* STDC2X */ { 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1 },
117 /* GNUCXX */ { 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 },
118 /* CXX98 */ { 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 },
119 /* GNUCXX11 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 },
120 /* CXX11 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 },
121 /* GNUCXX14 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1 },
122 /* CXX14 */ { 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1 },
123 /* GNUCXX17 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
124 /* CXX17 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1 },
125 /* GNUCXX20 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
126 /* CXX20 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1 },
127 /* GNUCXX23 */ { 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
128 /* CXX23 */ { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1 },
129 /* ASM */ { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
132 /* Sets internal flags correctly for a given language. */
134 cpp_set_lang (cpp_reader
*pfile
, enum c_lang lang
)
136 const struct lang_flags
*l
= &lang_defaults
[(int) lang
];
138 CPP_OPTION (pfile
, lang
) = lang
;
140 CPP_OPTION (pfile
, c99
) = l
->c99
;
141 CPP_OPTION (pfile
, cplusplus
) = l
->cplusplus
;
142 CPP_OPTION (pfile
, extended_numbers
) = l
->extended_numbers
;
143 CPP_OPTION (pfile
, extended_identifiers
) = l
->extended_identifiers
;
144 CPP_OPTION (pfile
, c11_identifiers
) = l
->c11_identifiers
;
145 CPP_OPTION (pfile
, std
) = l
->std
;
146 CPP_OPTION (pfile
, digraphs
) = l
->digraphs
;
147 CPP_OPTION (pfile
, uliterals
) = l
->uliterals
;
148 CPP_OPTION (pfile
, rliterals
) = l
->rliterals
;
149 CPP_OPTION (pfile
, user_literals
) = l
->user_literals
;
150 CPP_OPTION (pfile
, binary_constants
) = l
->binary_constants
;
151 CPP_OPTION (pfile
, digit_separators
) = l
->digit_separators
;
152 CPP_OPTION (pfile
, trigraphs
) = l
->trigraphs
;
153 CPP_OPTION (pfile
, utf8_char_literals
) = l
->utf8_char_literals
;
154 CPP_OPTION (pfile
, va_opt
) = l
->va_opt
;
155 CPP_OPTION (pfile
, scope
) = l
->scope
;
156 CPP_OPTION (pfile
, dfp_constants
) = l
->dfp_constants
;
157 CPP_OPTION (pfile
, size_t_literals
) = l
->size_t_literals
;
158 CPP_OPTION (pfile
, elifdef
) = l
->elifdef
;
159 CPP_OPTION (pfile
, warning_directive
) = l
->warning_directive
;
160 CPP_OPTION (pfile
, delimited_escape_seqs
) = l
->delimited_escape_seqs
;
161 CPP_OPTION (pfile
, true_false
) = l
->true_false
;
164 /* Initialize library global state. */
168 static int initialized
= 0;
176 /* Set up the trigraph map. This doesn't need to do anything if
177 we were compiled with a compiler that supports C99 designated
179 init_trigraph_map ();
182 (void) bindtextdomain (PACKAGE
, LOCALEDIR
);
187 /* Initialize a cpp_reader structure. */
189 cpp_create_reader (enum c_lang lang
, cpp_hash_table
*table
,
190 class line_maps
*line_table
)
194 /* Initialize this instance of the library if it hasn't been already. */
197 pfile
= XCNEW (cpp_reader
);
198 memset (&pfile
->base_context
, 0, sizeof (pfile
->base_context
));
200 cpp_set_lang (pfile
, lang
);
201 CPP_OPTION (pfile
, warn_multichar
) = 1;
202 CPP_OPTION (pfile
, discard_comments
) = 1;
203 CPP_OPTION (pfile
, discard_comments_in_macro_exp
) = 1;
204 CPP_OPTION (pfile
, max_include_depth
) = 200;
205 CPP_OPTION (pfile
, operator_names
) = 1;
206 CPP_OPTION (pfile
, warn_trigraphs
) = 2;
207 CPP_OPTION (pfile
, warn_endif_labels
) = 1;
208 CPP_OPTION (pfile
, cpp_warn_c90_c99_compat
) = -1;
209 CPP_OPTION (pfile
, cpp_warn_c11_c2x_compat
) = -1;
210 CPP_OPTION (pfile
, cpp_warn_cxx11_compat
) = 0;
211 CPP_OPTION (pfile
, cpp_warn_cxx20_compat
) = 0;
212 CPP_OPTION (pfile
, cpp_warn_deprecated
) = 1;
213 CPP_OPTION (pfile
, cpp_warn_long_long
) = 0;
214 CPP_OPTION (pfile
, dollars_in_ident
) = 1;
215 CPP_OPTION (pfile
, warn_dollars
) = 1;
216 CPP_OPTION (pfile
, warn_variadic_macros
) = 1;
217 CPP_OPTION (pfile
, warn_builtin_macro_redefined
) = 1;
218 CPP_OPTION (pfile
, cpp_warn_implicit_fallthrough
) = 0;
219 /* By default, track locations of tokens resulting from macro
220 expansion. The '2' means, track the locations with the highest
221 accuracy. Read the comments for struct
222 cpp_options::track_macro_expansion to learn about the other
224 CPP_OPTION (pfile
, track_macro_expansion
) = 2;
225 CPP_OPTION (pfile
, warn_normalize
) = normalized_C
;
226 CPP_OPTION (pfile
, warn_literal_suffix
) = 1;
227 CPP_OPTION (pfile
, canonical_system_headers
)
228 = ENABLE_CANONICAL_SYSTEM_HEADERS
;
229 CPP_OPTION (pfile
, ext_numeric_literals
) = 1;
230 CPP_OPTION (pfile
, warn_date_time
) = 0;
231 CPP_OPTION (pfile
, cpp_warn_bidirectional
) = bidirectional_unpaired
;
232 CPP_OPTION (pfile
, cpp_warn_invalid_utf8
) = 0;
233 CPP_OPTION (pfile
, cpp_warn_unicode
) = 1;
234 CPP_OPTION (pfile
, cpp_input_charset_explicit
) = 0;
236 /* Default CPP arithmetic to something sensible for the host for the
237 benefit of dumb users like fix-header. */
238 CPP_OPTION (pfile
, precision
) = CHAR_BIT
* sizeof (long);
239 CPP_OPTION (pfile
, char_precision
) = CHAR_BIT
;
240 CPP_OPTION (pfile
, wchar_precision
) = CHAR_BIT
* sizeof (int);
241 CPP_OPTION (pfile
, int_precision
) = CHAR_BIT
* sizeof (int);
242 CPP_OPTION (pfile
, unsigned_char
) = 0;
243 CPP_OPTION (pfile
, unsigned_wchar
) = 1;
244 CPP_OPTION (pfile
, unsigned_utf8char
) = 1;
245 CPP_OPTION (pfile
, bytes_big_endian
) = 1; /* does not matter */
247 /* Default to no charset conversion. */
248 CPP_OPTION (pfile
, narrow_charset
) = _cpp_default_encoding ();
249 CPP_OPTION (pfile
, wide_charset
) = 0;
251 /* Default the input character set to UTF-8. */
252 CPP_OPTION (pfile
, input_charset
) = _cpp_default_encoding ();
254 /* A fake empty "directory" used as the starting point for files
255 looked up without a search path. Name cannot be '/' because we
256 don't want to prepend anything at all to filenames using it. All
257 other entries are correct zero-initialized. */
258 pfile
->no_search_path
.name
= (char *) "";
260 /* Initialize the line map. */
261 pfile
->line_table
= line_table
;
263 /* Initialize lexer state. */
264 pfile
->state
.save_comments
= ! CPP_OPTION (pfile
, discard_comments
);
266 /* Set up static tokens. */
267 pfile
->avoid_paste
.type
= CPP_PADDING
;
268 pfile
->avoid_paste
.val
.source
= NULL
;
269 pfile
->avoid_paste
.src_loc
= 0;
270 pfile
->endarg
.type
= CPP_EOF
;
271 pfile
->endarg
.flags
= 0;
272 pfile
->endarg
.src_loc
= 0;
274 /* Create a token buffer for the lexer. */
275 _cpp_init_tokenrun (&pfile
->base_run
, 250);
276 pfile
->cur_run
= &pfile
->base_run
;
277 pfile
->cur_token
= pfile
->base_run
.base
;
279 /* Initialize the base context. */
280 pfile
->context
= &pfile
->base_context
;
281 pfile
->base_context
.c
.macro
= 0;
282 pfile
->base_context
.prev
= pfile
->base_context
.next
= 0;
284 /* Aligned and unaligned storage. */
285 pfile
->a_buff
= _cpp_get_buff (pfile
, 0);
286 pfile
->u_buff
= _cpp_get_buff (pfile
, 0);
288 /* Initialize table for push_macro/pop_macro. */
289 pfile
->pushed_macros
= 0;
291 /* Do not force token locations by default. */
292 pfile
->forced_token_location
= 0;
294 /* Note the timestamp is unset. */
295 pfile
->time_stamp
= time_t (-1);
296 pfile
->time_stamp_kind
= 0;
298 /* The expression parser stack. */
299 _cpp_expand_op_stack (pfile
);
301 /* Initialize the buffer obstack. */
302 obstack_specify_allocation (&pfile
->buffer_ob
, 0, 0, xmalloc
, free
);
304 _cpp_init_files (pfile
);
306 _cpp_init_hashtable (pfile
, table
);
311 /* Set the line_table entry in PFILE. This is called after reading a
312 PCH file, as the old line_table will be incorrect. */
314 cpp_set_line_map (cpp_reader
*pfile
, class line_maps
*line_table
)
316 pfile
->line_table
= line_table
;
319 /* Free resources used by PFILE. Accessing PFILE after this function
320 returns leads to undefined behavior. Returns the error count. */
322 cpp_destroy (cpp_reader
*pfile
)
324 cpp_context
*context
, *contextn
;
325 struct def_pragma_macro
*pmacro
;
326 tokenrun
*run
, *runn
;
329 free (pfile
->op_stack
);
331 while (CPP_BUFFER (pfile
) != NULL
)
332 _cpp_pop_buffer (pfile
);
334 free (pfile
->out
.base
);
336 if (pfile
->macro_buffer
)
338 free (pfile
->macro_buffer
);
339 pfile
->macro_buffer
= NULL
;
340 pfile
->macro_buffer_len
= 0;
344 deps_free (pfile
->deps
);
345 obstack_free (&pfile
->buffer_ob
, 0);
347 _cpp_destroy_hashtable (pfile
);
348 _cpp_cleanup_files (pfile
);
349 _cpp_destroy_iconv (pfile
);
351 _cpp_free_buff (pfile
->a_buff
);
352 _cpp_free_buff (pfile
->u_buff
);
353 _cpp_free_buff (pfile
->free_buffs
);
355 for (run
= &pfile
->base_run
; run
; run
= runn
)
359 if (run
!= &pfile
->base_run
)
363 for (context
= pfile
->base_context
.next
; context
; context
= contextn
)
365 contextn
= context
->next
;
369 if (pfile
->comments
.entries
)
371 for (i
= 0; i
< pfile
->comments
.count
; i
++)
372 free (pfile
->comments
.entries
[i
].comment
);
374 free (pfile
->comments
.entries
);
376 if (pfile
->pushed_macros
)
380 pmacro
= pfile
->pushed_macros
;
381 pfile
->pushed_macros
= pmacro
->next
;
385 while (pfile
->pushed_macros
);
391 /* This structure defines one built-in identifier. A node will be
392 entered in the hash table under the name NAME, with value VALUE.
394 There are two tables of these. builtin_array holds all the
395 "builtin" macros: these are handled by builtin_macro() in
396 macro.cc. Builtin is somewhat of a misnomer -- the property of
397 interest is that these macros require special code to compute their
398 expansions. The value is a "cpp_builtin_type" enumerator.
400 operator_array holds the C++ named operators. These are keywords
401 which act as aliases for punctuators. In C++, they cannot be
402 altered through #define, and #if recognizes them as operators. In
403 C, these are not entered into the hash table at all (but see
404 <iso646.h>). The value is a token-type enumerator. */
407 const uchar
*const name
;
408 const unsigned short len
;
409 const unsigned short value
;
410 const bool always_warn_if_redefined
;
413 #define B(n, t, f) { DSC(n), t, f }
414 static const struct builtin_macro builtin_array
[] =
416 B("__TIMESTAMP__", BT_TIMESTAMP
, false),
417 B("__TIME__", BT_TIME
, false),
418 B("__DATE__", BT_DATE
, false),
419 B("__FILE__", BT_FILE
, false),
420 B("__FILE_NAME__", BT_FILE_NAME
, false),
421 B("__BASE_FILE__", BT_BASE_FILE
, false),
422 B("__LINE__", BT_SPECLINE
, true),
423 B("__INCLUDE_LEVEL__", BT_INCLUDE_LEVEL
, true),
424 B("__COUNTER__", BT_COUNTER
, true),
425 /* Make sure to update the list of built-in
426 function-like macros in traditional.cc:
427 fun_like_macro() when adding more following */
428 B("__has_attribute", BT_HAS_ATTRIBUTE
, true),
429 B("__has_c_attribute", BT_HAS_STD_ATTRIBUTE
, true),
430 B("__has_cpp_attribute", BT_HAS_ATTRIBUTE
, true),
431 B("__has_builtin", BT_HAS_BUILTIN
, true),
432 B("__has_include", BT_HAS_INCLUDE
, true),
433 B("__has_include_next",BT_HAS_INCLUDE_NEXT
, true),
434 /* Keep builtins not used for -traditional-cpp at the end, and
435 update init_builtins() if any more are added. */
436 B("_Pragma", BT_PRAGMA
, true),
437 B("__STDC__", BT_STDC
, true),
441 struct builtin_operator
443 const uchar
*const name
;
444 const unsigned short len
;
445 const unsigned short value
;
448 #define B(n, t) { DSC(n), t }
449 static const struct builtin_operator operator_array
[] =
451 B("and", CPP_AND_AND
),
452 B("and_eq", CPP_AND_EQ
),
453 B("bitand", CPP_AND
),
455 B("compl", CPP_COMPL
),
457 B("not_eq", CPP_NOT_EQ
),
459 B("or_eq", CPP_OR_EQ
),
461 B("xor_eq", CPP_XOR_EQ
)
465 /* Mark the C++ named operators in the hash table. */
467 mark_named_operators (cpp_reader
*pfile
, int flags
)
469 const struct builtin_operator
*b
;
471 for (b
= operator_array
;
472 b
< (operator_array
+ ARRAY_SIZE (operator_array
));
475 cpp_hashnode
*hp
= cpp_lookup (pfile
, b
->name
, b
->len
);
477 hp
->is_directive
= 0;
478 hp
->directive_index
= b
->value
;
482 /* Helper function of cpp_type2name. Return the string associated with
483 named operator TYPE. */
485 cpp_named_operator2name (enum cpp_ttype type
)
487 const struct builtin_operator
*b
;
489 for (b
= operator_array
;
490 b
< (operator_array
+ ARRAY_SIZE (operator_array
));
493 if (type
== b
->value
)
494 return (const char *) b
->name
;
501 cpp_init_special_builtins (cpp_reader
*pfile
)
503 const struct builtin_macro
*b
;
504 size_t n
= ARRAY_SIZE (builtin_array
);
506 if (CPP_OPTION (pfile
, traditional
))
508 else if (! CPP_OPTION (pfile
, stdc_0_in_system_headers
)
509 || CPP_OPTION (pfile
, std
))
512 for (b
= builtin_array
; b
< builtin_array
+ n
; b
++)
514 if ((b
->value
== BT_HAS_ATTRIBUTE
515 || b
->value
== BT_HAS_STD_ATTRIBUTE
516 || b
->value
== BT_HAS_BUILTIN
)
517 && (CPP_OPTION (pfile
, lang
) == CLK_ASM
518 || pfile
->cb
.has_attribute
== NULL
))
520 cpp_hashnode
*hp
= cpp_lookup (pfile
, b
->name
, b
->len
);
521 hp
->type
= NT_BUILTIN_MACRO
;
522 if (b
->always_warn_if_redefined
)
523 hp
->flags
|= NODE_WARN
;
524 hp
->value
.builtin
= (enum cpp_builtin_type
) b
->value
;
528 /* Restore macro C to builtin macro definition. */
531 _cpp_restore_special_builtin (cpp_reader
*pfile
, struct def_pragma_macro
*c
)
533 size_t len
= strlen (c
->name
);
535 for (const struct builtin_macro
*b
= builtin_array
;
536 b
< builtin_array
+ ARRAY_SIZE (builtin_array
); b
++)
537 if (b
->len
== len
&& memcmp (c
->name
, b
->name
, len
+ 1) == 0)
539 cpp_hashnode
*hp
= cpp_lookup (pfile
, b
->name
, b
->len
);
540 hp
->type
= NT_BUILTIN_MACRO
;
541 if (b
->always_warn_if_redefined
)
542 hp
->flags
|= NODE_WARN
;
543 hp
->value
.builtin
= (enum cpp_builtin_type
) b
->value
;
547 /* Read the builtins table above and enter them, and language-specific
548 macros, into the hash table. HOSTED is true if this is a hosted
551 cpp_init_builtins (cpp_reader
*pfile
, int hosted
)
553 cpp_init_special_builtins (pfile
);
555 if (!CPP_OPTION (pfile
, traditional
)
556 && (! CPP_OPTION (pfile
, stdc_0_in_system_headers
)
557 || CPP_OPTION (pfile
, std
)))
558 _cpp_define_builtin (pfile
, "__STDC__ 1");
560 if (CPP_OPTION (pfile
, cplusplus
))
562 /* C++23 is not yet a standard. For now, use an invalid
563 * year/month, 202100L, which is larger than 202002L. */
564 if (CPP_OPTION (pfile
, lang
) == CLK_CXX23
565 || CPP_OPTION (pfile
, lang
) == CLK_GNUCXX23
)
566 _cpp_define_builtin (pfile
, "__cplusplus 202100L");
567 else if (CPP_OPTION (pfile
, lang
) == CLK_CXX20
568 || CPP_OPTION (pfile
, lang
) == CLK_GNUCXX20
)
569 _cpp_define_builtin (pfile
, "__cplusplus 202002L");
570 else if (CPP_OPTION (pfile
, lang
) == CLK_CXX17
571 || CPP_OPTION (pfile
, lang
) == CLK_GNUCXX17
)
572 _cpp_define_builtin (pfile
, "__cplusplus 201703L");
573 else if (CPP_OPTION (pfile
, lang
) == CLK_CXX14
574 || CPP_OPTION (pfile
, lang
) == CLK_GNUCXX14
)
575 _cpp_define_builtin (pfile
, "__cplusplus 201402L");
576 else if (CPP_OPTION (pfile
, lang
) == CLK_CXX11
577 || CPP_OPTION (pfile
, lang
) == CLK_GNUCXX11
)
578 _cpp_define_builtin (pfile
, "__cplusplus 201103L");
580 _cpp_define_builtin (pfile
, "__cplusplus 199711L");
582 else if (CPP_OPTION (pfile
, lang
) == CLK_ASM
)
583 _cpp_define_builtin (pfile
, "__ASSEMBLER__ 1");
584 else if (CPP_OPTION (pfile
, lang
) == CLK_STDC94
)
585 _cpp_define_builtin (pfile
, "__STDC_VERSION__ 199409L");
586 else if (CPP_OPTION (pfile
, lang
) == CLK_STDC2X
587 || CPP_OPTION (pfile
, lang
) == CLK_GNUC2X
)
588 _cpp_define_builtin (pfile
, "__STDC_VERSION__ 202000L");
589 else if (CPP_OPTION (pfile
, lang
) == CLK_STDC17
590 || CPP_OPTION (pfile
, lang
) == CLK_GNUC17
)
591 _cpp_define_builtin (pfile
, "__STDC_VERSION__ 201710L");
592 else if (CPP_OPTION (pfile
, lang
) == CLK_STDC11
593 || CPP_OPTION (pfile
, lang
) == CLK_GNUC11
)
594 _cpp_define_builtin (pfile
, "__STDC_VERSION__ 201112L");
595 else if (CPP_OPTION (pfile
, c99
))
596 _cpp_define_builtin (pfile
, "__STDC_VERSION__ 199901L");
598 if (CPP_OPTION (pfile
, uliterals
)
599 && !(CPP_OPTION (pfile
, cplusplus
)
600 && (CPP_OPTION (pfile
, lang
) == CLK_GNUCXX
601 || CPP_OPTION (pfile
, lang
) == CLK_CXX98
)))
603 _cpp_define_builtin (pfile
, "__STDC_UTF_16__ 1");
604 _cpp_define_builtin (pfile
, "__STDC_UTF_32__ 1");
608 _cpp_define_builtin (pfile
, "__STDC_HOSTED__ 1");
610 _cpp_define_builtin (pfile
, "__STDC_HOSTED__ 0");
612 if (CPP_OPTION (pfile
, objc
))
613 _cpp_define_builtin (pfile
, "__OBJC__ 1");
616 /* Sanity-checks are dependent on command-line options, so it is
617 called as a subroutine of cpp_read_main_file. */
619 static void sanity_checks (cpp_reader
*);
620 static void sanity_checks (cpp_reader
*pfile
)
623 size_t max_precision
= 2 * CHAR_BIT
* sizeof (cpp_num_part
);
625 /* Sanity checks for assumptions about CPP arithmetic and target
626 type precisions made by cpplib. */
629 cpp_error (pfile
, CPP_DL_ICE
, "cppchar_t must be an unsigned type");
631 if (CPP_OPTION (pfile
, precision
) > max_precision
)
632 cpp_error (pfile
, CPP_DL_ICE
,
633 "preprocessor arithmetic has maximum precision of %lu bits;"
634 " target requires %lu bits",
635 (unsigned long) max_precision
,
636 (unsigned long) CPP_OPTION (pfile
, precision
));
638 if (CPP_OPTION (pfile
, precision
) < CPP_OPTION (pfile
, int_precision
))
639 cpp_error (pfile
, CPP_DL_ICE
,
640 "CPP arithmetic must be at least as precise as a target int");
642 if (CPP_OPTION (pfile
, char_precision
) < 8)
643 cpp_error (pfile
, CPP_DL_ICE
, "target char is less than 8 bits wide");
645 if (CPP_OPTION (pfile
, wchar_precision
) < CPP_OPTION (pfile
, char_precision
))
646 cpp_error (pfile
, CPP_DL_ICE
,
647 "target wchar_t is narrower than target char");
649 if (CPP_OPTION (pfile
, int_precision
) < CPP_OPTION (pfile
, char_precision
))
650 cpp_error (pfile
, CPP_DL_ICE
,
651 "target int is narrower than target char");
653 /* This is assumed in eval_token() and could be fixed if necessary. */
654 if (sizeof (cppchar_t
) > sizeof (cpp_num_part
))
655 cpp_error (pfile
, CPP_DL_ICE
,
656 "CPP half-integer narrower than CPP character");
658 if (CPP_OPTION (pfile
, wchar_precision
) > BITS_PER_CPPCHAR_T
)
659 cpp_error (pfile
, CPP_DL_ICE
,
660 "CPP on this host cannot handle wide character constants over"
661 " %lu bits, but the target requires %lu bits",
662 (unsigned long) BITS_PER_CPPCHAR_T
,
663 (unsigned long) CPP_OPTION (pfile
, wchar_precision
));
666 # define sanity_checks(PFILE)
669 /* This is called after options have been parsed, and partially
672 cpp_post_options (cpp_reader
*pfile
)
676 sanity_checks (pfile
);
678 post_options (pfile
);
680 /* Mark named operators before handling command line macros. */
682 if (CPP_OPTION (pfile
, cplusplus
) && CPP_OPTION (pfile
, operator_names
))
683 flags
|= NODE_OPERATOR
;
684 if (CPP_OPTION (pfile
, warn_cxx_operator_names
))
685 flags
|= NODE_DIAGNOSTIC
| NODE_WARN_OPERATOR
;
687 mark_named_operators (pfile
, flags
);
690 /* Setup for processing input from the file named FNAME, or stdin if
691 it is the empty string. Return the original filename on success
692 (e.g. foo.i->foo.c), or NULL on failure. INJECTING is true if
693 there may be injected headers before line 1 of the main file. */
695 cpp_read_main_file (cpp_reader
*pfile
, const char *fname
, bool injecting
)
697 if (mkdeps
*deps
= cpp_get_deps (pfile
))
698 /* Set the default target (if there is none already). */
699 deps_add_default_target (deps
, fname
);
702 = _cpp_find_file (pfile
, fname
,
703 CPP_OPTION (pfile
, preprocessed
) ? &pfile
->no_search_path
704 : CPP_OPTION (pfile
, main_search
) == CMS_user
705 ? pfile
->quote_include
706 : CPP_OPTION (pfile
, main_search
) == CMS_system
707 ? pfile
->bracket_include
: &pfile
->no_search_path
,
708 /*angle=*/0, _cpp_FFK_NORMAL
, 0);
710 if (_cpp_find_failed (pfile
->main_file
))
713 _cpp_stack_file (pfile
, pfile
->main_file
,
714 injecting
|| CPP_OPTION (pfile
, preprocessed
)
715 ? IT_PRE_MAIN
: IT_MAIN
, 0);
717 /* For foo.i, read the original filename foo.c now, for the benefit
718 of the front ends. */
719 if (CPP_OPTION (pfile
, preprocessed
))
720 if (!read_original_filename (pfile
))
722 /* We're on line 1 after all. */
723 auto *last
= linemap_check_ordinary
724 (LINEMAPS_LAST_MAP (pfile
->line_table
, false));
726 /* Inform of as-if a file change. */
727 _cpp_do_file_change (pfile
, LC_RENAME_VERBATIM
, LINEMAP_FILE (last
),
728 LINEMAP_LINE (last
), LINEMAP_SYSP (last
));
731 auto *map
= LINEMAPS_LAST_ORDINARY_MAP (pfile
->line_table
);
732 pfile
->main_loc
= MAP_START_LOCATION (map
);
734 return ORDINARY_MAP_FILE_NAME (map
);
738 cpp_main_loc (const cpp_reader
*pfile
)
740 return pfile
->main_loc
;
743 /* For preprocessed files, if the very first characters are
744 '#<SPACE>[01]<SPACE>', then handle a line directive so we know the
745 original file name. This will generate file_change callbacks,
746 which the front ends must handle appropriately given their state of
747 initialization. We peek directly into the character buffer, so
748 that we're not confused by otherwise-skipped white space &
749 comments. We can be very picky, because this should have been
750 machine-generated text (by us, no less). This way we do not
751 interfere with the module directive state machine. */
754 read_original_filename (cpp_reader
*pfile
)
756 auto *buf
= pfile
->buffer
->next_line
;
758 if (pfile
->buffer
->rlimit
- buf
> 4
761 // Also permit '1', as that's what used to be here
762 && (buf
[2] == '0' || buf
[2] == '1')
765 const cpp_token
*token
= _cpp_lex_direct (pfile
);
766 gcc_checking_assert (token
->type
== CPP_HASH
);
767 if (_cpp_handle_directive (pfile
, token
->flags
& PREV_WHITE
))
769 read_original_directory (pfile
);
771 auto *penult
= &linemap_check_ordinary
772 (LINEMAPS_LAST_MAP (pfile
->line_table
, false))[-1];
773 if (penult
[1].reason
== LC_RENAME_VERBATIM
)
775 /* Expunge any evidence of the original linemap. */
776 pfile
->line_table
->highest_location
777 = pfile
->line_table
->highest_line
778 = penult
[0].start_location
;
780 penult
[1].start_location
= penult
[0].start_location
;
781 penult
[1].reason
= penult
[0].reason
;
782 penult
[0] = penult
[1];
783 pfile
->line_table
->info_ordinary
.used
--;
784 pfile
->line_table
->info_ordinary
.cache
= 0;
794 /* For preprocessed files, if the tokens following the first filename
795 line is of the form # <line> "/path/name//", handle the
796 directive so we know the original current directory.
798 As with the first line peeking, we can do this without lexing by
801 read_original_directory (cpp_reader
*pfile
)
803 auto *buf
= pfile
->buffer
->next_line
;
805 if (pfile
->buffer
->rlimit
- buf
> 4
808 // Also permit '1', as that's what used to be here
809 && (buf
[2] == '0' || buf
[2] == '1')
812 const cpp_token
*hash
= _cpp_lex_direct (pfile
);
813 gcc_checking_assert (hash
->type
== CPP_HASH
);
814 pfile
->state
.in_directive
= 1;
815 const cpp_token
*number
= _cpp_lex_direct (pfile
);
816 gcc_checking_assert (number
->type
== CPP_NUMBER
);
817 const cpp_token
*string
= _cpp_lex_direct (pfile
);
818 pfile
->state
.in_directive
= 0;
820 const unsigned char *text
= nullptr;
822 if (string
->type
== CPP_STRING
)
824 /* The string value includes the quotes. */
825 text
= string
->val
.str
.text
;
826 len
= string
->val
.str
.len
;
829 || !IS_DIR_SEPARATOR (text
[len
- 2])
830 || !IS_DIR_SEPARATOR (text
[len
- 3]))
832 /* That didn't work out, back out. */
833 _cpp_backup_tokens (pfile
, 3);
837 if (pfile
->cb
.dir_change
)
839 /* Smash the string directly, it's dead at this point */
840 char *smashy
= (char *)text
;
843 pfile
->cb
.dir_change (pfile
, smashy
+ 1);
846 /* We should be at EOL. */
850 /* This is called at the end of preprocessing. It pops the last
851 buffer and writes dependency output.
853 Maybe it should also reset state, such that you could call
854 cpp_start_read with a new filename to restart processing. */
856 cpp_finish (cpp_reader
*pfile
, FILE *deps_stream
)
858 /* Warn about unused macros before popping the final buffer. */
859 if (CPP_OPTION (pfile
, warn_unused_macros
))
860 cpp_forall_identifiers (pfile
, _cpp_warn_if_unused_macro
, NULL
);
862 /* lex.cc leaves the final buffer on the stack. This it so that
863 it returns an unending stream of CPP_EOFs to the client. If we
864 popped the buffer, we'd dereference a NULL buffer pointer and
865 segfault. It's nice to allow the client to do worry-free excess
866 cpp_get_token calls. */
867 while (pfile
->buffer
)
868 _cpp_pop_buffer (pfile
);
871 deps_write (pfile
, deps_stream
, 72);
873 /* Report on headers that could use multiple include guards. */
874 if (CPP_OPTION (pfile
, print_include_names
))
875 _cpp_report_missing_guards (pfile
);
879 post_options (cpp_reader
*pfile
)
881 /* -Wtraditional is not useful in C++ mode. */
882 if (CPP_OPTION (pfile
, cplusplus
))
883 CPP_OPTION (pfile
, cpp_warn_traditional
) = 0;
885 /* Permanently disable macro expansion if we are rescanning
886 preprocessed text. Read preprocesed source in ISO mode. */
887 if (CPP_OPTION (pfile
, preprocessed
))
889 if (!CPP_OPTION (pfile
, directives_only
))
890 pfile
->state
.prevent_expansion
= 1;
891 CPP_OPTION (pfile
, traditional
) = 0;
894 if (CPP_OPTION (pfile
, warn_trigraphs
) == 2)
895 CPP_OPTION (pfile
, warn_trigraphs
) = !CPP_OPTION (pfile
, trigraphs
);
897 if (CPP_OPTION (pfile
, traditional
))
899 CPP_OPTION (pfile
, trigraphs
) = 0;
900 CPP_OPTION (pfile
, warn_trigraphs
) = 0;
903 if (CPP_OPTION (pfile
, module_directives
))
905 /* These unspellable tokens have a leading space. */
906 const char *const inits
[spec_nodes::M_HWM
]
907 = {"export ", "module ", "import ", "__import"};
909 for (int ix
= 0; ix
!= spec_nodes::M_HWM
; ix
++)
911 cpp_hashnode
*node
= cpp_lookup (pfile
, UC (inits
[ix
]),
914 /* Token we pass to the compiler. */
915 pfile
->spec_nodes
.n_modules
[ix
][1] = node
;
917 if (ix
!= spec_nodes::M__IMPORT
)
918 /* Token we recognize when lexing, drop the trailing ' '. */
919 node
= cpp_lookup (pfile
, NODE_NAME (node
), NODE_LEN (node
) - 1);
921 node
->flags
|= NODE_MODULE
;
922 pfile
->spec_nodes
.n_modules
[ix
][0] = node
;