1 /* Mainly the interface between cpplib and the C front ends.
2 Copyright (C) 1987, 1988, 1989, 1992, 1994, 1995, 1996, 1997
3 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
4 Free Software Foundation, Inc.
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 3, or (at your option) any later
13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
14 WARRANTY; without even the implied warranty of MERCHANTABILITY or
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
24 #include "coretypes.h"
38 #include "splay-tree.h"
42 /* We may keep statistics about how long which files took to compile. */
43 static int header_time, body_time;
44 static splay_tree file_info_tree;
46 int pending_lang_change; /* If we need to switch languages - C++ only */
47 int c_header_level; /* depth in C headers - C++ only */
49 static tree interpret_integer (const cpp_token *, unsigned int);
50 static tree interpret_float (const cpp_token *, unsigned int);
51 static tree interpret_fixed (const cpp_token *, unsigned int);
52 static enum integer_type_kind narrowest_unsigned_type
53 (unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned int);
54 static enum integer_type_kind narrowest_signed_type
55 (unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned int);
56 static enum cpp_ttype lex_string (const cpp_token *, tree *, bool, bool);
57 static tree lex_charconst (const cpp_token *);
58 static void update_header_times (const char *);
59 static int dump_one_header (splay_tree_node, void *);
60 static void cb_line_change (cpp_reader *, const cpp_token *, int);
61 static void cb_ident (cpp_reader *, unsigned int, const cpp_string *);
62 static void cb_def_pragma (cpp_reader *, unsigned int);
63 static void cb_define (cpp_reader *, unsigned int, cpp_hashnode *);
64 static void cb_undef (cpp_reader *, unsigned int, cpp_hashnode *);
69 struct cpp_callbacks *cb;
70 struct c_fileinfo *toplevel;
72 /* The get_fileinfo data structure must be initialized before
73 cpp_read_main_file is called. */
74 toplevel = get_fileinfo ("<top level>");
75 if (flag_detailed_statistics)
78 body_time = get_run_time ();
79 toplevel->time = body_time;
82 cb = cpp_get_callbacks (parse_in);
84 cb->line_change = cb_line_change;
86 cb->def_pragma = cb_def_pragma;
87 cb->valid_pch = c_common_valid_pch;
88 cb->read_pch = c_common_read_pch;
90 /* Set the debug callbacks if we can use them. */
91 if (debug_info_level == DINFO_LEVEL_VERBOSE
92 && (write_symbols == DWARF2_DEBUG
93 || write_symbols == VMS_AND_DWARF2_DEBUG))
95 cb->define = cb_define;
101 get_fileinfo (const char *name)
104 struct c_fileinfo *fi;
107 file_info_tree = splay_tree_new ((splay_tree_compare_fn) strcmp,
109 (splay_tree_delete_value_fn) free);
111 n = splay_tree_lookup (file_info_tree, (splay_tree_key) name);
113 return (struct c_fileinfo *) n->value;
115 fi = XNEW (struct c_fileinfo);
117 fi->interface_only = 0;
118 fi->interface_unknown = 1;
119 splay_tree_insert (file_info_tree, (splay_tree_key) name,
120 (splay_tree_value) fi);
125 update_header_times (const char *name)
127 /* Changing files again. This means currently collected time
128 is charged against header time, and body time starts back at 0. */
129 if (flag_detailed_statistics)
131 int this_time = get_run_time ();
132 struct c_fileinfo *file = get_fileinfo (name);
133 header_time += this_time - body_time;
134 file->time += this_time - body_time;
135 body_time = this_time;
140 dump_one_header (splay_tree_node n, void * ARG_UNUSED (dummy))
142 print_time ((const char *) n->key,
143 ((struct c_fileinfo *) n->value)->time);
148 dump_time_statistics (void)
150 struct c_fileinfo *file = get_fileinfo (input_filename);
151 int this_time = get_run_time ();
152 file->time += this_time - body_time;
154 fprintf (stderr, "\n******\n");
155 print_time ("header files (total)", header_time);
156 print_time ("main file (total)", this_time - body_time);
157 fprintf (stderr, "ratio = %g : 1\n",
158 (double) header_time / (double) (this_time - body_time));
159 fprintf (stderr, "\n******\n");
161 splay_tree_foreach (file_info_tree, dump_one_header, 0);
165 cb_ident (cpp_reader * ARG_UNUSED (pfile),
166 unsigned int ARG_UNUSED (line),
167 const cpp_string * ARG_UNUSED (str))
169 #ifdef ASM_OUTPUT_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 ASM_OUTPUT_IDENT (asm_out_file, (const char *) cstr.text);
177 free (CONST_CAST (unsigned char *, cstr.text));
183 /* Called at the start of every non-empty line. TOKEN is the first
184 lexed token on the line. Used for diagnostic line numbers. */
186 cb_line_change (cpp_reader * ARG_UNUSED (pfile), const cpp_token *token,
189 if (token->type != CPP_EOF && !parsing_args)
190 input_location = token->src_loc;
194 fe_file_change (const struct line_map *new_map)
199 if (new_map->reason == LC_ENTER)
201 /* Don't stack the main buffer on the input stack;
202 we already did in compile_file. */
203 if (!MAIN_FILE_P (new_map))
205 unsigned int included_at = LAST_SOURCE_LINE_LOCATION (new_map - 1);
207 if (included_at > BUILTINS_LOCATION)
208 line = SOURCE_LINE (new_map - 1, included_at);
210 input_location = new_map->start_location;
211 (*debug_hooks->start_source_file) (line, new_map->to_file);
212 #ifndef NO_IMPLICIT_EXTERN_C
215 else if (new_map->sysp == 2)
218 ++pending_lang_change;
223 else if (new_map->reason == LC_LEAVE)
225 #ifndef NO_IMPLICIT_EXTERN_C
226 if (c_header_level && --c_header_level == 0)
228 if (new_map->sysp == 2)
229 warning (0, "badly nested C headers from preprocessor");
230 --pending_lang_change;
233 input_location = new_map->start_location;
235 (*debug_hooks->end_source_file) (new_map->to_line);
238 update_header_times (new_map->to_file);
239 input_location = new_map->start_location;
243 cb_def_pragma (cpp_reader *pfile, source_location loc)
245 /* Issue a warning message if we have been asked to do so. Ignore
246 unknown pragmas in system headers unless an explicit
247 -Wunknown-pragmas has been given. */
248 if (warn_unknown_pragmas > in_system_header)
250 const unsigned char *space, *name;
252 location_t fe_loc = loc;
254 space = name = (const unsigned char *) "";
255 s = cpp_get_token (pfile);
256 if (s->type != CPP_EOF)
258 space = cpp_token_as_text (pfile, s);
259 s = cpp_get_token (pfile);
260 if (s->type == CPP_NAME)
261 name = cpp_token_as_text (pfile, s);
264 warning_at (fe_loc, OPT_Wunknown_pragmas, "ignoring #pragma %s %s",
269 /* #define callback for DWARF and DWARF2 debug info. */
271 cb_define (cpp_reader *pfile, source_location loc, cpp_hashnode *node)
273 const struct line_map *map = linemap_lookup (line_table, loc);
274 (*debug_hooks->define) (SOURCE_LINE (map, loc),
275 (const char *) cpp_macro_definition (pfile, node));
278 /* #undef callback for DWARF and DWARF2 debug info. */
280 cb_undef (cpp_reader * ARG_UNUSED (pfile), source_location loc,
283 const struct line_map *map = linemap_lookup (line_table, loc);
284 (*debug_hooks->undef) (SOURCE_LINE (map, loc),
285 (const char *) NODE_NAME (node));
288 /* Read a token and return its type. Fill *VALUE with its value, if
289 applicable. Fill *CPP_FLAGS with the token's flags, if it is
293 c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags,
296 static bool no_more_pch;
297 const cpp_token *tok;
299 unsigned char add_flags = 0;
301 timevar_push (TV_CPP);
303 tok = cpp_get_token_with_location (parse_in, loc);
313 *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node.node));
318 unsigned int flags = cpp_classify_number (parse_in, tok);
320 switch (flags & CPP_N_CATEGORY)
323 /* cpplib has issued an error. */
324 *value = error_mark_node;
329 /* C++ uses '0' to mark virtual functions as pure.
330 Set PURE_ZERO to pass this information to the C++ parser. */
331 if (tok->val.str.len == 1 && *tok->val.str.text == '0')
332 add_flags = PURE_ZERO;
333 *value = interpret_integer (tok, flags);
337 *value = interpret_float (tok, flags);
347 /* An @ may give the next token special significance in Objective-C. */
348 if (c_dialect_objc ())
350 location_t atloc = *loc;
354 tok = cpp_get_token_with_location (parse_in, &newloc);
366 type = lex_string (tok, value, true, true);
370 *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node.node));
371 if (objc_is_reserved_word (*value))
380 error_at (atloc, "stray %<@%> in program");
391 unsigned char name[8];
393 *cpp_spell_token (parse_in, tok, name, true) = 0;
395 error ("stray %qs in program", name);
402 cppchar_t c = tok->val.str.text[0];
404 if (c == '"' || c == '\'')
405 error ("missing terminating %c character", (int) c);
406 else if (ISGRAPH (c))
407 error ("stray %qc in program", (int) c);
409 error ("stray %<\\%o%> in program", (int) c);
417 *value = lex_charconst (tok);
425 if ((lex_flags & C_LEX_STRING_NO_JOIN) == 0)
427 type = lex_string (tok, value, false,
428 (lex_flags & C_LEX_STRING_NO_TRANSLATE) == 0);
431 *value = build_string (tok->val.str.len, (const char *) tok->val.str.text);
435 *value = build_int_cst (NULL, tok->val.pragma);
438 /* These tokens should not be visible outside cpplib. */
439 case CPP_HEADER_NAME:
450 *cpp_flags = tok->flags | add_flags;
455 c_common_no_more_pch ();
458 timevar_pop (TV_CPP);
463 /* Returns the narrowest C-visible unsigned type, starting with the
464 minimum specified by FLAGS, that can fit HIGH:LOW, or itk_none if
467 static enum integer_type_kind
468 narrowest_unsigned_type (unsigned HOST_WIDE_INT low,
469 unsigned HOST_WIDE_INT high,
474 if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
475 itk = itk_unsigned_int;
476 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
477 itk = itk_unsigned_long;
479 itk = itk_unsigned_long_long;
481 for (; itk < itk_none; itk += 2 /* skip unsigned types */)
483 tree upper = TYPE_MAX_VALUE (integer_types[itk]);
485 if ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) > high
486 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) == high
487 && TREE_INT_CST_LOW (upper) >= low))
488 return (enum integer_type_kind) itk;
494 /* Ditto, but narrowest signed type. */
495 static enum integer_type_kind
496 narrowest_signed_type (unsigned HOST_WIDE_INT low,
497 unsigned HOST_WIDE_INT high, unsigned int flags)
501 if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
503 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
509 for (; itk < itk_none; itk += 2 /* skip signed types */)
511 tree upper = TYPE_MAX_VALUE (integer_types[itk]);
513 if ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) > high
514 || ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) == high
515 && TREE_INT_CST_LOW (upper) >= low))
516 return (enum integer_type_kind) itk;
522 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib. */
524 interpret_integer (const cpp_token *token, unsigned int flags)
527 enum integer_type_kind itk;
529 cpp_options *options = cpp_get_options (parse_in);
531 integer = cpp_interpret_integer (parse_in, token, flags);
532 integer = cpp_num_sign_extend (integer, options->precision);
534 /* The type of a constant with a U suffix is straightforward. */
535 if (flags & CPP_N_UNSIGNED)
536 itk = narrowest_unsigned_type (integer.low, integer.high, flags);
539 /* The type of a potentially-signed integer constant varies
540 depending on the base it's in, the standard in use, and the
542 enum integer_type_kind itk_u
543 = narrowest_unsigned_type (integer.low, integer.high, flags);
544 enum integer_type_kind itk_s
545 = narrowest_signed_type (integer.low, integer.high, flags);
547 /* In both C89 and C99, octal and hex constants may be signed or
548 unsigned, whichever fits tighter. We do not warn about this
549 choice differing from the traditional choice, as the constant
550 is probably a bit pattern and either way will work. */
551 if ((flags & CPP_N_RADIX) != CPP_N_DECIMAL)
552 itk = MIN (itk_u, itk_s);
555 /* In C99, decimal constants are always signed.
556 In C89, decimal constants that don't fit in long have
557 undefined behavior; we try to make them unsigned long.
558 In GCC's extended C89, that last is true of decimal
559 constants that don't fit in long long, too. */
562 if (itk_s > itk_u && itk_s > itk_long)
566 if (itk_u < itk_unsigned_long)
567 itk_u = itk_unsigned_long;
569 warning (0, "this decimal constant is unsigned only in ISO C90");
572 warning (OPT_Wtraditional,
573 "this decimal constant would be unsigned in ISO C90");
579 /* cpplib has already issued a warning for overflow. */
580 type = ((flags & CPP_N_UNSIGNED)
581 ? widest_unsigned_literal_type_node
582 : widest_integer_literal_type_node);
585 type = integer_types[itk];
586 if (itk > itk_unsigned_long
587 && (flags & CPP_N_WIDTH) != CPP_N_LARGE)
589 ((c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99)
590 ? DK_PEDWARN : DK_WARNING,
591 input_location, OPT_Wlong_long,
592 (flags & CPP_N_UNSIGNED)
593 ? "integer constant is too large for %<unsigned long%> type"
594 : "integer constant is too large for %<long%> type");
597 value = build_int_cst_wide (type, integer.low, integer.high);
599 /* Convert imaginary to a complex type. */
600 if (flags & CPP_N_IMAGINARY)
601 value = build_complex (NULL_TREE, build_int_cst (type, 0), value);
606 /* Interpret TOKEN, a floating point number with FLAGS as classified
609 interpret_float (const cpp_token *token, unsigned int flags)
614 REAL_VALUE_TYPE real;
615 REAL_VALUE_TYPE real_trunc;
619 /* Default (no suffix) depends on whether the FLOAT_CONST_DECIMAL64
620 pragma has been used and is either double or _Decimal64. Types
621 that are not allowed with decimal float default to double. */
622 if (flags & CPP_N_DEFAULT)
624 flags ^= CPP_N_DEFAULT;
625 flags |= CPP_N_MEDIUM;
627 if (((flags & CPP_N_HEX) == 0) && ((flags & CPP_N_IMAGINARY) == 0))
629 warning (OPT_Wunsuffixed_float_constants,
630 "unsuffixed float constant");
631 if (float_const_decimal64_p ())
632 flags |= CPP_N_DFLOAT;
636 /* Decode _Fract and _Accum. */
637 if (flags & CPP_N_FRACT || flags & CPP_N_ACCUM)
638 return interpret_fixed (token, flags);
640 /* Decode type based on width and properties. */
641 if (flags & CPP_N_DFLOAT)
642 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
643 type = dfloat128_type_node;
644 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
645 type = dfloat32_type_node;
647 type = dfloat64_type_node;
649 if (flags & CPP_N_WIDTH_MD)
652 enum machine_mode mode;
654 if ((flags & CPP_N_WIDTH_MD) == CPP_N_MD_W)
659 mode = targetm.c.mode_for_suffix (suffix);
660 if (mode == VOIDmode)
662 error ("unsupported non-standard suffix on floating constant");
665 return error_mark_node;
668 pedwarn (input_location, OPT_pedantic, "non-standard suffix on floating constant");
670 type = c_common_type_for_mode (mode, 0);
673 else if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
674 type = long_double_type_node;
675 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL
676 || flag_single_precision_constant)
677 type = float_type_node;
679 type = double_type_node;
681 const_type = excess_precision_type (type);
685 /* Copy the constant to a nul-terminated buffer. If the constant
686 has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF
687 can't handle them. */
688 copylen = token->val.str.len;
689 if (flags & CPP_N_DFLOAT)
693 if ((flags & CPP_N_WIDTH) != CPP_N_MEDIUM)
694 /* Must be an F or L or machine defined suffix. */
696 if (flags & CPP_N_IMAGINARY)
701 copy = (char *) alloca (copylen + 1);
702 memcpy (copy, token->val.str.text, copylen);
703 copy[copylen] = '\0';
705 real_from_string3 (&real, copy, TYPE_MODE (const_type));
706 if (const_type != type)
707 /* Diagnosing if the result of converting the value with excess
708 precision to the semantic type would overflow (with associated
709 double rounding) is more appropriate than diagnosing if the
710 result of converting the string directly to the semantic type
712 real_convert (&real_trunc, TYPE_MODE (type), &real);
714 /* Both C and C++ require a diagnostic for a floating constant
715 outside the range of representable values of its type. Since we
716 have __builtin_inf* to produce an infinity, this is now a
717 mandatory pedwarn if the target does not support infinities. */
718 if (REAL_VALUE_ISINF (real)
719 || (const_type != type && REAL_VALUE_ISINF (real_trunc)))
721 if (!MODE_HAS_INFINITIES (TYPE_MODE (type)))
722 pedwarn (input_location, 0, "floating constant exceeds range of %qT", type);
724 warning (OPT_Woverflow, "floating constant exceeds range of %qT", type);
726 /* We also give a warning if the value underflows. */
727 else if (REAL_VALUES_EQUAL (real, dconst0)
728 || (const_type != type && REAL_VALUES_EQUAL (real_trunc, dconst0)))
730 REAL_VALUE_TYPE realvoidmode;
731 int overflow = real_from_string (&realvoidmode, copy);
732 if (overflow < 0 || !REAL_VALUES_EQUAL (realvoidmode, dconst0))
733 warning (OPT_Woverflow, "floating constant truncated to zero");
736 /* Create a node with determined type and value. */
737 value = build_real (const_type, real);
738 if (flags & CPP_N_IMAGINARY)
739 value = build_complex (NULL_TREE, convert (const_type, integer_zero_node),
742 if (type != const_type)
743 value = build1 (EXCESS_PRECISION_EXPR, type, value);
748 /* Interpret TOKEN, a fixed-point number with FLAGS as classified
752 interpret_fixed (const cpp_token *token, unsigned int flags)
756 FIXED_VALUE_TYPE fixed;
760 copylen = token->val.str.len;
762 if (flags & CPP_N_FRACT) /* _Fract. */
764 if (flags & CPP_N_UNSIGNED) /* Unsigned _Fract. */
766 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
768 type = unsigned_long_long_fract_type_node;
771 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
773 type = unsigned_long_fract_type_node;
776 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
778 type = unsigned_short_fract_type_node;
783 type = unsigned_fract_type_node;
787 else /* Signed _Fract. */
789 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
791 type = long_long_fract_type_node;
794 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
796 type = long_fract_type_node;
799 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
801 type = short_fract_type_node;
806 type = fract_type_node;
813 if (flags & CPP_N_UNSIGNED) /* Unsigned _Accum. */
815 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
817 type = unsigned_long_long_accum_type_node;
820 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
822 type = unsigned_long_accum_type_node;
825 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
827 type = unsigned_short_accum_type_node;
832 type = unsigned_accum_type_node;
836 else /* Signed _Accum. */
838 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
840 type = long_long_accum_type_node;
843 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
845 type = long_accum_type_node;
848 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
850 type = short_accum_type_node;
855 type = accum_type_node;
861 copy = (char *) alloca (copylen + 1);
862 memcpy (copy, token->val.str.text, copylen);
863 copy[copylen] = '\0';
865 fixed_from_string (&fixed, copy, TYPE_MODE (type));
867 /* Create a node with determined type and value. */
868 value = build_fixed (type, fixed);
873 /* Convert a series of STRING, WSTRING, STRING16, STRING32 and/or
874 UTF8STRING tokens into a tree, performing string constant
875 concatenation. TOK is the first of these. VALP is the location
876 to write the string into. OBJC_STRING indicates whether an '@' token
877 preceded the incoming token.
878 Returns the CPP token type of the result (CPP_STRING, CPP_WSTRING,
879 CPP_STRING32, CPP_STRING16, CPP_UTF8STRING, or CPP_OBJC_STRING).
881 This is unfortunately more work than it should be. If any of the
882 strings in the series has an L prefix, the result is a wide string
883 (6.4.5p4). Whether or not the result is a wide string affects the
884 meaning of octal and hexadecimal escapes (6.4.4.4p6,9). But escape
885 sequences do not continue across the boundary between two strings in
886 a series (6.4.5p7), so we must not lose the boundaries. Therefore
887 cpp_interpret_string takes a vector of cpp_string structures, which
888 we must arrange to provide. */
890 static enum cpp_ttype
891 lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate)
895 struct obstack str_ob;
897 enum cpp_ttype type = tok->type;
899 /* Try to avoid the overhead of creating and destroying an obstack
900 for the common case of just one string. */
901 cpp_string str = tok->val.str;
902 cpp_string *strs = &str;
905 tok = cpp_get_token (parse_in);
911 if (c_dialect_objc ())
925 if (type != tok->type)
927 if (type == CPP_STRING)
930 error ("unsupported non-standard concatenation of string literals");
936 gcc_obstack_init (&str_ob);
937 obstack_grow (&str_ob, &str, sizeof (cpp_string));
941 obstack_grow (&str_ob, &tok->val.str, sizeof (cpp_string));
945 /* We have read one more token than we want. */
946 _cpp_backup_tokens (parse_in, 1);
948 strs = XOBFINISH (&str_ob, cpp_string *);
950 if (concats && !objc_string && !in_system_header)
951 warning (OPT_Wtraditional,
952 "traditional C rejects string constant concatenation");
955 ? cpp_interpret_string : cpp_interpret_string_notranslate)
956 (parse_in, strs, concats + 1, &istr, type))
958 value = build_string (istr.len, (const char *) istr.text);
959 free (CONST_CAST (unsigned char *, istr.text));
963 /* Callers cannot generally handle error_mark_node in this context,
964 so return the empty string instead. cpp_interpret_string has
971 value = build_string (1, "");
974 value = build_string (TYPE_PRECISION (char16_type_node)
975 / TYPE_PRECISION (char_type_node),
976 "\0"); /* char16_t is 16 bits */
979 value = build_string (TYPE_PRECISION (char32_type_node)
980 / TYPE_PRECISION (char_type_node),
981 "\0\0\0"); /* char32_t is 32 bits */
984 value = build_string (TYPE_PRECISION (wchar_type_node)
985 / TYPE_PRECISION (char_type_node),
986 "\0\0\0"); /* widest supported wchar_t
997 TREE_TYPE (value) = char_array_type_node;
1000 TREE_TYPE (value) = char16_array_type_node;
1003 TREE_TYPE (value) = char32_array_type_node;
1006 TREE_TYPE (value) = wchar_array_type_node;
1008 *valp = fix_string_type (value);
1011 obstack_free (&str_ob, 0);
1013 return objc_string ? CPP_OBJC_STRING : type;
1016 /* Converts a (possibly wide) character constant token into a tree. */
1018 lex_charconst (const cpp_token *token)
1022 unsigned int chars_seen;
1025 result = cpp_interpret_charconst (parse_in, token,
1026 &chars_seen, &unsignedp);
1028 if (token->type == CPP_WCHAR)
1029 type = wchar_type_node;
1030 else if (token->type == CPP_CHAR32)
1031 type = char32_type_node;
1032 else if (token->type == CPP_CHAR16)
1033 type = char16_type_node;
1034 /* In C, a character constant has type 'int'.
1035 In C++ 'char', but multi-char charconsts have type 'int'. */
1036 else if (!c_dialect_cxx () || chars_seen > 1)
1037 type = integer_type_node;
1039 type = char_type_node;
1041 /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
1042 before possibly widening to HOST_WIDE_INT for build_int_cst. */
1043 if (unsignedp || (cppchar_signed_t) result >= 0)
1044 value = build_int_cst_wide (type, result, 0);
1046 value = build_int_cst_wide (type, (cppchar_signed_t) result, -1);