* gcc.target/powerpc/builtins-1-le.c: Filter out gimple folding disabled
[official-gcc.git] / gcc / c-family / c-lex.c
bloba4ad0a30f38836d42f50aeb67b05eac6acae9e42
1 /* Mainly the interface between cpplib and the C front ends.
2 Copyright (C) 1987-2018 Free Software Foundation, Inc.
4 This file is part of GCC.
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
16 You should have received a copy of the GNU General Public License
17 along with GCC; see the file COPYING3. If not see
18 <http://www.gnu.org/licenses/>. */
20 #include "config.h"
21 #include "system.h"
22 #include "coretypes.h"
23 #include "target.h"
24 #include "c-common.h"
25 #include "timevar.h"
26 #include "stringpool.h"
27 #include "stor-layout.h"
28 #include "c-pragma.h"
29 #include "debug.h"
30 #include "file-prefix-map.h" /* remap_macro_filename() */
32 #include "attribs.h"
34 /* We may keep statistics about how long which files took to compile. */
35 static int header_time, body_time;
36 static splay_tree file_info_tree;
38 int pending_lang_change; /* If we need to switch languages - C++ only */
39 int c_header_level; /* depth in C headers - C++ only */
41 static tree interpret_integer (const cpp_token *, unsigned int,
42 enum overflow_type *);
43 static tree interpret_float (const cpp_token *, unsigned int, const char *,
44 enum overflow_type *);
45 static tree interpret_fixed (const cpp_token *, unsigned int);
46 static enum integer_type_kind narrowest_unsigned_type
47 (const widest_int &, unsigned int);
48 static enum integer_type_kind narrowest_signed_type
49 (const widest_int &, unsigned int);
50 static enum cpp_ttype lex_string (const cpp_token *, tree *, bool, bool);
51 static tree lex_charconst (const cpp_token *);
52 static void update_header_times (const char *);
53 static int dump_one_header (splay_tree_node, void *);
54 static void cb_line_change (cpp_reader *, const cpp_token *, int);
55 static void cb_ident (cpp_reader *, unsigned int, const cpp_string *);
56 static void cb_def_pragma (cpp_reader *, unsigned int);
57 static void cb_define (cpp_reader *, unsigned int, cpp_hashnode *);
58 static void cb_undef (cpp_reader *, unsigned int, cpp_hashnode *);
60 void
61 init_c_lex (void)
63 struct cpp_callbacks *cb;
64 struct c_fileinfo *toplevel;
66 /* The get_fileinfo data structure must be initialized before
67 cpp_read_main_file is called. */
68 toplevel = get_fileinfo ("<top level>");
69 if (flag_detailed_statistics)
71 header_time = 0;
72 body_time = get_run_time ();
73 toplevel->time = body_time;
76 cb = cpp_get_callbacks (parse_in);
78 cb->line_change = cb_line_change;
79 cb->ident = cb_ident;
80 cb->def_pragma = cb_def_pragma;
81 cb->valid_pch = c_common_valid_pch;
82 cb->read_pch = c_common_read_pch;
83 cb->has_attribute = c_common_has_attribute;
84 cb->get_source_date_epoch = cb_get_source_date_epoch;
85 cb->get_suggestion = cb_get_suggestion;
86 cb->remap_filename = remap_macro_filename;
88 /* Set the debug callbacks if we can use them. */
89 if ((debug_info_level == DINFO_LEVEL_VERBOSE
90 && (write_symbols == DWARF2_DEBUG
91 || write_symbols == VMS_AND_DWARF2_DEBUG))
92 || flag_dump_go_spec != NULL)
94 cb->define = cb_define;
95 cb->undef = cb_undef;
99 struct c_fileinfo *
100 get_fileinfo (const char *name)
102 splay_tree_node n;
103 struct c_fileinfo *fi;
105 if (!file_info_tree)
106 file_info_tree = splay_tree_new ((splay_tree_compare_fn)
107 (void (*) (void)) strcmp,
109 (splay_tree_delete_value_fn)
110 (void (*) (void)) free);
112 n = splay_tree_lookup (file_info_tree, (splay_tree_key) name);
113 if (n)
114 return (struct c_fileinfo *) n->value;
116 fi = XNEW (struct c_fileinfo);
117 fi->time = 0;
118 fi->interface_only = 0;
119 fi->interface_unknown = 1;
120 splay_tree_insert (file_info_tree, (splay_tree_key) name,
121 (splay_tree_value) fi);
122 return fi;
125 static void
126 update_header_times (const char *name)
128 /* Changing files again. This means currently collected time
129 is charged against header time, and body time starts back at 0. */
130 if (flag_detailed_statistics)
132 int this_time = get_run_time ();
133 struct c_fileinfo *file = get_fileinfo (name);
134 header_time += this_time - body_time;
135 file->time += this_time - body_time;
136 body_time = this_time;
140 static int
141 dump_one_header (splay_tree_node n, void * ARG_UNUSED (dummy))
143 print_time ((const char *) n->key,
144 ((struct c_fileinfo *) n->value)->time);
145 return 0;
148 void
149 dump_time_statistics (void)
151 struct c_fileinfo *file = get_fileinfo (LOCATION_FILE (input_location));
152 int this_time = get_run_time ();
153 file->time += this_time - body_time;
155 fprintf (stderr, "\n******\n");
156 print_time ("header files (total)", header_time);
157 print_time ("main file (total)", this_time - body_time);
158 fprintf (stderr, "ratio = %g : 1\n",
159 (double) header_time / (double) (this_time - body_time));
160 fprintf (stderr, "\n******\n");
162 splay_tree_foreach (file_info_tree, dump_one_header, 0);
165 static void
166 cb_ident (cpp_reader * ARG_UNUSED (pfile),
167 unsigned int ARG_UNUSED (line),
168 const cpp_string * ARG_UNUSED (str))
170 if (!flag_no_ident)
172 /* Convert escapes in the string. */
173 cpp_string cstr = { 0, 0 };
174 if (cpp_interpret_string (pfile, str, 1, &cstr, CPP_STRING))
176 targetm.asm_out.output_ident ((const char *) cstr.text);
177 free (CONST_CAST (unsigned char *, cstr.text));
182 /* Called at the start of every non-empty line. TOKEN is the first
183 lexed token on the line. Used for diagnostic line numbers. */
184 static void
185 cb_line_change (cpp_reader * ARG_UNUSED (pfile), const cpp_token *token,
186 int parsing_args)
188 if (token->type != CPP_EOF && !parsing_args)
189 input_location = token->src_loc;
192 void
193 fe_file_change (const line_map_ordinary *new_map)
195 if (new_map == NULL)
196 return;
198 if (new_map->reason == LC_ENTER)
200 /* Don't stack the main buffer on the input stack;
201 we already did in compile_file. */
202 if (!MAIN_FILE_P (new_map))
204 unsigned int included_at = LAST_SOURCE_LINE_LOCATION (new_map - 1);
205 int line = 0;
206 if (included_at > BUILTINS_LOCATION)
207 line = SOURCE_LINE (new_map - 1, included_at);
209 input_location = new_map->start_location;
210 (*debug_hooks->start_source_file) (line, LINEMAP_FILE (new_map));
211 #ifndef NO_IMPLICIT_EXTERN_C
212 if (c_header_level)
213 ++c_header_level;
214 else if (LINEMAP_SYSP (new_map) == 2)
216 c_header_level = 1;
217 ++pending_lang_change;
219 #endif
222 else if (new_map->reason == LC_LEAVE)
224 #ifndef NO_IMPLICIT_EXTERN_C
225 if (c_header_level && --c_header_level == 0)
227 if (LINEMAP_SYSP (new_map) == 2)
228 warning (0, "badly nested C headers from preprocessor");
229 --pending_lang_change;
231 #endif
232 input_location = new_map->start_location;
234 (*debug_hooks->end_source_file) (LINEMAP_LINE (new_map));
237 update_header_times (LINEMAP_FILE (new_map));
238 input_location = new_map->start_location;
241 static void
242 cb_def_pragma (cpp_reader *pfile, source_location loc)
244 /* Issue a warning message if we have been asked to do so. Ignore
245 unknown pragmas in system headers unless an explicit
246 -Wunknown-pragmas has been given. */
247 if (warn_unknown_pragmas > in_system_header_at (input_location))
249 const unsigned char *space, *name;
250 const cpp_token *s;
251 location_t fe_loc = loc;
253 space = name = (const unsigned char *) "";
254 s = cpp_get_token (pfile);
255 if (s->type != CPP_EOF)
257 space = cpp_token_as_text (pfile, s);
258 s = cpp_get_token (pfile);
259 if (s->type == CPP_NAME)
260 name = cpp_token_as_text (pfile, s);
263 warning_at (fe_loc, OPT_Wunknown_pragmas, "ignoring #pragma %s %s",
264 space, name);
268 /* #define callback for DWARF and DWARF2 debug info. */
269 static void
270 cb_define (cpp_reader *pfile, source_location loc, cpp_hashnode *node)
272 const struct line_map *map = linemap_lookup (line_table, loc);
273 (*debug_hooks->define) (SOURCE_LINE (linemap_check_ordinary (map), loc),
274 (const char *) cpp_macro_definition (pfile, node));
277 /* #undef callback for DWARF and DWARF2 debug info. */
278 static void
279 cb_undef (cpp_reader * ARG_UNUSED (pfile), source_location loc,
280 cpp_hashnode *node)
282 const struct line_map *map = linemap_lookup (line_table, loc);
283 (*debug_hooks->undef) (SOURCE_LINE (linemap_check_ordinary (map), loc),
284 (const char *) NODE_NAME (node));
287 /* Wrapper around cpp_get_token to skip CPP_PADDING tokens
288 and not consume CPP_EOF. */
289 static const cpp_token *
290 get_token_no_padding (cpp_reader *pfile)
292 for (;;)
294 const cpp_token *ret = cpp_peek_token (pfile, 0);
295 if (ret->type == CPP_EOF)
296 return ret;
297 ret = cpp_get_token (pfile);
298 if (ret->type != CPP_PADDING)
299 return ret;
303 /* Callback for has_attribute. */
305 c_common_has_attribute (cpp_reader *pfile)
307 int result = 0;
308 tree attr_name = NULL_TREE;
309 const cpp_token *token;
311 token = get_token_no_padding (pfile);
312 if (token->type != CPP_OPEN_PAREN)
314 cpp_error (pfile, CPP_DL_ERROR,
315 "missing '(' after \"__has_attribute\"");
316 return 0;
318 token = get_token_no_padding (pfile);
319 if (token->type == CPP_NAME)
321 attr_name = get_identifier ((const char *)
322 cpp_token_as_text (pfile, token));
323 attr_name = canonicalize_attr_name (attr_name);
324 if (c_dialect_cxx ())
326 int idx = 0;
327 const cpp_token *nxt_token;
329 nxt_token = cpp_peek_token (pfile, idx++);
330 while (nxt_token->type == CPP_PADDING);
331 if (nxt_token->type == CPP_SCOPE)
333 get_token_no_padding (pfile); // Eat scope.
334 nxt_token = get_token_no_padding (pfile);
335 if (nxt_token->type == CPP_NAME)
337 tree attr_ns = attr_name;
338 tree attr_id
339 = get_identifier ((const char *)
340 cpp_token_as_text (pfile, nxt_token));
341 attr_name = build_tree_list (attr_ns, attr_id);
343 else
345 cpp_error (pfile, CPP_DL_ERROR,
346 "attribute identifier required after scope");
347 attr_name = NULL_TREE;
350 else
352 /* Some standard attributes need special handling. */
353 if (is_attribute_p ("noreturn", attr_name))
354 result = 200809;
355 else if (is_attribute_p ("deprecated", attr_name))
356 result = 201309;
357 else if (is_attribute_p ("maybe_unused", attr_name)
358 || is_attribute_p ("nodiscard", attr_name)
359 || is_attribute_p ("fallthrough", attr_name))
360 result = 201603;
361 if (result)
362 attr_name = NULL_TREE;
365 if (attr_name)
367 init_attributes ();
368 const struct attribute_spec *attr = lookup_attribute_spec (attr_name);
369 if (attr)
370 result = 1;
373 else
375 cpp_error (pfile, CPP_DL_ERROR,
376 "macro \"__has_attribute\" requires an identifier");
377 return 0;
380 if (get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
381 cpp_error (pfile, CPP_DL_ERROR,
382 "missing ')' after \"__has_attribute\"");
384 return result;
387 /* Read a token and return its type. Fill *VALUE with its value, if
388 applicable. Fill *CPP_FLAGS with the token's flags, if it is
389 non-NULL. */
391 enum cpp_ttype
392 c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags,
393 int lex_flags)
395 static bool no_more_pch;
396 const cpp_token *tok;
397 enum cpp_ttype type;
398 unsigned char add_flags = 0;
399 enum overflow_type overflow = OT_NONE;
401 timevar_push (TV_CPP);
402 retry:
403 tok = cpp_get_token_with_location (parse_in, loc);
404 type = tok->type;
406 retry_after_at:
407 switch (type)
409 case CPP_PADDING:
410 goto retry;
412 case CPP_NAME:
413 *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node.node));
414 break;
416 case CPP_NUMBER:
418 const char *suffix = NULL;
419 unsigned int flags = cpp_classify_number (parse_in, tok, &suffix, *loc);
421 switch (flags & CPP_N_CATEGORY)
423 case CPP_N_INVALID:
424 /* cpplib has issued an error. */
425 *value = error_mark_node;
426 break;
428 case CPP_N_INTEGER:
429 /* C++ uses '0' to mark virtual functions as pure.
430 Set PURE_ZERO to pass this information to the C++ parser. */
431 if (tok->val.str.len == 1 && *tok->val.str.text == '0')
432 add_flags = PURE_ZERO;
433 *value = interpret_integer (tok, flags, &overflow);
434 break;
436 case CPP_N_FLOATING:
437 *value = interpret_float (tok, flags, suffix, &overflow);
438 break;
440 default:
441 gcc_unreachable ();
444 if (flags & CPP_N_USERDEF)
446 char *str;
447 tree literal;
448 tree suffix_id = get_identifier (suffix);
449 int len = tok->val.str.len - strlen (suffix);
450 /* If this is going to be used as a C string to pass to a
451 raw literal operator, we need to add a trailing NUL. */
452 tree num_string = build_string (len + 1,
453 (const char *) tok->val.str.text);
454 TREE_TYPE (num_string) = char_array_type_node;
455 num_string = fix_string_type (num_string);
456 str = CONST_CAST (char *, TREE_STRING_POINTER (num_string));
457 str[len] = '\0';
458 literal = build_userdef_literal (suffix_id, *value, overflow,
459 num_string);
460 *value = literal;
463 break;
465 case CPP_ATSIGN:
466 /* An @ may give the next token special significance in Objective-C. */
467 if (c_dialect_objc ())
469 location_t atloc = *loc;
470 location_t newloc;
472 retry_at:
473 tok = cpp_get_token_with_location (parse_in, &newloc);
474 type = tok->type;
475 switch (type)
477 case CPP_PADDING:
478 goto retry_at;
480 case CPP_STRING:
481 case CPP_WSTRING:
482 case CPP_STRING16:
483 case CPP_STRING32:
484 case CPP_UTF8STRING:
485 type = lex_string (tok, value, true, true);
486 break;
488 case CPP_NAME:
489 *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node.node));
490 if (OBJC_IS_AT_KEYWORD (C_RID_CODE (*value))
491 || OBJC_IS_CXX_KEYWORD (C_RID_CODE (*value)))
493 type = CPP_AT_NAME;
494 /* Note the complication: if we found an OBJC_CXX
495 keyword, for example, 'class', we will be
496 returning a token of type CPP_AT_NAME and rid
497 code RID_CLASS (not RID_AT_CLASS). The language
498 parser needs to convert that to RID_AT_CLASS.
500 break;
502 /* FALLTHROUGH */
504 default:
505 /* ... or not. */
506 error_at (atloc, "stray %<@%> in program");
507 *loc = newloc;
508 goto retry_after_at;
510 break;
513 /* FALLTHROUGH */
514 case CPP_HASH:
515 case CPP_PASTE:
517 unsigned char name[8];
519 *cpp_spell_token (parse_in, tok, name, true) = 0;
521 error_at (*loc, "stray %qs in program", name);
524 goto retry;
526 case CPP_OTHER:
528 cppchar_t c = tok->val.str.text[0];
530 if (c == '"' || c == '\'')
531 error_at (*loc, "missing terminating %c character", (int) c);
532 else if (ISGRAPH (c))
533 error_at (*loc, "stray %qc in program", (int) c);
534 else
535 error_at (*loc, "stray %<\\%o%> in program", (int) c);
537 goto retry;
539 case CPP_CHAR_USERDEF:
540 case CPP_WCHAR_USERDEF:
541 case CPP_CHAR16_USERDEF:
542 case CPP_CHAR32_USERDEF:
543 case CPP_UTF8CHAR_USERDEF:
545 tree literal;
546 cpp_token temp_tok = *tok;
547 const char *suffix = cpp_get_userdef_suffix (tok);
548 temp_tok.val.str.len -= strlen (suffix);
549 temp_tok.type = cpp_userdef_char_remove_type (type);
550 literal = build_userdef_literal (get_identifier (suffix),
551 lex_charconst (&temp_tok),
552 OT_NONE, NULL_TREE);
553 *value = literal;
555 break;
557 case CPP_CHAR:
558 case CPP_WCHAR:
559 case CPP_CHAR16:
560 case CPP_CHAR32:
561 case CPP_UTF8CHAR:
562 *value = lex_charconst (tok);
563 break;
565 case CPP_STRING_USERDEF:
566 case CPP_WSTRING_USERDEF:
567 case CPP_STRING16_USERDEF:
568 case CPP_STRING32_USERDEF:
569 case CPP_UTF8STRING_USERDEF:
571 tree literal, string;
572 const char *suffix = cpp_get_userdef_suffix (tok);
573 string = build_string (tok->val.str.len - strlen (suffix),
574 (const char *) tok->val.str.text);
575 literal = build_userdef_literal (get_identifier (suffix),
576 string, OT_NONE, NULL_TREE);
577 *value = literal;
579 break;
581 case CPP_STRING:
582 case CPP_WSTRING:
583 case CPP_STRING16:
584 case CPP_STRING32:
585 case CPP_UTF8STRING:
586 if ((lex_flags & C_LEX_STRING_NO_JOIN) == 0)
588 type = lex_string (tok, value, false,
589 (lex_flags & C_LEX_STRING_NO_TRANSLATE) == 0);
590 break;
592 *value = build_string (tok->val.str.len, (const char *) tok->val.str.text);
593 break;
595 case CPP_PRAGMA:
596 *value = build_int_cst (integer_type_node, tok->val.pragma);
597 break;
599 /* These tokens should not be visible outside cpplib. */
600 case CPP_HEADER_NAME:
601 case CPP_MACRO_ARG:
602 gcc_unreachable ();
604 /* CPP_COMMENT will appear when compiling with -C. Ignore, except
605 when it is a FALLTHROUGH comment, in that case set
606 PREV_FALLTHROUGH flag on the next non-comment token. */
607 case CPP_COMMENT:
608 if (tok->flags & PREV_FALLTHROUGH)
612 tok = cpp_get_token_with_location (parse_in, loc);
613 type = tok->type;
615 while (type == CPP_PADDING || type == CPP_COMMENT);
616 add_flags |= PREV_FALLTHROUGH;
617 goto retry_after_at;
619 goto retry;
621 default:
622 *value = NULL_TREE;
623 break;
626 if (cpp_flags)
627 *cpp_flags = tok->flags | add_flags;
629 if (!no_more_pch)
631 no_more_pch = true;
632 c_common_no_more_pch ();
635 timevar_pop (TV_CPP);
637 return type;
640 /* Returns the narrowest C-visible unsigned type, starting with the
641 minimum specified by FLAGS, that can fit HIGH:LOW, or itk_none if
642 there isn't one. */
644 static enum integer_type_kind
645 narrowest_unsigned_type (const widest_int &val, unsigned int flags)
647 int itk;
649 if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
650 itk = itk_unsigned_int;
651 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
652 itk = itk_unsigned_long;
653 else
654 itk = itk_unsigned_long_long;
656 for (; itk < itk_none; itk += 2 /* skip unsigned types */)
658 tree upper;
660 if (integer_types[itk] == NULL_TREE)
661 continue;
662 upper = TYPE_MAX_VALUE (integer_types[itk]);
664 if (wi::geu_p (wi::to_widest (upper), val))
665 return (enum integer_type_kind) itk;
668 return itk_none;
671 /* Ditto, but narrowest signed type. */
672 static enum integer_type_kind
673 narrowest_signed_type (const widest_int &val, unsigned int flags)
675 int itk;
677 if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
678 itk = itk_int;
679 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
680 itk = itk_long;
681 else
682 itk = itk_long_long;
684 for (; itk < itk_none; itk += 2 /* skip signed types */)
686 tree upper;
688 if (integer_types[itk] == NULL_TREE)
689 continue;
690 upper = TYPE_MAX_VALUE (integer_types[itk]);
692 if (wi::geu_p (wi::to_widest (upper), val))
693 return (enum integer_type_kind) itk;
696 return itk_none;
699 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib. */
700 static tree
701 interpret_integer (const cpp_token *token, unsigned int flags,
702 enum overflow_type *overflow)
704 tree value, type;
705 enum integer_type_kind itk;
706 cpp_num integer;
707 HOST_WIDE_INT ival[3];
709 *overflow = OT_NONE;
711 integer = cpp_interpret_integer (parse_in, token, flags);
712 if (integer.overflow)
713 *overflow = OT_OVERFLOW;
715 ival[0] = integer.low;
716 ival[1] = integer.high;
717 ival[2] = 0;
718 widest_int wval = widest_int::from_array (ival, 3);
720 /* The type of a constant with a U suffix is straightforward. */
721 if (flags & CPP_N_UNSIGNED)
722 itk = narrowest_unsigned_type (wval, flags);
723 else
725 /* The type of a potentially-signed integer constant varies
726 depending on the base it's in, the standard in use, and the
727 length suffixes. */
728 enum integer_type_kind itk_u
729 = narrowest_unsigned_type (wval, flags);
730 enum integer_type_kind itk_s
731 = narrowest_signed_type (wval, flags);
733 /* In both C89 and C99, octal and hex constants may be signed or
734 unsigned, whichever fits tighter. We do not warn about this
735 choice differing from the traditional choice, as the constant
736 is probably a bit pattern and either way will work. */
737 if ((flags & CPP_N_RADIX) != CPP_N_DECIMAL)
738 itk = MIN (itk_u, itk_s);
739 else
741 /* In C99, decimal constants are always signed.
742 In C89, decimal constants that don't fit in long have
743 undefined behavior; we try to make them unsigned long.
744 In GCC's extended C89, that last is true of decimal
745 constants that don't fit in long long, too. */
747 itk = itk_s;
748 if (itk_s > itk_u && itk_s > itk_long)
750 if (!flag_isoc99)
752 if (itk_u < itk_unsigned_long)
753 itk_u = itk_unsigned_long;
754 itk = itk_u;
755 warning (0, "this decimal constant is unsigned only in ISO C90");
757 else
758 warning (OPT_Wtraditional,
759 "this decimal constant would be unsigned in ISO C90");
764 if (itk == itk_none)
765 /* cpplib has already issued a warning for overflow. */
766 type = ((flags & CPP_N_UNSIGNED)
767 ? widest_unsigned_literal_type_node
768 : widest_integer_literal_type_node);
769 else
771 type = integer_types[itk];
772 if (itk > itk_unsigned_long
773 && (flags & CPP_N_WIDTH) != CPP_N_LARGE)
774 emit_diagnostic
775 ((c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99)
776 ? DK_PEDWARN : DK_WARNING,
777 input_location, OPT_Wlong_long,
778 (flags & CPP_N_UNSIGNED)
779 ? "integer constant is too large for %<unsigned long%> type"
780 : "integer constant is too large for %<long%> type");
783 value = wide_int_to_tree (type, wval);
785 /* Convert imaginary to a complex type. */
786 if (flags & CPP_N_IMAGINARY)
787 value = build_complex (NULL_TREE, build_int_cst (type, 0), value);
789 return value;
792 /* Interpret TOKEN, a floating point number with FLAGS as classified
793 by cpplib. For C++11 SUFFIX may contain a user-defined literal suffix. */
794 static tree
795 interpret_float (const cpp_token *token, unsigned int flags,
796 const char *suffix, enum overflow_type *overflow)
798 tree type;
799 tree const_type;
800 tree value;
801 REAL_VALUE_TYPE real;
802 REAL_VALUE_TYPE real_trunc;
803 char *copy;
804 size_t copylen;
806 *overflow = OT_NONE;
808 /* Default (no suffix) depends on whether the FLOAT_CONST_DECIMAL64
809 pragma has been used and is either double or _Decimal64. Types
810 that are not allowed with decimal float default to double. */
811 if (flags & CPP_N_DEFAULT)
813 flags ^= CPP_N_DEFAULT;
814 flags |= CPP_N_MEDIUM;
816 if (((flags & CPP_N_HEX) == 0) && ((flags & CPP_N_IMAGINARY) == 0))
818 warning (OPT_Wunsuffixed_float_constants,
819 "unsuffixed float constant");
820 if (float_const_decimal64_p ())
821 flags |= CPP_N_DFLOAT;
825 /* Decode _Fract and _Accum. */
826 if (flags & CPP_N_FRACT || flags & CPP_N_ACCUM)
827 return interpret_fixed (token, flags);
829 /* Decode type based on width and properties. */
830 if (flags & CPP_N_DFLOAT)
831 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
832 type = dfloat128_type_node;
833 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
834 type = dfloat32_type_node;
835 else
836 type = dfloat64_type_node;
837 else
838 if (flags & CPP_N_WIDTH_MD)
840 char suffix;
841 machine_mode mode;
843 if ((flags & CPP_N_WIDTH_MD) == CPP_N_MD_W)
844 suffix = 'w';
845 else
846 suffix = 'q';
848 mode = targetm.c.mode_for_suffix (suffix);
849 if (mode == VOIDmode)
851 error ("unsupported non-standard suffix on floating constant");
853 return error_mark_node;
855 else
856 pedwarn (input_location, OPT_Wpedantic, "non-standard suffix on floating constant");
858 type = c_common_type_for_mode (mode, 0);
859 gcc_assert (type);
861 else if ((flags & (CPP_N_FLOATN | CPP_N_FLOATNX)) != 0)
863 unsigned int n = (flags & CPP_N_WIDTH_FLOATN_NX) >> CPP_FLOATN_SHIFT;
864 bool extended = (flags & CPP_N_FLOATNX) != 0;
865 type = NULL_TREE;
866 for (int i = 0; i < NUM_FLOATN_NX_TYPES; i++)
867 if (floatn_nx_types[i].n == (int) n
868 && floatn_nx_types[i].extended == extended)
870 type = FLOATN_NX_TYPE_NODE (i);
871 break;
873 if (type == NULL_TREE)
875 error ("unsupported non-standard suffix on floating constant");
876 return error_mark_node;
878 else
879 pedwarn (input_location, OPT_Wpedantic, "non-standard suffix on floating constant");
881 else if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
882 type = long_double_type_node;
883 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL
884 || flag_single_precision_constant)
885 type = float_type_node;
886 else
887 type = double_type_node;
889 const_type = excess_precision_type (type);
890 if (!const_type)
891 const_type = type;
893 /* Copy the constant to a nul-terminated buffer. If the constant
894 has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF
895 can't handle them. */
896 copylen = token->val.str.len;
897 if (flags & CPP_N_USERDEF)
898 copylen -= strlen (suffix);
899 else if (flags & CPP_N_DFLOAT)
900 copylen -= 2;
901 else
903 if ((flags & CPP_N_WIDTH) != CPP_N_MEDIUM)
904 /* Must be an F or L or machine defined suffix. */
905 copylen--;
906 if (flags & CPP_N_IMAGINARY)
907 /* I or J suffix. */
908 copylen--;
909 if (flags & CPP_N_FLOATNX)
910 copylen--;
911 if (flags & (CPP_N_FLOATN | CPP_N_FLOATNX))
913 unsigned int n = (flags & CPP_N_WIDTH_FLOATN_NX) >> CPP_FLOATN_SHIFT;
914 while (n > 0)
916 copylen--;
917 n /= 10;
922 copy = (char *) alloca (copylen + 1);
923 if (cxx_dialect > cxx11)
925 size_t maxlen = 0;
926 for (size_t i = 0; i < copylen; ++i)
927 if (token->val.str.text[i] != '\'')
928 copy[maxlen++] = token->val.str.text[i];
929 copy[maxlen] = '\0';
931 else
933 memcpy (copy, token->val.str.text, copylen);
934 copy[copylen] = '\0';
937 real_from_string3 (&real, copy, TYPE_MODE (const_type));
938 if (const_type != type)
939 /* Diagnosing if the result of converting the value with excess
940 precision to the semantic type would overflow (with associated
941 double rounding) is more appropriate than diagnosing if the
942 result of converting the string directly to the semantic type
943 would overflow. */
944 real_convert (&real_trunc, TYPE_MODE (type), &real);
946 /* Both C and C++ require a diagnostic for a floating constant
947 outside the range of representable values of its type. Since we
948 have __builtin_inf* to produce an infinity, this is now a
949 mandatory pedwarn if the target does not support infinities. */
950 if (REAL_VALUE_ISINF (real)
951 || (const_type != type && REAL_VALUE_ISINF (real_trunc)))
953 *overflow = OT_OVERFLOW;
954 if (!(flags & CPP_N_USERDEF))
956 if (!MODE_HAS_INFINITIES (TYPE_MODE (type)))
957 pedwarn (input_location, 0,
958 "floating constant exceeds range of %qT", type);
959 else
960 warning (OPT_Woverflow,
961 "floating constant exceeds range of %qT", type);
964 /* We also give a warning if the value underflows. */
965 else if (real_equal (&real, &dconst0)
966 || (const_type != type
967 && real_equal (&real_trunc, &dconst0)))
969 REAL_VALUE_TYPE realvoidmode;
970 int oflow = real_from_string (&realvoidmode, copy);
971 *overflow = (oflow == 0 ? OT_NONE
972 : (oflow < 0 ? OT_UNDERFLOW : OT_OVERFLOW));
973 if (!(flags & CPP_N_USERDEF))
975 if (oflow < 0 || !real_equal (&realvoidmode, &dconst0))
976 warning (OPT_Woverflow, "floating constant truncated to zero");
980 /* Create a node with determined type and value. */
981 value = build_real (const_type, real);
982 if (flags & CPP_N_IMAGINARY)
984 value = build_complex (NULL_TREE,
985 fold_convert (const_type,
986 integer_zero_node), value);
987 if (type != const_type)
989 const_type = TREE_TYPE (value);
990 type = build_complex_type (type);
994 if (type != const_type)
995 value = build1_loc (token->src_loc, EXCESS_PRECISION_EXPR, type, value);
997 return value;
1000 /* Interpret TOKEN, a fixed-point number with FLAGS as classified
1001 by cpplib. */
1003 static tree
1004 interpret_fixed (const cpp_token *token, unsigned int flags)
1006 tree type;
1007 tree value;
1008 FIXED_VALUE_TYPE fixed;
1009 char *copy;
1010 size_t copylen;
1012 copylen = token->val.str.len;
1014 if (flags & CPP_N_FRACT) /* _Fract. */
1016 if (flags & CPP_N_UNSIGNED) /* Unsigned _Fract. */
1018 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
1020 type = unsigned_long_long_fract_type_node;
1021 copylen -= 4;
1023 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
1025 type = unsigned_long_fract_type_node;
1026 copylen -= 3;
1028 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
1030 type = unsigned_short_fract_type_node;
1031 copylen -= 3;
1033 else
1035 type = unsigned_fract_type_node;
1036 copylen -= 2;
1039 else /* Signed _Fract. */
1041 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
1043 type = long_long_fract_type_node;
1044 copylen -= 3;
1046 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
1048 type = long_fract_type_node;
1049 copylen -= 2;
1051 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
1053 type = short_fract_type_node;
1054 copylen -= 2;
1056 else
1058 type = fract_type_node;
1059 copylen --;
1063 else /* _Accum. */
1065 if (flags & CPP_N_UNSIGNED) /* Unsigned _Accum. */
1067 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
1069 type = unsigned_long_long_accum_type_node;
1070 copylen -= 4;
1072 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
1074 type = unsigned_long_accum_type_node;
1075 copylen -= 3;
1077 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
1079 type = unsigned_short_accum_type_node;
1080 copylen -= 3;
1082 else
1084 type = unsigned_accum_type_node;
1085 copylen -= 2;
1088 else /* Signed _Accum. */
1090 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
1092 type = long_long_accum_type_node;
1093 copylen -= 3;
1095 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
1097 type = long_accum_type_node;
1098 copylen -= 2;
1100 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
1102 type = short_accum_type_node;
1103 copylen -= 2;
1105 else
1107 type = accum_type_node;
1108 copylen --;
1113 copy = (char *) alloca (copylen + 1);
1114 memcpy (copy, token->val.str.text, copylen);
1115 copy[copylen] = '\0';
1117 fixed_from_string (&fixed, copy, SCALAR_TYPE_MODE (type));
1119 /* Create a node with determined type and value. */
1120 value = build_fixed (type, fixed);
1122 return value;
1125 /* Convert a series of STRING, WSTRING, STRING16, STRING32 and/or
1126 UTF8STRING tokens into a tree, performing string constant
1127 concatenation. TOK is the first of these. VALP is the location to
1128 write the string into. OBJC_STRING indicates whether an '@' token
1129 preceded the incoming token (in that case, the strings can either
1130 be ObjC strings, preceded by a single '@', or normal strings, not
1131 preceded by '@'. The result will be a CPP_OBJC_STRING). Returns
1132 the CPP token type of the result (CPP_STRING, CPP_WSTRING,
1133 CPP_STRING32, CPP_STRING16, CPP_UTF8STRING, or CPP_OBJC_STRING).
1135 This is unfortunately more work than it should be. If any of the
1136 strings in the series has an L prefix, the result is a wide string
1137 (6.4.5p4). Whether or not the result is a wide string affects the
1138 meaning of octal and hexadecimal escapes (6.4.4.4p6,9). But escape
1139 sequences do not continue across the boundary between two strings in
1140 a series (6.4.5p7), so we must not lose the boundaries. Therefore
1141 cpp_interpret_string takes a vector of cpp_string structures, which
1142 we must arrange to provide. */
1144 static enum cpp_ttype
1145 lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate)
1147 tree value;
1148 size_t concats = 0;
1149 struct obstack str_ob;
1150 struct obstack loc_ob;
1151 cpp_string istr;
1152 enum cpp_ttype type = tok->type;
1154 /* Try to avoid the overhead of creating and destroying an obstack
1155 for the common case of just one string. */
1156 cpp_string str = tok->val.str;
1157 location_t init_loc = tok->src_loc;
1158 cpp_string *strs = &str;
1159 location_t *locs = NULL;
1161 /* objc_at_sign_was_seen is only used when doing Objective-C string
1162 concatenation. It is 'true' if we have seen an '@' before the
1163 current string, and 'false' if not. We must see exactly one or
1164 zero '@' before each string. */
1165 bool objc_at_sign_was_seen = false;
1167 retry:
1168 tok = cpp_get_token (parse_in);
1169 switch (tok->type)
1171 case CPP_PADDING:
1172 goto retry;
1173 case CPP_ATSIGN:
1174 if (objc_string)
1176 if (objc_at_sign_was_seen)
1177 error ("repeated %<@%> before Objective-C string");
1179 objc_at_sign_was_seen = true;
1180 goto retry;
1182 /* FALLTHROUGH */
1184 default:
1185 break;
1187 case CPP_WSTRING:
1188 case CPP_STRING16:
1189 case CPP_STRING32:
1190 case CPP_UTF8STRING:
1191 if (type != tok->type)
1193 if (type == CPP_STRING)
1194 type = tok->type;
1195 else
1196 error ("unsupported non-standard concatenation of string literals");
1198 /* FALLTHROUGH */
1200 case CPP_STRING:
1201 if (!concats)
1203 gcc_obstack_init (&str_ob);
1204 gcc_obstack_init (&loc_ob);
1205 obstack_grow (&str_ob, &str, sizeof (cpp_string));
1206 obstack_grow (&loc_ob, &init_loc, sizeof (location_t));
1209 concats++;
1210 obstack_grow (&str_ob, &tok->val.str, sizeof (cpp_string));
1211 obstack_grow (&loc_ob, &tok->src_loc, sizeof (location_t));
1213 if (objc_string)
1214 objc_at_sign_was_seen = false;
1215 goto retry;
1218 /* It is an error if we saw a '@' with no following string. */
1219 if (objc_at_sign_was_seen)
1220 error ("stray %<@%> in program");
1222 /* We have read one more token than we want. */
1223 _cpp_backup_tokens (parse_in, 1);
1224 if (concats)
1226 strs = XOBFINISH (&str_ob, cpp_string *);
1227 locs = XOBFINISH (&loc_ob, location_t *);
1230 if (concats && !objc_string && !in_system_header_at (input_location))
1231 warning (OPT_Wtraditional,
1232 "traditional C rejects string constant concatenation");
1234 if ((translate
1235 ? cpp_interpret_string : cpp_interpret_string_notranslate)
1236 (parse_in, strs, concats + 1, &istr, type))
1238 value = build_string (istr.len, (const char *) istr.text);
1239 free (CONST_CAST (unsigned char *, istr.text));
1240 if (concats)
1242 gcc_assert (locs);
1243 gcc_assert (g_string_concat_db);
1244 g_string_concat_db->record_string_concatenation (concats + 1, locs);
1247 else
1249 /* Callers cannot generally handle error_mark_node in this context,
1250 so return the empty string instead. cpp_interpret_string has
1251 issued an error. */
1252 switch (type)
1254 default:
1255 case CPP_STRING:
1256 case CPP_UTF8STRING:
1257 value = build_string (1, "");
1258 break;
1259 case CPP_STRING16:
1260 value = build_string (TYPE_PRECISION (char16_type_node)
1261 / TYPE_PRECISION (char_type_node),
1262 "\0"); /* char16_t is 16 bits */
1263 break;
1264 case CPP_STRING32:
1265 value = build_string (TYPE_PRECISION (char32_type_node)
1266 / TYPE_PRECISION (char_type_node),
1267 "\0\0\0"); /* char32_t is 32 bits */
1268 break;
1269 case CPP_WSTRING:
1270 value = build_string (TYPE_PRECISION (wchar_type_node)
1271 / TYPE_PRECISION (char_type_node),
1272 "\0\0\0"); /* widest supported wchar_t
1273 is 32 bits */
1274 break;
1278 switch (type)
1280 default:
1281 case CPP_STRING:
1282 case CPP_UTF8STRING:
1283 TREE_TYPE (value) = char_array_type_node;
1284 break;
1285 case CPP_STRING16:
1286 TREE_TYPE (value) = char16_array_type_node;
1287 break;
1288 case CPP_STRING32:
1289 TREE_TYPE (value) = char32_array_type_node;
1290 break;
1291 case CPP_WSTRING:
1292 TREE_TYPE (value) = wchar_array_type_node;
1294 *valp = fix_string_type (value);
1296 if (concats)
1298 obstack_free (&str_ob, 0);
1299 obstack_free (&loc_ob, 0);
1302 return objc_string ? CPP_OBJC_STRING : type;
1305 /* Converts a (possibly wide) character constant token into a tree. */
1306 static tree
1307 lex_charconst (const cpp_token *token)
1309 cppchar_t result;
1310 tree type, value;
1311 unsigned int chars_seen;
1312 int unsignedp = 0;
1314 result = cpp_interpret_charconst (parse_in, token,
1315 &chars_seen, &unsignedp);
1317 if (token->type == CPP_WCHAR)
1318 type = wchar_type_node;
1319 else if (token->type == CPP_CHAR32)
1320 type = char32_type_node;
1321 else if (token->type == CPP_CHAR16)
1322 type = char16_type_node;
1323 else if (token->type == CPP_UTF8CHAR)
1324 type = char_type_node;
1325 /* In C, a character constant has type 'int'.
1326 In C++ 'char', but multi-char charconsts have type 'int'. */
1327 else if (!c_dialect_cxx () || chars_seen > 1)
1328 type = integer_type_node;
1329 else
1330 type = char_type_node;
1332 /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
1333 before possibly widening to HOST_WIDE_INT for build_int_cst. */
1334 if (unsignedp || (cppchar_signed_t) result >= 0)
1335 value = build_int_cst (type, result);
1336 else
1337 value = build_int_cst (type, (cppchar_signed_t) result);
1339 return value;
1342 /* Helper function for c_parser_peek_conflict_marker
1343 and cp_lexer_peek_conflict_marker.
1344 Given a possible conflict marker token of kind TOK1_KIND
1345 consisting of a pair of characters, get the token kind for the
1346 standalone final character. */
1348 enum cpp_ttype
1349 conflict_marker_get_final_tok_kind (enum cpp_ttype tok1_kind)
1351 switch (tok1_kind)
1353 default: gcc_unreachable ();
1354 case CPP_LSHIFT:
1355 /* "<<" and '<' */
1356 return CPP_LESS;
1358 case CPP_EQ_EQ:
1359 /* "==" and '=' */
1360 return CPP_EQ;
1362 case CPP_RSHIFT:
1363 /* ">>" and '>' */
1364 return CPP_GREATER;