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