2015-01-23 Bernd Edlinger <bernd.edlinger@hotmail.de>
[official-gcc.git] / gcc / c-family / c-lex.c
blobbb55be8063e285f613834815f903961e6c57b9e4
1 /* Mainly the interface between cpplib and the C front ends.
2 Copyright (C) 1987-2015 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 "tm.h"
24 #include "hash-set.h"
25 #include "machmode.h"
26 #include "vec.h"
27 #include "double-int.h"
28 #include "input.h"
29 #include "alias.h"
30 #include "symtab.h"
31 #include "wide-int.h"
32 #include "inchash.h"
33 #include "tree.h"
34 #include "stringpool.h"
35 #include "stor-layout.h"
36 #include "input.h"
37 #include "c-common.h"
38 #include "flags.h"
39 #include "timevar.h"
40 #include "cpplib.h"
41 #include "c-pragma.h"
42 #include "intl.h"
43 #include "splay-tree.h"
44 #include "debug.h"
45 #include "target.h"
46 #include "wide-int.h"
48 #include "attribs.h"
50 /* We may keep statistics about how long which files took to compile. */
51 static int header_time, body_time;
52 static splay_tree file_info_tree;
54 int pending_lang_change; /* If we need to switch languages - C++ only */
55 int c_header_level; /* depth in C headers - C++ only */
57 static tree interpret_integer (const cpp_token *, unsigned int,
58 enum overflow_type *);
59 static tree interpret_float (const cpp_token *, unsigned int, const char *,
60 enum overflow_type *);
61 static tree interpret_fixed (const cpp_token *, unsigned int);
62 static enum integer_type_kind narrowest_unsigned_type
63 (const widest_int &, unsigned int);
64 static enum integer_type_kind narrowest_signed_type
65 (const widest_int &, unsigned int);
66 static enum cpp_ttype lex_string (const cpp_token *, tree *, bool, bool);
67 static tree lex_charconst (const cpp_token *);
68 static void update_header_times (const char *);
69 static int dump_one_header (splay_tree_node, void *);
70 static void cb_line_change (cpp_reader *, const cpp_token *, int);
71 static void cb_ident (cpp_reader *, unsigned int, const cpp_string *);
72 static void cb_def_pragma (cpp_reader *, unsigned int);
73 static void cb_define (cpp_reader *, unsigned int, cpp_hashnode *);
74 static void cb_undef (cpp_reader *, unsigned int, cpp_hashnode *);
76 void
77 init_c_lex (void)
79 struct cpp_callbacks *cb;
80 struct c_fileinfo *toplevel;
82 /* The get_fileinfo data structure must be initialized before
83 cpp_read_main_file is called. */
84 toplevel = get_fileinfo ("<top level>");
85 if (flag_detailed_statistics)
87 header_time = 0;
88 body_time = get_run_time ();
89 toplevel->time = body_time;
92 cb = cpp_get_callbacks (parse_in);
94 cb->line_change = cb_line_change;
95 cb->ident = cb_ident;
96 cb->def_pragma = cb_def_pragma;
97 cb->valid_pch = c_common_valid_pch;
98 cb->read_pch = c_common_read_pch;
99 cb->has_attribute = c_common_has_attribute;
101 /* Set the debug callbacks if we can use them. */
102 if ((debug_info_level == DINFO_LEVEL_VERBOSE
103 && (write_symbols == DWARF2_DEBUG
104 || write_symbols == VMS_AND_DWARF2_DEBUG))
105 || flag_dump_go_spec != NULL)
107 cb->define = cb_define;
108 cb->undef = cb_undef;
112 struct c_fileinfo *
113 get_fileinfo (const char *name)
115 splay_tree_node n;
116 struct c_fileinfo *fi;
118 if (!file_info_tree)
119 file_info_tree = splay_tree_new ((splay_tree_compare_fn) strcmp,
121 (splay_tree_delete_value_fn) free);
123 n = splay_tree_lookup (file_info_tree, (splay_tree_key) name);
124 if (n)
125 return (struct c_fileinfo *) n->value;
127 fi = XNEW (struct c_fileinfo);
128 fi->time = 0;
129 fi->interface_only = 0;
130 fi->interface_unknown = 1;
131 splay_tree_insert (file_info_tree, (splay_tree_key) name,
132 (splay_tree_value) fi);
133 return fi;
136 static void
137 update_header_times (const char *name)
139 /* Changing files again. This means currently collected time
140 is charged against header time, and body time starts back at 0. */
141 if (flag_detailed_statistics)
143 int this_time = get_run_time ();
144 struct c_fileinfo *file = get_fileinfo (name);
145 header_time += this_time - body_time;
146 file->time += this_time - body_time;
147 body_time = this_time;
151 static int
152 dump_one_header (splay_tree_node n, void * ARG_UNUSED (dummy))
154 print_time ((const char *) n->key,
155 ((struct c_fileinfo *) n->value)->time);
156 return 0;
159 void
160 dump_time_statistics (void)
162 struct c_fileinfo *file = get_fileinfo (LOCATION_FILE (input_location));
163 int this_time = get_run_time ();
164 file->time += this_time - body_time;
166 fprintf (stderr, "\n******\n");
167 print_time ("header files (total)", header_time);
168 print_time ("main file (total)", this_time - body_time);
169 fprintf (stderr, "ratio = %g : 1\n",
170 (double) header_time / (double) (this_time - body_time));
171 fprintf (stderr, "\n******\n");
173 splay_tree_foreach (file_info_tree, dump_one_header, 0);
176 static void
177 cb_ident (cpp_reader * ARG_UNUSED (pfile),
178 unsigned int ARG_UNUSED (line),
179 const cpp_string * ARG_UNUSED (str))
181 if (!flag_no_ident)
183 /* Convert escapes in the string. */
184 cpp_string cstr = { 0, 0 };
185 if (cpp_interpret_string (pfile, str, 1, &cstr, CPP_STRING))
187 targetm.asm_out.output_ident ((const char *) cstr.text);
188 free (CONST_CAST (unsigned char *, cstr.text));
193 /* Called at the start of every non-empty line. TOKEN is the first
194 lexed token on the line. Used for diagnostic line numbers. */
195 static void
196 cb_line_change (cpp_reader * ARG_UNUSED (pfile), const cpp_token *token,
197 int parsing_args)
199 if (token->type != CPP_EOF && !parsing_args)
200 input_location = token->src_loc;
203 void
204 fe_file_change (const struct line_map *new_map)
206 if (new_map == NULL)
207 return;
209 if (new_map->reason == LC_ENTER)
211 /* Don't stack the main buffer on the input stack;
212 we already did in compile_file. */
213 if (!MAIN_FILE_P (new_map))
215 unsigned int included_at = LAST_SOURCE_LINE_LOCATION (new_map - 1);
216 int line = 0;
217 if (included_at > BUILTINS_LOCATION)
218 line = SOURCE_LINE (new_map - 1, included_at);
220 input_location = new_map->start_location;
221 (*debug_hooks->start_source_file) (line, LINEMAP_FILE (new_map));
222 #ifndef NO_IMPLICIT_EXTERN_C
223 if (c_header_level)
224 ++c_header_level;
225 else if (LINEMAP_SYSP (new_map) == 2)
227 c_header_level = 1;
228 ++pending_lang_change;
230 #endif
233 else if (new_map->reason == LC_LEAVE)
235 #ifndef NO_IMPLICIT_EXTERN_C
236 if (c_header_level && --c_header_level == 0)
238 if (LINEMAP_SYSP (new_map) == 2)
239 warning (0, "badly nested C headers from preprocessor");
240 --pending_lang_change;
242 #endif
243 input_location = new_map->start_location;
245 (*debug_hooks->end_source_file) (LINEMAP_LINE (new_map));
248 update_header_times (LINEMAP_FILE (new_map));
249 input_location = new_map->start_location;
252 static void
253 cb_def_pragma (cpp_reader *pfile, source_location loc)
255 /* Issue a warning message if we have been asked to do so. Ignore
256 unknown pragmas in system headers unless an explicit
257 -Wunknown-pragmas has been given. */
258 if (warn_unknown_pragmas > in_system_header_at (input_location))
260 const unsigned char *space, *name;
261 const cpp_token *s;
262 location_t fe_loc = loc;
264 space = name = (const unsigned char *) "";
265 s = cpp_get_token (pfile);
266 if (s->type != CPP_EOF)
268 space = cpp_token_as_text (pfile, s);
269 s = cpp_get_token (pfile);
270 if (s->type == CPP_NAME)
271 name = cpp_token_as_text (pfile, s);
274 warning_at (fe_loc, OPT_Wunknown_pragmas, "ignoring #pragma %s %s",
275 space, name);
279 /* #define callback for DWARF and DWARF2 debug info. */
280 static void
281 cb_define (cpp_reader *pfile, source_location loc, cpp_hashnode *node)
283 const struct line_map *map = linemap_lookup (line_table, loc);
284 (*debug_hooks->define) (SOURCE_LINE (map, loc),
285 (const char *) cpp_macro_definition (pfile, node));
288 /* #undef callback for DWARF and DWARF2 debug info. */
289 static void
290 cb_undef (cpp_reader * ARG_UNUSED (pfile), source_location loc,
291 cpp_hashnode *node)
293 const struct line_map *map = linemap_lookup (line_table, loc);
294 (*debug_hooks->undef) (SOURCE_LINE (map, loc),
295 (const char *) NODE_NAME (node));
298 /* Wrapper around cpp_get_token to skip CPP_PADDING tokens
299 and not consume CPP_EOF. */
300 static const cpp_token *
301 get_token_no_padding (cpp_reader *pfile)
303 for (;;)
305 const cpp_token *ret = cpp_peek_token (pfile, 0);
306 if (ret->type == CPP_EOF)
307 return ret;
308 ret = cpp_get_token (pfile);
309 if (ret->type != CPP_PADDING)
310 return ret;
314 /* Callback for has_attribute. */
316 c_common_has_attribute (cpp_reader *pfile)
318 int result = 0;
319 tree attr_name = NULL_TREE;
320 const cpp_token *token;
322 token = get_token_no_padding (pfile);
323 if (token->type != CPP_OPEN_PAREN)
325 cpp_error (pfile, CPP_DL_ERROR,
326 "missing '(' after \"__has_attribute\"");
327 return 0;
329 token = get_token_no_padding (pfile);
330 if (token->type == CPP_NAME)
332 attr_name = get_identifier ((const char *)
333 cpp_token_as_text (pfile, token));
334 if (c_dialect_cxx ())
336 int idx = 0;
337 const cpp_token *nxt_token;
339 nxt_token = cpp_peek_token (pfile, idx++);
340 while (nxt_token->type == CPP_PADDING);
341 if (nxt_token->type == CPP_SCOPE)
343 get_token_no_padding (pfile); // Eat scope.
344 nxt_token = get_token_no_padding (pfile);
345 if (nxt_token->type == CPP_NAME)
347 tree attr_ns = attr_name;
348 tree attr_id
349 = get_identifier ((const char *)
350 cpp_token_as_text (pfile, nxt_token));
351 attr_name = build_tree_list (attr_ns, attr_id);
353 else
355 cpp_error (pfile, CPP_DL_ERROR,
356 "attribute identifier required after scope");
357 attr_name = NULL_TREE;
361 if (attr_name)
363 init_attributes ();
364 const struct attribute_spec *attr = lookup_attribute_spec (attr_name);
365 if (attr)
367 if (TREE_CODE (attr_name) == TREE_LIST)
368 attr_name = TREE_VALUE (attr_name);
369 if (is_attribute_p ("noreturn", attr_name))
370 result = 200809;
371 else if (is_attribute_p ("deprecated", attr_name))
372 result = 201309;
373 else
374 result = 1;
378 else
380 cpp_error (pfile, CPP_DL_ERROR,
381 "macro \"__has_attribute\" requires an identifier");
382 return 0;
385 if (get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN)
386 cpp_error (pfile, CPP_DL_ERROR,
387 "missing ')' after \"__has_attribute\"");
389 return result;
392 /* Read a token and return its type. Fill *VALUE with its value, if
393 applicable. Fill *CPP_FLAGS with the token's flags, if it is
394 non-NULL. */
396 enum cpp_ttype
397 c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags,
398 int lex_flags)
400 static bool no_more_pch;
401 const cpp_token *tok;
402 enum cpp_ttype type;
403 unsigned char add_flags = 0;
404 enum overflow_type overflow = OT_NONE;
406 timevar_push (TV_CPP);
407 retry:
408 tok = cpp_get_token_with_location (parse_in, loc);
409 type = tok->type;
411 retry_after_at:
412 switch (type)
414 case CPP_PADDING:
415 goto retry;
417 case CPP_NAME:
418 *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node.node));
419 break;
421 case CPP_NUMBER:
423 const char *suffix = NULL;
424 unsigned int flags = cpp_classify_number (parse_in, tok, &suffix, *loc);
426 switch (flags & CPP_N_CATEGORY)
428 case CPP_N_INVALID:
429 /* cpplib has issued an error. */
430 *value = error_mark_node;
431 break;
433 case CPP_N_INTEGER:
434 /* C++ uses '0' to mark virtual functions as pure.
435 Set PURE_ZERO to pass this information to the C++ parser. */
436 if (tok->val.str.len == 1 && *tok->val.str.text == '0')
437 add_flags = PURE_ZERO;
438 *value = interpret_integer (tok, flags, &overflow);
439 break;
441 case CPP_N_FLOATING:
442 *value = interpret_float (tok, flags, suffix, &overflow);
443 break;
445 default:
446 gcc_unreachable ();
449 if (flags & CPP_N_USERDEF)
451 char *str;
452 tree literal;
453 tree suffix_id = get_identifier (suffix);
454 int len = tok->val.str.len - strlen (suffix);
455 /* If this is going to be used as a C string to pass to a
456 raw literal operator, we need to add a trailing NUL. */
457 tree num_string = build_string (len + 1,
458 (const char *) tok->val.str.text);
459 TREE_TYPE (num_string) = char_array_type_node;
460 num_string = fix_string_type (num_string);
461 str = CONST_CAST (char *, TREE_STRING_POINTER (num_string));
462 str[len] = '\0';
463 literal = build_userdef_literal (suffix_id, *value, overflow,
464 num_string);
465 *value = literal;
468 break;
470 case CPP_ATSIGN:
471 /* An @ may give the next token special significance in Objective-C. */
472 if (c_dialect_objc ())
474 location_t atloc = *loc;
475 location_t newloc;
477 retry_at:
478 tok = cpp_get_token_with_location (parse_in, &newloc);
479 type = tok->type;
480 switch (type)
482 case CPP_PADDING:
483 goto retry_at;
485 case CPP_STRING:
486 case CPP_WSTRING:
487 case CPP_STRING16:
488 case CPP_STRING32:
489 case CPP_UTF8STRING:
490 type = lex_string (tok, value, true, true);
491 break;
493 case CPP_NAME:
494 *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node.node));
495 if (OBJC_IS_AT_KEYWORD (C_RID_CODE (*value))
496 || OBJC_IS_CXX_KEYWORD (C_RID_CODE (*value)))
498 type = CPP_AT_NAME;
499 /* Note the complication: if we found an OBJC_CXX
500 keyword, for example, 'class', we will be
501 returning a token of type CPP_AT_NAME and rid
502 code RID_CLASS (not RID_AT_CLASS). The language
503 parser needs to convert that to RID_AT_CLASS.
505 break;
507 /* FALLTHROUGH */
509 default:
510 /* ... or not. */
511 error_at (atloc, "stray %<@%> in program");
512 *loc = newloc;
513 goto retry_after_at;
515 break;
518 /* FALLTHROUGH */
519 case CPP_HASH:
520 case CPP_PASTE:
522 unsigned char name[8];
524 *cpp_spell_token (parse_in, tok, name, true) = 0;
526 error_at (*loc, "stray %qs in program", name);
529 goto retry;
531 case CPP_OTHER:
533 cppchar_t c = tok->val.str.text[0];
535 if (c == '"' || c == '\'')
536 error ("missing terminating %c character", (int) c);
537 else if (ISGRAPH (c))
538 error ("stray %qc in program", (int) c);
539 else
540 error ("stray %<\\%o%> in program", (int) c);
542 goto retry;
544 case CPP_CHAR_USERDEF:
545 case CPP_WCHAR_USERDEF:
546 case CPP_CHAR16_USERDEF:
547 case CPP_CHAR32_USERDEF:
549 tree literal;
550 cpp_token temp_tok = *tok;
551 const char *suffix = cpp_get_userdef_suffix (tok);
552 temp_tok.val.str.len -= strlen (suffix);
553 temp_tok.type = cpp_userdef_char_remove_type (type);
554 literal = build_userdef_literal (get_identifier (suffix),
555 lex_charconst (&temp_tok),
556 OT_NONE, NULL_TREE);
557 *value = literal;
559 break;
561 case CPP_CHAR:
562 case CPP_WCHAR:
563 case CPP_CHAR16:
564 case CPP_CHAR32:
565 *value = lex_charconst (tok);
566 break;
568 case CPP_STRING_USERDEF:
569 case CPP_WSTRING_USERDEF:
570 case CPP_STRING16_USERDEF:
571 case CPP_STRING32_USERDEF:
572 case CPP_UTF8STRING_USERDEF:
574 tree literal, string;
575 const char *suffix = cpp_get_userdef_suffix (tok);
576 string = build_string (tok->val.str.len - strlen (suffix),
577 (const char *) tok->val.str.text);
578 literal = build_userdef_literal (get_identifier (suffix),
579 string, OT_NONE, NULL_TREE);
580 *value = literal;
582 break;
584 case CPP_STRING:
585 case CPP_WSTRING:
586 case CPP_STRING16:
587 case CPP_STRING32:
588 case CPP_UTF8STRING:
589 if ((lex_flags & C_LEX_STRING_NO_JOIN) == 0)
591 type = lex_string (tok, value, false,
592 (lex_flags & C_LEX_STRING_NO_TRANSLATE) == 0);
593 break;
595 *value = build_string (tok->val.str.len, (const char *) tok->val.str.text);
596 break;
598 case CPP_PRAGMA:
599 *value = build_int_cst (integer_type_node, tok->val.pragma);
600 break;
602 /* These tokens should not be visible outside cpplib. */
603 case CPP_HEADER_NAME:
604 case CPP_MACRO_ARG:
605 gcc_unreachable ();
607 /* CPP_COMMENT will appear when compiling with -C and should be
608 ignored. */
609 case CPP_COMMENT:
610 goto retry;
612 default:
613 *value = NULL_TREE;
614 break;
617 if (cpp_flags)
618 *cpp_flags = tok->flags | add_flags;
620 if (!no_more_pch)
622 no_more_pch = true;
623 c_common_no_more_pch ();
626 timevar_pop (TV_CPP);
628 return type;
631 /* Returns the narrowest C-visible unsigned type, starting with the
632 minimum specified by FLAGS, that can fit HIGH:LOW, or itk_none if
633 there isn't one. */
635 static enum integer_type_kind
636 narrowest_unsigned_type (const widest_int &val, unsigned int flags)
638 int itk;
640 if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
641 itk = itk_unsigned_int;
642 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
643 itk = itk_unsigned_long;
644 else
645 itk = itk_unsigned_long_long;
647 for (; itk < itk_none; itk += 2 /* skip unsigned types */)
649 tree upper;
651 if (integer_types[itk] == NULL_TREE)
652 continue;
653 upper = TYPE_MAX_VALUE (integer_types[itk]);
655 if (wi::geu_p (wi::to_widest (upper), val))
656 return (enum integer_type_kind) itk;
659 return itk_none;
662 /* Ditto, but narrowest signed type. */
663 static enum integer_type_kind
664 narrowest_signed_type (const widest_int &val, unsigned int flags)
666 int itk;
668 if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
669 itk = itk_int;
670 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
671 itk = itk_long;
672 else
673 itk = itk_long_long;
675 for (; itk < itk_none; itk += 2 /* skip signed types */)
677 tree upper;
679 if (integer_types[itk] == NULL_TREE)
680 continue;
681 upper = TYPE_MAX_VALUE (integer_types[itk]);
683 if (wi::geu_p (wi::to_widest (upper), val))
684 return (enum integer_type_kind) itk;
687 return itk_none;
690 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib. */
691 static tree
692 interpret_integer (const cpp_token *token, unsigned int flags,
693 enum overflow_type *overflow)
695 tree value, type;
696 enum integer_type_kind itk;
697 cpp_num integer;
698 HOST_WIDE_INT ival[3];
700 *overflow = OT_NONE;
702 integer = cpp_interpret_integer (parse_in, token, flags);
703 if (integer.overflow)
704 *overflow = OT_OVERFLOW;
706 ival[0] = integer.low;
707 ival[1] = integer.high;
708 ival[2] = 0;
709 widest_int wval = widest_int::from_array (ival, 3);
711 /* The type of a constant with a U suffix is straightforward. */
712 if (flags & CPP_N_UNSIGNED)
713 itk = narrowest_unsigned_type (wval, flags);
714 else
716 /* The type of a potentially-signed integer constant varies
717 depending on the base it's in, the standard in use, and the
718 length suffixes. */
719 enum integer_type_kind itk_u
720 = narrowest_unsigned_type (wval, flags);
721 enum integer_type_kind itk_s
722 = narrowest_signed_type (wval, flags);
724 /* In both C89 and C99, octal and hex constants may be signed or
725 unsigned, whichever fits tighter. We do not warn about this
726 choice differing from the traditional choice, as the constant
727 is probably a bit pattern and either way will work. */
728 if ((flags & CPP_N_RADIX) != CPP_N_DECIMAL)
729 itk = MIN (itk_u, itk_s);
730 else
732 /* In C99, decimal constants are always signed.
733 In C89, decimal constants that don't fit in long have
734 undefined behavior; we try to make them unsigned long.
735 In GCC's extended C89, that last is true of decimal
736 constants that don't fit in long long, too. */
738 itk = itk_s;
739 if (itk_s > itk_u && itk_s > itk_long)
741 if (!flag_isoc99)
743 if (itk_u < itk_unsigned_long)
744 itk_u = itk_unsigned_long;
745 itk = itk_u;
746 warning (0, "this decimal constant is unsigned only in ISO C90");
748 else
749 warning (OPT_Wtraditional,
750 "this decimal constant would be unsigned in ISO C90");
755 if (itk == itk_none)
756 /* cpplib has already issued a warning for overflow. */
757 type = ((flags & CPP_N_UNSIGNED)
758 ? widest_unsigned_literal_type_node
759 : widest_integer_literal_type_node);
760 else
762 type = integer_types[itk];
763 if (itk > itk_unsigned_long
764 && (flags & CPP_N_WIDTH) != CPP_N_LARGE)
765 emit_diagnostic
766 ((c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99)
767 ? DK_PEDWARN : DK_WARNING,
768 input_location, OPT_Wlong_long,
769 (flags & CPP_N_UNSIGNED)
770 ? "integer constant is too large for %<unsigned long%> type"
771 : "integer constant is too large for %<long%> type");
774 value = wide_int_to_tree (type, wval);
776 /* Convert imaginary to a complex type. */
777 if (flags & CPP_N_IMAGINARY)
778 value = build_complex (NULL_TREE, build_int_cst (type, 0), value);
780 return value;
783 /* Interpret TOKEN, a floating point number with FLAGS as classified
784 by cpplib. For C++0X SUFFIX may contain a user-defined literal suffix. */
785 static tree
786 interpret_float (const cpp_token *token, unsigned int flags,
787 const char *suffix, enum overflow_type *overflow)
789 tree type;
790 tree const_type;
791 tree value;
792 REAL_VALUE_TYPE real;
793 REAL_VALUE_TYPE real_trunc;
794 char *copy;
795 size_t copylen;
797 *overflow = OT_NONE;
799 /* Default (no suffix) depends on whether the FLOAT_CONST_DECIMAL64
800 pragma has been used and is either double or _Decimal64. Types
801 that are not allowed with decimal float default to double. */
802 if (flags & CPP_N_DEFAULT)
804 flags ^= CPP_N_DEFAULT;
805 flags |= CPP_N_MEDIUM;
807 if (((flags & CPP_N_HEX) == 0) && ((flags & CPP_N_IMAGINARY) == 0))
809 warning (OPT_Wunsuffixed_float_constants,
810 "unsuffixed float constant");
811 if (float_const_decimal64_p ())
812 flags |= CPP_N_DFLOAT;
816 /* Decode _Fract and _Accum. */
817 if (flags & CPP_N_FRACT || flags & CPP_N_ACCUM)
818 return interpret_fixed (token, flags);
820 /* Decode type based on width and properties. */
821 if (flags & CPP_N_DFLOAT)
822 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
823 type = dfloat128_type_node;
824 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
825 type = dfloat32_type_node;
826 else
827 type = dfloat64_type_node;
828 else
829 if (flags & CPP_N_WIDTH_MD)
831 char suffix;
832 machine_mode mode;
834 if ((flags & CPP_N_WIDTH_MD) == CPP_N_MD_W)
835 suffix = 'w';
836 else
837 suffix = 'q';
839 mode = targetm.c.mode_for_suffix (suffix);
840 if (mode == VOIDmode)
842 error ("unsupported non-standard suffix on floating constant");
844 return error_mark_node;
846 else
847 pedwarn (input_location, OPT_Wpedantic, "non-standard suffix on floating constant");
849 type = c_common_type_for_mode (mode, 0);
850 gcc_assert (type);
852 else if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
853 type = long_double_type_node;
854 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL
855 || flag_single_precision_constant)
856 type = float_type_node;
857 else
858 type = double_type_node;
860 const_type = excess_precision_type (type);
861 if (!const_type)
862 const_type = type;
864 /* Copy the constant to a nul-terminated buffer. If the constant
865 has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF
866 can't handle them. */
867 copylen = token->val.str.len;
868 if (flags & CPP_N_USERDEF)
869 copylen -= strlen (suffix);
870 else if (flags & CPP_N_DFLOAT)
871 copylen -= 2;
872 else
874 if ((flags & CPP_N_WIDTH) != CPP_N_MEDIUM)
875 /* Must be an F or L or machine defined suffix. */
876 copylen--;
877 if (flags & CPP_N_IMAGINARY)
878 /* I or J suffix. */
879 copylen--;
882 copy = (char *) alloca (copylen + 1);
883 if (cxx_dialect > cxx11)
885 size_t maxlen = 0;
886 for (size_t i = 0; i < copylen; ++i)
887 if (token->val.str.text[i] != '\'')
888 copy[maxlen++] = token->val.str.text[i];
889 copy[maxlen] = '\0';
891 else
893 memcpy (copy, token->val.str.text, copylen);
894 copy[copylen] = '\0';
897 real_from_string3 (&real, copy, TYPE_MODE (const_type));
898 if (const_type != type)
899 /* Diagnosing if the result of converting the value with excess
900 precision to the semantic type would overflow (with associated
901 double rounding) is more appropriate than diagnosing if the
902 result of converting the string directly to the semantic type
903 would overflow. */
904 real_convert (&real_trunc, TYPE_MODE (type), &real);
906 /* Both C and C++ require a diagnostic for a floating constant
907 outside the range of representable values of its type. Since we
908 have __builtin_inf* to produce an infinity, this is now a
909 mandatory pedwarn if the target does not support infinities. */
910 if (REAL_VALUE_ISINF (real)
911 || (const_type != type && REAL_VALUE_ISINF (real_trunc)))
913 *overflow = OT_OVERFLOW;
914 if (!(flags & CPP_N_USERDEF))
916 if (!MODE_HAS_INFINITIES (TYPE_MODE (type)))
917 pedwarn (input_location, 0,
918 "floating constant exceeds range of %qT", type);
919 else
920 warning (OPT_Woverflow,
921 "floating constant exceeds range of %qT", type);
924 /* We also give a warning if the value underflows. */
925 else if (REAL_VALUES_EQUAL (real, dconst0)
926 || (const_type != type
927 && REAL_VALUES_EQUAL (real_trunc, dconst0)))
929 REAL_VALUE_TYPE realvoidmode;
930 int oflow = real_from_string (&realvoidmode, copy);
931 *overflow = (oflow == 0 ? OT_NONE
932 : (oflow < 0 ? OT_UNDERFLOW : OT_OVERFLOW));
933 if (!(flags & CPP_N_USERDEF))
935 if (oflow < 0 || !REAL_VALUES_EQUAL (realvoidmode, dconst0))
936 warning (OPT_Woverflow, "floating constant truncated to zero");
940 /* Create a node with determined type and value. */
941 value = build_real (const_type, real);
942 if (flags & CPP_N_IMAGINARY)
944 value = build_complex (NULL_TREE, convert (const_type,
945 integer_zero_node), value);
946 if (type != const_type)
948 const_type = TREE_TYPE (value);
949 type = build_complex_type (type);
953 if (type != const_type)
954 value = build1 (EXCESS_PRECISION_EXPR, type, value);
956 return value;
959 /* Interpret TOKEN, a fixed-point number with FLAGS as classified
960 by cpplib. */
962 static tree
963 interpret_fixed (const cpp_token *token, unsigned int flags)
965 tree type;
966 tree value;
967 FIXED_VALUE_TYPE fixed;
968 char *copy;
969 size_t copylen;
971 copylen = token->val.str.len;
973 if (flags & CPP_N_FRACT) /* _Fract. */
975 if (flags & CPP_N_UNSIGNED) /* Unsigned _Fract. */
977 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
979 type = unsigned_long_long_fract_type_node;
980 copylen -= 4;
982 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
984 type = unsigned_long_fract_type_node;
985 copylen -= 3;
987 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
989 type = unsigned_short_fract_type_node;
990 copylen -= 3;
992 else
994 type = unsigned_fract_type_node;
995 copylen -= 2;
998 else /* Signed _Fract. */
1000 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
1002 type = long_long_fract_type_node;
1003 copylen -= 3;
1005 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
1007 type = long_fract_type_node;
1008 copylen -= 2;
1010 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
1012 type = short_fract_type_node;
1013 copylen -= 2;
1015 else
1017 type = fract_type_node;
1018 copylen --;
1022 else /* _Accum. */
1024 if (flags & CPP_N_UNSIGNED) /* Unsigned _Accum. */
1026 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
1028 type = unsigned_long_long_accum_type_node;
1029 copylen -= 4;
1031 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
1033 type = unsigned_long_accum_type_node;
1034 copylen -= 3;
1036 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
1038 type = unsigned_short_accum_type_node;
1039 copylen -= 3;
1041 else
1043 type = unsigned_accum_type_node;
1044 copylen -= 2;
1047 else /* Signed _Accum. */
1049 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
1051 type = long_long_accum_type_node;
1052 copylen -= 3;
1054 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
1056 type = long_accum_type_node;
1057 copylen -= 2;
1059 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
1061 type = short_accum_type_node;
1062 copylen -= 2;
1064 else
1066 type = accum_type_node;
1067 copylen --;
1072 copy = (char *) alloca (copylen + 1);
1073 memcpy (copy, token->val.str.text, copylen);
1074 copy[copylen] = '\0';
1076 fixed_from_string (&fixed, copy, TYPE_MODE (type));
1078 /* Create a node with determined type and value. */
1079 value = build_fixed (type, fixed);
1081 return value;
1084 /* Convert a series of STRING, WSTRING, STRING16, STRING32 and/or
1085 UTF8STRING tokens into a tree, performing string constant
1086 concatenation. TOK is the first of these. VALP is the location to
1087 write the string into. OBJC_STRING indicates whether an '@' token
1088 preceded the incoming token (in that case, the strings can either
1089 be ObjC strings, preceded by a single '@', or normal strings, not
1090 preceded by '@'. The result will be a CPP_OBJC_STRING). Returns
1091 the CPP token type of the result (CPP_STRING, CPP_WSTRING,
1092 CPP_STRING32, CPP_STRING16, CPP_UTF8STRING, or CPP_OBJC_STRING).
1094 This is unfortunately more work than it should be. If any of the
1095 strings in the series has an L prefix, the result is a wide string
1096 (6.4.5p4). Whether or not the result is a wide string affects the
1097 meaning of octal and hexadecimal escapes (6.4.4.4p6,9). But escape
1098 sequences do not continue across the boundary between two strings in
1099 a series (6.4.5p7), so we must not lose the boundaries. Therefore
1100 cpp_interpret_string takes a vector of cpp_string structures, which
1101 we must arrange to provide. */
1103 static enum cpp_ttype
1104 lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate)
1106 tree value;
1107 size_t concats = 0;
1108 struct obstack str_ob;
1109 cpp_string istr;
1110 enum cpp_ttype type = tok->type;
1112 /* Try to avoid the overhead of creating and destroying an obstack
1113 for the common case of just one string. */
1114 cpp_string str = tok->val.str;
1115 cpp_string *strs = &str;
1117 /* objc_at_sign_was_seen is only used when doing Objective-C string
1118 concatenation. It is 'true' if we have seen an '@' before the
1119 current string, and 'false' if not. We must see exactly one or
1120 zero '@' before each string. */
1121 bool objc_at_sign_was_seen = false;
1123 retry:
1124 tok = cpp_get_token (parse_in);
1125 switch (tok->type)
1127 case CPP_PADDING:
1128 goto retry;
1129 case CPP_ATSIGN:
1130 if (objc_string)
1132 if (objc_at_sign_was_seen)
1133 error ("repeated %<@%> before Objective-C string");
1135 objc_at_sign_was_seen = true;
1136 goto retry;
1138 /* FALLTHROUGH */
1140 default:
1141 break;
1143 case CPP_WSTRING:
1144 case CPP_STRING16:
1145 case CPP_STRING32:
1146 case CPP_UTF8STRING:
1147 if (type != tok->type)
1149 if (type == CPP_STRING)
1150 type = tok->type;
1151 else
1152 error ("unsupported non-standard concatenation of string literals");
1155 case CPP_STRING:
1156 if (!concats)
1158 gcc_obstack_init (&str_ob);
1159 obstack_grow (&str_ob, &str, sizeof (cpp_string));
1162 concats++;
1163 obstack_grow (&str_ob, &tok->val.str, sizeof (cpp_string));
1164 if (objc_string)
1165 objc_at_sign_was_seen = false;
1166 goto retry;
1169 /* It is an error if we saw a '@' with no following string. */
1170 if (objc_at_sign_was_seen)
1171 error ("stray %<@%> in program");
1173 /* We have read one more token than we want. */
1174 _cpp_backup_tokens (parse_in, 1);
1175 if (concats)
1176 strs = XOBFINISH (&str_ob, cpp_string *);
1178 if (concats && !objc_string && !in_system_header_at (input_location))
1179 warning (OPT_Wtraditional,
1180 "traditional C rejects string constant concatenation");
1182 if ((translate
1183 ? cpp_interpret_string : cpp_interpret_string_notranslate)
1184 (parse_in, strs, concats + 1, &istr, type))
1186 value = build_string (istr.len, (const char *) istr.text);
1187 free (CONST_CAST (unsigned char *, istr.text));
1189 else
1191 /* Callers cannot generally handle error_mark_node in this context,
1192 so return the empty string instead. cpp_interpret_string has
1193 issued an error. */
1194 switch (type)
1196 default:
1197 case CPP_STRING:
1198 case CPP_UTF8STRING:
1199 value = build_string (1, "");
1200 break;
1201 case CPP_STRING16:
1202 value = build_string (TYPE_PRECISION (char16_type_node)
1203 / TYPE_PRECISION (char_type_node),
1204 "\0"); /* char16_t is 16 bits */
1205 break;
1206 case CPP_STRING32:
1207 value = build_string (TYPE_PRECISION (char32_type_node)
1208 / TYPE_PRECISION (char_type_node),
1209 "\0\0\0"); /* char32_t is 32 bits */
1210 break;
1211 case CPP_WSTRING:
1212 value = build_string (TYPE_PRECISION (wchar_type_node)
1213 / TYPE_PRECISION (char_type_node),
1214 "\0\0\0"); /* widest supported wchar_t
1215 is 32 bits */
1216 break;
1220 switch (type)
1222 default:
1223 case CPP_STRING:
1224 case CPP_UTF8STRING:
1225 TREE_TYPE (value) = char_array_type_node;
1226 break;
1227 case CPP_STRING16:
1228 TREE_TYPE (value) = char16_array_type_node;
1229 break;
1230 case CPP_STRING32:
1231 TREE_TYPE (value) = char32_array_type_node;
1232 break;
1233 case CPP_WSTRING:
1234 TREE_TYPE (value) = wchar_array_type_node;
1236 *valp = fix_string_type (value);
1238 if (concats)
1239 obstack_free (&str_ob, 0);
1241 return objc_string ? CPP_OBJC_STRING : type;
1244 /* Converts a (possibly wide) character constant token into a tree. */
1245 static tree
1246 lex_charconst (const cpp_token *token)
1248 cppchar_t result;
1249 tree type, value;
1250 unsigned int chars_seen;
1251 int unsignedp = 0;
1253 result = cpp_interpret_charconst (parse_in, token,
1254 &chars_seen, &unsignedp);
1256 if (token->type == CPP_WCHAR)
1257 type = wchar_type_node;
1258 else if (token->type == CPP_CHAR32)
1259 type = char32_type_node;
1260 else if (token->type == CPP_CHAR16)
1261 type = char16_type_node;
1262 /* In C, a character constant has type 'int'.
1263 In C++ 'char', but multi-char charconsts have type 'int'. */
1264 else if (!c_dialect_cxx () || chars_seen > 1)
1265 type = integer_type_node;
1266 else
1267 type = char_type_node;
1269 /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
1270 before possibly widening to HOST_WIDE_INT for build_int_cst. */
1271 if (unsignedp || (cppchar_signed_t) result >= 0)
1272 value = build_int_cst (type, result);
1273 else
1274 value = build_int_cst (type, (cppchar_signed_t) result);
1276 return value;