OSDN Git Service

* c-common.h (struct c_fileinfo): Comment moved here from cp-tree.h.
[pf3gnuchains/gcc-fork.git] / gcc / c-lex.c
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 Free Software Foundation, Inc.
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2, or (at your option) any later
10 version.
11
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
15 for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING.  If not, write to the Free
19 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
20 02111-1307, USA.  */
21
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26
27 #include "real.h"
28 #include "rtl.h"
29 #include "tree.h"
30 #include "input.h"
31 #include "output.h"
32 #include "c-tree.h"
33 #include "c-common.h"
34 #include "flags.h"
35 #include "timevar.h"
36 #include "cpplib.h"
37 #include "c-pragma.h"
38 #include "toplev.h"
39 #include "intl.h"
40 #include "tm_p.h"
41 #include "splay-tree.h"
42 #include "debug.h"
43
44 /* We may keep statistics about how long which files took to compile.  */
45 static int header_time, body_time;
46 static splay_tree file_info_tree;
47
48 #undef WCHAR_TYPE_SIZE
49 #define WCHAR_TYPE_SIZE TYPE_PRECISION (wchar_type_node)
50
51 /* Number of bytes in a wide character.  */
52 #define WCHAR_BYTES (WCHAR_TYPE_SIZE / BITS_PER_UNIT)
53
54 int pending_lang_change; /* If we need to switch languages - C++ only */
55 int c_header_level;      /* depth in C headers - C++ only */
56
57 /* If we need to translate characters received.  This is tri-state:
58    0 means use only the untranslated string; 1 means use only
59    the translated string; -1 means chain the translated string
60    to the untranslated one.  */
61 int c_lex_string_translate = 1;
62
63 static tree interpret_integer (const cpp_token *, unsigned int);
64 static tree interpret_float (const cpp_token *, unsigned int);
65 static enum integer_type_kind narrowest_unsigned_type
66         (unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned int);
67 static enum integer_type_kind narrowest_signed_type
68         (unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned int);
69 static enum cpp_ttype lex_string (const cpp_token *, tree *, bool);
70 static tree lex_charconst (const cpp_token *);
71 static void update_header_times (const char *);
72 static int dump_one_header (splay_tree_node, void *);
73 static void cb_line_change (cpp_reader *, const cpp_token *, int);
74 static void cb_ident (cpp_reader *, unsigned int, const cpp_string *);
75 static void cb_def_pragma (cpp_reader *, unsigned int);
76 static void cb_define (cpp_reader *, unsigned int, cpp_hashnode *);
77 static void cb_undef (cpp_reader *, unsigned int, cpp_hashnode *);
78 \f
79 void
80 init_c_lex (void)
81 {
82   struct cpp_callbacks *cb;
83   struct c_fileinfo *toplevel;
84
85   /* The get_fileinfo data structure must be initialized before
86      cpp_read_main_file is called.  */
87   toplevel = get_fileinfo ("<top level>");
88   if (flag_detailed_statistics)
89     {
90       header_time = 0;
91       body_time = get_run_time ();
92       toplevel->time = body_time;
93     }
94
95   cb = cpp_get_callbacks (parse_in);
96
97   cb->line_change = cb_line_change;
98   cb->ident = cb_ident;
99   cb->def_pragma = cb_def_pragma;
100   cb->valid_pch = c_common_valid_pch;
101   cb->read_pch = c_common_read_pch;
102
103   /* Set the debug callbacks if we can use them.  */
104   if (debug_info_level == DINFO_LEVEL_VERBOSE
105       && (write_symbols == DWARF2_DEBUG
106           || write_symbols == VMS_AND_DWARF2_DEBUG))
107     {
108       cb->define = cb_define;
109       cb->undef = cb_undef;
110     }
111 }
112
113 struct c_fileinfo *
114 get_fileinfo (const char *name)
115 {
116   splay_tree_node n;
117   struct c_fileinfo *fi;
118
119   if (!file_info_tree)
120     file_info_tree = splay_tree_new ((splay_tree_compare_fn)strcmp,
121                                      0,
122                                      (splay_tree_delete_value_fn)free);
123
124   n = splay_tree_lookup (file_info_tree, (splay_tree_key) name);
125   if (n)
126     return (struct c_fileinfo *) n->value;
127
128   fi = XNEW (struct c_fileinfo);
129   fi->time = 0;
130   fi->interface_only = 0;
131   fi->interface_unknown = 1;
132   splay_tree_insert (file_info_tree, (splay_tree_key) name,
133                      (splay_tree_value) fi);
134   return fi;
135 }
136
137 static void
138 update_header_times (const char *name)
139 {
140   /* Changing files again.  This means currently collected time
141      is charged against header time, and body time starts back at 0.  */
142   if (flag_detailed_statistics)
143     {
144       int this_time = get_run_time ();
145       struct c_fileinfo *file = get_fileinfo (name);
146       header_time += this_time - body_time;
147       file->time += this_time - body_time;
148       body_time = this_time;
149     }
150 }
151
152 static int
153 dump_one_header (splay_tree_node n, void * ARG_UNUSED (dummy))
154 {
155   print_time ((const char *) n->key,
156               ((struct c_fileinfo *) n->value)->time);
157   return 0;
158 }
159
160 void
161 dump_time_statistics (void)
162 {
163   struct c_fileinfo *file = get_fileinfo (input_filename);
164   int this_time = get_run_time ();
165   file->time += this_time - body_time;
166
167   fprintf (stderr, "\n******\n");
168   print_time ("header files (total)", header_time);
169   print_time ("main file (total)", this_time - body_time);
170   fprintf (stderr, "ratio = %g : 1\n",
171            (double)header_time / (double)(this_time - body_time));
172   fprintf (stderr, "\n******\n");
173
174   splay_tree_foreach (file_info_tree, dump_one_header, 0);
175 }
176
177 static void
178 cb_ident (cpp_reader * ARG_UNUSED (pfile),
179           unsigned int ARG_UNUSED (line),
180           const cpp_string * ARG_UNUSED (str))
181 {
182 #ifdef ASM_OUTPUT_IDENT
183   if (! flag_no_ident)
184     {
185       /* Convert escapes in the string.  */
186       cpp_string cstr = { 0, 0 };
187       if (cpp_interpret_string (pfile, str, 1, &cstr, false))
188         {
189           ASM_OUTPUT_IDENT (asm_out_file, (const char *) cstr.text);
190           free ((void *)cstr.text);
191         }
192     }
193 #endif
194 }
195
196 /* Called at the start of every non-empty line.  TOKEN is the first
197    lexed token on the line.  Used for diagnostic line numbers.  */
198 static void
199 cb_line_change (cpp_reader * ARG_UNUSED (pfile), const cpp_token *token,
200                 int parsing_args)
201 {
202   if (token->type != CPP_EOF && !parsing_args)
203 #ifdef USE_MAPPED_LOCATION
204     input_location = token->src_loc;
205 #else
206     {
207       source_location loc = token->src_loc;
208       const struct line_map *map = linemap_lookup (&line_table, loc);
209       input_line = SOURCE_LINE (map, loc);
210     }
211 #endif
212 }
213
214 void
215 fe_file_change (const struct line_map *new_map)
216 {
217   if (new_map == NULL)
218     return;
219
220   if (new_map->reason == LC_ENTER)
221     {
222       /* Don't stack the main buffer on the input stack;
223          we already did in compile_file.  */
224       if (! MAIN_FILE_P (new_map))
225         {
226 #ifdef USE_MAPPED_LOCATION
227           int included_at = LAST_SOURCE_LINE_LOCATION (new_map - 1);
228
229           input_location = included_at;
230           push_srcloc (new_map->start_location);
231 #else
232           int included_at = LAST_SOURCE_LINE (new_map - 1);
233
234           input_line = included_at;
235           push_srcloc (new_map->to_file, 1);
236 #endif
237           (*debug_hooks->start_source_file) (included_at, new_map->to_file);
238 #ifndef NO_IMPLICIT_EXTERN_C
239           if (c_header_level)
240             ++c_header_level;
241           else if (new_map->sysp == 2)
242             {
243               c_header_level = 1;
244               ++pending_lang_change;
245             }
246 #endif
247         }
248     }
249   else if (new_map->reason == LC_LEAVE)
250     {
251 #ifndef NO_IMPLICIT_EXTERN_C
252       if (c_header_level && --c_header_level == 0)
253         {
254           if (new_map->sysp == 2)
255             warning ("badly nested C headers from preprocessor");
256           --pending_lang_change;
257         }
258 #endif
259       pop_srcloc ();
260
261       (*debug_hooks->end_source_file) (new_map->to_line);
262     }
263
264   update_header_times (new_map->to_file);
265   in_system_header = new_map->sysp != 0;
266 #ifdef USE_MAPPED_LOCATION
267   input_location = new_map->start_location;
268 #else
269   input_filename = new_map->to_file;
270   input_line = new_map->to_line;
271 #endif
272 }
273
274 static void
275 cb_def_pragma (cpp_reader *pfile, source_location loc)
276 {
277   /* Issue a warning message if we have been asked to do so.  Ignore
278      unknown pragmas in system headers unless an explicit
279      -Wunknown-pragmas has been given.  */
280   if (warn_unknown_pragmas > in_system_header)
281     {
282 #ifndef USE_MAPPED_LOCATION
283       const struct line_map *map = linemap_lookup (&line_table, loc);
284 #endif
285       const unsigned char *space, *name;
286       const cpp_token *s;
287
288       space = name = (const unsigned char *) "";
289       s = cpp_get_token (pfile);
290       if (s->type != CPP_EOF)
291         {
292           space = cpp_token_as_text (pfile, s);
293           s = cpp_get_token (pfile);
294           if (s->type == CPP_NAME)
295             name = cpp_token_as_text (pfile, s);
296         }
297
298 #ifdef USE_MAPPED_LOCATION
299       input_location = loc;
300 #else
301       input_line = SOURCE_LINE (map, loc);
302 #endif
303       warning ("ignoring #pragma %s %s", space, name);
304     }
305 }
306
307 /* #define callback for DWARF and DWARF2 debug info.  */
308 static void
309 cb_define (cpp_reader *pfile, source_location loc, cpp_hashnode *node)
310 {
311   const struct line_map *map = linemap_lookup (&line_table, loc);
312   (*debug_hooks->define) (SOURCE_LINE (map, loc),
313                           (const char *) cpp_macro_definition (pfile, node));
314 }
315
316 /* #undef callback for DWARF and DWARF2 debug info.  */
317 static void
318 cb_undef (cpp_reader * ARG_UNUSED (pfile), source_location loc,
319           cpp_hashnode *node)
320 {
321   const struct line_map *map = linemap_lookup (&line_table, loc);
322   (*debug_hooks->undef) (SOURCE_LINE (map, loc),
323                          (const char *) NODE_NAME (node));
324 }
325 \f
326 static inline const cpp_token *
327 get_nonpadding_token (void)
328 {
329   const cpp_token *tok;
330   timevar_push (TV_CPP);
331   do
332     tok = cpp_get_token (parse_in);
333   while (tok->type == CPP_PADDING);
334   timevar_pop (TV_CPP);
335
336   return tok;
337 }
338
339 enum cpp_ttype
340 c_lex_with_flags (tree *value, unsigned char *cpp_flags)
341 {
342   const cpp_token *tok;
343   location_t atloc;
344   static bool no_more_pch;
345
346  retry:
347   tok = get_nonpadding_token ();
348
349  retry_after_at:
350   switch (tok->type)
351     {
352     case CPP_NAME:
353       *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node));
354       break;
355
356     case CPP_NUMBER:
357       {
358         unsigned int flags = cpp_classify_number (parse_in, tok);
359
360         switch (flags & CPP_N_CATEGORY)
361           {
362           case CPP_N_INVALID:
363             /* cpplib has issued an error.  */
364             *value = error_mark_node;
365             break;
366
367           case CPP_N_INTEGER:
368             *value = interpret_integer (tok, flags);
369             break;
370
371           case CPP_N_FLOATING:
372             *value = interpret_float (tok, flags);
373             break;
374
375           default:
376             gcc_unreachable ();
377           }
378       }
379       break;
380
381     case CPP_ATSIGN:
382       /* An @ may give the next token special significance in Objective-C.  */
383       atloc = input_location;
384       tok = get_nonpadding_token ();
385       if (c_dialect_objc ())
386         {
387           tree val;
388           switch (tok->type)
389             {
390             case CPP_NAME:
391               val = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node));
392               if (objc_is_reserved_word (val))
393                 {
394                   *value = val;
395                   return CPP_AT_NAME;
396                 }
397               break;
398
399             case CPP_STRING:
400             case CPP_WSTRING:
401               return lex_string (tok, value, true);
402
403             default: break;
404             }
405         }
406
407       /* ... or not.  */
408       error ("%Hstray '@' in program", &atloc);
409       goto retry_after_at;
410
411     case CPP_OTHER:
412       {
413         cppchar_t c = tok->val.str.text[0];
414
415         if (c == '"' || c == '\'')
416           error ("missing terminating %c character", (int) c);
417         else if (ISGRAPH (c))
418           error ("stray '%c' in program", (int) c);
419         else
420           error ("stray '\\%o' in program", (int) c);
421       }
422       goto retry;
423
424     case CPP_CHAR:
425     case CPP_WCHAR:
426       *value = lex_charconst (tok);
427       break;
428
429     case CPP_STRING:
430     case CPP_WSTRING:
431       return lex_string (tok, value, false);
432       break;
433
434       /* These tokens should not be visible outside cpplib.  */
435     case CPP_HEADER_NAME:
436     case CPP_COMMENT:
437     case CPP_MACRO_ARG:
438       gcc_unreachable ();
439
440     default:
441       *value = NULL_TREE;
442       break;
443     }
444
445   if (! no_more_pch)
446     {
447       no_more_pch = true;
448       c_common_no_more_pch ();
449     }
450
451   if (cpp_flags)
452     *cpp_flags = tok->flags;
453   return tok->type;
454 }
455
456 enum cpp_ttype
457 c_lex (tree *value)
458 {
459   return c_lex_with_flags (value, NULL);
460 }
461
462 /* Returns the narrowest C-visible unsigned type, starting with the
463    minimum specified by FLAGS, that can fit HIGH:LOW, or itk_none if
464    there isn't one.  */
465
466 static enum integer_type_kind
467 narrowest_unsigned_type (unsigned HOST_WIDE_INT low,
468                          unsigned HOST_WIDE_INT high,
469                          unsigned int flags)
470 {
471   enum integer_type_kind itk;
472
473   if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
474     itk = itk_unsigned_int;
475   else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
476     itk = itk_unsigned_long;
477   else
478     itk = itk_unsigned_long_long;
479
480   for (; itk < itk_none; itk += 2 /* skip unsigned types */)
481     {
482       tree upper = TYPE_MAX_VALUE (integer_types[itk]);
483
484       if ((unsigned HOST_WIDE_INT)TREE_INT_CST_HIGH (upper) > high
485           || ((unsigned HOST_WIDE_INT)TREE_INT_CST_HIGH (upper) == high
486               && TREE_INT_CST_LOW (upper) >= low))
487         return itk;
488     }
489
490   return itk_none;
491 }
492
493 /* Ditto, but narrowest signed type.  */
494 static enum integer_type_kind
495 narrowest_signed_type (unsigned HOST_WIDE_INT low,
496                        unsigned HOST_WIDE_INT high, unsigned int flags)
497 {
498   enum integer_type_kind itk;
499
500   if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
501     itk = itk_int;
502   else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
503     itk = itk_long;
504   else
505     itk = itk_long_long;
506
507
508   for (; itk < itk_none; itk += 2 /* skip signed types */)
509     {
510       tree upper = TYPE_MAX_VALUE (integer_types[itk]);
511       
512       if ((unsigned HOST_WIDE_INT)TREE_INT_CST_HIGH (upper) > high
513           || ((unsigned HOST_WIDE_INT)TREE_INT_CST_HIGH (upper) == high
514               && TREE_INT_CST_LOW (upper) >= low))
515         return itk;
516     }
517
518   return itk_none;
519 }
520
521 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib.  */
522 static tree
523 interpret_integer (const cpp_token *token, unsigned int flags)
524 {
525   tree value, type;
526   enum integer_type_kind itk;
527   cpp_num integer;
528   cpp_options *options = cpp_get_options (parse_in);
529
530   integer = cpp_interpret_integer (parse_in, token, flags);
531   integer = cpp_num_sign_extend (integer, options->precision);
532
533   /* The type of a constant with a U suffix is straightforward.  */
534   if (flags & CPP_N_UNSIGNED)
535     itk = narrowest_unsigned_type (integer.low, integer.high, flags);
536   else
537     {
538       /* The type of a potentially-signed integer constant varies
539          depending on the base it's in, the standard in use, and the
540          length suffixes.  */
541       enum integer_type_kind itk_u
542         = narrowest_unsigned_type (integer.low, integer.high, flags);
543       enum integer_type_kind itk_s
544         = narrowest_signed_type (integer.low, integer.high, flags);
545
546       /* In both C89 and C99, octal and hex constants may be signed or
547          unsigned, whichever fits tighter.  We do not warn about this
548          choice differing from the traditional choice, as the constant
549          is probably a bit pattern and either way will work.  */
550       if ((flags & CPP_N_RADIX) != CPP_N_DECIMAL)
551         itk = MIN (itk_u, itk_s);
552       else
553         {
554           /* In C99, decimal constants are always signed.
555              In C89, decimal constants that don't fit in long have
556              undefined behavior; we try to make them unsigned long.
557              In GCC's extended C89, that last is true of decimal
558              constants that don't fit in long long, too.  */
559
560           itk = itk_s;
561           if (itk_s > itk_u && itk_s > itk_long)
562             {
563               if (!flag_isoc99)
564                 {
565                   if (itk_u < itk_unsigned_long)
566                     itk_u = itk_unsigned_long;
567                   itk = itk_u;
568                   warning ("this decimal constant is unsigned only in ISO C90");
569                 }
570               else if (warn_traditional)
571                 warning ("this decimal constant would be unsigned in ISO C90");
572             }
573         }
574     }
575
576   if (itk == itk_none)
577     /* cpplib has already issued a warning for overflow.  */
578     type = ((flags & CPP_N_UNSIGNED)
579             ? widest_unsigned_literal_type_node
580             : widest_integer_literal_type_node);
581   else
582     type = integer_types[itk];
583
584   if (itk > itk_unsigned_long
585       && (flags & CPP_N_WIDTH) != CPP_N_LARGE
586       && ! in_system_header && ! flag_isoc99)
587     pedwarn ("integer constant is too large for \"%s\" type",
588              (flags & CPP_N_UNSIGNED) ? "unsigned long" : "long");
589
590   value = build_int_cst_wide (type, integer.low, integer.high);
591
592   /* Convert imaginary to a complex type.  */
593   if (flags & CPP_N_IMAGINARY)
594     value = build_complex (NULL_TREE, build_int_cst (type, 0), value);
595
596   return value;
597 }
598
599 /* Interpret TOKEN, a floating point number with FLAGS as classified
600    by cpplib.  */
601 static tree
602 interpret_float (const cpp_token *token, unsigned int flags)
603 {
604   tree type;
605   tree value;
606   REAL_VALUE_TYPE real;
607   char *copy;
608   size_t copylen;
609   const char *type_name;
610
611   /* FIXME: make %T work in error/warning, then we don't need type_name.  */
612   if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
613     {
614       type = long_double_type_node;
615       type_name = "long double";
616     }
617   else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL
618            || flag_single_precision_constant)
619     {
620       type = float_type_node;
621       type_name = "float";
622     }
623   else
624     {
625       type = double_type_node;
626       type_name = "double";
627     }
628
629   /* Copy the constant to a nul-terminated buffer.  If the constant
630      has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF
631      can't handle them.  */
632   copylen = token->val.str.len;
633   if ((flags & CPP_N_WIDTH) != CPP_N_MEDIUM)
634     /* Must be an F or L suffix.  */
635     copylen--;
636   if (flags & CPP_N_IMAGINARY)
637     /* I or J suffix.  */
638     copylen--;
639
640   copy = (char *) alloca (copylen + 1);
641   memcpy (copy, token->val.str.text, copylen);
642   copy[copylen] = '\0';
643
644   real_from_string (&real, copy);
645   real_convert (&real, TYPE_MODE (type), &real);
646
647   /* A diagnostic is required for "soft" overflow by some ISO C
648      testsuites.  This is not pedwarn, because some people don't want
649      an error for this.
650      ??? That's a dubious reason... is this a mandatory diagnostic or
651      isn't it?   -- zw, 2001-08-21.  */
652   if (REAL_VALUE_ISINF (real) && pedantic)
653     warning ("floating constant exceeds range of \"%s\"", type_name);
654
655   /* Create a node with determined type and value.  */
656   value = build_real (type, real);
657   if (flags & CPP_N_IMAGINARY)
658     value = build_complex (NULL_TREE, convert (type, integer_zero_node), value);
659
660   return value;
661 }
662
663 /* Convert a series of STRING and/or WSTRING tokens into a tree,
664    performing string constant concatenation.  TOK is the first of
665    these.  VALP is the location to write the string into.  OBJC_STRING
666    indicates whether an '@' token preceded the incoming token.
667    Returns the CPP token type of the result (CPP_STRING, CPP_WSTRING,
668    or CPP_OBJC_STRING).
669
670    This is unfortunately more work than it should be.  If any of the
671    strings in the series has an L prefix, the result is a wide string
672    (6.4.5p4).  Whether or not the result is a wide string affects the
673    meaning of octal and hexadecimal escapes (6.4.4.4p6,9).  But escape
674    sequences do not continue across the boundary between two strings in
675    a series (6.4.5p7), so we must not lose the boundaries.  Therefore
676    cpp_interpret_string takes a vector of cpp_string structures, which
677    we must arrange to provide.  */
678
679 static enum cpp_ttype
680 lex_string (const cpp_token *tok, tree *valp, bool objc_string)
681 {
682   tree value;
683   bool wide = false;
684   size_t count = 1;
685   struct obstack str_ob;
686   cpp_string istr;
687
688   /* Try to avoid the overhead of creating and destroying an obstack
689      for the common case of just one string.  */
690   cpp_string str = tok->val.str;
691   cpp_string *strs = &str;
692
693   if (tok->type == CPP_WSTRING)
694     wide = true;
695
696   tok = get_nonpadding_token ();
697   if (c_dialect_objc () && tok->type == CPP_ATSIGN)
698     {
699       objc_string = true;
700       tok = get_nonpadding_token ();
701     }
702   if (tok->type == CPP_STRING || tok->type == CPP_WSTRING)
703     {
704       gcc_obstack_init (&str_ob);
705       obstack_grow (&str_ob, &str, sizeof (cpp_string));
706
707       do
708         {
709           count++;
710           if (tok->type == CPP_WSTRING)
711             wide = true;
712           obstack_grow (&str_ob, &tok->val.str, sizeof (cpp_string));
713
714           tok = get_nonpadding_token ();
715           if (c_dialect_objc () && tok->type == CPP_ATSIGN)
716             {
717               objc_string = true;
718               tok = get_nonpadding_token ();
719             }
720         }
721       while (tok->type == CPP_STRING || tok->type == CPP_WSTRING);
722       strs = (cpp_string *) obstack_finish (&str_ob);
723     }
724
725   /* We have read one more token than we want.  */
726   _cpp_backup_tokens (parse_in, 1);
727
728   if (count > 1 && !objc_string && warn_traditional && !in_system_header)
729     warning ("traditional C rejects string constant concatenation");
730
731   if ((c_lex_string_translate
732        ? cpp_interpret_string : cpp_interpret_string_notranslate)
733       (parse_in, strs, count, &istr, wide))
734     {
735       value = build_string (istr.len, (char *)istr.text);
736       free ((void *)istr.text);
737
738       if (c_lex_string_translate == -1)
739         {
740           int xlated = cpp_interpret_string_notranslate (parse_in, strs, count,
741                                                          &istr, wide);
742           /* Assume that, if we managed to translate the string above,
743              then the untranslated parsing will always succeed.  */
744           gcc_assert (xlated);
745           
746           if (TREE_STRING_LENGTH (value) != (int)istr.len
747               || 0 != strncmp (TREE_STRING_POINTER (value), (char *)istr.text,
748                                istr.len))
749             {
750               /* Arrange for us to return the untranslated string in
751                  *valp, but to set up the C type of the translated
752                  one.  */
753               *valp = build_string (istr.len, (char *)istr.text);
754               valp = &TREE_CHAIN (*valp);
755             }
756           free ((void *)istr.text);
757         }
758     }
759   else
760     {
761       /* Callers cannot generally handle error_mark_node in this context,
762          so return the empty string instead.  cpp_interpret_string has
763          issued an error.  */
764       if (wide)
765         value = build_string (TYPE_PRECISION (wchar_type_node)
766                               / TYPE_PRECISION (char_type_node),
767                               "\0\0\0");  /* widest supported wchar_t
768                                              is 32 bits */
769       else
770         value = build_string (1, "");
771     }
772
773   TREE_TYPE (value) = wide ? wchar_array_type_node : char_array_type_node;
774   *valp = fix_string_type (value);
775
776   if (strs != &str)
777     obstack_free (&str_ob, 0);
778
779   return objc_string ? CPP_OBJC_STRING : wide ? CPP_WSTRING : CPP_STRING;
780 }
781
782 /* Converts a (possibly wide) character constant token into a tree.  */
783 static tree
784 lex_charconst (const cpp_token *token)
785 {
786   cppchar_t result;
787   tree type, value;
788   unsigned int chars_seen;
789   int unsignedp;
790
791   result = cpp_interpret_charconst (parse_in, token,
792                                     &chars_seen, &unsignedp);
793
794   if (token->type == CPP_WCHAR)
795     type = wchar_type_node;
796   /* In C, a character constant has type 'int'.
797      In C++ 'char', but multi-char charconsts have type 'int'.  */
798   else if (!c_dialect_cxx () || chars_seen > 1)
799     type = integer_type_node;
800   else
801     type = char_type_node;
802
803   /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
804      before possibly widening to HOST_WIDE_INT for build_int_cst.  */
805   if (unsignedp || (cppchar_signed_t) result >= 0)
806     value = build_int_cst_wide (type, result, 0);
807   else
808     value = build_int_cst_wide (type, (cppchar_signed_t) result, -1);
809
810   return value;
811 }