1 /* Mainly the interface between cpplib and the C front ends.
2    Copyright (C) 1987-2014 Free Software Foundation, Inc.
3 
4 This file is part of GCC.
5 
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.
10 
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.
15 
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/>.  */
19 
20 #include "config.h"
21 #include "system.h"
22 #include "coretypes.h"
23 #include "tm.h"
24 
25 #include "tree.h"
26 #include "stringpool.h"
27 #include "stor-layout.h"
28 #include "input.h"
29 #include "c-common.h"
30 #include "flags.h"
31 #include "timevar.h"
32 #include "cpplib.h"
33 #include "c-pragma.h"
34 #include "intl.h"
35 #include "splay-tree.h"
36 #include "debug.h"
37 #include "target.h"
38 
39 /* We may keep statistics about how long which files took to compile.  */
40 static int header_time, body_time;
41 static splay_tree file_info_tree;
42 
43 int pending_lang_change; /* If we need to switch languages - C++ only */
44 int c_header_level;	 /* depth in C headers - C++ only */
45 
46 static tree interpret_integer (const cpp_token *, unsigned int,
47 			       enum overflow_type *);
48 static tree interpret_float (const cpp_token *, unsigned int, const char *,
49 			     enum overflow_type *);
50 static tree interpret_fixed (const cpp_token *, unsigned int);
51 static enum integer_type_kind narrowest_unsigned_type
52 	(unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned int);
53 static enum integer_type_kind narrowest_signed_type
54 	(unsigned HOST_WIDE_INT, unsigned HOST_WIDE_INT, unsigned int);
55 static enum cpp_ttype lex_string (const cpp_token *, tree *, bool, bool);
56 static tree lex_charconst (const cpp_token *);
57 static void update_header_times (const char *);
58 static int dump_one_header (splay_tree_node, void *);
59 static void cb_line_change (cpp_reader *, const cpp_token *, int);
60 static void cb_ident (cpp_reader *, unsigned int, const cpp_string *);
61 static void cb_def_pragma (cpp_reader *, unsigned int);
62 static void cb_define (cpp_reader *, unsigned int, cpp_hashnode *);
63 static void cb_undef (cpp_reader *, unsigned int, cpp_hashnode *);
64 
65 void
init_c_lex(void)66 init_c_lex (void)
67 {
68   struct cpp_callbacks *cb;
69   struct c_fileinfo *toplevel;
70 
71   /* The get_fileinfo data structure must be initialized before
72      cpp_read_main_file is called.  */
73   toplevel = get_fileinfo ("<top level>");
74   if (flag_detailed_statistics)
75     {
76       header_time = 0;
77       body_time = get_run_time ();
78       toplevel->time = body_time;
79     }
80 
81   cb = cpp_get_callbacks (parse_in);
82 
83   cb->line_change = cb_line_change;
84   cb->ident = cb_ident;
85   cb->def_pragma = cb_def_pragma;
86   cb->valid_pch = c_common_valid_pch;
87   cb->read_pch = c_common_read_pch;
88 
89   /* Set the debug callbacks if we can use them.  */
90   if ((debug_info_level == DINFO_LEVEL_VERBOSE
91        && (write_symbols == DWARF2_DEBUG
92 	   || write_symbols == VMS_AND_DWARF2_DEBUG))
93       || flag_dump_go_spec != NULL)
94     {
95       cb->define = cb_define;
96       cb->undef = cb_undef;
97     }
98 }
99 
100 struct c_fileinfo *
get_fileinfo(const char * name)101 get_fileinfo (const char *name)
102 {
103   splay_tree_node n;
104   struct c_fileinfo *fi;
105 
106   if (!file_info_tree)
107     file_info_tree = splay_tree_new ((splay_tree_compare_fn) strcmp,
108 				     0,
109 				     (splay_tree_delete_value_fn) free);
110 
111   n = splay_tree_lookup (file_info_tree, (splay_tree_key) name);
112   if (n)
113     return (struct c_fileinfo *) n->value;
114 
115   fi = XNEW (struct c_fileinfo);
116   fi->time = 0;
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);
121   return fi;
122 }
123 
124 static void
update_header_times(const char * name)125 update_header_times (const char *name)
126 {
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)
130     {
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;
136     }
137 }
138 
139 static int
dump_one_header(splay_tree_node n,void * ARG_UNUSED (dummy))140 dump_one_header (splay_tree_node n, void * ARG_UNUSED (dummy))
141 {
142   print_time ((const char *) n->key,
143 	      ((struct c_fileinfo *) n->value)->time);
144   return 0;
145 }
146 
147 void
dump_time_statistics(void)148 dump_time_statistics (void)
149 {
150   struct c_fileinfo *file = get_fileinfo (LOCATION_FILE (input_location));
151   int this_time = get_run_time ();
152   file->time += this_time - body_time;
153 
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");
160 
161   splay_tree_foreach (file_info_tree, dump_one_header, 0);
162 }
163 
164 static void
cb_ident(cpp_reader * ARG_UNUSED (pfile),unsigned int ARG_UNUSED (line),const cpp_string * ARG_UNUSED (str))165 cb_ident (cpp_reader * ARG_UNUSED (pfile),
166 	  unsigned int ARG_UNUSED (line),
167 	  const cpp_string * ARG_UNUSED (str))
168 {
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 	  targetm.asm_out.output_ident ((const char *) cstr.text);
176 	  free (CONST_CAST (unsigned char *, cstr.text));
177 	}
178     }
179 }
180 
181 /* Called at the start of every non-empty line.  TOKEN is the first
182    lexed token on the line.  Used for diagnostic line numbers.  */
183 static void
cb_line_change(cpp_reader * ARG_UNUSED (pfile),const cpp_token * token,int parsing_args)184 cb_line_change (cpp_reader * ARG_UNUSED (pfile), const cpp_token *token,
185 		int parsing_args)
186 {
187   if (token->type != CPP_EOF && !parsing_args)
188     input_location = token->src_loc;
189 }
190 
191 void
fe_file_change(const struct line_map * new_map)192 fe_file_change (const struct line_map *new_map)
193 {
194   if (new_map == NULL)
195     return;
196 
197   if (new_map->reason == LC_ENTER)
198     {
199       /* Don't stack the main buffer on the input stack;
200 	 we already did in compile_file.  */
201       if (!MAIN_FILE_P (new_map))
202 	{
203 	  unsigned int included_at = LAST_SOURCE_LINE_LOCATION (new_map - 1);
204 	  int line = 0;
205 	  if (included_at > BUILTINS_LOCATION)
206 	    line = SOURCE_LINE (new_map - 1, included_at);
207 
208 	  input_location = new_map->start_location;
209 	  (*debug_hooks->start_source_file) (line, LINEMAP_FILE (new_map));
210 #ifndef NO_IMPLICIT_EXTERN_C
211 	  if (c_header_level)
212 	    ++c_header_level;
213 	  else if (LINEMAP_SYSP (new_map) == 2)
214 	    {
215 	      c_header_level = 1;
216 	      ++pending_lang_change;
217 	    }
218 #endif
219 	}
220     }
221   else if (new_map->reason == LC_LEAVE)
222     {
223 #ifndef NO_IMPLICIT_EXTERN_C
224       if (c_header_level && --c_header_level == 0)
225 	{
226 	  if (LINEMAP_SYSP (new_map) == 2)
227 	    warning (0, "badly nested C headers from preprocessor");
228 	  --pending_lang_change;
229 	}
230 #endif
231       input_location = new_map->start_location;
232 
233       (*debug_hooks->end_source_file) (LINEMAP_LINE (new_map));
234     }
235 
236   update_header_times (LINEMAP_FILE (new_map));
237   input_location = new_map->start_location;
238 }
239 
240 static void
cb_def_pragma(cpp_reader * pfile,source_location loc)241 cb_def_pragma (cpp_reader *pfile, source_location loc)
242 {
243   /* Issue a warning message if we have been asked to do so.  Ignore
244      unknown pragmas in system headers unless an explicit
245      -Wunknown-pragmas has been given.  */
246   if (warn_unknown_pragmas > in_system_header_at (input_location))
247     {
248       const unsigned char *space, *name;
249       const cpp_token *s;
250       location_t fe_loc = loc;
251 
252       space = name = (const unsigned char *) "";
253       s = cpp_get_token (pfile);
254       if (s->type != CPP_EOF)
255 	{
256 	  space = cpp_token_as_text (pfile, s);
257 	  s = cpp_get_token (pfile);
258 	  if (s->type == CPP_NAME)
259 	    name = cpp_token_as_text (pfile, s);
260 	}
261 
262       warning_at (fe_loc, OPT_Wunknown_pragmas, "ignoring #pragma %s %s",
263 		  space, name);
264     }
265 }
266 
267 /* #define callback for DWARF and DWARF2 debug info.  */
268 static void
cb_define(cpp_reader * pfile,source_location loc,cpp_hashnode * node)269 cb_define (cpp_reader *pfile, source_location loc, cpp_hashnode *node)
270 {
271   const struct line_map *map = linemap_lookup (line_table, loc);
272   (*debug_hooks->define) (SOURCE_LINE (map, loc),
273 			  (const char *) cpp_macro_definition (pfile, node));
274 }
275 
276 /* #undef callback for DWARF and DWARF2 debug info.  */
277 static void
cb_undef(cpp_reader * ARG_UNUSED (pfile),source_location loc,cpp_hashnode * node)278 cb_undef (cpp_reader * ARG_UNUSED (pfile), source_location loc,
279 	  cpp_hashnode *node)
280 {
281   const struct line_map *map = linemap_lookup (line_table, loc);
282   (*debug_hooks->undef) (SOURCE_LINE (map, loc),
283 			 (const char *) NODE_NAME (node));
284 }
285 
286 /* Read a token and return its type.  Fill *VALUE with its value, if
287    applicable.  Fill *CPP_FLAGS with the token's flags, if it is
288    non-NULL.  */
289 
290 enum cpp_ttype
c_lex_with_flags(tree * value,location_t * loc,unsigned char * cpp_flags,int lex_flags)291 c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags,
292 		  int lex_flags)
293 {
294   static bool no_more_pch;
295   const cpp_token *tok;
296   enum cpp_ttype type;
297   unsigned char add_flags = 0;
298   enum overflow_type overflow = OT_NONE;
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, *loc);
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, &overflow);
333 	    break;
334 
335 	  case CPP_N_FLOATING:
336 	    *value = interpret_float (tok, flags, suffix, &overflow);
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, overflow,
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_at (*loc, "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),
450 					 OT_NONE, NULL_TREE);
451 	*value = literal;
452       }
453       break;
454 
455     case CPP_CHAR:
456     case CPP_WCHAR:
457     case CPP_CHAR16:
458     case CPP_CHAR32:
459       *value = lex_charconst (tok);
460       break;
461 
462     case CPP_STRING_USERDEF:
463     case CPP_WSTRING_USERDEF:
464     case CPP_STRING16_USERDEF:
465     case CPP_STRING32_USERDEF:
466     case CPP_UTF8STRING_USERDEF:
467       {
468 	tree literal, string;
469 	const char *suffix = cpp_get_userdef_suffix (tok);
470 	string = build_string (tok->val.str.len - strlen (suffix),
471 			       (const char *) tok->val.str.text);
472 	literal = build_userdef_literal (get_identifier (suffix),
473 					 string, OT_NONE, NULL_TREE);
474 	*value = literal;
475       }
476       break;
477 
478     case CPP_STRING:
479     case CPP_WSTRING:
480     case CPP_STRING16:
481     case CPP_STRING32:
482     case CPP_UTF8STRING:
483       if ((lex_flags & C_LEX_STRING_NO_JOIN) == 0)
484 	{
485 	  type = lex_string (tok, value, false,
486 			     (lex_flags & C_LEX_STRING_NO_TRANSLATE) == 0);
487 	  break;
488 	}
489       *value = build_string (tok->val.str.len, (const char *) tok->val.str.text);
490       break;
491 
492     case CPP_PRAGMA:
493       *value = build_int_cst (integer_type_node, tok->val.pragma);
494       break;
495 
496       /* These tokens should not be visible outside cpplib.  */
497     case CPP_HEADER_NAME:
498     case CPP_MACRO_ARG:
499       gcc_unreachable ();
500 
501     /* CPP_COMMENT will appear when compiling with -C and should be
502        ignored.  */
503      case CPP_COMMENT:
504        goto retry;
505 
506     default:
507       *value = NULL_TREE;
508       break;
509     }
510 
511   if (cpp_flags)
512     *cpp_flags = tok->flags | add_flags;
513 
514   if (!no_more_pch)
515     {
516       no_more_pch = true;
517       c_common_no_more_pch ();
518     }
519 
520   timevar_pop (TV_CPP);
521 
522   return type;
523 }
524 
525 /* Returns the narrowest C-visible unsigned type, starting with the
526    minimum specified by FLAGS, that can fit HIGH:LOW, or itk_none if
527    there isn't one.  */
528 
529 static enum integer_type_kind
narrowest_unsigned_type(unsigned HOST_WIDE_INT low,unsigned HOST_WIDE_INT high,unsigned int flags)530 narrowest_unsigned_type (unsigned HOST_WIDE_INT low,
531 			 unsigned HOST_WIDE_INT high,
532 			 unsigned int flags)
533 {
534   int itk;
535 
536   if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
537     itk = itk_unsigned_int;
538   else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
539     itk = itk_unsigned_long;
540   else
541     itk = itk_unsigned_long_long;
542 
543   for (; itk < itk_none; itk += 2 /* skip unsigned types */)
544     {
545       tree upper;
546 
547       if (integer_types[itk] == NULL_TREE)
548 	continue;
549       upper = TYPE_MAX_VALUE (integer_types[itk]);
550 
551       if ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) > high
552 	  || ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) == high
553 	      && TREE_INT_CST_LOW (upper) >= low))
554 	return (enum integer_type_kind) itk;
555     }
556 
557   return itk_none;
558 }
559 
560 /* Ditto, but narrowest signed type.  */
561 static enum integer_type_kind
narrowest_signed_type(unsigned HOST_WIDE_INT low,unsigned HOST_WIDE_INT high,unsigned int flags)562 narrowest_signed_type (unsigned HOST_WIDE_INT low,
563 		       unsigned HOST_WIDE_INT high, unsigned int flags)
564 {
565   int itk;
566 
567   if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
568     itk = itk_int;
569   else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
570     itk = itk_long;
571   else
572     itk = itk_long_long;
573 
574 
575   for (; itk < itk_none; itk += 2 /* skip signed types */)
576     {
577       tree upper;
578 
579       if (integer_types[itk] == NULL_TREE)
580 	continue;
581       upper = TYPE_MAX_VALUE (integer_types[itk]);
582 
583       if ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) > high
584 	  || ((unsigned HOST_WIDE_INT) TREE_INT_CST_HIGH (upper) == high
585 	      && TREE_INT_CST_LOW (upper) >= low))
586 	return (enum integer_type_kind) itk;
587     }
588 
589   return itk_none;
590 }
591 
592 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib.  */
593 static tree
interpret_integer(const cpp_token * token,unsigned int flags,enum overflow_type * overflow)594 interpret_integer (const cpp_token *token, unsigned int flags,
595 		   enum overflow_type *overflow)
596 {
597   tree value, type;
598   enum integer_type_kind itk;
599   cpp_num integer;
600 
601   *overflow = OT_NONE;
602 
603   integer = cpp_interpret_integer (parse_in, token, flags);
604   if (integer.overflow)
605     *overflow = OT_OVERFLOW;
606 
607   /* The type of a constant with a U suffix is straightforward.  */
608   if (flags & CPP_N_UNSIGNED)
609     itk = narrowest_unsigned_type (integer.low, integer.high, flags);
610   else
611     {
612       /* The type of a potentially-signed integer constant varies
613 	 depending on the base it's in, the standard in use, and the
614 	 length suffixes.  */
615       enum integer_type_kind itk_u
616 	= narrowest_unsigned_type (integer.low, integer.high, flags);
617       enum integer_type_kind itk_s
618 	= narrowest_signed_type (integer.low, integer.high, flags);
619 
620       /* In both C89 and C99, octal and hex constants may be signed or
621 	 unsigned, whichever fits tighter.  We do not warn about this
622 	 choice differing from the traditional choice, as the constant
623 	 is probably a bit pattern and either way will work.  */
624       if ((flags & CPP_N_RADIX) != CPP_N_DECIMAL)
625 	itk = MIN (itk_u, itk_s);
626       else
627 	{
628 	  /* In C99, decimal constants are always signed.
629 	     In C89, decimal constants that don't fit in long have
630 	     undefined behavior; we try to make them unsigned long.
631 	     In GCC's extended C89, that last is true of decimal
632 	     constants that don't fit in long long, too.  */
633 
634 	  itk = itk_s;
635 	  if (itk_s > itk_u && itk_s > itk_long)
636 	    {
637 	      if (!flag_isoc99)
638 		{
639 		  if (itk_u < itk_unsigned_long)
640 		    itk_u = itk_unsigned_long;
641 		  itk = itk_u;
642 		  warning (0, "this decimal constant is unsigned only in ISO C90");
643 		}
644 	      else
645 		warning (OPT_Wtraditional,
646 			 "this decimal constant would be unsigned in ISO C90");
647 	    }
648 	}
649     }
650 
651   if (itk == itk_none)
652     /* cpplib has already issued a warning for overflow.  */
653     type = ((flags & CPP_N_UNSIGNED)
654 	    ? widest_unsigned_literal_type_node
655 	    : widest_integer_literal_type_node);
656   else
657     {
658       type = integer_types[itk];
659       if (itk > itk_unsigned_long
660 	  && (flags & CPP_N_WIDTH) != CPP_N_LARGE)
661 	emit_diagnostic
662 	  ((c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99)
663 	   ? DK_PEDWARN : DK_WARNING,
664 	   input_location, OPT_Wlong_long,
665 	   (flags & CPP_N_UNSIGNED)
666 	   ? "integer constant is too large for %<unsigned long%> type"
667 	   : "integer constant is too large for %<long%> type");
668     }
669 
670   value = build_int_cst_wide (type, integer.low, integer.high);
671 
672   /* Convert imaginary to a complex type.  */
673   if (flags & CPP_N_IMAGINARY)
674     value = build_complex (NULL_TREE, build_int_cst (type, 0), value);
675 
676   return value;
677 }
678 
679 /* Interpret TOKEN, a floating point number with FLAGS as classified
680    by cpplib.  For C++0X SUFFIX may contain a user-defined literal suffix.  */
681 static tree
interpret_float(const cpp_token * token,unsigned int flags,const char * suffix,enum overflow_type * overflow)682 interpret_float (const cpp_token *token, unsigned int flags,
683 		 const char *suffix, enum overflow_type *overflow)
684 {
685   tree type;
686   tree const_type;
687   tree value;
688   REAL_VALUE_TYPE real;
689   REAL_VALUE_TYPE real_trunc;
690   char *copy;
691   size_t copylen;
692 
693   *overflow = OT_NONE;
694 
695   /* Default (no suffix) depends on whether the FLOAT_CONST_DECIMAL64
696      pragma has been used and is either double or _Decimal64.  Types
697      that are not allowed with decimal float default to double.  */
698   if (flags & CPP_N_DEFAULT)
699     {
700       flags ^= CPP_N_DEFAULT;
701       flags |= CPP_N_MEDIUM;
702 
703       if (((flags & CPP_N_HEX) == 0) && ((flags & CPP_N_IMAGINARY) == 0))
704 	{
705 	  warning (OPT_Wunsuffixed_float_constants,
706 		   "unsuffixed float constant");
707 	  if (float_const_decimal64_p ())
708 	    flags |= CPP_N_DFLOAT;
709 	}
710     }
711 
712   /* Decode _Fract and _Accum.  */
713   if (flags & CPP_N_FRACT || flags & CPP_N_ACCUM)
714     return interpret_fixed (token, flags);
715 
716   /* Decode type based on width and properties. */
717   if (flags & CPP_N_DFLOAT)
718     if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
719       type = dfloat128_type_node;
720     else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
721       type = dfloat32_type_node;
722     else
723       type = dfloat64_type_node;
724   else
725     if (flags & CPP_N_WIDTH_MD)
726       {
727 	char suffix;
728 	enum machine_mode mode;
729 
730 	if ((flags & CPP_N_WIDTH_MD) == CPP_N_MD_W)
731 	  suffix = 'w';
732 	else
733 	  suffix = 'q';
734 
735 	mode = targetm.c.mode_for_suffix (suffix);
736 	if (mode == VOIDmode)
737 	  {
738 	    error ("unsupported non-standard suffix on floating constant");
739 
740 	    return error_mark_node;
741 	  }
742 	else
743 	  pedwarn (input_location, OPT_Wpedantic, "non-standard suffix on floating constant");
744 
745 	type = c_common_type_for_mode (mode, 0);
746 	gcc_assert (type);
747       }
748     else if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
749       type = long_double_type_node;
750     else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL
751 	     || flag_single_precision_constant)
752       type = float_type_node;
753     else
754       type = double_type_node;
755 
756   const_type = excess_precision_type (type);
757   if (!const_type)
758     const_type = type;
759 
760   /* Copy the constant to a nul-terminated buffer.  If the constant
761      has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF
762      can't handle them.  */
763   copylen = token->val.str.len;
764   if (flags & CPP_N_USERDEF)
765     copylen -= strlen (suffix);
766   else if (flags & CPP_N_DFLOAT)
767     copylen -= 2;
768   else
769     {
770       if ((flags & CPP_N_WIDTH) != CPP_N_MEDIUM)
771 	/* Must be an F or L or machine defined suffix.  */
772 	copylen--;
773       if (flags & CPP_N_IMAGINARY)
774 	/* I or J suffix.  */
775 	copylen--;
776     }
777 
778   copy = (char *) alloca (copylen + 1);
779   if (cxx_dialect > cxx11)
780     {
781       size_t maxlen = 0;
782       for (size_t i = 0; i < copylen; ++i)
783         if (token->val.str.text[i] != '\'')
784           copy[maxlen++] = token->val.str.text[i];
785       copy[maxlen] = '\0';
786     }
787   else
788     {
789       memcpy (copy, token->val.str.text, copylen);
790       copy[copylen] = '\0';
791     }
792 
793   real_from_string3 (&real, copy, TYPE_MODE (const_type));
794   if (const_type != type)
795     /* Diagnosing if the result of converting the value with excess
796        precision to the semantic type would overflow (with associated
797        double rounding) is more appropriate than diagnosing if the
798        result of converting the string directly to the semantic type
799        would overflow.  */
800     real_convert (&real_trunc, TYPE_MODE (type), &real);
801 
802   /* Both C and C++ require a diagnostic for a floating constant
803      outside the range of representable values of its type.  Since we
804      have __builtin_inf* to produce an infinity, this is now a
805      mandatory pedwarn if the target does not support infinities.  */
806   if (REAL_VALUE_ISINF (real)
807       || (const_type != type && REAL_VALUE_ISINF (real_trunc)))
808     {
809       *overflow = OT_OVERFLOW;
810       if (!(flags & CPP_N_USERDEF))
811 	{
812 	  if (!MODE_HAS_INFINITIES (TYPE_MODE (type)))
813 	    pedwarn (input_location, 0,
814 		     "floating constant exceeds range of %qT", type);
815 	  else
816 	    warning (OPT_Woverflow,
817 		     "floating constant exceeds range of %qT", type);
818 	}
819     }
820   /* We also give a warning if the value underflows.  */
821   else if (REAL_VALUES_EQUAL (real, dconst0)
822 	   || (const_type != type
823 	       && REAL_VALUES_EQUAL (real_trunc, dconst0)))
824     {
825       REAL_VALUE_TYPE realvoidmode;
826       int oflow = real_from_string (&realvoidmode, copy);
827       *overflow = (oflow == 0 ? OT_NONE
828 			      : (oflow < 0 ? OT_UNDERFLOW : OT_OVERFLOW));
829       if (!(flags & CPP_N_USERDEF))
830 	{
831 	  if (oflow < 0 || !REAL_VALUES_EQUAL (realvoidmode, dconst0))
832 	    warning (OPT_Woverflow, "floating constant truncated to zero");
833 	}
834     }
835 
836   /* Create a node with determined type and value.  */
837   value = build_real (const_type, real);
838   if (flags & CPP_N_IMAGINARY)
839     {
840       value = build_complex (NULL_TREE, convert (const_type,
841 						 integer_zero_node), value);
842       if (type != const_type)
843 	{
844 	  const_type = TREE_TYPE (value);
845 	  type = build_complex_type (type);
846 	}
847     }
848 
849   if (type != const_type)
850     value = build1 (EXCESS_PRECISION_EXPR, type, value);
851 
852   return value;
853 }
854 
855 /* Interpret TOKEN, a fixed-point number with FLAGS as classified
856    by cpplib.  */
857 
858 static tree
interpret_fixed(const cpp_token * token,unsigned int flags)859 interpret_fixed (const cpp_token *token, unsigned int flags)
860 {
861   tree type;
862   tree value;
863   FIXED_VALUE_TYPE fixed;
864   char *copy;
865   size_t copylen;
866 
867   copylen = token->val.str.len;
868 
869   if (flags & CPP_N_FRACT) /* _Fract.  */
870     {
871       if (flags & CPP_N_UNSIGNED) /* Unsigned _Fract.  */
872 	{
873 	  if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
874 	    {
875 	      type = unsigned_long_long_fract_type_node;
876 	      copylen -= 4;
877 	    }
878 	  else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
879 	    {
880 	      type = unsigned_long_fract_type_node;
881 	      copylen -= 3;
882 	    }
883 	  else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
884 	    {
885 	      type = unsigned_short_fract_type_node;
886 	      copylen -= 3;
887 	    }
888           else
889 	    {
890 	      type = unsigned_fract_type_node;
891 	      copylen -= 2;
892 	    }
893 	}
894       else /* Signed _Fract.  */
895 	{
896 	  if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
897 	    {
898 	      type = long_long_fract_type_node;
899 	      copylen -= 3;
900 	    }
901 	  else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
902 	    {
903 	      type = long_fract_type_node;
904 	      copylen -= 2;
905 	    }
906 	  else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
907 	    {
908 	      type = short_fract_type_node;
909 	      copylen -= 2;
910 	    }
911           else
912 	    {
913 	      type = fract_type_node;
914 	      copylen --;
915 	    }
916 	  }
917     }
918   else /* _Accum.  */
919     {
920       if (flags & CPP_N_UNSIGNED) /* Unsigned _Accum.  */
921 	{
922 	  if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
923 	    {
924 	      type = unsigned_long_long_accum_type_node;
925 	      copylen -= 4;
926 	    }
927 	  else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
928 	    {
929 	      type = unsigned_long_accum_type_node;
930 	      copylen -= 3;
931 	    }
932 	  else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
933 	    {
934 	      type = unsigned_short_accum_type_node;
935 	      copylen -= 3;
936 	     }
937 	  else
938 	    {
939 	      type = unsigned_accum_type_node;
940 	      copylen -= 2;
941 	    }
942 	}
943       else /* Signed _Accum.  */
944         {
945 	  if ((flags & CPP_N_WIDTH) == CPP_N_LARGE)
946 	    {
947 	      type = long_long_accum_type_node;
948 	      copylen -= 3;
949 	    }
950 	  else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM)
951 	    {
952 	      type = long_accum_type_node;
953 	      copylen -= 2;
954 	    }
955 	  else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL)
956 	    {
957 	      type = short_accum_type_node;
958 	      copylen -= 2;
959 	    }
960 	  else
961 	    {
962 	      type = accum_type_node;
963 	      copylen --;
964 	    }
965 	}
966     }
967 
968   copy = (char *) alloca (copylen + 1);
969   memcpy (copy, token->val.str.text, copylen);
970   copy[copylen] = '\0';
971 
972   fixed_from_string (&fixed, copy, TYPE_MODE (type));
973 
974   /* Create a node with determined type and value.  */
975   value = build_fixed (type, fixed);
976 
977   return value;
978 }
979 
980 /* Convert a series of STRING, WSTRING, STRING16, STRING32 and/or
981    UTF8STRING tokens into a tree, performing string constant
982    concatenation.  TOK is the first of these.  VALP is the location to
983    write the string into.  OBJC_STRING indicates whether an '@' token
984    preceded the incoming token (in that case, the strings can either
985    be ObjC strings, preceded by a single '@', or normal strings, not
986    preceded by '@'.  The result will be a CPP_OBJC_STRING).  Returns
987    the CPP token type of the result (CPP_STRING, CPP_WSTRING,
988    CPP_STRING32, CPP_STRING16, CPP_UTF8STRING, or CPP_OBJC_STRING).
989 
990    This is unfortunately more work than it should be.  If any of the
991    strings in the series has an L prefix, the result is a wide string
992    (6.4.5p4).  Whether or not the result is a wide string affects the
993    meaning of octal and hexadecimal escapes (6.4.4.4p6,9).  But escape
994    sequences do not continue across the boundary between two strings in
995    a series (6.4.5p7), so we must not lose the boundaries.  Therefore
996    cpp_interpret_string takes a vector of cpp_string structures, which
997    we must arrange to provide.  */
998 
999 static enum cpp_ttype
lex_string(const cpp_token * tok,tree * valp,bool objc_string,bool translate)1000 lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate)
1001 {
1002   tree value;
1003   size_t concats = 0;
1004   struct obstack str_ob;
1005   cpp_string istr;
1006   enum cpp_ttype type = tok->type;
1007 
1008   /* Try to avoid the overhead of creating and destroying an obstack
1009      for the common case of just one string.  */
1010   cpp_string str = tok->val.str;
1011   cpp_string *strs = &str;
1012 
1013   /* objc_at_sign_was_seen is only used when doing Objective-C string
1014      concatenation.  It is 'true' if we have seen an '@' before the
1015      current string, and 'false' if not.  We must see exactly one or
1016      zero '@' before each string.  */
1017   bool objc_at_sign_was_seen = false;
1018 
1019  retry:
1020   tok = cpp_get_token (parse_in);
1021   switch (tok->type)
1022     {
1023     case CPP_PADDING:
1024       goto retry;
1025     case CPP_ATSIGN:
1026       if (objc_string)
1027 	{
1028 	  if (objc_at_sign_was_seen)
1029 	    error ("repeated %<@%> before Objective-C string");
1030 
1031 	  objc_at_sign_was_seen = true;
1032 	  goto retry;
1033 	}
1034       /* FALLTHROUGH */
1035 
1036     default:
1037       break;
1038 
1039     case CPP_WSTRING:
1040     case CPP_STRING16:
1041     case CPP_STRING32:
1042     case CPP_UTF8STRING:
1043       if (type != tok->type)
1044 	{
1045 	  if (type == CPP_STRING)
1046 	    type = tok->type;
1047 	  else
1048 	    error ("unsupported non-standard concatenation of string literals");
1049 	}
1050 
1051     case CPP_STRING:
1052       if (!concats)
1053 	{
1054 	  gcc_obstack_init (&str_ob);
1055 	  obstack_grow (&str_ob, &str, sizeof (cpp_string));
1056 	}
1057 
1058       concats++;
1059       obstack_grow (&str_ob, &tok->val.str, sizeof (cpp_string));
1060       if (objc_string)
1061 	objc_at_sign_was_seen = false;
1062       goto retry;
1063     }
1064 
1065   /* It is an error if we saw a '@' with no following string.  */
1066   if (objc_at_sign_was_seen)
1067     error ("stray %<@%> in program");
1068 
1069   /* We have read one more token than we want.  */
1070   _cpp_backup_tokens (parse_in, 1);
1071   if (concats)
1072     strs = XOBFINISH (&str_ob, cpp_string *);
1073 
1074   if (concats && !objc_string && !in_system_header_at (input_location))
1075     warning (OPT_Wtraditional,
1076 	     "traditional C rejects string constant concatenation");
1077 
1078   if ((translate
1079        ? cpp_interpret_string : cpp_interpret_string_notranslate)
1080       (parse_in, strs, concats + 1, &istr, type))
1081     {
1082       value = build_string (istr.len, (const char *) istr.text);
1083       free (CONST_CAST (unsigned char *, istr.text));
1084     }
1085   else
1086     {
1087       /* Callers cannot generally handle error_mark_node in this context,
1088 	 so return the empty string instead.  cpp_interpret_string has
1089 	 issued an error.  */
1090       switch (type)
1091 	{
1092 	default:
1093 	case CPP_STRING:
1094 	case CPP_UTF8STRING:
1095 	  value = build_string (1, "");
1096 	  break;
1097 	case CPP_STRING16:
1098 	  value = build_string (TYPE_PRECISION (char16_type_node)
1099 				/ TYPE_PRECISION (char_type_node),
1100 				"\0");  /* char16_t is 16 bits */
1101 	  break;
1102 	case CPP_STRING32:
1103 	  value = build_string (TYPE_PRECISION (char32_type_node)
1104 				/ TYPE_PRECISION (char_type_node),
1105 				"\0\0\0");  /* char32_t is 32 bits */
1106 	  break;
1107 	case CPP_WSTRING:
1108 	  value = build_string (TYPE_PRECISION (wchar_type_node)
1109 				/ TYPE_PRECISION (char_type_node),
1110 				"\0\0\0");  /* widest supported wchar_t
1111 					       is 32 bits */
1112 	  break;
1113         }
1114     }
1115 
1116   switch (type)
1117     {
1118     default:
1119     case CPP_STRING:
1120     case CPP_UTF8STRING:
1121       TREE_TYPE (value) = char_array_type_node;
1122       break;
1123     case CPP_STRING16:
1124       TREE_TYPE (value) = char16_array_type_node;
1125       break;
1126     case CPP_STRING32:
1127       TREE_TYPE (value) = char32_array_type_node;
1128       break;
1129     case CPP_WSTRING:
1130       TREE_TYPE (value) = wchar_array_type_node;
1131     }
1132   *valp = fix_string_type (value);
1133 
1134   if (concats)
1135     obstack_free (&str_ob, 0);
1136 
1137   return objc_string ? CPP_OBJC_STRING : type;
1138 }
1139 
1140 /* Converts a (possibly wide) character constant token into a tree.  */
1141 static tree
lex_charconst(const cpp_token * token)1142 lex_charconst (const cpp_token *token)
1143 {
1144   cppchar_t result;
1145   tree type, value;
1146   unsigned int chars_seen;
1147   int unsignedp = 0;
1148 
1149   result = cpp_interpret_charconst (parse_in, token,
1150 				    &chars_seen, &unsignedp);
1151 
1152   if (token->type == CPP_WCHAR)
1153     type = wchar_type_node;
1154   else if (token->type == CPP_CHAR32)
1155     type = char32_type_node;
1156   else if (token->type == CPP_CHAR16)
1157     type = char16_type_node;
1158   /* In C, a character constant has type 'int'.
1159      In C++ 'char', but multi-char charconsts have type 'int'.  */
1160   else if (!c_dialect_cxx () || chars_seen > 1)
1161     type = integer_type_node;
1162   else
1163     type = char_type_node;
1164 
1165   /* Cast to cppchar_signed_t to get correct sign-extension of RESULT
1166      before possibly widening to HOST_WIDE_INT for build_int_cst.  */
1167   if (unsignedp || (cppchar_signed_t) result >= 0)
1168     value = build_int_cst_wide (type, result, 0);
1169   else
1170     value = build_int_cst_wide (type, (cppchar_signed_t) result, -1);
1171 
1172   return value;
1173 }
1174