1 /* Mainly the interface between cpplib and the C front ends. 2 Copyright (C) 1987-2018 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 "target.h" 24 #include "c-common.h" 25 #include "timevar.h" 26 #include "stringpool.h" 27 #include "stor-layout.h" 28 #include "c-pragma.h" 29 #include "debug.h" 30 #include "file-prefix-map.h" /* remap_macro_filename() */ 31 32 #include "attribs.h" 33 34 /* We may keep statistics about how long which files took to compile. */ 35 static int header_time, body_time; 36 static splay_tree file_info_tree; 37 38 int pending_lang_change; /* If we need to switch languages - C++ only */ 39 int c_header_level; /* depth in C headers - C++ only */ 40 41 static tree interpret_integer (const cpp_token *, unsigned int, 42 enum overflow_type *); 43 static tree interpret_float (const cpp_token *, unsigned int, const char *, 44 enum overflow_type *); 45 static tree interpret_fixed (const cpp_token *, unsigned int); 46 static enum integer_type_kind narrowest_unsigned_type 47 (const widest_int &, unsigned int); 48 static enum integer_type_kind narrowest_signed_type 49 (const widest_int &, unsigned int); 50 static enum cpp_ttype lex_string (const cpp_token *, tree *, bool, bool); 51 static tree lex_charconst (const cpp_token *); 52 static void update_header_times (const char *); 53 static int dump_one_header (splay_tree_node, void *); 54 static void cb_line_change (cpp_reader *, const cpp_token *, int); 55 static void cb_ident (cpp_reader *, unsigned int, const cpp_string *); 56 static void cb_def_pragma (cpp_reader *, unsigned int); 57 static void cb_define (cpp_reader *, unsigned int, cpp_hashnode *); 58 static void cb_undef (cpp_reader *, unsigned int, cpp_hashnode *); 59 60 void 61 init_c_lex (void) 62 { 63 struct cpp_callbacks *cb; 64 struct c_fileinfo *toplevel; 65 66 /* The get_fileinfo data structure must be initialized before 67 cpp_read_main_file is called. */ 68 toplevel = get_fileinfo ("<top level>"); 69 if (flag_detailed_statistics) 70 { 71 header_time = 0; 72 body_time = get_run_time (); 73 toplevel->time = body_time; 74 } 75 76 cb = cpp_get_callbacks (parse_in); 77 78 cb->line_change = cb_line_change; 79 cb->ident = cb_ident; 80 cb->def_pragma = cb_def_pragma; 81 cb->valid_pch = c_common_valid_pch; 82 cb->read_pch = c_common_read_pch; 83 cb->has_attribute = c_common_has_attribute; 84 cb->get_source_date_epoch = cb_get_source_date_epoch; 85 cb->get_suggestion = cb_get_suggestion; 86 cb->remap_filename = remap_macro_filename; 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) 107 (void (*) (void)) strcmp, 108 0, 109 (splay_tree_delete_value_fn) 110 (void (*) (void)) free); 111 112 n = splay_tree_lookup (file_info_tree, (splay_tree_key) name); 113 if (n) 114 return (struct c_fileinfo *) n->value; 115 116 fi = XNEW (struct c_fileinfo); 117 fi->time = 0; 118 fi->interface_only = 0; 119 fi->interface_unknown = 1; 120 splay_tree_insert (file_info_tree, (splay_tree_key) name, 121 (splay_tree_value) fi); 122 return fi; 123 } 124 125 static void 126 update_header_times (const char *name) 127 { 128 /* Changing files again. This means currently collected time 129 is charged against header time, and body time starts back at 0. */ 130 if (flag_detailed_statistics) 131 { 132 int this_time = get_run_time (); 133 struct c_fileinfo *file = get_fileinfo (name); 134 header_time += this_time - body_time; 135 file->time += this_time - body_time; 136 body_time = this_time; 137 } 138 } 139 140 static int 141 dump_one_header (splay_tree_node n, void * ARG_UNUSED (dummy)) 142 { 143 print_time ((const char *) n->key, 144 ((struct c_fileinfo *) n->value)->time); 145 return 0; 146 } 147 148 void 149 dump_time_statistics (void) 150 { 151 struct c_fileinfo *file = get_fileinfo (LOCATION_FILE (input_location)); 152 int this_time = get_run_time (); 153 file->time += this_time - body_time; 154 155 fprintf (stderr, "\n******\n"); 156 print_time ("header files (total)", header_time); 157 print_time ("main file (total)", this_time - body_time); 158 fprintf (stderr, "ratio = %g : 1\n", 159 (double) header_time / (double) (this_time - body_time)); 160 fprintf (stderr, "\n******\n"); 161 162 splay_tree_foreach (file_info_tree, dump_one_header, 0); 163 } 164 165 static void 166 cb_ident (cpp_reader * ARG_UNUSED (pfile), 167 unsigned int ARG_UNUSED (line), 168 const cpp_string * ARG_UNUSED (str)) 169 { 170 if (!flag_no_ident) 171 { 172 /* Convert escapes in the string. */ 173 cpp_string cstr = { 0, 0 }; 174 if (cpp_interpret_string (pfile, str, 1, &cstr, CPP_STRING)) 175 { 176 targetm.asm_out.output_ident ((const char *) cstr.text); 177 free (CONST_CAST (unsigned char *, cstr.text)); 178 } 179 } 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 line_map_ordinary *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_at (input_location)) 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 (linemap_check_ordinary (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 (linemap_check_ordinary (map), loc), 284 (const char *) NODE_NAME (node)); 285 } 286 287 /* Wrapper around cpp_get_token to skip CPP_PADDING tokens 288 and not consume CPP_EOF. */ 289 static const cpp_token * 290 get_token_no_padding (cpp_reader *pfile) 291 { 292 for (;;) 293 { 294 const cpp_token *ret = cpp_peek_token (pfile, 0); 295 if (ret->type == CPP_EOF) 296 return ret; 297 ret = cpp_get_token (pfile); 298 if (ret->type != CPP_PADDING) 299 return ret; 300 } 301 } 302 303 /* Callback for has_attribute. */ 304 int 305 c_common_has_attribute (cpp_reader *pfile) 306 { 307 int result = 0; 308 tree attr_name = NULL_TREE; 309 const cpp_token *token; 310 311 token = get_token_no_padding (pfile); 312 if (token->type != CPP_OPEN_PAREN) 313 { 314 cpp_error (pfile, CPP_DL_ERROR, 315 "missing '(' after \"__has_attribute\""); 316 return 0; 317 } 318 token = get_token_no_padding (pfile); 319 if (token->type == CPP_NAME) 320 { 321 attr_name = get_identifier ((const char *) 322 cpp_token_as_text (pfile, token)); 323 attr_name = canonicalize_attr_name (attr_name); 324 if (c_dialect_cxx ()) 325 { 326 int idx = 0; 327 const cpp_token *nxt_token; 328 do 329 nxt_token = cpp_peek_token (pfile, idx++); 330 while (nxt_token->type == CPP_PADDING); 331 if (nxt_token->type == CPP_SCOPE) 332 { 333 get_token_no_padding (pfile); // Eat scope. 334 nxt_token = get_token_no_padding (pfile); 335 if (nxt_token->type == CPP_NAME) 336 { 337 tree attr_ns = attr_name; 338 tree attr_id 339 = get_identifier ((const char *) 340 cpp_token_as_text (pfile, nxt_token)); 341 attr_name = build_tree_list (attr_ns, attr_id); 342 } 343 else 344 { 345 cpp_error (pfile, CPP_DL_ERROR, 346 "attribute identifier required after scope"); 347 attr_name = NULL_TREE; 348 } 349 } 350 else 351 { 352 /* Some standard attributes need special handling. */ 353 if (is_attribute_p ("noreturn", attr_name)) 354 result = 200809; 355 else if (is_attribute_p ("deprecated", attr_name)) 356 result = 201309; 357 else if (is_attribute_p ("maybe_unused", attr_name) 358 || is_attribute_p ("nodiscard", attr_name) 359 || is_attribute_p ("fallthrough", attr_name)) 360 result = 201603; 361 if (result) 362 attr_name = NULL_TREE; 363 } 364 } 365 if (attr_name) 366 { 367 init_attributes (); 368 const struct attribute_spec *attr = lookup_attribute_spec (attr_name); 369 if (attr) 370 result = 1; 371 } 372 } 373 else 374 { 375 cpp_error (pfile, CPP_DL_ERROR, 376 "macro \"__has_attribute\" requires an identifier"); 377 return 0; 378 } 379 380 if (get_token_no_padding (pfile)->type != CPP_CLOSE_PAREN) 381 cpp_error (pfile, CPP_DL_ERROR, 382 "missing ')' after \"__has_attribute\""); 383 384 return result; 385 } 386 387 /* Read a token and return its type. Fill *VALUE with its value, if 388 applicable. Fill *CPP_FLAGS with the token's flags, if it is 389 non-NULL. */ 390 391 enum cpp_ttype 392 c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags, 393 int lex_flags) 394 { 395 static bool no_more_pch; 396 const cpp_token *tok; 397 enum cpp_ttype type; 398 unsigned char add_flags = 0; 399 enum overflow_type overflow = OT_NONE; 400 401 timevar_push (TV_CPP); 402 retry: 403 tok = cpp_get_token_with_location (parse_in, loc); 404 type = tok->type; 405 406 retry_after_at: 407 switch (type) 408 { 409 case CPP_PADDING: 410 goto retry; 411 412 case CPP_NAME: 413 *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node.node)); 414 break; 415 416 case CPP_NUMBER: 417 { 418 const char *suffix = NULL; 419 unsigned int flags = cpp_classify_number (parse_in, tok, &suffix, *loc); 420 421 switch (flags & CPP_N_CATEGORY) 422 { 423 case CPP_N_INVALID: 424 /* cpplib has issued an error. */ 425 *value = error_mark_node; 426 break; 427 428 case CPP_N_INTEGER: 429 /* C++ uses '0' to mark virtual functions as pure. 430 Set PURE_ZERO to pass this information to the C++ parser. */ 431 if (tok->val.str.len == 1 && *tok->val.str.text == '0') 432 add_flags = PURE_ZERO; 433 *value = interpret_integer (tok, flags, &overflow); 434 break; 435 436 case CPP_N_FLOATING: 437 *value = interpret_float (tok, flags, suffix, &overflow); 438 break; 439 440 default: 441 gcc_unreachable (); 442 } 443 444 if (flags & CPP_N_USERDEF) 445 { 446 char *str; 447 tree literal; 448 tree suffix_id = get_identifier (suffix); 449 int len = tok->val.str.len - strlen (suffix); 450 /* If this is going to be used as a C string to pass to a 451 raw literal operator, we need to add a trailing NUL. */ 452 tree num_string = build_string (len + 1, 453 (const char *) tok->val.str.text); 454 TREE_TYPE (num_string) = char_array_type_node; 455 num_string = fix_string_type (num_string); 456 str = CONST_CAST (char *, TREE_STRING_POINTER (num_string)); 457 str[len] = '\0'; 458 literal = build_userdef_literal (suffix_id, *value, overflow, 459 num_string); 460 *value = literal; 461 } 462 } 463 break; 464 465 case CPP_ATSIGN: 466 /* An @ may give the next token special significance in Objective-C. */ 467 if (c_dialect_objc ()) 468 { 469 location_t atloc = *loc; 470 location_t newloc; 471 472 retry_at: 473 tok = cpp_get_token_with_location (parse_in, &newloc); 474 type = tok->type; 475 switch (type) 476 { 477 case CPP_PADDING: 478 goto retry_at; 479 480 case CPP_STRING: 481 case CPP_WSTRING: 482 case CPP_STRING16: 483 case CPP_STRING32: 484 case CPP_UTF8STRING: 485 type = lex_string (tok, value, true, true); 486 break; 487 488 case CPP_NAME: 489 *value = HT_IDENT_TO_GCC_IDENT (HT_NODE (tok->val.node.node)); 490 if (OBJC_IS_AT_KEYWORD (C_RID_CODE (*value)) 491 || OBJC_IS_CXX_KEYWORD (C_RID_CODE (*value))) 492 { 493 type = CPP_AT_NAME; 494 /* Note the complication: if we found an OBJC_CXX 495 keyword, for example, 'class', we will be 496 returning a token of type CPP_AT_NAME and rid 497 code RID_CLASS (not RID_AT_CLASS). The language 498 parser needs to convert that to RID_AT_CLASS. 499 */ 500 break; 501 } 502 /* FALLTHROUGH */ 503 504 default: 505 /* ... or not. */ 506 error_at (atloc, "stray %<@%> in program"); 507 *loc = newloc; 508 goto retry_after_at; 509 } 510 break; 511 } 512 513 /* FALLTHROUGH */ 514 case CPP_HASH: 515 case CPP_PASTE: 516 { 517 unsigned char name[8]; 518 519 *cpp_spell_token (parse_in, tok, name, true) = 0; 520 521 error_at (*loc, "stray %qs in program", name); 522 } 523 524 goto retry; 525 526 case CPP_OTHER: 527 { 528 cppchar_t c = tok->val.str.text[0]; 529 530 if (c == '"' || c == '\'') 531 error_at (*loc, "missing terminating %c character", (int) c); 532 else if (ISGRAPH (c)) 533 error_at (*loc, "stray %qc in program", (int) c); 534 else 535 error_at (*loc, "stray %<\\%o%> in program", (int) c); 536 } 537 goto retry; 538 539 case CPP_CHAR_USERDEF: 540 case CPP_WCHAR_USERDEF: 541 case CPP_CHAR16_USERDEF: 542 case CPP_CHAR32_USERDEF: 543 case CPP_UTF8CHAR_USERDEF: 544 { 545 tree literal; 546 cpp_token temp_tok = *tok; 547 const char *suffix = cpp_get_userdef_suffix (tok); 548 temp_tok.val.str.len -= strlen (suffix); 549 temp_tok.type = cpp_userdef_char_remove_type (type); 550 literal = build_userdef_literal (get_identifier (suffix), 551 lex_charconst (&temp_tok), 552 OT_NONE, NULL_TREE); 553 *value = literal; 554 } 555 break; 556 557 case CPP_CHAR: 558 case CPP_WCHAR: 559 case CPP_CHAR16: 560 case CPP_CHAR32: 561 case CPP_UTF8CHAR: 562 *value = lex_charconst (tok); 563 break; 564 565 case CPP_STRING_USERDEF: 566 case CPP_WSTRING_USERDEF: 567 case CPP_STRING16_USERDEF: 568 case CPP_STRING32_USERDEF: 569 case CPP_UTF8STRING_USERDEF: 570 { 571 tree literal, string; 572 const char *suffix = cpp_get_userdef_suffix (tok); 573 string = build_string (tok->val.str.len - strlen (suffix), 574 (const char *) tok->val.str.text); 575 literal = build_userdef_literal (get_identifier (suffix), 576 string, OT_NONE, NULL_TREE); 577 *value = literal; 578 } 579 break; 580 581 case CPP_STRING: 582 case CPP_WSTRING: 583 case CPP_STRING16: 584 case CPP_STRING32: 585 case CPP_UTF8STRING: 586 if ((lex_flags & C_LEX_STRING_NO_JOIN) == 0) 587 { 588 type = lex_string (tok, value, false, 589 (lex_flags & C_LEX_STRING_NO_TRANSLATE) == 0); 590 break; 591 } 592 *value = build_string (tok->val.str.len, (const char *) tok->val.str.text); 593 break; 594 595 case CPP_PRAGMA: 596 *value = build_int_cst (integer_type_node, tok->val.pragma); 597 break; 598 599 /* These tokens should not be visible outside cpplib. */ 600 case CPP_HEADER_NAME: 601 case CPP_MACRO_ARG: 602 gcc_unreachable (); 603 604 /* CPP_COMMENT will appear when compiling with -C. Ignore, except 605 when it is a FALLTHROUGH comment, in that case set 606 PREV_FALLTHROUGH flag on the next non-comment token. */ 607 case CPP_COMMENT: 608 if (tok->flags & PREV_FALLTHROUGH) 609 { 610 do 611 { 612 tok = cpp_get_token_with_location (parse_in, loc); 613 type = tok->type; 614 } 615 while (type == CPP_PADDING || type == CPP_COMMENT); 616 add_flags |= PREV_FALLTHROUGH; 617 goto retry_after_at; 618 } 619 goto retry; 620 621 default: 622 *value = NULL_TREE; 623 break; 624 } 625 626 if (cpp_flags) 627 *cpp_flags = tok->flags | add_flags; 628 629 if (!no_more_pch) 630 { 631 no_more_pch = true; 632 c_common_no_more_pch (); 633 } 634 635 timevar_pop (TV_CPP); 636 637 return type; 638 } 639 640 /* Returns the narrowest C-visible unsigned type, starting with the 641 minimum specified by FLAGS, that can fit HIGH:LOW, or itk_none if 642 there isn't one. */ 643 644 static enum integer_type_kind 645 narrowest_unsigned_type (const widest_int &val, unsigned int flags) 646 { 647 int itk; 648 649 if ((flags & CPP_N_WIDTH) == CPP_N_SMALL) 650 itk = itk_unsigned_int; 651 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM) 652 itk = itk_unsigned_long; 653 else 654 itk = itk_unsigned_long_long; 655 656 for (; itk < itk_none; itk += 2 /* skip unsigned types */) 657 { 658 tree upper; 659 660 if (integer_types[itk] == NULL_TREE) 661 continue; 662 upper = TYPE_MAX_VALUE (integer_types[itk]); 663 664 if (wi::geu_p (wi::to_widest (upper), val)) 665 return (enum integer_type_kind) itk; 666 } 667 668 return itk_none; 669 } 670 671 /* Ditto, but narrowest signed type. */ 672 static enum integer_type_kind 673 narrowest_signed_type (const widest_int &val, unsigned int flags) 674 { 675 int itk; 676 677 if ((flags & CPP_N_WIDTH) == CPP_N_SMALL) 678 itk = itk_int; 679 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM) 680 itk = itk_long; 681 else 682 itk = itk_long_long; 683 684 for (; itk < itk_none; itk += 2 /* skip signed types */) 685 { 686 tree upper; 687 688 if (integer_types[itk] == NULL_TREE) 689 continue; 690 upper = TYPE_MAX_VALUE (integer_types[itk]); 691 692 if (wi::geu_p (wi::to_widest (upper), val)) 693 return (enum integer_type_kind) itk; 694 } 695 696 return itk_none; 697 } 698 699 /* Interpret TOKEN, an integer with FLAGS as classified by cpplib. */ 700 static tree 701 interpret_integer (const cpp_token *token, unsigned int flags, 702 enum overflow_type *overflow) 703 { 704 tree value, type; 705 enum integer_type_kind itk; 706 cpp_num integer; 707 HOST_WIDE_INT ival[3]; 708 709 *overflow = OT_NONE; 710 711 integer = cpp_interpret_integer (parse_in, token, flags); 712 if (integer.overflow) 713 *overflow = OT_OVERFLOW; 714 715 ival[0] = integer.low; 716 ival[1] = integer.high; 717 ival[2] = 0; 718 widest_int wval = widest_int::from_array (ival, 3); 719 720 /* The type of a constant with a U suffix is straightforward. */ 721 if (flags & CPP_N_UNSIGNED) 722 itk = narrowest_unsigned_type (wval, flags); 723 else 724 { 725 /* The type of a potentially-signed integer constant varies 726 depending on the base it's in, the standard in use, and the 727 length suffixes. */ 728 enum integer_type_kind itk_u 729 = narrowest_unsigned_type (wval, flags); 730 enum integer_type_kind itk_s 731 = narrowest_signed_type (wval, flags); 732 733 /* In both C89 and C99, octal and hex constants may be signed or 734 unsigned, whichever fits tighter. We do not warn about this 735 choice differing from the traditional choice, as the constant 736 is probably a bit pattern and either way will work. */ 737 if ((flags & CPP_N_RADIX) != CPP_N_DECIMAL) 738 itk = MIN (itk_u, itk_s); 739 else 740 { 741 /* In C99, decimal constants are always signed. 742 In C89, decimal constants that don't fit in long have 743 undefined behavior; we try to make them unsigned long. 744 In GCC's extended C89, that last is true of decimal 745 constants that don't fit in long long, too. */ 746 747 itk = itk_s; 748 if (itk_s > itk_u && itk_s > itk_long) 749 { 750 if (!flag_isoc99) 751 { 752 if (itk_u < itk_unsigned_long) 753 itk_u = itk_unsigned_long; 754 itk = itk_u; 755 warning (0, "this decimal constant is unsigned only in ISO C90"); 756 } 757 else 758 warning (OPT_Wtraditional, 759 "this decimal constant would be unsigned in ISO C90"); 760 } 761 } 762 } 763 764 if (itk == itk_none) 765 /* cpplib has already issued a warning for overflow. */ 766 type = ((flags & CPP_N_UNSIGNED) 767 ? widest_unsigned_literal_type_node 768 : widest_integer_literal_type_node); 769 else 770 { 771 type = integer_types[itk]; 772 if (itk > itk_unsigned_long 773 && (flags & CPP_N_WIDTH) != CPP_N_LARGE) 774 emit_diagnostic 775 ((c_dialect_cxx () ? cxx_dialect == cxx98 : !flag_isoc99) 776 ? DK_PEDWARN : DK_WARNING, 777 input_location, OPT_Wlong_long, 778 (flags & CPP_N_UNSIGNED) 779 ? "integer constant is too large for %<unsigned long%> type" 780 : "integer constant is too large for %<long%> type"); 781 } 782 783 value = wide_int_to_tree (type, wval); 784 785 /* Convert imaginary to a complex type. */ 786 if (flags & CPP_N_IMAGINARY) 787 value = build_complex (NULL_TREE, build_int_cst (type, 0), value); 788 789 return value; 790 } 791 792 /* Interpret TOKEN, a floating point number with FLAGS as classified 793 by cpplib. For C++11 SUFFIX may contain a user-defined literal suffix. */ 794 static tree 795 interpret_float (const cpp_token *token, unsigned int flags, 796 const char *suffix, enum overflow_type *overflow) 797 { 798 tree type; 799 tree const_type; 800 tree value; 801 REAL_VALUE_TYPE real; 802 REAL_VALUE_TYPE real_trunc; 803 char *copy; 804 size_t copylen; 805 806 *overflow = OT_NONE; 807 808 /* Default (no suffix) depends on whether the FLOAT_CONST_DECIMAL64 809 pragma has been used and is either double or _Decimal64. Types 810 that are not allowed with decimal float default to double. */ 811 if (flags & CPP_N_DEFAULT) 812 { 813 flags ^= CPP_N_DEFAULT; 814 flags |= CPP_N_MEDIUM; 815 816 if (((flags & CPP_N_HEX) == 0) && ((flags & CPP_N_IMAGINARY) == 0)) 817 { 818 warning (OPT_Wunsuffixed_float_constants, 819 "unsuffixed float constant"); 820 if (float_const_decimal64_p ()) 821 flags |= CPP_N_DFLOAT; 822 } 823 } 824 825 /* Decode _Fract and _Accum. */ 826 if (flags & CPP_N_FRACT || flags & CPP_N_ACCUM) 827 return interpret_fixed (token, flags); 828 829 /* Decode type based on width and properties. */ 830 if (flags & CPP_N_DFLOAT) 831 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE) 832 type = dfloat128_type_node; 833 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL) 834 type = dfloat32_type_node; 835 else 836 type = dfloat64_type_node; 837 else 838 if (flags & CPP_N_WIDTH_MD) 839 { 840 char suffix; 841 machine_mode mode; 842 843 if ((flags & CPP_N_WIDTH_MD) == CPP_N_MD_W) 844 suffix = 'w'; 845 else 846 suffix = 'q'; 847 848 mode = targetm.c.mode_for_suffix (suffix); 849 if (mode == VOIDmode) 850 { 851 error ("unsupported non-standard suffix on floating constant"); 852 853 return error_mark_node; 854 } 855 else 856 pedwarn (input_location, OPT_Wpedantic, "non-standard suffix on floating constant"); 857 858 type = c_common_type_for_mode (mode, 0); 859 gcc_assert (type); 860 } 861 else if ((flags & (CPP_N_FLOATN | CPP_N_FLOATNX)) != 0) 862 { 863 unsigned int n = (flags & CPP_N_WIDTH_FLOATN_NX) >> CPP_FLOATN_SHIFT; 864 bool extended = (flags & CPP_N_FLOATNX) != 0; 865 type = NULL_TREE; 866 for (int i = 0; i < NUM_FLOATN_NX_TYPES; i++) 867 if (floatn_nx_types[i].n == (int) n 868 && floatn_nx_types[i].extended == extended) 869 { 870 type = FLOATN_NX_TYPE_NODE (i); 871 break; 872 } 873 if (type == NULL_TREE) 874 { 875 error ("unsupported non-standard suffix on floating constant"); 876 return error_mark_node; 877 } 878 else 879 pedwarn (input_location, OPT_Wpedantic, "non-standard suffix on floating constant"); 880 } 881 else if ((flags & CPP_N_WIDTH) == CPP_N_LARGE) 882 type = long_double_type_node; 883 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL 884 || flag_single_precision_constant) 885 type = float_type_node; 886 else 887 type = double_type_node; 888 889 const_type = excess_precision_type (type); 890 if (!const_type) 891 const_type = type; 892 893 /* Copy the constant to a nul-terminated buffer. If the constant 894 has any suffixes, cut them off; REAL_VALUE_ATOF/ REAL_VALUE_HTOF 895 can't handle them. */ 896 copylen = token->val.str.len; 897 if (flags & CPP_N_USERDEF) 898 copylen -= strlen (suffix); 899 else if (flags & CPP_N_DFLOAT) 900 copylen -= 2; 901 else 902 { 903 if ((flags & CPP_N_WIDTH) != CPP_N_MEDIUM) 904 /* Must be an F or L or machine defined suffix. */ 905 copylen--; 906 if (flags & CPP_N_IMAGINARY) 907 /* I or J suffix. */ 908 copylen--; 909 if (flags & CPP_N_FLOATNX) 910 copylen--; 911 if (flags & (CPP_N_FLOATN | CPP_N_FLOATNX)) 912 { 913 unsigned int n = (flags & CPP_N_WIDTH_FLOATN_NX) >> CPP_FLOATN_SHIFT; 914 while (n > 0) 915 { 916 copylen--; 917 n /= 10; 918 } 919 } 920 } 921 922 copy = (char *) alloca (copylen + 1); 923 if (cxx_dialect > cxx11) 924 { 925 size_t maxlen = 0; 926 for (size_t i = 0; i < copylen; ++i) 927 if (token->val.str.text[i] != '\'') 928 copy[maxlen++] = token->val.str.text[i]; 929 copy[maxlen] = '\0'; 930 } 931 else 932 { 933 memcpy (copy, token->val.str.text, copylen); 934 copy[copylen] = '\0'; 935 } 936 937 real_from_string3 (&real, copy, TYPE_MODE (const_type)); 938 if (const_type != type) 939 /* Diagnosing if the result of converting the value with excess 940 precision to the semantic type would overflow (with associated 941 double rounding) is more appropriate than diagnosing if the 942 result of converting the string directly to the semantic type 943 would overflow. */ 944 real_convert (&real_trunc, TYPE_MODE (type), &real); 945 946 /* Both C and C++ require a diagnostic for a floating constant 947 outside the range of representable values of its type. Since we 948 have __builtin_inf* to produce an infinity, this is now a 949 mandatory pedwarn if the target does not support infinities. */ 950 if (REAL_VALUE_ISINF (real) 951 || (const_type != type && REAL_VALUE_ISINF (real_trunc))) 952 { 953 *overflow = OT_OVERFLOW; 954 if (!(flags & CPP_N_USERDEF)) 955 { 956 if (!MODE_HAS_INFINITIES (TYPE_MODE (type))) 957 pedwarn (input_location, 0, 958 "floating constant exceeds range of %qT", type); 959 else 960 warning (OPT_Woverflow, 961 "floating constant exceeds range of %qT", type); 962 } 963 } 964 /* We also give a warning if the value underflows. */ 965 else if (real_equal (&real, &dconst0) 966 || (const_type != type 967 && real_equal (&real_trunc, &dconst0))) 968 { 969 REAL_VALUE_TYPE realvoidmode; 970 int oflow = real_from_string (&realvoidmode, copy); 971 *overflow = (oflow == 0 ? OT_NONE 972 : (oflow < 0 ? OT_UNDERFLOW : OT_OVERFLOW)); 973 if (!(flags & CPP_N_USERDEF)) 974 { 975 if (oflow < 0 || !real_equal (&realvoidmode, &dconst0)) 976 warning (OPT_Woverflow, "floating constant truncated to zero"); 977 } 978 } 979 980 /* Create a node with determined type and value. */ 981 value = build_real (const_type, real); 982 if (flags & CPP_N_IMAGINARY) 983 { 984 value = build_complex (NULL_TREE, 985 fold_convert (const_type, 986 integer_zero_node), value); 987 if (type != const_type) 988 { 989 const_type = TREE_TYPE (value); 990 type = build_complex_type (type); 991 } 992 } 993 994 if (type != const_type) 995 value = build1_loc (token->src_loc, EXCESS_PRECISION_EXPR, type, value); 996 997 return value; 998 } 999 1000 /* Interpret TOKEN, a fixed-point number with FLAGS as classified 1001 by cpplib. */ 1002 1003 static tree 1004 interpret_fixed (const cpp_token *token, unsigned int flags) 1005 { 1006 tree type; 1007 tree value; 1008 FIXED_VALUE_TYPE fixed; 1009 char *copy; 1010 size_t copylen; 1011 1012 copylen = token->val.str.len; 1013 1014 if (flags & CPP_N_FRACT) /* _Fract. */ 1015 { 1016 if (flags & CPP_N_UNSIGNED) /* Unsigned _Fract. */ 1017 { 1018 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE) 1019 { 1020 type = unsigned_long_long_fract_type_node; 1021 copylen -= 4; 1022 } 1023 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM) 1024 { 1025 type = unsigned_long_fract_type_node; 1026 copylen -= 3; 1027 } 1028 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL) 1029 { 1030 type = unsigned_short_fract_type_node; 1031 copylen -= 3; 1032 } 1033 else 1034 { 1035 type = unsigned_fract_type_node; 1036 copylen -= 2; 1037 } 1038 } 1039 else /* Signed _Fract. */ 1040 { 1041 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE) 1042 { 1043 type = long_long_fract_type_node; 1044 copylen -= 3; 1045 } 1046 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM) 1047 { 1048 type = long_fract_type_node; 1049 copylen -= 2; 1050 } 1051 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL) 1052 { 1053 type = short_fract_type_node; 1054 copylen -= 2; 1055 } 1056 else 1057 { 1058 type = fract_type_node; 1059 copylen --; 1060 } 1061 } 1062 } 1063 else /* _Accum. */ 1064 { 1065 if (flags & CPP_N_UNSIGNED) /* Unsigned _Accum. */ 1066 { 1067 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE) 1068 { 1069 type = unsigned_long_long_accum_type_node; 1070 copylen -= 4; 1071 } 1072 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM) 1073 { 1074 type = unsigned_long_accum_type_node; 1075 copylen -= 3; 1076 } 1077 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL) 1078 { 1079 type = unsigned_short_accum_type_node; 1080 copylen -= 3; 1081 } 1082 else 1083 { 1084 type = unsigned_accum_type_node; 1085 copylen -= 2; 1086 } 1087 } 1088 else /* Signed _Accum. */ 1089 { 1090 if ((flags & CPP_N_WIDTH) == CPP_N_LARGE) 1091 { 1092 type = long_long_accum_type_node; 1093 copylen -= 3; 1094 } 1095 else if ((flags & CPP_N_WIDTH) == CPP_N_MEDIUM) 1096 { 1097 type = long_accum_type_node; 1098 copylen -= 2; 1099 } 1100 else if ((flags & CPP_N_WIDTH) == CPP_N_SMALL) 1101 { 1102 type = short_accum_type_node; 1103 copylen -= 2; 1104 } 1105 else 1106 { 1107 type = accum_type_node; 1108 copylen --; 1109 } 1110 } 1111 } 1112 1113 copy = (char *) alloca (copylen + 1); 1114 memcpy (copy, token->val.str.text, copylen); 1115 copy[copylen] = '\0'; 1116 1117 fixed_from_string (&fixed, copy, SCALAR_TYPE_MODE (type)); 1118 1119 /* Create a node with determined type and value. */ 1120 value = build_fixed (type, fixed); 1121 1122 return value; 1123 } 1124 1125 /* Convert a series of STRING, WSTRING, STRING16, STRING32 and/or 1126 UTF8STRING tokens into a tree, performing string constant 1127 concatenation. TOK is the first of these. VALP is the location to 1128 write the string into. OBJC_STRING indicates whether an '@' token 1129 preceded the incoming token (in that case, the strings can either 1130 be ObjC strings, preceded by a single '@', or normal strings, not 1131 preceded by '@'. The result will be a CPP_OBJC_STRING). Returns 1132 the CPP token type of the result (CPP_STRING, CPP_WSTRING, 1133 CPP_STRING32, CPP_STRING16, CPP_UTF8STRING, or CPP_OBJC_STRING). 1134 1135 This is unfortunately more work than it should be. If any of the 1136 strings in the series has an L prefix, the result is a wide string 1137 (6.4.5p4). Whether or not the result is a wide string affects the 1138 meaning of octal and hexadecimal escapes (6.4.4.4p6,9). But escape 1139 sequences do not continue across the boundary between two strings in 1140 a series (6.4.5p7), so we must not lose the boundaries. Therefore 1141 cpp_interpret_string takes a vector of cpp_string structures, which 1142 we must arrange to provide. */ 1143 1144 static enum cpp_ttype 1145 lex_string (const cpp_token *tok, tree *valp, bool objc_string, bool translate) 1146 { 1147 tree value; 1148 size_t concats = 0; 1149 struct obstack str_ob; 1150 struct obstack loc_ob; 1151 cpp_string istr; 1152 enum cpp_ttype type = tok->type; 1153 1154 /* Try to avoid the overhead of creating and destroying an obstack 1155 for the common case of just one string. */ 1156 cpp_string str = tok->val.str; 1157 location_t init_loc = tok->src_loc; 1158 cpp_string *strs = &str; 1159 location_t *locs = NULL; 1160 1161 /* objc_at_sign_was_seen is only used when doing Objective-C string 1162 concatenation. It is 'true' if we have seen an '@' before the 1163 current string, and 'false' if not. We must see exactly one or 1164 zero '@' before each string. */ 1165 bool objc_at_sign_was_seen = false; 1166 1167 retry: 1168 tok = cpp_get_token (parse_in); 1169 switch (tok->type) 1170 { 1171 case CPP_PADDING: 1172 goto retry; 1173 case CPP_ATSIGN: 1174 if (objc_string) 1175 { 1176 if (objc_at_sign_was_seen) 1177 error ("repeated %<@%> before Objective-C string"); 1178 1179 objc_at_sign_was_seen = true; 1180 goto retry; 1181 } 1182 /* FALLTHROUGH */ 1183 1184 default: 1185 break; 1186 1187 case CPP_WSTRING: 1188 case CPP_STRING16: 1189 case CPP_STRING32: 1190 case CPP_UTF8STRING: 1191 if (type != tok->type) 1192 { 1193 if (type == CPP_STRING) 1194 type = tok->type; 1195 else 1196 error ("unsupported non-standard concatenation of string literals"); 1197 } 1198 /* FALLTHROUGH */ 1199 1200 case CPP_STRING: 1201 if (!concats) 1202 { 1203 gcc_obstack_init (&str_ob); 1204 gcc_obstack_init (&loc_ob); 1205 obstack_grow (&str_ob, &str, sizeof (cpp_string)); 1206 obstack_grow (&loc_ob, &init_loc, sizeof (location_t)); 1207 } 1208 1209 concats++; 1210 obstack_grow (&str_ob, &tok->val.str, sizeof (cpp_string)); 1211 obstack_grow (&loc_ob, &tok->src_loc, sizeof (location_t)); 1212 1213 if (objc_string) 1214 objc_at_sign_was_seen = false; 1215 goto retry; 1216 } 1217 1218 /* It is an error if we saw a '@' with no following string. */ 1219 if (objc_at_sign_was_seen) 1220 error ("stray %<@%> in program"); 1221 1222 /* We have read one more token than we want. */ 1223 _cpp_backup_tokens (parse_in, 1); 1224 if (concats) 1225 { 1226 strs = XOBFINISH (&str_ob, cpp_string *); 1227 locs = XOBFINISH (&loc_ob, location_t *); 1228 } 1229 1230 if (concats && !objc_string && !in_system_header_at (input_location)) 1231 warning (OPT_Wtraditional, 1232 "traditional C rejects string constant concatenation"); 1233 1234 if ((translate 1235 ? cpp_interpret_string : cpp_interpret_string_notranslate) 1236 (parse_in, strs, concats + 1, &istr, type)) 1237 { 1238 value = build_string (istr.len, (const char *) istr.text); 1239 free (CONST_CAST (unsigned char *, istr.text)); 1240 if (concats) 1241 { 1242 gcc_assert (locs); 1243 gcc_assert (g_string_concat_db); 1244 g_string_concat_db->record_string_concatenation (concats + 1, locs); 1245 } 1246 } 1247 else 1248 { 1249 /* Callers cannot generally handle error_mark_node in this context, 1250 so return the empty string instead. cpp_interpret_string has 1251 issued an error. */ 1252 switch (type) 1253 { 1254 default: 1255 case CPP_STRING: 1256 case CPP_UTF8STRING: 1257 value = build_string (1, ""); 1258 break; 1259 case CPP_STRING16: 1260 value = build_string (TYPE_PRECISION (char16_type_node) 1261 / TYPE_PRECISION (char_type_node), 1262 "\0"); /* char16_t is 16 bits */ 1263 break; 1264 case CPP_STRING32: 1265 value = build_string (TYPE_PRECISION (char32_type_node) 1266 / TYPE_PRECISION (char_type_node), 1267 "\0\0\0"); /* char32_t is 32 bits */ 1268 break; 1269 case CPP_WSTRING: 1270 value = build_string (TYPE_PRECISION (wchar_type_node) 1271 / TYPE_PRECISION (char_type_node), 1272 "\0\0\0"); /* widest supported wchar_t 1273 is 32 bits */ 1274 break; 1275 } 1276 } 1277 1278 switch (type) 1279 { 1280 default: 1281 case CPP_STRING: 1282 case CPP_UTF8STRING: 1283 TREE_TYPE (value) = char_array_type_node; 1284 break; 1285 case CPP_STRING16: 1286 TREE_TYPE (value) = char16_array_type_node; 1287 break; 1288 case CPP_STRING32: 1289 TREE_TYPE (value) = char32_array_type_node; 1290 break; 1291 case CPP_WSTRING: 1292 TREE_TYPE (value) = wchar_array_type_node; 1293 } 1294 *valp = fix_string_type (value); 1295 1296 if (concats) 1297 { 1298 obstack_free (&str_ob, 0); 1299 obstack_free (&loc_ob, 0); 1300 } 1301 1302 return objc_string ? CPP_OBJC_STRING : type; 1303 } 1304 1305 /* Converts a (possibly wide) character constant token into a tree. */ 1306 static tree 1307 lex_charconst (const cpp_token *token) 1308 { 1309 cppchar_t result; 1310 tree type, value; 1311 unsigned int chars_seen; 1312 int unsignedp = 0; 1313 1314 result = cpp_interpret_charconst (parse_in, token, 1315 &chars_seen, &unsignedp); 1316 1317 if (token->type == CPP_WCHAR) 1318 type = wchar_type_node; 1319 else if (token->type == CPP_CHAR32) 1320 type = char32_type_node; 1321 else if (token->type == CPP_CHAR16) 1322 type = char16_type_node; 1323 else if (token->type == CPP_UTF8CHAR) 1324 type = char_type_node; 1325 /* In C, a character constant has type 'int'. 1326 In C++ 'char', but multi-char charconsts have type 'int'. */ 1327 else if (!c_dialect_cxx () || chars_seen > 1) 1328 type = integer_type_node; 1329 else 1330 type = char_type_node; 1331 1332 /* Cast to cppchar_signed_t to get correct sign-extension of RESULT 1333 before possibly widening to HOST_WIDE_INT for build_int_cst. */ 1334 if (unsignedp || (cppchar_signed_t) result >= 0) 1335 value = build_int_cst (type, result); 1336 else 1337 value = build_int_cst (type, (cppchar_signed_t) result); 1338 1339 return value; 1340 } 1341 1342 /* Helper function for c_parser_peek_conflict_marker 1343 and cp_lexer_peek_conflict_marker. 1344 Given a possible conflict marker token of kind TOK1_KIND 1345 consisting of a pair of characters, get the token kind for the 1346 standalone final character. */ 1347 1348 enum cpp_ttype 1349 conflict_marker_get_final_tok_kind (enum cpp_ttype tok1_kind) 1350 { 1351 switch (tok1_kind) 1352 { 1353 default: gcc_unreachable (); 1354 case CPP_LSHIFT: 1355 /* "<<" and '<' */ 1356 return CPP_LESS; 1357 1358 case CPP_EQ_EQ: 1359 /* "==" and '=' */ 1360 return CPP_EQ; 1361 1362 case CPP_RSHIFT: 1363 /* ">>" and '>' */ 1364 return CPP_GREATER; 1365 } 1366 } 1367