xref: /dragonfly/contrib/gcc-4.7/gcc/c-family/c-lex.c (revision d4ef6694)
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, 2009, 2010,
4    2011 Free Software Foundation, Inc.
5 
6 This file is part of GCC.
7 
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
11 version.
12 
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
16 for more details.
17 
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/>.  */
21 
22 #include "config.h"
23 #include "system.h"
24 #include "coretypes.h"
25 #include "tm.h"
26 
27 #include "tree.h"
28 #include "input.h"
29 #include "output.h"
30 #include "c-common.h"
31 #include "flags.h"
32 #include "timevar.h"
33 #include "cpplib.h"
34 #include "c-pragma.h"
35 #include "intl.h"
36 #include "splay-tree.h"
37 #include "debug.h"
38 #include "target.h"
39 
40 /* We may keep statistics about how long which files took to compile.  */
41 static int header_time, body_time;
42 static splay_tree file_info_tree;
43 
44 int pending_lang_change; /* If we need to switch languages - C++ only */
45 int c_header_level;	 /* depth in C headers - C++ only */
46 
47 static tree interpret_integer (const cpp_token *, unsigned int);
48 static tree interpret_float (const cpp_token *, unsigned int, const char *);
49 static tree interpret_fixed (const cpp_token *, unsigned int);
50 static enum integer_type_kind narrowest_unsigned_type
51 	(unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned int);
52 static enum integer_type_kind narrowest_signed_type
53 	(unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned int);
54 static enum cpp_ttype lex_string (const cpp_token *, tree *, bool, bool);
55 static tree lex_charconst (const cpp_token *);
56 static void update_header_times (const char *);
57 static int dump_one_header (splay_tree_node, void *);
58 static void cb_line_change (cpp_reader *, const cpp_token *, int);
59 static void cb_ident (cpp_reader *, unsigned int, const cpp_string *);
60 static void cb_def_pragma (cpp_reader *, unsigned int);
61 static void cb_define (cpp_reader *, unsigned int, cpp_hashnode *);
62 static void cb_undef (cpp_reader *, unsigned int, cpp_hashnode *);
63 
64 void
65 init_c_lex (void)
66 {
67   struct cpp_callbacks *cb;
68   struct c_fileinfo *toplevel;
69 
70   /* The get_fileinfo data structure must be initialized before
71      cpp_read_main_file is called.  */
72   toplevel = get_fileinfo ("<top level>");
73   if (flag_detailed_statistics)
74     {
75       header_time = 0;
76       body_time = get_run_time ();
77       toplevel->time = body_time;
78     }
79 
80   cb = cpp_get_callbacks (parse_in);
81 
82   cb->line_change = cb_line_change;
83   cb->ident = cb_ident;
84   cb->def_pragma = cb_def_pragma;
85   cb->valid_pch = c_common_valid_pch;
86   cb->read_pch = c_common_read_pch;
87 
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)
93     {
94       cb->define = cb_define;
95       cb->undef = cb_undef;
96     }
97 }
98 
99 struct c_fileinfo *
100 get_fileinfo (const char *name)
101 {
102   splay_tree_node n;
103   struct c_fileinfo *fi;
104 
105   if (!file_info_tree)
106     file_info_tree = splay_tree_new ((splay_tree_compare_fn) strcmp,
107 				     0,
108 				     (splay_tree_delete_value_fn) free);
109 
110   n = splay_tree_lookup (file_info_tree, (splay_tree_key) name);
111   if (n)
112     return (struct c_fileinfo *) n->value;
113 
114   fi = XNEW (struct c_fileinfo);
115   fi->time = 0;
116   fi->interface_only = 0;
117   fi->interface_unknown = 1;
118   splay_tree_insert (file_info_tree, (splay_tree_key) name,
119 		     (splay_tree_value) fi);
120   return fi;
121 }
122 
123 static void
124 update_header_times (const char *name)
125 {
126   /* Changing files again.  This means currently collected time
127      is charged against header time, and body time starts back at 0.  */
128   if (flag_detailed_statistics)
129     {
130       int this_time = get_run_time ();
131       struct c_fileinfo *file = get_fileinfo (name);
132       header_time += this_time - body_time;
133       file->time += this_time - body_time;
134       body_time = this_time;
135     }
136 }
137 
138 static int
139 dump_one_header (splay_tree_node n, void * ARG_UNUSED (dummy))
140 {
141   print_time ((const char *) n->key,
142 	      ((struct c_fileinfo *) n->value)->time);
143   return 0;
144 }
145 
146 void
147 dump_time_statistics (void)
148 {
149   struct c_fileinfo *file = get_fileinfo (input_filename);
150   int this_time = get_run_time ();
151   file->time += this_time - body_time;
152 
153   fprintf (stderr, "\n******\n");
154   print_time ("header files (total)", header_time);
155   print_time ("main file (total)", this_time - body_time);
156   fprintf (stderr, "ratio = %g : 1\n",
157 	   (double) header_time / (double) (this_time - body_time));
158   fprintf (stderr, "\n******\n");
159 
160   splay_tree_foreach (file_info_tree, dump_one_header, 0);
161 }
162 
163 static void
164 cb_ident (cpp_reader * ARG_UNUSED (pfile),
165 	  unsigned int ARG_UNUSED (line),
166 	  const cpp_string * ARG_UNUSED (str))
167 {
168 #ifdef ASM_OUTPUT_IDENT
169   if (!flag_no_ident)
170     {
171       /* Convert escapes in the string.  */
172       cpp_string cstr = { 0, 0 };
173       if (cpp_interpret_string (pfile, str, 1, &cstr, CPP_STRING))
174 	{
175 	  ASM_OUTPUT_IDENT (asm_out_file, (const char *) cstr.text);
176 	  free (CONST_CAST (unsigned char *, cstr.text));
177 	}
178     }
179 #endif
180 }
181 
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)
187 {
188   if (token->type != CPP_EOF && !parsing_args)
189     input_location = token->src_loc;
190 }
191 
192 void
193 fe_file_change (const struct line_map *new_map)
194 {
195   if (new_map == NULL)
196     return;
197 
198   if (new_map->reason == LC_ENTER)
199     {
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))
203 	{
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);
208 
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)
215 	    {
216 	      c_header_level = 1;
217 	      ++pending_lang_change;
218 	    }
219 #endif
220 	}
221     }
222   else if (new_map->reason == LC_LEAVE)
223     {
224 #ifndef NO_IMPLICIT_EXTERN_C
225       if (c_header_level && --c_header_level == 0)
226 	{
227 	  if (LINEMAP_SYSP (new_map) == 2)
228 	    warning (0, "badly nested C headers from preprocessor");
229 	  --pending_lang_change;
230 	}
231 #endif
232       input_location = new_map->start_location;
233 
234       (*debug_hooks->end_source_file) (LINEMAP_LINE (new_map));
235     }
236 
237   update_header_times (LINEMAP_FILE (new_map));
238   input_location = new_map->start_location;
239 }
240 
241 static void
242 cb_def_pragma (cpp_reader *pfile, source_location loc)
243 {
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)
248     {
249       const unsigned char *space, *name;
250       const cpp_token *s;
251       location_t fe_loc = loc;
252 
253       space = name = (const unsigned char *) "";
254       s = cpp_get_token (pfile);
255       if (s->type != CPP_EOF)
256 	{
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);
261 	}
262 
263       warning_at (fe_loc, OPT_Wunknown_pragmas, "ignoring #pragma %s %s",
264 		  space, name);
265     }
266 }
267 
268 /* #define callback for DWARF and DWARF2 debug info.  */
269 static void
270 cb_define (cpp_reader *pfile, source_location loc, cpp_hashnode *node)
271 {
272   const struct line_map *map = linemap_lookup (line_table, loc);
273   (*debug_hooks->define) (SOURCE_LINE (map, loc),
274 			  (const char *) cpp_macro_definition (pfile, node));
275 }
276 
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)
281 {
282   const struct line_map *map = linemap_lookup (line_table, loc);
283   (*debug_hooks->undef) (SOURCE_LINE (map, loc),
284 			 (const char *) NODE_NAME (node));
285 }
286 
287 /* Read a token and return its type.  Fill *VALUE with its value, if
288    applicable.  Fill *CPP_FLAGS with the token's flags, if it is
289    non-NULL.  */
290 
291 enum cpp_ttype
292 c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags,
293 		  int lex_flags)
294 {
295   static bool no_more_pch;
296   const cpp_token *tok;
297   enum cpp_ttype type;
298   unsigned char add_flags = 0;
299 
300   timevar_push (TV_CPP);
301  retry:
302   tok = cpp_get_token_with_location (parse_in, loc);
303   type = tok->type;
304 
305  retry_after_at:
306   switch (type)
307     {
308     case CPP_PADDING:
309       goto retry;
310 
311     case CPP_NAME:
312       *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node.node));
313       break;
314 
315     case CPP_NUMBER:
316       {
317 	const char *suffix = NULL;
318 	unsigned int flags = cpp_classify_number (parse_in, tok, &suffix);
319 
320 	switch (flags & CPP_N_CATEGORY)
321 	  {
322 	  case CPP_N_INVALID:
323 	    /* cpplib has issued an error.  */
324 	    *value = error_mark_node;
325 	    break;
326 
327 	  case CPP_N_INTEGER:
328 	    /* C++ uses '0' to mark virtual functions as pure.
329 	       Set PURE_ZERO to pass this information to the C++ parser.  */
330 	    if (tok->val.str.len == 1 && *tok->val.str.text == '0')
331 	      add_flags = PURE_ZERO;
332 	    *value = interpret_integer (tok, flags);
333 	    break;
334 
335 	  case CPP_N_FLOATING:
336 	    *value = interpret_float (tok, flags, suffix);
337 	    break;
338 
339 	  default:
340 	    gcc_unreachable ();
341 	  }
342 
343 	if (flags & CPP_N_USERDEF)
344 	  {
345 	    char *str;
346 	    tree literal;
347 	    tree suffix_id = get_identifier (suffix);
348 	    int len = tok->val.str.len - strlen (suffix);
349 	    /* If this is going to be used as a C string to pass to a
350 	       raw literal operator, we need to add a trailing NUL.  */
351 	    tree num_string = build_string (len + 1,
352 					    (const char *) tok->val.str.text);
353 	    TREE_TYPE (num_string) = char_array_type_node;
354 	    num_string = fix_string_type (num_string);
355 	    str = CONST_CAST (char *, TREE_STRING_POINTER (num_string));
356 	    str[len] = '\0';
357 	    literal = build_userdef_literal (suffix_id, *value,
358 						  num_string);
359 	    *value = literal;
360 	  }
361       }
362       break;
363 
364     case CPP_ATSIGN:
365       /* An @ may give the next token special significance in Objective-C.  */
366       if (c_dialect_objc ())
367 	{
368 	  location_t atloc = *loc;
369 	  location_t newloc;
370 
371 	retry_at:
372 	  tok = cpp_get_token_with_location (parse_in, &newloc);
373 	  type = tok->type;
374 	  switch (type)
375 	    {
376 	    case CPP_PADDING:
377 	      goto retry_at;
378 
379 	    case CPP_STRING:
380 	    case CPP_WSTRING:
381 	    case CPP_STRING16:
382 	    case CPP_STRING32:
383 	    case CPP_UTF8STRING:
384 	      type = lex_string (tok, value, true, true);
385 	      break;
386 
387 	    case CPP_NAME:
388 	      *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node.node));
389 	      if (OBJC_IS_AT_KEYWORD (C_RID_CODE (*value))
390 		  || OBJC_IS_CXX_KEYWORD (C_RID_CODE (*value)))
391 		{
392 		  type = CPP_AT_NAME;
393 		  /* Note the complication: if we found an OBJC_CXX
394 		     keyword, for example, 'class', we will be
395 		     returning a token of type CPP_AT_NAME and rid
396 		     code RID_CLASS (not RID_AT_CLASS).  The language
397 		     parser needs to convert that to RID_AT_CLASS.
398 		  */
399 		  break;
400 		}
401 	      /* FALLTHROUGH */
402 
403 	    default:
404 	      /* ... or not.  */
405 	      error_at (atloc, "stray %<@%> in program");
406 	      *loc = newloc;
407 	      goto retry_after_at;
408 	    }
409 	  break;
410 	}
411 
412       /* FALLTHROUGH */
413     case CPP_HASH:
414     case CPP_PASTE:
415       {
416 	unsigned char name[8];
417 
418 	*cpp_spell_token (parse_in, tok, name, true) = 0;
419 
420 	error ("stray %qs in program", name);
421       }
422 
423       goto retry;
424 
425     case CPP_OTHER:
426       {
427 	cppchar_t c = tok->val.str.text[0];
428 
429 	if (c == '"' || c == '\'')
430 	  error ("missing terminating %c character", (int) c);
431 	else if (ISGRAPH (c))
432 	  error ("stray %qc in program", (int) c);
433 	else
434 	  error ("stray %<\\%o%> in program", (int) c);
435       }
436       goto retry;
437 
438     case CPP_CHAR_USERDEF:
439     case CPP_WCHAR_USERDEF:
440     case CPP_CHAR16_USERDEF:
441     case CPP_CHAR32_USERDEF:
442       {
443 	tree literal;
444 	cpp_token temp_tok = *tok;
445 	const char *suffix = cpp_get_userdef_suffix (tok);
446 	temp_tok.val.str.len -= strlen (suffix);
447 	temp_tok.type = cpp_userdef_char_remove_type (type);
448 	literal = build_userdef_literal (get_identifier (suffix),
449 					 lex_charconst (&temp_tok), NULL_TREE);
450 	*value = literal;
451       }
452       break;
453 
454     case CPP_CHAR:
455     case CPP_WCHAR:
456     case CPP_CHAR16:
457     case CPP_CHAR32:
458       *value = lex_charconst (tok);
459       break;
460 
461     case CPP_STRING_USERDEF:
462     case CPP_WSTRING_USERDEF:
463     case CPP_STRING16_USERDEF:
464     case CPP_STRING32_USERDEF:
465     case CPP_UTF8STRING_USERDEF:
466       {
467 	tree literal, string;
468 	const char *suffix = cpp_get_userdef_suffix (tok);
469 	string = build_string (tok->val.str.len - strlen (suffix),
470 			       (const char *) tok->val.str.text);
471 	literal = build_userdef_literal (get_identifier (suffix),
472 					 string, NULL_TREE);
473 	*value = literal;
474       }
475       break;
476 
477     case CPP_STRING:
478     case CPP_WSTRING:
479     case CPP_STRING16:
480     case CPP_STRING32:
481     case CPP_UTF8STRING:
482       if ((lex_flags & C_LEX_STRING_NO_JOIN) == 0)
483 	{
484 	  type = lex_string (tok, value, false,
485 			     (lex_flags & C_LEX_STRING_NO_TRANSLATE) == 0);
486 	  break;
487 	}
488       *value = build_string (tok->val.str.len, (const char *) tok->val.str.text);
489       break;
490 
491     case CPP_PRAGMA:
492       *value = build_int_cst (integer_type_node, tok->val.pragma);
493       break;
494 
495       /* These tokens should not be visible outside cpplib.  */
496     case CPP_HEADER_NAME:
497     case CPP_MACRO_ARG:
498       gcc_unreachable ();
499 
500     /* CPP_COMMENT will appear when compiling with -C and should be
501        ignored.  */
502      case CPP_COMMENT:
503        goto retry;
504 
505     default:
506       *value = NULL_TREE;
507       break;
508     }
509 
510   if (cpp_flags)
511     *cpp_flags = tok->flags | add_flags;
512 
513   if (!no_more_pch)
514     {
515       no_more_pch = true;
516       c_common_no_more_pch ();
517     }
518 
519   timevar_pop (TV_CPP);
520 
521   return type;
522 }
523 
524 /* Returns the narrowest C-visible unsigned type, starting with the
525    minimum specified by FLAGS, that can fit HIGH:LOW, or itk_none if
526    there isn't one.  */
527 
528 static enum integer_type_kind
529 narrowest_unsigned_type (unsigned HOST_WIDE_INT low,
530 			 unsigned HOST_WIDE_INT high,
531 			 unsigned int flags)
532 {
533   int itk;
534 
535   if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
536     itk = itk_unsigned_int;
537   else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
538     itk = itk_unsigned_long;
539   else
540     itk = itk_unsigned_long_long;
541 
542   for (; itk < itk_none; itk += 2 /* skip unsigned types */)
543     {
544       tree upper;
545 
546       if (integer_types[itk] == NULL_TREE)
547 	continue;
548       upper = TYPE_MAX_VALUE (integer_types[itk]);
549 
550       if ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) > high
551 	  || ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) == high
552 	      && TREE_INT_CST_LOW (upper) >= low))
553 	return (enum integer_type_kind) itk;
554     }
555 
556   return itk_none;
557 }
558 
559 /* Ditto, but narrowest signed type.  */
560 static enum integer_type_kind
561 narrowest_signed_type (unsigned HOST_WIDE_INT low,
562 		       unsigned HOST_WIDE_INT high, unsigned int flags)
563 {
564   int itk;
565 
566   if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
567     itk = itk_int;
568   else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
569     itk = itk_long;
570   else
571     itk = itk_long_long;
572 
573 
574   for (; itk < itk_none; itk += 2 /* skip signed types */)
575     {
576       tree upper;
577 
578       if (integer_types[itk] == NULL_TREE)
579 	continue;
580       upper = TYPE_MAX_VALUE (integer_types[itk]);
581 
582       if ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) > high
583 	  || ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) == high
584 	      && TREE_INT_CST_LOW (upper) >= low))
585 	return (enum integer_type_kind) itk;
586     }
587 
588   return itk_none;
589 }
590 
591 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib.  */
592 static tree
593 interpret_integer (const cpp_token *token, unsigned int flags)
594 {
595   tree value, type;
596   enum integer_type_kind itk;
597   cpp_num integer;
598   cpp_options *options = cpp_get_options (parse_in);
599 
600   integer = cpp_interpret_integer (parse_in, token, flags);
601   integer = cpp_num_sign_extend (integer, options->precision);
602 
603   /* The type of a constant with a U suffix is straightforward.  */
604   if (flags & CPP_N_UNSIGNED)
605     itk = narrowest_unsigned_type (integer.low, integer.high, flags);
606   else
607     {
608       /* The type of a potentially-signed integer constant varies
609 	 depending on the base it's in, the standard in use, and the
610 	 length suffixes.  */
611       enum integer_type_kind itk_u
612 	= narrowest_unsigned_type (integer.low, integer.high, flags);
613       enum integer_type_kind itk_s
614 	= narrowest_signed_type (integer.low, integer.high, flags);
615 
616       /* In both C89 and C99, octal and hex constants may be signed or
617 	 unsigned, whichever fits tighter.  We do not warn about this
618 	 choice differing from the traditional choice, as the constant
619 	 is probably a bit pattern and either way will work.  */
620       if ((flags & CPP_N_RADIX) != CPP_N_DECIMAL)
621 	itk = MIN (itk_u, itk_s);
622       else
623 	{
624 	  /* In C99, decimal constants are always signed.
625 	     In C89, decimal constants that don't fit in long have
626 	     undefined behavior; we try to make them unsigned long.
627 	     In GCC's extended C89, that last is true of decimal
628 	     constants that don't fit in long long, too.  */
629 
630 	  itk = itk_s;
631 	  if (itk_s > itk_u && itk_s > itk_long)
632 	    {
633 	      if (!flag_isoc99)
634 		{
635 		  if (itk_u < itk_unsigned_long)
636 		    itk_u = itk_unsigned_long;
637 		  itk = itk_u;
638 		  warning (0, "this decimal constant is unsigned only in ISO C90");
639 		}
640 	      else
641 		warning (OPT_Wtraditional,
642 			 "this decimal constant would be unsigned in ISO C90");
643 	    }
644 	}
645     }
646 
647   if (itk == itk_none)
648     /* cpplib has already issued a warning for overflow.  */
649     type = ((flags & CPP_N_UNSIGNED)
650 	    ? widest_unsigned_literal_type_node
651 	    : widest_integer_literal_type_node);
652   else
653     {
654       type = integer_types[itk];
655       if (itk > itk_unsigned_long
656 	  && (flags & CPP_N_WIDTH) != CPP_N_LARGE)
657 	emit_diagnostic
658 	  ((c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99)
659 	   ? DK_PEDWARN : DK_WARNING,
660 	   input_location, OPT_Wlong_long,
661 	   (flags & CPP_N_UNSIGNED)
662 	   ? "integer constant is too large for %<unsigned long%> type"
663 	   : "integer constant is too large for %<long%> type");
664     }
665 
666   value = build_int_cst_wide (type, integer.low, integer.high);
667 
668   /* Convert imaginary to a complex type.  */
669   if (flags & CPP_N_IMAGINARY)
670     value = build_complex (NULL_TREE, build_int_cst (type, 0), value);
671 
672   return value;
673 }
674 
675 /* Interpret TOKEN, a floating point number with FLAGS as classified
676    by cpplib.  For C++0X SUFFIX may contain a user-defined literal suffix.  */
677 static tree
678 interpret_float (const cpp_token *token, unsigned int flags,
679 		 const char *suffix)
680 {
681   tree type;
682   tree const_type;
683   tree value;
684   REAL_VALUE_TYPE real;
685   REAL_VALUE_TYPE real_trunc;
686   char *copy;
687   size_t copylen;
688 
689   /* Default (no suffix) depends on whether the FLOAT_CONST_DECIMAL64
690      pragma has been used and is either double or _Decimal64.  Types
691      that are not allowed with decimal float default to double.  */
692   if (flags & CPP_N_DEFAULT)
693     {
694       flags ^= CPP_N_DEFAULT;
695       flags |= CPP_N_MEDIUM;
696 
697       if (((flags & CPP_N_HEX) == 0) && ((flags & CPP_N_IMAGINARY) == 0))
698 	{
699 	  warning (OPT_Wunsuffixed_float_constants,
700 		   "unsuffixed float constant");
701 	  if (float_const_decimal64_p ())
702 	    flags |= CPP_N_DFLOAT;
703 	}
704     }
705 
706   /* Decode _Fract and _Accum.  */
707   if (flags & CPP_N_FRACT || flags & CPP_N_ACCUM)
708     return interpret_fixed (token, flags);
709 
710   /* Decode type based on width and properties. */
711   if (flags & CPP_N_DFLOAT)
712     if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
713       type = dfloat128_type_node;
714     else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
715       type = dfloat32_type_node;
716     else
717       type = dfloat64_type_node;
718   else
719     if (flags & CPP_N_WIDTH_MD)
720       {
721 	char suffix;
722 	enum machine_mode mode;
723 
724 	if ((flags & CPP_N_WIDTH_MD) == CPP_N_MD_W)
725 	  suffix = 'w';
726 	else
727 	  suffix = 'q';
728 
729 	mode = targetm.c.mode_for_suffix (suffix);
730 	if (mode == VOIDmode)
731 	  {
732 	    error ("unsupported non-standard suffix on floating constant");
733 
734 	    return error_mark_node;
735 	  }
736 	else
737 	  pedwarn (input_location, OPT_pedantic, "non-standard suffix on floating constant");
738 
739 	type = c_common_type_for_mode (mode, 0);
740 	gcc_assert (type);
741       }
742     else if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
743       type = long_double_type_node;
744     else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL
745 	     || flag_single_precision_constant)
746       type = float_type_node;
747     else
748       type = double_type_node;
749 
750   const_type = excess_precision_type (type);
751   if (!const_type)
752     const_type = type;
753 
754   /* Copy the constant to a nul-terminated buffer.  If the constant
755      has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF
756      can't handle them.  */
757   copylen = token->val.str.len;
758   if (flags & CPP_N_USERDEF)
759     copylen -= strlen (suffix);
760   else if (flags & CPP_N_DFLOAT)
761     copylen -= 2;
762   else
763     {
764       if ((flags & CPP_N_WIDTH) != CPP_N_MEDIUM)
765 	/* Must be an F or L or machine defined suffix.  */
766 	copylen--;
767       if (flags & CPP_N_IMAGINARY)
768 	/* I or J suffix.  */
769 	copylen--;
770     }
771 
772   copy = (char *) alloca (copylen + 1);
773   memcpy (copy, token->val.str.text, copylen);
774   copy[copylen] = '\0';
775 
776   real_from_string3 (&real, copy, TYPE_MODE (const_type));
777   if (const_type != type)
778     /* Diagnosing if the result of converting the value with excess
779        precision to the semantic type would overflow (with associated
780        double rounding) is more appropriate than diagnosing if the
781        result of converting the string directly to the semantic type
782        would overflow.  */
783     real_convert (&real_trunc, TYPE_MODE (type), &real);
784 
785   /* Both C and C++ require a diagnostic for a floating constant
786      outside the range of representable values of its type.  Since we
787      have __builtin_inf* to produce an infinity, this is now a
788      mandatory pedwarn if the target does not support infinities.  */
789   if (REAL_VALUE_ISINF (real)
790       || (const_type != type && REAL_VALUE_ISINF (real_trunc)))
791     {
792       if (!MODE_HAS_INFINITIES (TYPE_MODE (type)))
793 	pedwarn (input_location, 0, "floating constant exceeds range of %qT", type);
794       else
795 	warning (OPT_Woverflow, "floating constant exceeds range of %qT", type);
796     }
797   /* We also give a warning if the value underflows.  */
798   else if (REAL_VALUES_EQUAL (real, dconst0)
799 	   || (const_type != type && REAL_VALUES_EQUAL (real_trunc, dconst0)))
800     {
801       REAL_VALUE_TYPE realvoidmode;
802       int overflow = real_from_string (&realvoidmode, copy);
803       if (overflow < 0 || !REAL_VALUES_EQUAL (realvoidmode, dconst0))
804 	warning (OPT_Woverflow, "floating constant truncated to zero");
805     }
806 
807   /* Create a node with determined type and value.  */
808   value = build_real (const_type, real);
809   if (flags & CPP_N_IMAGINARY)
810     {
811       value = build_complex (NULL_TREE, convert (const_type,
812 						 integer_zero_node), value);
813       if (type != const_type)
814 	{
815 	  const_type = TREE_TYPE (value);
816 	  type = build_complex_type (type);
817 	}
818     }
819 
820   if (type != const_type)
821     value = build1 (EXCESS_PRECISION_EXPR, type, value);
822 
823   return value;
824 }
825 
826 /* Interpret TOKEN, a fixed-point number with FLAGS as classified
827    by cpplib.  */
828 
829 static tree
830 interpret_fixed (const cpp_token *token, unsigned int flags)
831 {
832   tree type;
833   tree value;
834   FIXED_VALUE_TYPE fixed;
835   char *copy;
836   size_t copylen;
837 
838   copylen = token->val.str.len;
839 
840   if (flags & CPP_N_FRACT) /* _Fract.  */
841     {
842       if (flags & CPP_N_UNSIGNED) /* Unsigned _Fract.  */
843 	{
844 	  if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
845 	    {
846 	      type = unsigned_long_long_fract_type_node;
847 	      copylen -= 4;
848 	    }
849 	  else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
850 	    {
851 	      type = unsigned_long_fract_type_node;
852 	      copylen -= 3;
853 	    }
854 	  else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
855 	    {
856 	      type = unsigned_short_fract_type_node;
857 	      copylen -= 3;
858 	    }
859           else
860 	    {
861 	      type = unsigned_fract_type_node;
862 	      copylen -= 2;
863 	    }
864 	}
865       else /* Signed _Fract.  */
866 	{
867 	  if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
868 	    {
869 	      type = long_long_fract_type_node;
870 	      copylen -= 3;
871 	    }
872 	  else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
873 	    {
874 	      type = long_fract_type_node;
875 	      copylen -= 2;
876 	    }
877 	  else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
878 	    {
879 	      type = short_fract_type_node;
880 	      copylen -= 2;
881 	    }
882           else
883 	    {
884 	      type = fract_type_node;
885 	      copylen --;
886 	    }
887 	  }
888     }
889   else /* _Accum.  */
890     {
891       if (flags & CPP_N_UNSIGNED) /* Unsigned _Accum.  */
892 	{
893 	  if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
894 	    {
895 	      type = unsigned_long_long_accum_type_node;
896 	      copylen -= 4;
897 	    }
898 	  else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
899 	    {
900 	      type = unsigned_long_accum_type_node;
901 	      copylen -= 3;
902 	    }
903 	  else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
904 	    {
905 	      type = unsigned_short_accum_type_node;
906 	      copylen -= 3;
907 	     }
908 	  else
909 	    {
910 	      type = unsigned_accum_type_node;
911 	      copylen -= 2;
912 	    }
913 	}
914       else /* Signed _Accum.  */
915         {
916 	  if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
917 	    {
918 	      type = long_long_accum_type_node;
919 	      copylen -= 3;
920 	    }
921 	  else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
922 	    {
923 	      type = long_accum_type_node;
924 	      copylen -= 2;
925 	    }
926 	  else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
927 	    {
928 	      type = short_accum_type_node;
929 	      copylen -= 2;
930 	    }
931 	  else
932 	    {
933 	      type = accum_type_node;
934 	      copylen --;
935 	    }
936 	}
937     }
938 
939   copy = (char *) alloca (copylen + 1);
940   memcpy (copy, token->val.str.text, copylen);
941   copy[copylen] = '\0';
942 
943   fixed_from_string (&fixed, copy, TYPE_MODE (type));
944 
945   /* Create a node with determined type and value.  */
946   value = build_fixed (type, fixed);
947 
948   return value;
949 }
950 
951 /* Convert a series of STRING, WSTRING, STRING16, STRING32 and/or
952    UTF8STRING tokens into a tree, performing string constant
953    concatenation.  TOK is the first of these.  VALP is the location to
954    write the string into.  OBJC_STRING indicates whether an '@' token
955    preceded the incoming token (in that case, the strings can either
956    be ObjC strings, preceded by a single '@', or normal strings, not
957    preceded by '@'.  The result will be a CPP_OBJC_STRING).  Returns
958    the CPP token type of the result (CPP_STRING, CPP_WSTRING,
959    CPP_STRING32, CPP_STRING16, CPP_UTF8STRING, or CPP_OBJC_STRING).
960 
961    This is unfortunately more work than it should be.  If any of the
962    strings in the series has an L prefix, the result is a wide string
963    (6.4.5p4).  Whether or not the result is a wide string affects the
964    meaning of octal and hexadecimal escapes (6.4.4.4p6,9).  But escape
965    sequences do not continue across the boundary between two strings in
966    a series (6.4.5p7), so we must not lose the boundaries.  Therefore
967    cpp_interpret_string takes a vector of cpp_string structures, which
968    we must arrange to provide.  */
969 
970 static enum cpp_ttype
971 lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate)
972 {
973   tree value;
974   size_t concats = 0;
975   struct obstack str_ob;
976   cpp_string istr;
977   enum cpp_ttype type = tok->type;
978 
979   /* Try to avoid the overhead of creating and destroying an obstack
980      for the common case of just one string.  */
981   cpp_string str = tok->val.str;
982   cpp_string *strs = &str;
983 
984   /* objc_at_sign_was_seen is only used when doing Objective-C string
985      concatenation.  It is 'true' if we have seen an '@' before the
986      current string, and 'false' if not.  We must see exactly one or
987      zero '@' before each string.  */
988   bool objc_at_sign_was_seen = false;
989 
990  retry:
991   tok = cpp_get_token (parse_in);
992   switch (tok->type)
993     {
994     case CPP_PADDING:
995       goto retry;
996     case CPP_ATSIGN:
997       if (objc_string)
998 	{
999 	  if (objc_at_sign_was_seen)
1000 	    error ("repeated %<@%> before Objective-C string");
1001 
1002 	  objc_at_sign_was_seen = true;
1003 	  goto retry;
1004 	}
1005       /* FALLTHROUGH */
1006 
1007     default:
1008       break;
1009 
1010     case CPP_WSTRING:
1011     case CPP_STRING16:
1012     case CPP_STRING32:
1013     case CPP_UTF8STRING:
1014       if (type != tok->type)
1015 	{
1016 	  if (type == CPP_STRING)
1017 	    type = tok->type;
1018 	  else
1019 	    error ("unsupported non-standard concatenation of string literals");
1020 	}
1021 
1022     case CPP_STRING:
1023       if (!concats)
1024 	{
1025 	  gcc_obstack_init (&str_ob);
1026 	  obstack_grow (&str_ob, &str, sizeof (cpp_string));
1027 	}
1028 
1029       concats++;
1030       obstack_grow (&str_ob, &tok->val.str, sizeof (cpp_string));
1031       if (objc_string)
1032 	objc_at_sign_was_seen = false;
1033       goto retry;
1034     }
1035 
1036   /* It is an error if we saw a '@' with no following string.  */
1037   if (objc_at_sign_was_seen)
1038     error ("stray %<@%> in program");
1039 
1040   /* We have read one more token than we want.  */
1041   _cpp_backup_tokens (parse_in, 1);
1042   if (concats)
1043     strs = XOBFINISH (&str_ob, cpp_string *);
1044 
1045   if (concats && !objc_string && !in_system_header)
1046     warning (OPT_Wtraditional,
1047 	     "traditional C rejects string constant concatenation");
1048 
1049   if ((translate
1050        ? cpp_interpret_string : cpp_interpret_string_notranslate)
1051       (parse_in, strs, concats + 1, &istr, type))
1052     {
1053       value = build_string (istr.len, (const char *) istr.text);
1054       free (CONST_CAST (unsigned char *, istr.text));
1055     }
1056   else
1057     {
1058       /* Callers cannot generally handle error_mark_node in this context,
1059 	 so return the empty string instead.  cpp_interpret_string has
1060 	 issued an error.  */
1061       switch (type)
1062 	{
1063 	default:
1064 	case CPP_STRING:
1065 	case CPP_UTF8STRING:
1066 	  value = build_string (1, "");
1067 	  break;
1068 	case CPP_STRING16:
1069 	  value = build_string (TYPE_PRECISION (char16_type_node)
1070 				/ TYPE_PRECISION (char_type_node),
1071 				"\0");  /* char16_t is 16 bits */
1072 	  break;
1073 	case CPP_STRING32:
1074 	  value = build_string (TYPE_PRECISION (char32_type_node)
1075 				/ TYPE_PRECISION (char_type_node),
1076 				"\0\0\0");  /* char32_t is 32 bits */
1077 	  break;
1078 	case CPP_WSTRING:
1079 	  value = build_string (TYPE_PRECISION (wchar_type_node)
1080 				/ TYPE_PRECISION (char_type_node),
1081 				"\0\0\0");  /* widest supported wchar_t
1082 					       is 32 bits */
1083 	  break;
1084         }
1085     }
1086 
1087   switch (type)
1088     {
1089     default:
1090     case CPP_STRING:
1091     case CPP_UTF8STRING:
1092       TREE_TYPE (value) = char_array_type_node;
1093       break;
1094     case CPP_STRING16:
1095       TREE_TYPE (value) = char16_array_type_node;
1096       break;
1097     case CPP_STRING32:
1098       TREE_TYPE (value) = char32_array_type_node;
1099       break;
1100     case CPP_WSTRING:
1101       TREE_TYPE (value) = wchar_array_type_node;
1102     }
1103   *valp = fix_string_type (value);
1104 
1105   if (concats)
1106     obstack_free (&str_ob, 0);
1107 
1108   return objc_string ? CPP_OBJC_STRING : type;
1109 }
1110 
1111 /* Converts a (possibly wide) character constant token into a tree.  */
1112 static tree
1113 lex_charconst (const cpp_token *token)
1114 {
1115   cppchar_t result;
1116   tree type, value;
1117   unsigned int chars_seen;
1118   int unsignedp = 0;
1119 
1120   result = cpp_interpret_charconst (parse_in, token,
1121 				    &chars_seen, &unsignedp);
1122 
1123   if (token->type == CPP_WCHAR)
1124     type = wchar_type_node;
1125   else if (token->type == CPP_CHAR32)
1126     type = char32_type_node;
1127   else if (token->type == CPP_CHAR16)
1128     type = char16_type_node;
1129   /* In C, a character constant has type 'int'.
1130      In C++ 'char', but multi-char charconsts have type 'int'.  */
1131   else if (!c_dialect_cxx () || chars_seen > 1)
1132     type = integer_type_node;
1133   else
1134     type = char_type_node;
1135 
1136   /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
1137      before possibly widening to HOST_WIDE_INT for build_int_cst.  */
1138   if (unsignedp || (cppchar_signed_t) result >= 0)
1139     value = build_int_cst_wide (type, result, 0);
1140   else
1141     value = build_int_cst_wide (type, (cppchar_signed_t) result, -1);
1142 
1143   return value;
1144 }
1145