1 /* Process declarations and variables for C++ compiler. 2 Copyright (C) 1988-2018 Free Software Foundation, Inc. 3 Contributed by Michael Tiemann (tiemann@cygnus.com) 4 5 This file is part of GCC. 6 7 GCC is free software; you can redistribute it and/or modify 8 it under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3, or (at your option) 10 any later version. 11 12 GCC is distributed in the hope that it will be useful, 13 but WITHOUT ANY WARRANTY; without even the implied warranty of 14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 GNU General Public License for more details. 16 17 You should have received a copy of the GNU General Public License 18 along with GCC; see the file COPYING3. If not see 19 <http://www.gnu.org/licenses/>. */ 20 21 22 /* Process declarations and symbol lookup for C++ front end. 23 Also constructs types; the standard scalar types at initialization, 24 and structure, union, array and enum types when they are declared. */ 25 26 /* ??? not all decl nodes are given the most useful possible 27 line numbers. For example, the CONST_DECLs for enum values. */ 28 29 #include "config.h" 30 #include "system.h" 31 #include "coretypes.h" 32 #include "target.h" 33 #include "c-family/c-target.h" 34 #include "cp-tree.h" 35 #include "timevar.h" 36 #include "stringpool.h" 37 #include "cgraph.h" 38 #include "stor-layout.h" 39 #include "varasm.h" 40 #include "attribs.h" 41 #include "flags.h" 42 #include "tree-iterator.h" 43 #include "decl.h" 44 #include "intl.h" 45 #include "toplev.h" 46 #include "c-family/c-objc.h" 47 #include "c-family/c-pragma.h" 48 #include "c-family/c-ubsan.h" 49 #include "debug.h" 50 #include "plugin.h" 51 #include "builtins.h" 52 #include "gimplify.h" 53 #include "asan.h" 54 55 /* Possible cases of bad specifiers type used by bad_specifiers. */ 56 enum bad_spec_place { 57 BSP_VAR, /* variable */ 58 BSP_PARM, /* parameter */ 59 BSP_TYPE, /* type */ 60 BSP_FIELD /* field */ 61 }; 62 63 static const char *redeclaration_error_message (tree, tree); 64 65 static int decl_jump_unsafe (tree); 66 static void require_complete_types_for_parms (tree); 67 static void push_local_name (tree); 68 static tree grok_reference_init (tree, tree, tree, int); 69 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *, 70 int, int, int, bool, int, tree); 71 static int check_static_variable_definition (tree, tree); 72 static void record_unknown_type (tree, const char *); 73 static tree builtin_function_1 (tree, tree, bool); 74 static int member_function_or_else (tree, tree, enum overload_flags); 75 static tree local_variable_p_walkfn (tree *, int *, void *); 76 static const char *tag_name (enum tag_types); 77 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool); 78 static void maybe_deduce_size_from_array_init (tree, tree); 79 static void layout_var_decl (tree); 80 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **); 81 static void make_rtl_for_nonlocal_decl (tree, tree, const char *); 82 static void save_function_data (tree); 83 static void copy_type_enum (tree , tree); 84 static void check_function_type (tree, tree); 85 static void finish_constructor_body (void); 86 static void begin_destructor_body (void); 87 static void finish_destructor_body (void); 88 static void record_key_method_defined (tree); 89 static tree create_array_type_for_decl (tree, tree, tree); 90 static tree get_atexit_node (void); 91 static tree get_dso_handle_node (void); 92 static tree start_cleanup_fn (void); 93 static void end_cleanup_fn (void); 94 static tree cp_make_fname_decl (location_t, tree, int); 95 static void initialize_predefined_identifiers (void); 96 static tree check_special_function_return_type 97 (special_function_kind, tree, tree, int, const location_t*); 98 static tree push_cp_library_fn (enum tree_code, tree, int); 99 static tree build_cp_library_fn (tree, enum tree_code, tree, int); 100 static void store_parm_decls (tree); 101 static void initialize_local_var (tree, tree); 102 static void expand_static_init (tree, tree); 103 104 /* The following symbols are subsumed in the cp_global_trees array, and 105 listed here individually for documentation purposes. 106 107 C++ extensions 108 tree wchar_decl_node; 109 110 tree vtable_entry_type; 111 tree delta_type_node; 112 tree __t_desc_type_node; 113 114 tree class_type_node; 115 tree unknown_type_node; 116 117 Array type `vtable_entry_type[]' 118 119 tree vtbl_type_node; 120 tree vtbl_ptr_type_node; 121 122 Namespaces, 123 124 tree std_node; 125 tree abi_node; 126 127 A FUNCTION_DECL which can call `abort'. Not necessarily the 128 one that the user will declare, but sufficient to be called 129 by routines that want to abort the program. 130 131 tree abort_fndecl; 132 133 Used by RTTI 134 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type; 135 tree tinfo_var_id; */ 136 137 tree cp_global_trees[CPTI_MAX]; 138 139 #define local_names cp_function_chain->x_local_names 140 141 /* A list of objects which have constructors or destructors 142 which reside in the global scope. The decl is stored in 143 the TREE_VALUE slot and the initializer is stored 144 in the TREE_PURPOSE slot. */ 145 tree static_aggregates; 146 147 /* Like static_aggregates, but for thread_local variables. */ 148 tree tls_aggregates; 149 150 /* -- end of C++ */ 151 152 /* A node for the integer constant 2. */ 153 154 tree integer_two_node; 155 156 /* vector of static decls. */ 157 vec<tree, va_gc> *static_decls; 158 159 /* vector of keyed classes. */ 160 vec<tree, va_gc> *keyed_classes; 161 162 /* Used only for jumps to as-yet undefined labels, since jumps to 163 defined labels can have their validity checked immediately. */ 164 165 struct GTY((chain_next ("%h.next"))) named_label_use_entry { 166 struct named_label_use_entry *next; 167 /* The binding level to which this entry is *currently* attached. 168 This is initially the binding level in which the goto appeared, 169 but is modified as scopes are closed. */ 170 cp_binding_level *binding_level; 171 /* The head of the names list that was current when the goto appeared, 172 or the inner scope popped. These are the decls that will *not* be 173 skipped when jumping to the label. */ 174 tree names_in_scope; 175 /* The location of the goto, for error reporting. */ 176 location_t o_goto_locus; 177 /* True if an OpenMP structured block scope has been closed since 178 the goto appeared. This means that the branch from the label will 179 illegally exit an OpenMP scope. */ 180 bool in_omp_scope; 181 }; 182 183 /* A list of all LABEL_DECLs in the function that have names. Here so 184 we can clear out their names' definitions at the end of the 185 function, and so we can check the validity of jumps to these labels. */ 186 187 struct GTY((for_user)) named_label_entry { 188 189 tree name; /* Name of decl. */ 190 191 tree label_decl; /* LABEL_DECL, unless deleted local label. */ 192 193 named_label_entry *outer; /* Outer shadowed chain. */ 194 195 /* The binding level to which the label is *currently* attached. 196 This is initially set to the binding level in which the label 197 is defined, but is modified as scopes are closed. */ 198 cp_binding_level *binding_level; 199 200 /* The head of the names list that was current when the label was 201 defined, or the inner scope popped. These are the decls that will 202 be skipped when jumping to the label. */ 203 tree names_in_scope; 204 205 /* A vector of all decls from all binding levels that would be 206 crossed by a backward branch to the label. */ 207 vec<tree, va_gc> *bad_decls; 208 209 /* A list of uses of the label, before the label is defined. */ 210 named_label_use_entry *uses; 211 212 /* The following bits are set after the label is defined, and are 213 updated as scopes are popped. They indicate that a jump to the 214 label will illegally enter a scope of the given flavor. */ 215 bool in_try_scope; 216 bool in_catch_scope; 217 bool in_omp_scope; 218 bool in_transaction_scope; 219 bool in_constexpr_if; 220 }; 221 222 #define named_labels cp_function_chain->x_named_labels 223 224 /* The number of function bodies which we are currently processing. 225 (Zero if we are at namespace scope, one inside the body of a 226 function, two inside the body of a function in a local class, etc.) */ 227 int function_depth; 228 229 /* Whether the exception-specifier is part of a function type (i.e. C++17). */ 230 bool flag_noexcept_type; 231 232 /* States indicating how grokdeclarator() should handle declspecs marked 233 with __attribute__((deprecated)). An object declared as 234 __attribute__((deprecated)) suppresses warnings of uses of other 235 deprecated items. */ 236 enum deprecated_states deprecated_state = DEPRECATED_NORMAL; 237 238 239 /* A list of VAR_DECLs whose type was incomplete at the time the 240 variable was declared. */ 241 242 struct GTY(()) incomplete_var { 243 tree decl; 244 tree incomplete_type; 245 }; 246 247 248 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars; 249 250 /* Returns the kind of template specialization we are currently 251 processing, given that it's declaration contained N_CLASS_SCOPES 252 explicit scope qualifications. */ 253 254 tmpl_spec_kind 255 current_tmpl_spec_kind (int n_class_scopes) 256 { 257 int n_template_parm_scopes = 0; 258 int seen_specialization_p = 0; 259 int innermost_specialization_p = 0; 260 cp_binding_level *b; 261 262 /* Scan through the template parameter scopes. */ 263 for (b = current_binding_level; 264 b->kind == sk_template_parms; 265 b = b->level_chain) 266 { 267 /* If we see a specialization scope inside a parameter scope, 268 then something is wrong. That corresponds to a declaration 269 like: 270 271 template <class T> template <> ... 272 273 which is always invalid since [temp.expl.spec] forbids the 274 specialization of a class member template if the enclosing 275 class templates are not explicitly specialized as well. */ 276 if (b->explicit_spec_p) 277 { 278 if (n_template_parm_scopes == 0) 279 innermost_specialization_p = 1; 280 else 281 seen_specialization_p = 1; 282 } 283 else if (seen_specialization_p == 1) 284 return tsk_invalid_member_spec; 285 286 ++n_template_parm_scopes; 287 } 288 289 /* Handle explicit instantiations. */ 290 if (processing_explicit_instantiation) 291 { 292 if (n_template_parm_scopes != 0) 293 /* We've seen a template parameter list during an explicit 294 instantiation. For example: 295 296 template <class T> template void f(int); 297 298 This is erroneous. */ 299 return tsk_invalid_expl_inst; 300 else 301 return tsk_expl_inst; 302 } 303 304 if (n_template_parm_scopes < n_class_scopes) 305 /* We've not seen enough template headers to match all the 306 specialized classes present. For example: 307 308 template <class T> void R<T>::S<T>::f(int); 309 310 This is invalid; there needs to be one set of template 311 parameters for each class. */ 312 return tsk_insufficient_parms; 313 else if (n_template_parm_scopes == n_class_scopes) 314 /* We're processing a non-template declaration (even though it may 315 be a member of a template class.) For example: 316 317 template <class T> void S<T>::f(int); 318 319 The `class T' matches the `S<T>', leaving no template headers 320 corresponding to the `f'. */ 321 return tsk_none; 322 else if (n_template_parm_scopes > n_class_scopes + 1) 323 /* We've got too many template headers. For example: 324 325 template <> template <class T> void f (T); 326 327 There need to be more enclosing classes. */ 328 return tsk_excessive_parms; 329 else 330 /* This must be a template. It's of the form: 331 332 template <class T> template <class U> void S<T>::f(U); 333 334 This is a specialization if the innermost level was a 335 specialization; otherwise it's just a definition of the 336 template. */ 337 return innermost_specialization_p ? tsk_expl_spec : tsk_template; 338 } 339 340 /* Exit the current scope. */ 341 342 void 343 finish_scope (void) 344 { 345 poplevel (0, 0, 0); 346 } 347 348 /* When a label goes out of scope, check to see if that label was used 349 in a valid manner, and issue any appropriate warnings or errors. */ 350 351 static void 352 check_label_used (tree label) 353 { 354 if (!processing_template_decl) 355 { 356 if (DECL_INITIAL (label) == NULL_TREE) 357 { 358 location_t location; 359 360 error ("label %q+D used but not defined", label); 361 location = input_location; 362 /* FIXME want (LOCATION_FILE (input_location), (line)0) */ 363 /* Avoid crashing later. */ 364 define_label (location, DECL_NAME (label)); 365 } 366 else 367 warn_for_unused_label (label); 368 } 369 } 370 371 /* Helper function to sort named label entries in a vector by DECL_UID. */ 372 373 static int 374 sort_labels (const void *a, const void *b) 375 { 376 tree label1 = *(tree const *) a; 377 tree label2 = *(tree const *) b; 378 379 /* DECL_UIDs can never be equal. */ 380 return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1; 381 } 382 383 /* At the end of a function, all labels declared within the function 384 go out of scope. BLOCK is the top-level block for the 385 function. */ 386 387 static void 388 pop_labels (tree block) 389 { 390 if (!named_labels) 391 return; 392 393 /* We need to add the labels to the block chain, so debug 394 information is emitted. But, we want the order to be stable so 395 need to sort them first. Otherwise the debug output could be 396 randomly ordered. I guess it's mostly stable, unless the hash 397 table implementation changes. */ 398 auto_vec<tree, 32> labels (named_labels->elements ()); 399 hash_table<named_label_hash>::iterator end (named_labels->end ()); 400 for (hash_table<named_label_hash>::iterator iter 401 (named_labels->begin ()); iter != end; ++iter) 402 { 403 named_label_entry *ent = *iter; 404 405 gcc_checking_assert (!ent->outer); 406 if (ent->label_decl) 407 labels.quick_push (ent->label_decl); 408 ggc_free (ent); 409 } 410 named_labels = NULL; 411 labels.qsort (sort_labels); 412 413 while (labels.length ()) 414 { 415 tree label = labels.pop (); 416 417 DECL_CHAIN (label) = BLOCK_VARS (block); 418 BLOCK_VARS (block) = label; 419 420 check_label_used (label); 421 } 422 } 423 424 /* At the end of a block with local labels, restore the outer definition. */ 425 426 static void 427 pop_local_label (tree id, tree label) 428 { 429 check_label_used (label); 430 named_label_entry **slot = named_labels->find_slot_with_hash 431 (id, IDENTIFIER_HASH_VALUE (id), NO_INSERT); 432 named_label_entry *ent = *slot; 433 434 if (ent->outer) 435 ent = ent->outer; 436 else 437 { 438 ent = ggc_cleared_alloc<named_label_entry> (); 439 ent->name = id; 440 } 441 *slot = ent; 442 } 443 444 /* The following two routines are used to interface to Objective-C++. 445 The binding level is purposely treated as an opaque type. */ 446 447 void * 448 objc_get_current_scope (void) 449 { 450 return current_binding_level; 451 } 452 453 /* The following routine is used by the NeXT-style SJLJ exceptions; 454 variables get marked 'volatile' so as to not be clobbered by 455 _setjmp()/_longjmp() calls. All variables in the current scope, 456 as well as parent scopes up to (but not including) ENCLOSING_BLK 457 shall be thusly marked. */ 458 459 void 460 objc_mark_locals_volatile (void *enclosing_blk) 461 { 462 cp_binding_level *scope; 463 464 for (scope = current_binding_level; 465 scope && scope != enclosing_blk; 466 scope = scope->level_chain) 467 { 468 tree decl; 469 470 for (decl = scope->names; decl; decl = TREE_CHAIN (decl)) 471 objc_volatilize_decl (decl); 472 473 /* Do not climb up past the current function. */ 474 if (scope->kind == sk_function_parms) 475 break; 476 } 477 } 478 479 /* True if B is the level for the condition of a constexpr if. */ 480 481 static bool 482 level_for_constexpr_if (cp_binding_level *b) 483 { 484 return (b->kind == sk_cond && b->this_entity 485 && TREE_CODE (b->this_entity) == IF_STMT 486 && IF_STMT_CONSTEXPR_P (b->this_entity)); 487 } 488 489 /* Update data for defined and undefined labels when leaving a scope. */ 490 491 int 492 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl) 493 { 494 named_label_entry *ent = *slot; 495 cp_binding_level *obl = bl->level_chain; 496 497 if (ent->binding_level == bl) 498 { 499 tree decl; 500 501 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and 502 TREE_LISTs representing OVERLOADs, so be careful. */ 503 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl) 504 ? DECL_CHAIN (decl) 505 : TREE_CHAIN (decl))) 506 if (decl_jump_unsafe (decl)) 507 vec_safe_push (ent->bad_decls, decl); 508 509 ent->binding_level = obl; 510 ent->names_in_scope = obl->names; 511 switch (bl->kind) 512 { 513 case sk_try: 514 ent->in_try_scope = true; 515 break; 516 case sk_catch: 517 ent->in_catch_scope = true; 518 break; 519 case sk_omp: 520 ent->in_omp_scope = true; 521 break; 522 case sk_transaction: 523 ent->in_transaction_scope = true; 524 break; 525 case sk_block: 526 if (level_for_constexpr_if (bl->level_chain)) 527 ent->in_constexpr_if = true; 528 break; 529 default: 530 break; 531 } 532 } 533 else if (ent->uses) 534 { 535 struct named_label_use_entry *use; 536 537 for (use = ent->uses; use ; use = use->next) 538 if (use->binding_level == bl) 539 { 540 use->binding_level = obl; 541 use->names_in_scope = obl->names; 542 if (bl->kind == sk_omp) 543 use->in_omp_scope = true; 544 } 545 } 546 547 return 1; 548 } 549 550 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings 551 when errors were reported, except for -Werror-unused-but-set-*. */ 552 static int unused_but_set_errorcount; 553 554 /* Exit a binding level. 555 Pop the level off, and restore the state of the identifier-decl mappings 556 that were in effect when this level was entered. 557 558 If KEEP == 1, this level had explicit declarations, so 559 and create a "block" (a BLOCK node) for the level 560 to record its declarations and subblocks for symbol table output. 561 562 If FUNCTIONBODY is nonzero, this level is the body of a function, 563 so create a block as if KEEP were set and also clear out all 564 label names. 565 566 If REVERSE is nonzero, reverse the order of decls before putting 567 them into the BLOCK. */ 568 569 tree 570 poplevel (int keep, int reverse, int functionbody) 571 { 572 tree link; 573 /* The chain of decls was accumulated in reverse order. 574 Put it into forward order, just for cleanliness. */ 575 tree decls; 576 tree subblocks; 577 tree block; 578 tree decl; 579 int leaving_for_scope; 580 scope_kind kind; 581 unsigned ix; 582 583 bool subtime = timevar_cond_start (TV_NAME_LOOKUP); 584 restart: 585 586 block = NULL_TREE; 587 588 gcc_assert (current_binding_level->kind != sk_class 589 && current_binding_level->kind != sk_namespace); 590 591 if (current_binding_level->kind == sk_cleanup) 592 functionbody = 0; 593 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0; 594 595 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed)); 596 597 /* We used to use KEEP == 2 to indicate that the new block should go 598 at the beginning of the list of blocks at this binding level, 599 rather than the end. This hack is no longer used. */ 600 gcc_assert (keep == 0 || keep == 1); 601 602 if (current_binding_level->keep) 603 keep = 1; 604 605 /* Any uses of undefined labels, and any defined labels, now operate 606 under constraints of next binding contour. */ 607 if (cfun && !functionbody && named_labels) 608 named_labels->traverse<cp_binding_level *, poplevel_named_label_1> 609 (current_binding_level); 610 611 /* Get the decls in the order they were written. 612 Usually current_binding_level->names is in reverse order. 613 But parameter decls were previously put in forward order. */ 614 615 decls = current_binding_level->names; 616 if (reverse) 617 { 618 decls = nreverse (decls); 619 current_binding_level->names = decls; 620 } 621 622 /* If there were any declarations or structure tags in that level, 623 or if this level is a function body, 624 create a BLOCK to record them for the life of this function. */ 625 block = NULL_TREE; 626 /* Avoid function body block if possible. */ 627 if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE) 628 keep = 0; 629 else if (keep == 1 || functionbody) 630 block = make_node (BLOCK); 631 if (block != NULL_TREE) 632 { 633 BLOCK_VARS (block) = decls; 634 BLOCK_SUBBLOCKS (block) = subblocks; 635 } 636 637 /* In each subblock, record that this is its superior. */ 638 if (keep >= 0) 639 for (link = subblocks; link; link = BLOCK_CHAIN (link)) 640 BLOCK_SUPERCONTEXT (link) = block; 641 642 /* We still support the old for-scope rules, whereby the variables 643 in a init statement were in scope after the for-statement ended. 644 We only use the new rules if flag_new_for_scope is nonzero. */ 645 leaving_for_scope 646 = current_binding_level->kind == sk_for && flag_new_for_scope; 647 648 /* Before we remove the declarations first check for unused variables. */ 649 if ((warn_unused_variable || warn_unused_but_set_variable) 650 && current_binding_level->kind != sk_template_parms 651 && !processing_template_decl) 652 for (tree d = get_local_decls (); d; d = TREE_CHAIN (d)) 653 { 654 /* There are cases where D itself is a TREE_LIST. See in 655 push_local_binding where the list of decls returned by 656 getdecls is built. */ 657 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d; 658 659 tree type = TREE_TYPE (decl); 660 if (VAR_P (decl) 661 && (! TREE_USED (decl) || !DECL_READ_P (decl)) 662 && ! DECL_IN_SYSTEM_HEADER (decl) 663 /* For structured bindings, consider only real variables, not 664 subobjects. */ 665 && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl) 666 : (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl))) 667 && type != error_mark_node 668 && (!CLASS_TYPE_P (type) 669 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type) 670 || lookup_attribute ("warn_unused", 671 TYPE_ATTRIBUTES (TREE_TYPE (decl))))) 672 { 673 if (! TREE_USED (decl)) 674 { 675 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl)) 676 warning_at (DECL_SOURCE_LOCATION (decl), 677 OPT_Wunused_variable, 678 "unused structured binding declaration"); 679 else 680 warning_at (DECL_SOURCE_LOCATION (decl), 681 OPT_Wunused_variable, "unused variable %qD", decl); 682 } 683 else if (DECL_CONTEXT (decl) == current_function_decl 684 // For -Wunused-but-set-variable leave references alone. 685 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE 686 && errorcount == unused_but_set_errorcount) 687 { 688 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl)) 689 warning_at (DECL_SOURCE_LOCATION (decl), 690 OPT_Wunused_but_set_variable, "structured " 691 "binding declaration set but not used"); 692 else 693 warning_at (DECL_SOURCE_LOCATION (decl), 694 OPT_Wunused_but_set_variable, 695 "variable %qD set but not used", decl); 696 unused_but_set_errorcount = errorcount; 697 } 698 } 699 } 700 701 /* Remove declarations for all the DECLs in this level. */ 702 for (link = decls; link; link = TREE_CHAIN (link)) 703 { 704 decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link; 705 tree name = OVL_NAME (decl); 706 707 if (leaving_for_scope && VAR_P (decl) 708 /* It's hard to make this ARM compatibility hack play nicely with 709 lambdas, and it really isn't necessary in C++11 mode. */ 710 && cxx_dialect < cxx11 711 && name) 712 { 713 cxx_binding *ob = outer_binding (name, 714 IDENTIFIER_BINDING (name), 715 /*class_p=*/true); 716 tree ns_binding = NULL_TREE; 717 if (!ob) 718 ns_binding = get_namespace_binding (current_namespace, name); 719 720 if (ob && ob->scope == current_binding_level->level_chain) 721 /* We have something like: 722 723 int i; 724 for (int i; ;); 725 726 and we are leaving the `for' scope. There's no reason to 727 keep the binding of the inner `i' in this case. */ 728 ; 729 else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL)) 730 || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL)) 731 /* Here, we have something like: 732 733 typedef int I; 734 735 void f () { 736 for (int I; ;); 737 } 738 739 We must pop the for-scope binding so we know what's a 740 type and what isn't. */ 741 ; 742 else 743 { 744 /* Mark this VAR_DECL as dead so that we can tell we left it 745 there only for backward compatibility. */ 746 DECL_DEAD_FOR_LOCAL (link) = 1; 747 748 /* Keep track of what should have happened when we 749 popped the binding. */ 750 if (ob && ob->value) 751 { 752 SET_DECL_SHADOWED_FOR_VAR (link, ob->value); 753 DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1; 754 } 755 756 /* Add it to the list of dead variables in the next 757 outermost binding to that we can remove these when we 758 leave that binding. */ 759 vec_safe_push ( 760 current_binding_level->level_chain->dead_vars_from_for, 761 link); 762 763 /* Although we don't pop the cxx_binding, we do clear 764 its SCOPE since the scope is going away now. */ 765 IDENTIFIER_BINDING (name)->scope 766 = current_binding_level->level_chain; 767 768 /* Don't remove the binding. */ 769 name = NULL_TREE; 770 } 771 } 772 /* Remove the binding. */ 773 if (TREE_CODE (decl) == LABEL_DECL) 774 pop_local_label (name, decl); 775 else 776 pop_local_binding (name, decl); 777 } 778 779 /* Remove declarations for any `for' variables from inner scopes 780 that we kept around. */ 781 FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for, 782 ix, decl) 783 pop_local_binding (DECL_NAME (decl), decl); 784 785 /* Restore the IDENTIFIER_TYPE_VALUEs. */ 786 for (link = current_binding_level->type_shadowed; 787 link; link = TREE_CHAIN (link)) 788 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link)); 789 790 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs 791 list if a `using' declaration put them there. The debugging 792 back ends won't understand OVERLOAD, so we remove them here. 793 Because the BLOCK_VARS are (temporarily) shared with 794 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have 795 popped all the bindings. Also remove undeduced 'auto' decls, 796 which LTO doesn't understand, and can't have been used by anything. */ 797 if (block) 798 { 799 tree* d; 800 801 for (d = &BLOCK_VARS (block); *d; ) 802 { 803 if (TREE_CODE (*d) == TREE_LIST 804 || (!processing_template_decl 805 && undeduced_auto_decl (*d))) 806 *d = TREE_CHAIN (*d); 807 else 808 d = &DECL_CHAIN (*d); 809 } 810 } 811 812 /* If the level being exited is the top level of a function, 813 check over all the labels. */ 814 if (functionbody) 815 { 816 if (block) 817 { 818 /* Since this is the top level block of a function, the vars are 819 the function's parameters. Don't leave them in the BLOCK 820 because they are found in the FUNCTION_DECL instead. */ 821 BLOCK_VARS (block) = 0; 822 pop_labels (block); 823 } 824 else 825 pop_labels (subblocks); 826 } 827 828 kind = current_binding_level->kind; 829 if (kind == sk_cleanup) 830 { 831 tree stmt; 832 833 /* If this is a temporary binding created for a cleanup, then we'll 834 have pushed a statement list level. Pop that, create a new 835 BIND_EXPR for the block, and insert it into the stream. */ 836 stmt = pop_stmt_list (current_binding_level->statement_list); 837 stmt = c_build_bind_expr (input_location, block, stmt); 838 add_stmt (stmt); 839 } 840 841 leave_scope (); 842 if (functionbody) 843 { 844 /* The current function is being defined, so its DECL_INITIAL 845 should be error_mark_node. */ 846 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node); 847 DECL_INITIAL (current_function_decl) = block ? block : subblocks; 848 if (subblocks) 849 { 850 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl)) 851 { 852 if (BLOCK_SUBBLOCKS (subblocks)) 853 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1; 854 } 855 else 856 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1; 857 } 858 } 859 else if (block) 860 current_binding_level->blocks 861 = block_chainon (current_binding_level->blocks, block); 862 863 /* If we did not make a block for the level just exited, 864 any blocks made for inner levels 865 (since they cannot be recorded as subblocks in that level) 866 must be carried forward so they will later become subblocks 867 of something else. */ 868 else if (subblocks) 869 current_binding_level->blocks 870 = block_chainon (current_binding_level->blocks, subblocks); 871 872 /* Each and every BLOCK node created here in `poplevel' is important 873 (e.g. for proper debugging information) so if we created one 874 earlier, mark it as "used". */ 875 if (block) 876 TREE_USED (block) = 1; 877 878 /* All temporary bindings created for cleanups are popped silently. */ 879 if (kind == sk_cleanup) 880 goto restart; 881 882 timevar_cond_stop (TV_NAME_LOOKUP, subtime); 883 return block; 884 } 885 886 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */ 887 /* Diagnose odr-used extern inline variables without definitions 888 in the current TU. */ 889 890 int 891 wrapup_namespace_globals () 892 { 893 if (vec<tree, va_gc> *statics = static_decls) 894 { 895 tree decl; 896 unsigned int i; 897 FOR_EACH_VEC_ELT (*statics, i, decl) 898 { 899 if (warn_unused_function 900 && TREE_CODE (decl) == FUNCTION_DECL 901 && DECL_INITIAL (decl) == 0 902 && DECL_EXTERNAL (decl) 903 && !TREE_PUBLIC (decl) 904 && !DECL_ARTIFICIAL (decl) 905 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl) 906 && !TREE_NO_WARNING (decl)) 907 warning_at (DECL_SOURCE_LOCATION (decl), 908 OPT_Wunused_function, 909 "%qF declared %<static%> but never defined", decl); 910 911 if (VAR_P (decl) 912 && DECL_EXTERNAL (decl) 913 && DECL_INLINE_VAR_P (decl) 914 && DECL_ODR_USED (decl)) 915 error_at (DECL_SOURCE_LOCATION (decl), 916 "odr-used inline variable %qD is not defined", decl); 917 } 918 919 /* Clear out the list, so we don't rescan next time. */ 920 static_decls = NULL; 921 922 /* Write out any globals that need to be output. */ 923 return wrapup_global_declarations (statics->address (), 924 statics->length ()); 925 } 926 return 0; 927 } 928 929 /* In C++, you don't have to write `struct S' to refer to `S'; you 930 can just use `S'. We accomplish this by creating a TYPE_DECL as 931 if the user had written `typedef struct S S'. Create and return 932 the TYPE_DECL for TYPE. */ 933 934 tree 935 create_implicit_typedef (tree name, tree type) 936 { 937 tree decl; 938 939 decl = build_decl (input_location, TYPE_DECL, name, type); 940 DECL_ARTIFICIAL (decl) = 1; 941 /* There are other implicit type declarations, like the one *within* 942 a class that allows you to write `S::S'. We must distinguish 943 amongst these. */ 944 SET_DECL_IMPLICIT_TYPEDEF_P (decl); 945 TYPE_NAME (type) = decl; 946 TYPE_STUB_DECL (type) = decl; 947 948 return decl; 949 } 950 951 /* Remember a local name for name-mangling purposes. */ 952 953 static void 954 push_local_name (tree decl) 955 { 956 size_t i, nelts; 957 tree t, name; 958 959 timevar_start (TV_NAME_LOOKUP); 960 961 name = DECL_NAME (decl); 962 963 nelts = vec_safe_length (local_names); 964 for (i = 0; i < nelts; i++) 965 { 966 t = (*local_names)[i]; 967 if (DECL_NAME (t) == name) 968 { 969 retrofit_lang_decl (decl); 970 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1; 971 if (DECL_DISCRIMINATOR_SET_P (t)) 972 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1; 973 else 974 DECL_DISCRIMINATOR (decl) = 1; 975 976 (*local_names)[i] = decl; 977 timevar_stop (TV_NAME_LOOKUP); 978 return; 979 } 980 } 981 982 vec_safe_push (local_names, decl); 983 timevar_stop (TV_NAME_LOOKUP); 984 } 985 986 /* Subroutine of duplicate_decls: return truthvalue of whether 987 or not types of these decls match. 988 989 For C++, we must compare the parameter list so that `int' can match 990 `int&' in a parameter position, but `int&' is not confused with 991 `const int&'. */ 992 993 int 994 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */) 995 { 996 int types_match; 997 998 if (newdecl == olddecl) 999 return 1; 1000 1001 if (TREE_CODE (newdecl) != TREE_CODE (olddecl)) 1002 /* If the two DECLs are not even the same kind of thing, we're not 1003 interested in their types. */ 1004 return 0; 1005 1006 gcc_assert (DECL_P (newdecl)); 1007 1008 if (TREE_CODE (newdecl) == FUNCTION_DECL) 1009 { 1010 tree f1 = TREE_TYPE (newdecl); 1011 tree f2 = TREE_TYPE (olddecl); 1012 tree p1 = TYPE_ARG_TYPES (f1); 1013 tree p2 = TYPE_ARG_TYPES (f2); 1014 tree r2; 1015 1016 /* Specializations of different templates are different functions 1017 even if they have the same type. */ 1018 tree t1 = (DECL_USE_TEMPLATE (newdecl) 1019 ? DECL_TI_TEMPLATE (newdecl) 1020 : NULL_TREE); 1021 tree t2 = (DECL_USE_TEMPLATE (olddecl) 1022 ? DECL_TI_TEMPLATE (olddecl) 1023 : NULL_TREE); 1024 if (t1 != t2) 1025 return 0; 1026 1027 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl) 1028 && ! (DECL_EXTERN_C_P (newdecl) 1029 && DECL_EXTERN_C_P (olddecl))) 1030 return 0; 1031 1032 /* A new declaration doesn't match a built-in one unless it 1033 is also extern "C". */ 1034 if (DECL_IS_BUILTIN (olddecl) 1035 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl)) 1036 return 0; 1037 1038 if (TREE_CODE (f1) != TREE_CODE (f2)) 1039 return 0; 1040 1041 /* A declaration with deduced return type should use its pre-deduction 1042 type for declaration matching. */ 1043 r2 = fndecl_declared_return_type (olddecl); 1044 1045 if (same_type_p (TREE_TYPE (f1), r2)) 1046 { 1047 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl) 1048 && (DECL_BUILT_IN (olddecl) 1049 #ifndef NO_IMPLICIT_EXTERN_C 1050 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl)) 1051 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl)) 1052 #endif 1053 )) 1054 { 1055 types_match = self_promoting_args_p (p1); 1056 if (p1 == void_list_node) 1057 TREE_TYPE (newdecl) = TREE_TYPE (olddecl); 1058 } 1059 #ifndef NO_IMPLICIT_EXTERN_C 1060 else if (!prototype_p (f1) 1061 && (DECL_EXTERN_C_P (olddecl) 1062 && DECL_IN_SYSTEM_HEADER (olddecl) 1063 && !DECL_CLASS_SCOPE_P (olddecl)) 1064 && (DECL_EXTERN_C_P (newdecl) 1065 && DECL_IN_SYSTEM_HEADER (newdecl) 1066 && !DECL_CLASS_SCOPE_P (newdecl))) 1067 { 1068 types_match = self_promoting_args_p (p2); 1069 TREE_TYPE (newdecl) = TREE_TYPE (olddecl); 1070 } 1071 #endif 1072 else 1073 types_match = 1074 compparms (p1, p2) 1075 && type_memfn_rqual (f1) == type_memfn_rqual (f2) 1076 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE 1077 || comp_type_attributes (TREE_TYPE (newdecl), 1078 TREE_TYPE (olddecl)) != 0); 1079 } 1080 else 1081 types_match = 0; 1082 1083 /* The decls dont match if they correspond to two different versions 1084 of the same function. Disallow extern "C" functions to be 1085 versions for now. */ 1086 if (types_match 1087 && !DECL_EXTERN_C_P (newdecl) 1088 && !DECL_EXTERN_C_P (olddecl) 1089 && record_versions 1090 && maybe_version_functions (newdecl, olddecl, 1091 (!DECL_FUNCTION_VERSIONED (newdecl) 1092 || !DECL_FUNCTION_VERSIONED (olddecl)))) 1093 return 0; 1094 } 1095 else if (TREE_CODE (newdecl) == TEMPLATE_DECL) 1096 { 1097 tree oldres = DECL_TEMPLATE_RESULT (olddecl); 1098 tree newres = DECL_TEMPLATE_RESULT (newdecl); 1099 1100 if (TREE_CODE (newres) != TREE_CODE (oldres)) 1101 return 0; 1102 1103 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl), 1104 DECL_TEMPLATE_PARMS (olddecl))) 1105 return 0; 1106 1107 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL) 1108 types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres)) 1109 && equivalently_constrained (olddecl, newdecl)); 1110 else 1111 // We don't need to check equivalently_constrained for variable and 1112 // function templates because we check it on the results. 1113 types_match = decls_match (oldres, newres); 1114 } 1115 else 1116 { 1117 /* Need to check scope for variable declaration (VAR_DECL). 1118 For typedef (TYPE_DECL), scope is ignored. */ 1119 if (VAR_P (newdecl) 1120 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl) 1121 /* [dcl.link] 1122 Two declarations for an object with C language linkage 1123 with the same name (ignoring the namespace that qualify 1124 it) that appear in different namespace scopes refer to 1125 the same object. */ 1126 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl))) 1127 return 0; 1128 1129 if (TREE_TYPE (newdecl) == error_mark_node) 1130 types_match = TREE_TYPE (olddecl) == error_mark_node; 1131 else if (TREE_TYPE (olddecl) == NULL_TREE) 1132 types_match = TREE_TYPE (newdecl) == NULL_TREE; 1133 else if (TREE_TYPE (newdecl) == NULL_TREE) 1134 types_match = 0; 1135 else 1136 types_match = comptypes (TREE_TYPE (newdecl), 1137 TREE_TYPE (olddecl), 1138 COMPARE_REDECLARATION); 1139 } 1140 1141 // Normal functions can be constrained, as can variable partial 1142 // specializations. 1143 if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl)) 1144 types_match = equivalently_constrained (newdecl, olddecl); 1145 1146 return types_match; 1147 } 1148 1149 /* NEWDECL and OLDDECL have identical signatures. If they are 1150 different versions adjust them and return true. 1151 If RECORD is set to true, record function versions. */ 1152 1153 bool 1154 maybe_version_functions (tree newdecl, tree olddecl, bool record) 1155 { 1156 if (!targetm.target_option.function_versions (newdecl, olddecl)) 1157 return false; 1158 1159 if (!DECL_FUNCTION_VERSIONED (olddecl)) 1160 { 1161 DECL_FUNCTION_VERSIONED (olddecl) = 1; 1162 if (DECL_ASSEMBLER_NAME_SET_P (olddecl)) 1163 mangle_decl (olddecl); 1164 } 1165 1166 if (!DECL_FUNCTION_VERSIONED (newdecl)) 1167 { 1168 DECL_FUNCTION_VERSIONED (newdecl) = 1; 1169 if (DECL_ASSEMBLER_NAME_SET_P (newdecl)) 1170 mangle_decl (newdecl); 1171 } 1172 1173 if (record) 1174 cgraph_node::record_function_versions (olddecl, newdecl); 1175 1176 return true; 1177 } 1178 1179 /* If NEWDECL is `static' and an `extern' was seen previously, 1180 warn about it. OLDDECL is the previous declaration. 1181 1182 Note that this does not apply to the C++ case of declaring 1183 a variable `extern const' and then later `const'. 1184 1185 Don't complain about built-in functions, since they are beyond 1186 the user's control. */ 1187 1188 void 1189 warn_extern_redeclared_static (tree newdecl, tree olddecl) 1190 { 1191 if (TREE_CODE (newdecl) == TYPE_DECL 1192 || TREE_CODE (newdecl) == TEMPLATE_DECL 1193 || TREE_CODE (newdecl) == CONST_DECL 1194 || TREE_CODE (newdecl) == NAMESPACE_DECL) 1195 return; 1196 1197 /* Don't get confused by static member functions; that's a different 1198 use of `static'. */ 1199 if (TREE_CODE (newdecl) == FUNCTION_DECL 1200 && DECL_STATIC_FUNCTION_P (newdecl)) 1201 return; 1202 1203 /* If the old declaration was `static', or the new one isn't, then 1204 everything is OK. */ 1205 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl)) 1206 return; 1207 1208 /* It's OK to declare a builtin function as `static'. */ 1209 if (TREE_CODE (olddecl) == FUNCTION_DECL 1210 && DECL_ARTIFICIAL (olddecl)) 1211 return; 1212 1213 if (permerror (DECL_SOURCE_LOCATION (newdecl), 1214 "%qD was declared %<extern%> and later %<static%>", newdecl)) 1215 inform (DECL_SOURCE_LOCATION (olddecl), 1216 "previous declaration of %qD", olddecl); 1217 } 1218 1219 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or 1220 function templates. If their exception specifications do not 1221 match, issue a diagnostic. */ 1222 1223 static void 1224 check_redeclaration_exception_specification (tree new_decl, 1225 tree old_decl) 1226 { 1227 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl)); 1228 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl)); 1229 1230 /* Two default specs are equivalent, don't force evaluation. */ 1231 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions) 1232 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions)) 1233 return; 1234 1235 if (!type_dependent_expression_p (old_decl)) 1236 { 1237 maybe_instantiate_noexcept (new_decl); 1238 maybe_instantiate_noexcept (old_decl); 1239 } 1240 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl)); 1241 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl)); 1242 1243 /* [except.spec] 1244 1245 If any declaration of a function has an exception-specification, 1246 all declarations, including the definition and an explicit 1247 specialization, of that function shall have an 1248 exception-specification with the same set of type-ids. */ 1249 if (! DECL_IS_BUILTIN (old_decl) 1250 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal)) 1251 { 1252 const char *const msg 1253 = G_("declaration of %qF has a different exception specifier"); 1254 bool complained = true; 1255 location_t new_loc = DECL_SOURCE_LOCATION (new_decl); 1256 if (DECL_IN_SYSTEM_HEADER (old_decl)) 1257 complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl); 1258 else if (!flag_exceptions) 1259 /* We used to silently permit mismatched eh specs with 1260 -fno-exceptions, so make them a pedwarn now. */ 1261 complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl); 1262 else 1263 error_at (new_loc, msg, new_decl); 1264 if (complained) 1265 inform (DECL_SOURCE_LOCATION (old_decl), 1266 "from previous declaration %qF", old_decl); 1267 } 1268 } 1269 1270 /* Return true if OLD_DECL and NEW_DECL agree on constexprness. 1271 Otherwise issue diagnostics. */ 1272 1273 static bool 1274 validate_constexpr_redeclaration (tree old_decl, tree new_decl) 1275 { 1276 old_decl = STRIP_TEMPLATE (old_decl); 1277 new_decl = STRIP_TEMPLATE (new_decl); 1278 if (!VAR_OR_FUNCTION_DECL_P (old_decl) 1279 || !VAR_OR_FUNCTION_DECL_P (new_decl)) 1280 return true; 1281 if (DECL_DECLARED_CONSTEXPR_P (old_decl) 1282 == DECL_DECLARED_CONSTEXPR_P (new_decl)) 1283 return true; 1284 if (TREE_CODE (old_decl) == FUNCTION_DECL) 1285 { 1286 if (DECL_BUILT_IN (old_decl)) 1287 { 1288 /* Hide a built-in declaration. */ 1289 DECL_DECLARED_CONSTEXPR_P (old_decl) 1290 = DECL_DECLARED_CONSTEXPR_P (new_decl); 1291 return true; 1292 } 1293 /* 7.1.5 [dcl.constexpr] 1294 Note: An explicit specialization can differ from the template 1295 declaration with respect to the constexpr specifier. */ 1296 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl) 1297 && DECL_TEMPLATE_SPECIALIZATION (new_decl)) 1298 return true; 1299 1300 error_at (DECL_SOURCE_LOCATION (new_decl), 1301 "redeclaration %qD differs in %<constexpr%> " 1302 "from previous declaration", new_decl); 1303 inform (DECL_SOURCE_LOCATION (old_decl), 1304 "previous declaration %qD", old_decl); 1305 return false; 1306 } 1307 return true; 1308 } 1309 1310 // If OLDDECL and NEWDECL are concept declarations with the same type 1311 // (i.e., and template parameters), but different requirements, 1312 // emit diagnostics and return true. Otherwise, return false. 1313 static inline bool 1314 check_concept_refinement (tree olddecl, tree newdecl) 1315 { 1316 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl)) 1317 return false; 1318 1319 tree d1 = DECL_TEMPLATE_RESULT (olddecl); 1320 tree d2 = DECL_TEMPLATE_RESULT (newdecl); 1321 if (TREE_CODE (d1) != TREE_CODE (d2)) 1322 return false; 1323 1324 tree t1 = TREE_TYPE (d1); 1325 tree t2 = TREE_TYPE (d2); 1326 if (TREE_CODE (d1) == FUNCTION_DECL) 1327 { 1328 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2)) 1329 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl), 1330 DECL_TEMPLATE_PARMS (newdecl)) 1331 && !equivalently_constrained (olddecl, newdecl)) 1332 { 1333 error ("cannot specialize concept %q#D", olddecl); 1334 return true; 1335 } 1336 } 1337 return false; 1338 } 1339 1340 /* DECL is a redeclaration of a function or function template. If 1341 it does have default arguments issue a diagnostic. Note: this 1342 function is used to enforce the requirements in C++11 8.3.6 about 1343 no default arguments in redeclarations. */ 1344 1345 static void 1346 check_redeclaration_no_default_args (tree decl) 1347 { 1348 gcc_assert (DECL_DECLARES_FUNCTION_P (decl)); 1349 1350 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl); 1351 t && t != void_list_node; t = TREE_CHAIN (t)) 1352 if (TREE_PURPOSE (t)) 1353 { 1354 permerror (DECL_SOURCE_LOCATION (decl), 1355 "redeclaration of %q#D may not have default " 1356 "arguments", decl); 1357 return; 1358 } 1359 } 1360 1361 /* Merge tree bits that correspond to attributes noreturn, nothrow, 1362 const, malloc, and pure from NEWDECL with those of OLDDECL. */ 1363 1364 static void 1365 merge_attribute_bits (tree newdecl, tree olddecl) 1366 { 1367 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl); 1368 TREE_THIS_VOLATILE (olddecl) |= TREE_THIS_VOLATILE (newdecl); 1369 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl); 1370 TREE_NOTHROW (olddecl) |= TREE_NOTHROW (newdecl); 1371 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl); 1372 TREE_READONLY (olddecl) |= TREE_READONLY (newdecl); 1373 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl); 1374 DECL_IS_MALLOC (olddecl) |= DECL_IS_MALLOC (newdecl); 1375 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl); 1376 DECL_PURE_P (olddecl) |= DECL_PURE_P (newdecl); 1377 DECL_UNINLINABLE (newdecl) |= DECL_UNINLINABLE (olddecl); 1378 DECL_UNINLINABLE (olddecl) |= DECL_UNINLINABLE (newdecl); 1379 } 1380 1381 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \ 1382 && lookup_attribute ("gnu_inline", \ 1383 DECL_ATTRIBUTES (fn))) 1384 1385 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations. 1386 If the redeclaration is invalid, a diagnostic is issued, and the 1387 error_mark_node is returned. Otherwise, OLDDECL is returned. 1388 1389 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is 1390 returned. 1391 1392 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */ 1393 1394 tree 1395 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend) 1396 { 1397 unsigned olddecl_uid = DECL_UID (olddecl); 1398 int olddecl_friend = 0, types_match = 0, hidden_friend = 0; 1399 int new_defines_function = 0; 1400 tree new_template_info; 1401 1402 if (newdecl == olddecl) 1403 return olddecl; 1404 1405 types_match = decls_match (newdecl, olddecl); 1406 1407 /* If either the type of the new decl or the type of the old decl is an 1408 error_mark_node, then that implies that we have already issued an 1409 error (earlier) for some bogus type specification, and in that case, 1410 it is rather pointless to harass the user with yet more error message 1411 about the same declaration, so just pretend the types match here. */ 1412 if (TREE_TYPE (newdecl) == error_mark_node 1413 || TREE_TYPE (olddecl) == error_mark_node) 1414 return error_mark_node; 1415 1416 if (DECL_NAME (newdecl) 1417 && DECL_NAME (olddecl) 1418 && UDLIT_OPER_P (DECL_NAME (newdecl)) 1419 && UDLIT_OPER_P (DECL_NAME (olddecl))) 1420 { 1421 if (TREE_CODE (newdecl) == TEMPLATE_DECL 1422 && TREE_CODE (olddecl) != TEMPLATE_DECL 1423 && check_raw_literal_operator (olddecl)) 1424 error ("literal operator template %q+D conflicts with" 1425 " raw literal operator %qD", newdecl, olddecl); 1426 else if (TREE_CODE (newdecl) != TEMPLATE_DECL 1427 && TREE_CODE (olddecl) == TEMPLATE_DECL 1428 && check_raw_literal_operator (newdecl)) 1429 error ("raw literal operator %q+D conflicts with" 1430 " literal operator template %qD", newdecl, olddecl); 1431 } 1432 1433 /* True to merge attributes between the declarations, false to 1434 set OLDDECL's attributes to those of NEWDECL (for template 1435 explicit specializations that specify their own attributes 1436 independent of those specified for the primary template). */ 1437 const bool merge_attr = (TREE_CODE (newdecl) != FUNCTION_DECL 1438 || !DECL_TEMPLATE_SPECIALIZATION (newdecl) 1439 || DECL_TEMPLATE_SPECIALIZATION (olddecl)); 1440 1441 if (DECL_P (olddecl) 1442 && TREE_CODE (newdecl) == FUNCTION_DECL 1443 && TREE_CODE (olddecl) == FUNCTION_DECL 1444 && merge_attr 1445 && diagnose_mismatched_attributes (olddecl, newdecl)) 1446 { 1447 if (DECL_INITIAL (olddecl)) 1448 inform (DECL_SOURCE_LOCATION (olddecl), 1449 "previous definition of %qD was here", olddecl); 1450 else 1451 inform (DECL_SOURCE_LOCATION (olddecl), 1452 "previous declaration of %qD was here", olddecl); 1453 } 1454 1455 /* Check for redeclaration and other discrepancies. */ 1456 if (TREE_CODE (olddecl) == FUNCTION_DECL 1457 && DECL_ARTIFICIAL (olddecl)) 1458 { 1459 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl)); 1460 if (TREE_CODE (newdecl) != FUNCTION_DECL) 1461 { 1462 /* Avoid warnings redeclaring built-ins which have not been 1463 explicitly declared. */ 1464 if (DECL_ANTICIPATED (olddecl)) 1465 { 1466 if (TREE_PUBLIC (newdecl) 1467 && CP_DECL_CONTEXT (newdecl) == global_namespace) 1468 warning_at (DECL_SOURCE_LOCATION (newdecl), 1469 OPT_Wbuiltin_declaration_mismatch, 1470 "built-in function %qD declared as non-function", 1471 newdecl); 1472 return NULL_TREE; 1473 } 1474 1475 /* If you declare a built-in or predefined function name as static, 1476 the old definition is overridden, but optionally warn this was a 1477 bad choice of name. */ 1478 if (! TREE_PUBLIC (newdecl)) 1479 { 1480 warning (OPT_Wshadow, 1481 DECL_BUILT_IN (olddecl) 1482 ? G_("shadowing built-in function %q#D") 1483 : G_("shadowing library function %q#D"), olddecl); 1484 /* Discard the old built-in function. */ 1485 return NULL_TREE; 1486 } 1487 /* If the built-in is not ansi, then programs can override 1488 it even globally without an error. */ 1489 else if (! DECL_BUILT_IN (olddecl)) 1490 warning_at (DECL_SOURCE_LOCATION (newdecl), 0, 1491 "library function %q#D redeclared as non-function %q#D", 1492 olddecl, newdecl); 1493 else 1494 error ("declaration of %q+#D conflicts with built-in " 1495 "declaration %q#D", newdecl, olddecl); 1496 return NULL_TREE; 1497 } 1498 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl)) 1499 { 1500 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl)); 1501 error_at (DECL_SOURCE_LOCATION (newdecl), 1502 "redeclaration of %<pragma omp declare reduction%>"); 1503 inform (DECL_SOURCE_LOCATION (olddecl), 1504 "previous %<pragma omp declare reduction%> declaration"); 1505 return error_mark_node; 1506 } 1507 else if (!types_match) 1508 { 1509 /* Avoid warnings redeclaring built-ins which have not been 1510 explicitly declared. */ 1511 if (DECL_ANTICIPATED (olddecl)) 1512 { 1513 tree t1, t2; 1514 1515 /* A new declaration doesn't match a built-in one unless it 1516 is also extern "C". */ 1517 gcc_assert (DECL_IS_BUILTIN (olddecl)); 1518 gcc_assert (DECL_EXTERN_C_P (olddecl)); 1519 if (!DECL_EXTERN_C_P (newdecl)) 1520 return NULL_TREE; 1521 1522 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)), 1523 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl)); 1524 t1 || t2; 1525 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2)) 1526 { 1527 if (!t1 || !t2) 1528 break; 1529 /* FILE, tm types are not known at the time 1530 we create the builtins. */ 1531 for (unsigned i = 0; 1532 i < sizeof (builtin_structptr_types) 1533 / sizeof (builtin_structptr_type); 1534 ++i) 1535 if (TREE_VALUE (t2) == builtin_structptr_types[i].node) 1536 { 1537 tree t = TREE_VALUE (t1); 1538 1539 if (TYPE_PTR_P (t) 1540 && TYPE_IDENTIFIER (TREE_TYPE (t)) 1541 == get_identifier (builtin_structptr_types[i].str) 1542 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2))) 1543 { 1544 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl)); 1545 1546 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) 1547 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)); 1548 types_match = decls_match (newdecl, olddecl); 1549 if (types_match) 1550 return duplicate_decls (newdecl, olddecl, 1551 newdecl_is_friend); 1552 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs; 1553 } 1554 goto next_arg; 1555 } 1556 1557 if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2))) 1558 break; 1559 next_arg:; 1560 } 1561 1562 warning_at (DECL_SOURCE_LOCATION (newdecl), 1563 OPT_Wbuiltin_declaration_mismatch, 1564 "declaration of %q#D conflicts with built-in " 1565 "declaration %q#D", newdecl, olddecl); 1566 } 1567 else if ((DECL_EXTERN_C_P (newdecl) 1568 && DECL_EXTERN_C_P (olddecl)) 1569 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)), 1570 TYPE_ARG_TYPES (TREE_TYPE (olddecl)))) 1571 { 1572 /* Don't really override olddecl for __* prefixed builtins 1573 except for __[^b]*_chk, the compiler might be using those 1574 explicitly. */ 1575 if (DECL_BUILT_IN (olddecl)) 1576 { 1577 tree id = DECL_NAME (olddecl); 1578 const char *name = IDENTIFIER_POINTER (id); 1579 size_t len; 1580 1581 if (name[0] == '_' 1582 && name[1] == '_' 1583 && (strncmp (name + 2, "builtin_", 1584 strlen ("builtin_")) == 0 1585 || (len = strlen (name)) <= strlen ("___chk") 1586 || memcmp (name + len - strlen ("_chk"), 1587 "_chk", strlen ("_chk") + 1) != 0)) 1588 { 1589 if (DECL_INITIAL (newdecl)) 1590 { 1591 error_at (DECL_SOURCE_LOCATION (newdecl), 1592 "definition of %q#D ambiguates built-in " 1593 "declaration %q#D", newdecl, olddecl); 1594 return error_mark_node; 1595 } 1596 if (permerror (DECL_SOURCE_LOCATION (newdecl), 1597 "new declaration %q#D ambiguates built-in" 1598 " declaration %q#D", newdecl, olddecl) 1599 && flag_permissive) 1600 inform (DECL_SOURCE_LOCATION (newdecl), 1601 "ignoring the %q#D declaration", newdecl); 1602 return flag_permissive ? olddecl : error_mark_node; 1603 } 1604 } 1605 1606 /* A near match; override the builtin. */ 1607 1608 if (TREE_PUBLIC (newdecl)) 1609 warning_at (DECL_SOURCE_LOCATION (newdecl), 1610 OPT_Wbuiltin_declaration_mismatch, 1611 "new declaration %q#D ambiguates built-in " 1612 "declaration %q#D", newdecl, olddecl); 1613 else 1614 warning (OPT_Wshadow, 1615 DECL_BUILT_IN (olddecl) 1616 ? G_("shadowing built-in function %q#D") 1617 : G_("shadowing library function %q#D"), olddecl); 1618 } 1619 else 1620 /* Discard the old built-in function. */ 1621 return NULL_TREE; 1622 1623 /* Replace the old RTL to avoid problems with inlining. */ 1624 COPY_DECL_RTL (newdecl, olddecl); 1625 } 1626 /* Even if the types match, prefer the new declarations type for 1627 built-ins which have not been explicitly declared, for 1628 exception lists, etc... */ 1629 else if (DECL_IS_BUILTIN (olddecl)) 1630 { 1631 tree type = TREE_TYPE (newdecl); 1632 tree attribs = (*targetm.merge_type_attributes) 1633 (TREE_TYPE (olddecl), type); 1634 1635 type = cp_build_type_attribute_variant (type, attribs); 1636 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type; 1637 } 1638 1639 /* If a function is explicitly declared "throw ()", propagate that to 1640 the corresponding builtin. */ 1641 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL 1642 && DECL_ANTICIPATED (olddecl) 1643 && TREE_NOTHROW (newdecl) 1644 && !TREE_NOTHROW (olddecl)) 1645 { 1646 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl); 1647 tree tmpdecl = builtin_decl_explicit (fncode); 1648 if (tmpdecl && tmpdecl != olddecl && types_match) 1649 TREE_NOTHROW (tmpdecl) = 1; 1650 } 1651 1652 /* Whether or not the builtin can throw exceptions has no 1653 bearing on this declarator. */ 1654 TREE_NOTHROW (olddecl) = 0; 1655 1656 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl)) 1657 { 1658 /* If a builtin function is redeclared as `static', merge 1659 the declarations, but make the original one static. */ 1660 DECL_THIS_STATIC (olddecl) = 1; 1661 TREE_PUBLIC (olddecl) = 0; 1662 1663 /* Make the old declaration consistent with the new one so 1664 that all remnants of the builtin-ness of this function 1665 will be banished. */ 1666 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl)); 1667 COPY_DECL_RTL (newdecl, olddecl); 1668 } 1669 } 1670 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl)) 1671 { 1672 /* C++ Standard, 3.3, clause 4: 1673 "[Note: a namespace name or a class template name must be unique 1674 in its declarative region (7.3.2, clause 14). ]" */ 1675 if (TREE_CODE (olddecl) != NAMESPACE_DECL 1676 && TREE_CODE (newdecl) != NAMESPACE_DECL 1677 && (TREE_CODE (olddecl) != TEMPLATE_DECL 1678 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL) 1679 && (TREE_CODE (newdecl) != TEMPLATE_DECL 1680 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL)) 1681 { 1682 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl) 1683 && TREE_CODE (newdecl) != TYPE_DECL) 1684 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl) 1685 && TREE_CODE (olddecl) != TYPE_DECL)) 1686 { 1687 /* We do nothing special here, because C++ does such nasty 1688 things with TYPE_DECLs. Instead, just let the TYPE_DECL 1689 get shadowed, and know that if we need to find a TYPE_DECL 1690 for a given name, we can look in the IDENTIFIER_TYPE_VALUE 1691 slot of the identifier. */ 1692 return NULL_TREE; 1693 } 1694 1695 if ((TREE_CODE (newdecl) == FUNCTION_DECL 1696 && DECL_FUNCTION_TEMPLATE_P (olddecl)) 1697 || (TREE_CODE (olddecl) == FUNCTION_DECL 1698 && DECL_FUNCTION_TEMPLATE_P (newdecl))) 1699 return NULL_TREE; 1700 } 1701 1702 error ("%q#D redeclared as different kind of symbol", newdecl); 1703 if (TREE_CODE (olddecl) == TREE_LIST) 1704 olddecl = TREE_VALUE (olddecl); 1705 inform (DECL_SOURCE_LOCATION (olddecl), 1706 "previous declaration %q#D", olddecl); 1707 1708 return error_mark_node; 1709 } 1710 else if (!types_match) 1711 { 1712 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)) 1713 /* These are certainly not duplicate declarations; they're 1714 from different scopes. */ 1715 return NULL_TREE; 1716 1717 if (TREE_CODE (newdecl) == TEMPLATE_DECL) 1718 { 1719 /* The name of a class template may not be declared to refer to 1720 any other template, class, function, object, namespace, value, 1721 or type in the same scope. */ 1722 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL 1723 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL) 1724 { 1725 error ("conflicting declaration of template %q+#D", newdecl); 1726 inform (DECL_SOURCE_LOCATION (olddecl), 1727 "previous declaration %q#D", olddecl); 1728 return error_mark_node; 1729 } 1730 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL 1731 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL 1732 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))), 1733 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl)))) 1734 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl), 1735 DECL_TEMPLATE_PARMS (olddecl)) 1736 /* Template functions can be disambiguated by 1737 return type. */ 1738 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)), 1739 TREE_TYPE (TREE_TYPE (olddecl))) 1740 // Template functions can also be disambiguated by 1741 // constraints. 1742 && equivalently_constrained (olddecl, newdecl)) 1743 { 1744 error ("ambiguating new declaration %q+#D", newdecl); 1745 inform (DECL_SOURCE_LOCATION (olddecl), 1746 "old declaration %q#D", olddecl); 1747 } 1748 else if (check_concept_refinement (olddecl, newdecl)) 1749 return error_mark_node; 1750 return NULL_TREE; 1751 } 1752 if (TREE_CODE (newdecl) == FUNCTION_DECL) 1753 { 1754 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl)) 1755 { 1756 error ("conflicting declaration of C function %q+#D", 1757 newdecl); 1758 inform (DECL_SOURCE_LOCATION (olddecl), 1759 "previous declaration %q#D", olddecl); 1760 return NULL_TREE; 1761 } 1762 /* For function versions, params and types match, but they 1763 are not ambiguous. */ 1764 else if ((!DECL_FUNCTION_VERSIONED (newdecl) 1765 && !DECL_FUNCTION_VERSIONED (olddecl)) 1766 // The functions have the same parameter types. 1767 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)), 1768 TYPE_ARG_TYPES (TREE_TYPE (olddecl))) 1769 // And the same constraints. 1770 && equivalently_constrained (newdecl, olddecl)) 1771 { 1772 error ("ambiguating new declaration of %q+#D", newdecl); 1773 inform (DECL_SOURCE_LOCATION (olddecl), 1774 "old declaration %q#D", olddecl); 1775 return error_mark_node; 1776 } 1777 else 1778 return NULL_TREE; 1779 } 1780 else 1781 { 1782 error ("conflicting declaration %q+#D", newdecl); 1783 inform (DECL_SOURCE_LOCATION (olddecl), 1784 "previous declaration as %q#D", olddecl); 1785 return error_mark_node; 1786 } 1787 } 1788 else if (TREE_CODE (newdecl) == FUNCTION_DECL 1789 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl) 1790 && (!DECL_TEMPLATE_INFO (newdecl) 1791 || (DECL_TI_TEMPLATE (newdecl) 1792 != DECL_TI_TEMPLATE (olddecl)))) 1793 || (DECL_TEMPLATE_SPECIALIZATION (newdecl) 1794 && (!DECL_TEMPLATE_INFO (olddecl) 1795 || (DECL_TI_TEMPLATE (olddecl) 1796 != DECL_TI_TEMPLATE (newdecl)))))) 1797 /* It's OK to have a template specialization and a non-template 1798 with the same type, or to have specializations of two 1799 different templates with the same type. Note that if one is a 1800 specialization, and the other is an instantiation of the same 1801 template, that we do not exit at this point. That situation 1802 can occur if we instantiate a template class, and then 1803 specialize one of its methods. This situation is valid, but 1804 the declarations must be merged in the usual way. */ 1805 return NULL_TREE; 1806 else if (TREE_CODE (newdecl) == FUNCTION_DECL 1807 && ((DECL_TEMPLATE_INSTANTIATION (olddecl) 1808 && !DECL_USE_TEMPLATE (newdecl)) 1809 || (DECL_TEMPLATE_INSTANTIATION (newdecl) 1810 && !DECL_USE_TEMPLATE (olddecl)))) 1811 /* One of the declarations is a template instantiation, and the 1812 other is not a template at all. That's OK. */ 1813 return NULL_TREE; 1814 else if (TREE_CODE (newdecl) == NAMESPACE_DECL) 1815 { 1816 /* In [namespace.alias] we have: 1817 1818 In a declarative region, a namespace-alias-definition can be 1819 used to redefine a namespace-alias declared in that declarative 1820 region to refer only to the namespace to which it already 1821 refers. 1822 1823 Therefore, if we encounter a second alias directive for the same 1824 alias, we can just ignore the second directive. */ 1825 if (DECL_NAMESPACE_ALIAS (newdecl) 1826 && (DECL_NAMESPACE_ALIAS (newdecl) 1827 == DECL_NAMESPACE_ALIAS (olddecl))) 1828 return olddecl; 1829 1830 /* Leave it to update_binding to merge or report error. */ 1831 return NULL_TREE; 1832 } 1833 else 1834 { 1835 const char *errmsg = redeclaration_error_message (newdecl, olddecl); 1836 if (errmsg) 1837 { 1838 error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl); 1839 if (DECL_NAME (olddecl) != NULL_TREE) 1840 inform (DECL_SOURCE_LOCATION (olddecl), 1841 (DECL_INITIAL (olddecl) && namespace_bindings_p ()) 1842 ? G_("%q#D previously defined here") 1843 : G_("%q#D previously declared here"), olddecl); 1844 return error_mark_node; 1845 } 1846 else if (TREE_CODE (olddecl) == FUNCTION_DECL 1847 && DECL_INITIAL (olddecl) != NULL_TREE 1848 && !prototype_p (TREE_TYPE (olddecl)) 1849 && prototype_p (TREE_TYPE (newdecl))) 1850 { 1851 /* Prototype decl follows defn w/o prototype. */ 1852 if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0, 1853 "prototype specified for %q#D", newdecl)) 1854 inform (DECL_SOURCE_LOCATION (olddecl), 1855 "previous non-prototype definition here"); 1856 } 1857 else if (VAR_OR_FUNCTION_DECL_P (olddecl) 1858 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl)) 1859 { 1860 /* [dcl.link] 1861 If two declarations of the same function or object 1862 specify different linkage-specifications ..., the program 1863 is ill-formed.... Except for functions with C++ linkage, 1864 a function declaration without a linkage specification 1865 shall not precede the first linkage specification for 1866 that function. A function can be declared without a 1867 linkage specification after an explicit linkage 1868 specification has been seen; the linkage explicitly 1869 specified in the earlier declaration is not affected by 1870 such a function declaration. 1871 1872 DR 563 raises the question why the restrictions on 1873 functions should not also apply to objects. Older 1874 versions of G++ silently ignore the linkage-specification 1875 for this example: 1876 1877 namespace N { 1878 extern int i; 1879 extern "C" int i; 1880 } 1881 1882 which is clearly wrong. Therefore, we now treat objects 1883 like functions. */ 1884 if (current_lang_depth () == 0) 1885 { 1886 /* There is no explicit linkage-specification, so we use 1887 the linkage from the previous declaration. */ 1888 retrofit_lang_decl (newdecl); 1889 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl)); 1890 } 1891 else 1892 { 1893 error ("conflicting declaration of %q+#D with %qL linkage", 1894 newdecl, DECL_LANGUAGE (newdecl)); 1895 inform (DECL_SOURCE_LOCATION (olddecl), 1896 "previous declaration with %qL linkage", 1897 DECL_LANGUAGE (olddecl)); 1898 } 1899 } 1900 1901 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl)) 1902 ; 1903 else if (TREE_CODE (olddecl) == FUNCTION_DECL) 1904 { 1905 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */ 1906 if (DECL_FUNCTION_MEMBER_P (olddecl) 1907 && (/* grokfndecl passes member function templates too 1908 as FUNCTION_DECLs. */ 1909 DECL_TEMPLATE_INFO (olddecl) 1910 /* C++11 8.3.6/6. 1911 Default arguments for a member function of a class 1912 template shall be specified on the initial declaration 1913 of the member function within the class template. */ 1914 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl)))) 1915 check_redeclaration_no_default_args (newdecl); 1916 else 1917 { 1918 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl); 1919 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl); 1920 int i = 1; 1921 1922 for (; t1 && t1 != void_list_node; 1923 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++) 1924 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2)) 1925 { 1926 if (simple_cst_equal (TREE_PURPOSE (t1), 1927 TREE_PURPOSE (t2)) == 1) 1928 { 1929 if (permerror (input_location, 1930 "default argument given for parameter " 1931 "%d of %q#D", i, newdecl)) 1932 inform (DECL_SOURCE_LOCATION (olddecl), 1933 "previous specification in %q#D here", 1934 olddecl); 1935 } 1936 else 1937 { 1938 error ("default argument given for parameter %d " 1939 "of %q#D", i, newdecl); 1940 inform (DECL_SOURCE_LOCATION (olddecl), 1941 "previous specification in %q#D here", 1942 olddecl); 1943 } 1944 } 1945 } 1946 } 1947 } 1948 1949 /* Do not merge an implicit typedef with an explicit one. In: 1950 1951 class A; 1952 ... 1953 typedef class A A __attribute__ ((foo)); 1954 1955 the attribute should apply only to the typedef. */ 1956 if (TREE_CODE (olddecl) == TYPE_DECL 1957 && (DECL_IMPLICIT_TYPEDEF_P (olddecl) 1958 || DECL_IMPLICIT_TYPEDEF_P (newdecl))) 1959 return NULL_TREE; 1960 1961 /* If new decl is `static' and an `extern' was seen previously, 1962 warn about it. */ 1963 warn_extern_redeclared_static (newdecl, olddecl); 1964 1965 if (!validate_constexpr_redeclaration (olddecl, newdecl)) 1966 return error_mark_node; 1967 1968 /* We have committed to returning 1 at this point. */ 1969 if (TREE_CODE (newdecl) == FUNCTION_DECL) 1970 { 1971 /* Now that functions must hold information normally held 1972 by field decls, there is extra work to do so that 1973 declaration information does not get destroyed during 1974 definition. */ 1975 if (DECL_VINDEX (olddecl)) 1976 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl); 1977 if (DECL_CONTEXT (olddecl)) 1978 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl); 1979 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl); 1980 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl); 1981 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl); 1982 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl); 1983 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl); 1984 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl); 1985 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl); 1986 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl); 1987 if (DECL_OVERLOADED_OPERATOR_P (olddecl)) 1988 DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl) 1989 = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl); 1990 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE; 1991 1992 /* Optionally warn about more than one declaration for the same 1993 name, but don't warn about a function declaration followed by a 1994 definition. */ 1995 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl) 1996 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE) 1997 /* Don't warn about extern decl followed by definition. */ 1998 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl)) 1999 /* Don't warn about friends, let add_friend take care of it. */ 2000 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl)) 2001 /* Don't warn about declaration followed by specialization. */ 2002 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl) 2003 || DECL_TEMPLATE_SPECIALIZATION (olddecl))) 2004 { 2005 if (warning_at (DECL_SOURCE_LOCATION (newdecl), 2006 OPT_Wredundant_decls, 2007 "redundant redeclaration of %qD in same scope", 2008 newdecl)) 2009 inform (DECL_SOURCE_LOCATION (olddecl), 2010 "previous declaration of %qD", olddecl); 2011 } 2012 2013 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl) 2014 && DECL_TEMPLATE_SPECIALIZATION (newdecl))) 2015 { 2016 if (DECL_DELETED_FN (newdecl)) 2017 { 2018 error ("deleted definition of %q+D", newdecl); 2019 inform (DECL_SOURCE_LOCATION (olddecl), 2020 "previous declaration of %qD", olddecl); 2021 } 2022 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl); 2023 } 2024 } 2025 2026 /* Deal with C++: must preserve virtual function table size. */ 2027 if (TREE_CODE (olddecl) == TYPE_DECL) 2028 { 2029 tree newtype = TREE_TYPE (newdecl); 2030 tree oldtype = TREE_TYPE (olddecl); 2031 2032 if (newtype != error_mark_node && oldtype != error_mark_node 2033 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype)) 2034 CLASSTYPE_FRIEND_CLASSES (newtype) 2035 = CLASSTYPE_FRIEND_CLASSES (oldtype); 2036 2037 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl); 2038 } 2039 2040 /* Copy all the DECL_... slots specified in the new decl except for 2041 any that we copy here from the old type. */ 2042 if (merge_attr) 2043 DECL_ATTRIBUTES (newdecl) 2044 = (*targetm.merge_decl_attributes) (olddecl, newdecl); 2045 else 2046 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl); 2047 2048 if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl)) 2049 { 2050 olddecl_friend = DECL_FRIEND_P (olddecl); 2051 hidden_friend = (DECL_ANTICIPATED (olddecl) 2052 && DECL_HIDDEN_FRIEND_P (olddecl) 2053 && newdecl_is_friend); 2054 if (!hidden_friend) 2055 { 2056 DECL_ANTICIPATED (olddecl) = 0; 2057 DECL_HIDDEN_FRIEND_P (olddecl) = 0; 2058 } 2059 } 2060 2061 if (TREE_CODE (newdecl) == TEMPLATE_DECL) 2062 { 2063 tree old_result; 2064 tree new_result; 2065 old_result = DECL_TEMPLATE_RESULT (olddecl); 2066 new_result = DECL_TEMPLATE_RESULT (newdecl); 2067 TREE_TYPE (olddecl) = TREE_TYPE (old_result); 2068 DECL_TEMPLATE_SPECIALIZATIONS (olddecl) 2069 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl), 2070 DECL_TEMPLATE_SPECIALIZATIONS (newdecl)); 2071 2072 DECL_ATTRIBUTES (old_result) 2073 = (*targetm.merge_decl_attributes) (old_result, new_result); 2074 2075 if (DECL_FUNCTION_TEMPLATE_P (newdecl)) 2076 { 2077 /* Per C++11 8.3.6/4, default arguments cannot be added in later 2078 declarations of a function template. */ 2079 if (DECL_SOURCE_LOCATION (newdecl) 2080 != DECL_SOURCE_LOCATION (olddecl)) 2081 check_redeclaration_no_default_args (newdecl); 2082 2083 check_default_args (newdecl); 2084 2085 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result) 2086 && DECL_INITIAL (new_result)) 2087 { 2088 if (DECL_INITIAL (old_result)) 2089 DECL_UNINLINABLE (old_result) = 1; 2090 else 2091 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result); 2092 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result); 2093 DECL_NOT_REALLY_EXTERN (old_result) 2094 = DECL_NOT_REALLY_EXTERN (new_result); 2095 DECL_INTERFACE_KNOWN (old_result) 2096 = DECL_INTERFACE_KNOWN (new_result); 2097 DECL_DECLARED_INLINE_P (old_result) 2098 = DECL_DECLARED_INLINE_P (new_result); 2099 DECL_DISREGARD_INLINE_LIMITS (old_result) 2100 |= DECL_DISREGARD_INLINE_LIMITS (new_result); 2101 2102 } 2103 else 2104 { 2105 DECL_DECLARED_INLINE_P (old_result) 2106 |= DECL_DECLARED_INLINE_P (new_result); 2107 DECL_DISREGARD_INLINE_LIMITS (old_result) 2108 |= DECL_DISREGARD_INLINE_LIMITS (new_result); 2109 check_redeclaration_exception_specification (newdecl, olddecl); 2110 2111 merge_attribute_bits (new_result, old_result); 2112 } 2113 } 2114 2115 /* If the new declaration is a definition, update the file and 2116 line information on the declaration, and also make 2117 the old declaration the same definition. */ 2118 if (DECL_INITIAL (new_result) != NULL_TREE) 2119 { 2120 DECL_SOURCE_LOCATION (olddecl) 2121 = DECL_SOURCE_LOCATION (old_result) 2122 = DECL_SOURCE_LOCATION (newdecl); 2123 DECL_INITIAL (old_result) = DECL_INITIAL (new_result); 2124 if (DECL_FUNCTION_TEMPLATE_P (newdecl)) 2125 { 2126 tree parm; 2127 DECL_ARGUMENTS (old_result) 2128 = DECL_ARGUMENTS (new_result); 2129 for (parm = DECL_ARGUMENTS (old_result); parm; 2130 parm = DECL_CHAIN (parm)) 2131 DECL_CONTEXT (parm) = old_result; 2132 } 2133 } 2134 2135 return olddecl; 2136 } 2137 2138 if (types_match) 2139 { 2140 if (TREE_CODE (newdecl) == FUNCTION_DECL) 2141 check_redeclaration_exception_specification (newdecl, olddecl); 2142 2143 /* Automatically handles default parameters. */ 2144 tree oldtype = TREE_TYPE (olddecl); 2145 tree newtype; 2146 2147 /* For typedefs use the old type, as the new type's DECL_NAME points 2148 at newdecl, which will be ggc_freed. */ 2149 if (TREE_CODE (newdecl) == TYPE_DECL) 2150 { 2151 /* But NEWTYPE might have an attribute, honor that. */ 2152 tree tem = TREE_TYPE (newdecl); 2153 newtype = oldtype; 2154 2155 if (TYPE_USER_ALIGN (tem)) 2156 { 2157 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype)) 2158 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem)); 2159 TYPE_USER_ALIGN (newtype) = true; 2160 } 2161 2162 /* And remove the new type from the variants list. */ 2163 if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl) 2164 { 2165 tree remove = TREE_TYPE (newdecl); 2166 for (tree t = TYPE_MAIN_VARIANT (remove); ; 2167 t = TYPE_NEXT_VARIANT (t)) 2168 if (TYPE_NEXT_VARIANT (t) == remove) 2169 { 2170 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove); 2171 break; 2172 } 2173 } 2174 } 2175 else if (merge_attr) 2176 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl)); 2177 else 2178 newtype = TREE_TYPE (newdecl); 2179 2180 if (VAR_P (newdecl)) 2181 { 2182 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl); 2183 /* For already initialized vars, TREE_READONLY could have been 2184 cleared in cp_finish_decl, because the var needs runtime 2185 initialization or destruction. Make sure not to set 2186 TREE_READONLY on it again. */ 2187 if (DECL_INITIALIZED_P (olddecl) 2188 && !DECL_EXTERNAL (olddecl) 2189 && !TREE_READONLY (olddecl)) 2190 TREE_READONLY (newdecl) = 0; 2191 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl); 2192 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl) 2193 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl); 2194 if (DECL_DEPENDENT_INIT_P (olddecl)) 2195 SET_DECL_DEPENDENT_INIT_P (newdecl, true); 2196 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl) 2197 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl); 2198 if (DECL_CLASS_SCOPE_P (olddecl)) 2199 DECL_DECLARED_CONSTEXPR_P (newdecl) 2200 |= DECL_DECLARED_CONSTEXPR_P (olddecl); 2201 2202 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */ 2203 if (DECL_LANG_SPECIFIC (olddecl) 2204 && CP_DECL_THREADPRIVATE_P (olddecl)) 2205 { 2206 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */ 2207 retrofit_lang_decl (newdecl); 2208 CP_DECL_THREADPRIVATE_P (newdecl) = 1; 2209 } 2210 } 2211 2212 /* An explicit specialization of a function template or of a member 2213 function of a class template can be declared transaction_safe 2214 independently of whether the corresponding template entity is declared 2215 transaction_safe. */ 2216 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL 2217 && DECL_TEMPLATE_INSTANTIATION (olddecl) 2218 && DECL_TEMPLATE_SPECIALIZATION (newdecl) 2219 && tx_safe_fn_type_p (newtype) 2220 && !tx_safe_fn_type_p (TREE_TYPE (newdecl))) 2221 newtype = tx_unsafe_fn_variant (newtype); 2222 2223 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype; 2224 2225 if (TREE_CODE (newdecl) == FUNCTION_DECL) 2226 check_default_args (newdecl); 2227 2228 /* Lay the type out, unless already done. */ 2229 if (! same_type_p (newtype, oldtype) 2230 && TREE_TYPE (newdecl) != error_mark_node 2231 && !(processing_template_decl && uses_template_parms (newdecl))) 2232 layout_type (TREE_TYPE (newdecl)); 2233 2234 if ((VAR_P (newdecl) 2235 || TREE_CODE (newdecl) == PARM_DECL 2236 || TREE_CODE (newdecl) == RESULT_DECL 2237 || TREE_CODE (newdecl) == FIELD_DECL 2238 || TREE_CODE (newdecl) == TYPE_DECL) 2239 && !(processing_template_decl && uses_template_parms (newdecl))) 2240 layout_decl (newdecl, 0); 2241 2242 /* Merge deprecatedness. */ 2243 if (TREE_DEPRECATED (newdecl)) 2244 TREE_DEPRECATED (olddecl) = 1; 2245 2246 /* Preserve function specific target and optimization options */ 2247 if (TREE_CODE (newdecl) == FUNCTION_DECL) 2248 { 2249 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl) 2250 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl)) 2251 DECL_FUNCTION_SPECIFIC_TARGET (newdecl) 2252 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl); 2253 2254 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl) 2255 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)) 2256 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl) 2257 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl); 2258 } 2259 else 2260 { 2261 /* Merge the const type qualifier. */ 2262 if (TREE_READONLY (newdecl)) 2263 TREE_READONLY (olddecl) = 1; 2264 /* Merge the volatile type qualifier. */ 2265 if (TREE_THIS_VOLATILE (newdecl)) 2266 TREE_THIS_VOLATILE (olddecl) = 1; 2267 } 2268 2269 /* Merge the initialization information. */ 2270 if (DECL_INITIAL (newdecl) == NULL_TREE 2271 && DECL_INITIAL (olddecl) != NULL_TREE) 2272 { 2273 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl); 2274 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl); 2275 if (TREE_CODE (newdecl) == FUNCTION_DECL) 2276 { 2277 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl); 2278 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl); 2279 } 2280 } 2281 2282 if (TREE_CODE (newdecl) == FUNCTION_DECL) 2283 { 2284 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl) 2285 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl); 2286 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl); 2287 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl); 2288 DECL_LOOPING_CONST_OR_PURE_P (newdecl) 2289 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl); 2290 2291 if (merge_attr) 2292 merge_attribute_bits (newdecl, olddecl); 2293 else 2294 { 2295 /* Merge the noreturn bit. */ 2296 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl); 2297 TREE_READONLY (olddecl) = TREE_READONLY (newdecl); 2298 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl); 2299 DECL_IS_MALLOC (olddecl) = DECL_IS_MALLOC (newdecl); 2300 DECL_PURE_P (olddecl) = DECL_PURE_P (newdecl); 2301 } 2302 /* Keep the old RTL. */ 2303 COPY_DECL_RTL (olddecl, newdecl); 2304 } 2305 else if (VAR_P (newdecl) 2306 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl))) 2307 { 2308 /* Keep the old RTL. We cannot keep the old RTL if the old 2309 declaration was for an incomplete object and the new 2310 declaration is not since many attributes of the RTL will 2311 change. */ 2312 COPY_DECL_RTL (olddecl, newdecl); 2313 } 2314 } 2315 /* If cannot merge, then use the new type and qualifiers, 2316 and don't preserve the old rtl. */ 2317 else 2318 { 2319 /* Clean out any memory we had of the old declaration. */ 2320 tree oldstatic = value_member (olddecl, static_aggregates); 2321 if (oldstatic) 2322 TREE_VALUE (oldstatic) = error_mark_node; 2323 2324 TREE_TYPE (olddecl) = TREE_TYPE (newdecl); 2325 TREE_READONLY (olddecl) = TREE_READONLY (newdecl); 2326 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl); 2327 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl); 2328 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl); 2329 } 2330 2331 /* Merge the storage class information. */ 2332 merge_weak (newdecl, olddecl); 2333 2334 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl); 2335 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl); 2336 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl); 2337 if (! DECL_EXTERNAL (olddecl)) 2338 DECL_EXTERNAL (newdecl) = 0; 2339 if (! DECL_COMDAT (olddecl)) 2340 DECL_COMDAT (newdecl) = 0; 2341 2342 new_template_info = NULL_TREE; 2343 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl)) 2344 { 2345 bool new_redefines_gnu_inline = false; 2346 2347 if (new_defines_function 2348 && ((DECL_INTERFACE_KNOWN (olddecl) 2349 && TREE_CODE (olddecl) == FUNCTION_DECL) 2350 || (TREE_CODE (olddecl) == TEMPLATE_DECL 2351 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) 2352 == FUNCTION_DECL)))) 2353 { 2354 tree fn = olddecl; 2355 2356 if (TREE_CODE (fn) == TEMPLATE_DECL) 2357 fn = DECL_TEMPLATE_RESULT (olddecl); 2358 2359 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn); 2360 } 2361 2362 if (!new_redefines_gnu_inline) 2363 { 2364 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl); 2365 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl); 2366 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl); 2367 } 2368 DECL_TEMPLATE_INSTANTIATED (newdecl) 2369 |= DECL_TEMPLATE_INSTANTIATED (olddecl); 2370 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl); 2371 2372 /* If the OLDDECL is an instantiation and/or specialization, 2373 then the NEWDECL must be too. But, it may not yet be marked 2374 as such if the caller has created NEWDECL, but has not yet 2375 figured out that it is a redeclaration. */ 2376 if (!DECL_USE_TEMPLATE (newdecl)) 2377 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl); 2378 2379 /* Don't really know how much of the language-specific 2380 values we should copy from old to new. */ 2381 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl); 2382 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl); 2383 DECL_INITIALIZED_IN_CLASS_P (newdecl) 2384 |= DECL_INITIALIZED_IN_CLASS_P (olddecl); 2385 2386 if (LANG_DECL_HAS_MIN (newdecl)) 2387 { 2388 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 = 2389 DECL_LANG_SPECIFIC (olddecl)->u.min.u2; 2390 if (DECL_TEMPLATE_INFO (newdecl)) 2391 { 2392 new_template_info = DECL_TEMPLATE_INFO (newdecl); 2393 if (DECL_TEMPLATE_INSTANTIATION (olddecl) 2394 && DECL_TEMPLATE_SPECIALIZATION (newdecl)) 2395 /* Remember the presence of explicit specialization args. */ 2396 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl)) 2397 = TINFO_USED_TEMPLATE_ID (new_template_info); 2398 } 2399 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl); 2400 } 2401 /* Only functions have these fields. */ 2402 if (DECL_DECLARES_FUNCTION_P (newdecl)) 2403 { 2404 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl); 2405 DECL_BEFRIENDING_CLASSES (newdecl) 2406 = chainon (DECL_BEFRIENDING_CLASSES (newdecl), 2407 DECL_BEFRIENDING_CLASSES (olddecl)); 2408 /* DECL_THUNKS is only valid for virtual functions, 2409 otherwise it is a DECL_FRIEND_CONTEXT. */ 2410 if (DECL_VIRTUAL_P (newdecl)) 2411 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl)); 2412 } 2413 /* Only variables have this field. */ 2414 else if (VAR_P (newdecl) 2415 && VAR_HAD_UNKNOWN_BOUND (olddecl)) 2416 SET_VAR_HAD_UNKNOWN_BOUND (newdecl); 2417 } 2418 2419 if (TREE_CODE (newdecl) == FUNCTION_DECL) 2420 { 2421 tree parm; 2422 2423 /* Merge parameter attributes. */ 2424 tree oldarg, newarg; 2425 for (oldarg = DECL_ARGUMENTS(olddecl), 2426 newarg = DECL_ARGUMENTS(newdecl); 2427 oldarg && newarg; 2428 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) { 2429 DECL_ATTRIBUTES (newarg) 2430 = (*targetm.merge_decl_attributes) (oldarg, newarg); 2431 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg); 2432 } 2433 2434 if (DECL_TEMPLATE_INSTANTIATION (olddecl) 2435 && !DECL_TEMPLATE_INSTANTIATION (newdecl)) 2436 { 2437 /* If newdecl is not a specialization, then it is not a 2438 template-related function at all. And that means that we 2439 should have exited above, returning 0. */ 2440 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl)); 2441 2442 if (DECL_ODR_USED (olddecl)) 2443 /* From [temp.expl.spec]: 2444 2445 If a template, a member template or the member of a class 2446 template is explicitly specialized then that 2447 specialization shall be declared before the first use of 2448 that specialization that would cause an implicit 2449 instantiation to take place, in every translation unit in 2450 which such a use occurs. */ 2451 error ("explicit specialization of %qD after first use", 2452 olddecl); 2453 2454 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl); 2455 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl) 2456 && DECL_DECLARED_INLINE_P (newdecl)); 2457 2458 /* Don't propagate visibility from the template to the 2459 specialization here. We'll do that in determine_visibility if 2460 appropriate. */ 2461 DECL_VISIBILITY_SPECIFIED (olddecl) = 0; 2462 2463 /* [temp.expl.spec/14] We don't inline explicit specialization 2464 just because the primary template says so. */ 2465 gcc_assert (!merge_attr); 2466 2467 DECL_DECLARED_INLINE_P (olddecl) 2468 = DECL_DECLARED_INLINE_P (newdecl); 2469 2470 DECL_DISREGARD_INLINE_LIMITS (olddecl) 2471 = DECL_DISREGARD_INLINE_LIMITS (newdecl); 2472 2473 DECL_UNINLINABLE (olddecl) = DECL_UNINLINABLE (newdecl); 2474 } 2475 else if (new_defines_function && DECL_INITIAL (olddecl)) 2476 { 2477 /* Never inline re-defined extern inline functions. 2478 FIXME: this could be better handled by keeping both 2479 function as separate declarations. */ 2480 DECL_UNINLINABLE (newdecl) = 1; 2481 } 2482 else 2483 { 2484 if (DECL_PENDING_INLINE_P (olddecl)) 2485 { 2486 DECL_PENDING_INLINE_P (newdecl) = 1; 2487 DECL_PENDING_INLINE_INFO (newdecl) 2488 = DECL_PENDING_INLINE_INFO (olddecl); 2489 } 2490 else if (DECL_PENDING_INLINE_P (newdecl)) 2491 ; 2492 else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL) 2493 DECL_SAVED_FUNCTION_DATA (newdecl) 2494 = DECL_SAVED_FUNCTION_DATA (olddecl); 2495 2496 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl); 2497 2498 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl) 2499 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl)); 2500 2501 DECL_DISREGARD_INLINE_LIMITS (newdecl) 2502 = DECL_DISREGARD_INLINE_LIMITS (olddecl) 2503 = (DECL_DISREGARD_INLINE_LIMITS (newdecl) 2504 || DECL_DISREGARD_INLINE_LIMITS (olddecl)); 2505 } 2506 2507 /* Preserve abstractness on cloned [cd]tors. */ 2508 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl); 2509 2510 /* Update newdecl's parms to point at olddecl. */ 2511 for (parm = DECL_ARGUMENTS (newdecl); parm; 2512 parm = DECL_CHAIN (parm)) 2513 DECL_CONTEXT (parm) = olddecl; 2514 2515 if (! types_match) 2516 { 2517 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl)); 2518 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl); 2519 COPY_DECL_RTL (newdecl, olddecl); 2520 } 2521 if (! types_match || new_defines_function) 2522 { 2523 /* These need to be copied so that the names are available. 2524 Note that if the types do match, we'll preserve inline 2525 info and other bits, but if not, we won't. */ 2526 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl); 2527 DECL_RESULT (olddecl) = DECL_RESULT (newdecl); 2528 } 2529 /* If redeclaring a builtin function, it stays built in 2530 if newdecl is a gnu_inline definition, or if newdecl is just 2531 a declaration. */ 2532 if (DECL_BUILT_IN (olddecl) 2533 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match)) 2534 { 2535 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl); 2536 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl); 2537 /* If we're keeping the built-in definition, keep the rtl, 2538 regardless of declaration matches. */ 2539 COPY_DECL_RTL (olddecl, newdecl); 2540 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL) 2541 { 2542 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl); 2543 switch (fncode) 2544 { 2545 /* If a compatible prototype of these builtin functions 2546 is seen, assume the runtime implements it with the 2547 expected semantics. */ 2548 case BUILT_IN_STPCPY: 2549 if (builtin_decl_explicit_p (fncode)) 2550 set_builtin_decl_implicit_p (fncode, true); 2551 break; 2552 default: 2553 if (builtin_decl_explicit_p (fncode)) 2554 set_builtin_decl_declared_p (fncode, true); 2555 break; 2556 } 2557 } 2558 2559 copy_attributes_to_builtin (newdecl); 2560 } 2561 if (new_defines_function) 2562 /* If defining a function declared with other language 2563 linkage, use the previously declared language linkage. */ 2564 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl)); 2565 else if (types_match) 2566 { 2567 DECL_RESULT (newdecl) = DECL_RESULT (olddecl); 2568 /* Don't clear out the arguments if we're just redeclaring a 2569 function. */ 2570 if (DECL_ARGUMENTS (olddecl)) 2571 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl); 2572 } 2573 } 2574 else if (TREE_CODE (newdecl) == NAMESPACE_DECL) 2575 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl); 2576 2577 /* Now preserve various other info from the definition. */ 2578 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl); 2579 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl); 2580 DECL_COMMON (newdecl) = DECL_COMMON (olddecl); 2581 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl); 2582 2583 /* Warn about conflicting visibility specifications. */ 2584 if (DECL_VISIBILITY_SPECIFIED (olddecl) 2585 && DECL_VISIBILITY_SPECIFIED (newdecl) 2586 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl)) 2587 { 2588 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes, 2589 "%qD: visibility attribute ignored because it " 2590 "conflicts with previous declaration", newdecl)) 2591 inform (DECL_SOURCE_LOCATION (olddecl), 2592 "previous declaration of %qD", olddecl); 2593 } 2594 /* Choose the declaration which specified visibility. */ 2595 if (DECL_VISIBILITY_SPECIFIED (olddecl)) 2596 { 2597 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl); 2598 DECL_VISIBILITY_SPECIFIED (newdecl) = 1; 2599 } 2600 /* Init priority used to be merged from newdecl to olddecl by the memcpy, 2601 so keep this behavior. */ 2602 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl)) 2603 { 2604 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl)); 2605 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1; 2606 } 2607 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */ 2608 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl)) 2609 { 2610 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl)); 2611 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl); 2612 } 2613 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl); 2614 if (DECL_WARN_IF_NOT_ALIGN (olddecl) 2615 > DECL_WARN_IF_NOT_ALIGN (newdecl)) 2616 SET_DECL_WARN_IF_NOT_ALIGN (newdecl, 2617 DECL_WARN_IF_NOT_ALIGN (olddecl)); 2618 if (TREE_CODE (newdecl) == FIELD_DECL) 2619 DECL_PACKED (olddecl) = DECL_PACKED (newdecl); 2620 2621 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced 2622 with that from NEWDECL below. */ 2623 if (DECL_LANG_SPECIFIC (olddecl)) 2624 { 2625 gcc_assert (DECL_LANG_SPECIFIC (olddecl) 2626 != DECL_LANG_SPECIFIC (newdecl)); 2627 ggc_free (DECL_LANG_SPECIFIC (olddecl)); 2628 } 2629 2630 /* Merge the USED information. */ 2631 if (TREE_USED (olddecl)) 2632 TREE_USED (newdecl) = 1; 2633 else if (TREE_USED (newdecl)) 2634 TREE_USED (olddecl) = 1; 2635 if (VAR_P (newdecl)) 2636 { 2637 if (DECL_READ_P (olddecl)) 2638 DECL_READ_P (newdecl) = 1; 2639 else if (DECL_READ_P (newdecl)) 2640 DECL_READ_P (olddecl) = 1; 2641 } 2642 if (DECL_PRESERVE_P (olddecl)) 2643 DECL_PRESERVE_P (newdecl) = 1; 2644 else if (DECL_PRESERVE_P (newdecl)) 2645 DECL_PRESERVE_P (olddecl) = 1; 2646 2647 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied 2648 to olddecl and deleted. */ 2649 if (TREE_CODE (newdecl) == FUNCTION_DECL 2650 && DECL_FUNCTION_VERSIONED (olddecl)) 2651 { 2652 /* Set the flag for newdecl so that it gets copied to olddecl. */ 2653 DECL_FUNCTION_VERSIONED (newdecl) = 1; 2654 /* newdecl will be purged after copying to olddecl and is no longer 2655 a version. */ 2656 cgraph_node::delete_function_version_by_decl (newdecl); 2657 } 2658 2659 if (TREE_CODE (newdecl) == FUNCTION_DECL) 2660 { 2661 int function_size; 2662 struct symtab_node *snode = symtab_node::get (olddecl); 2663 2664 function_size = sizeof (struct tree_decl_common); 2665 2666 memcpy ((char *) olddecl + sizeof (struct tree_common), 2667 (char *) newdecl + sizeof (struct tree_common), 2668 function_size - sizeof (struct tree_common)); 2669 2670 memcpy ((char *) olddecl + sizeof (struct tree_decl_common), 2671 (char *) newdecl + sizeof (struct tree_decl_common), 2672 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common)); 2673 2674 /* Preserve symtab node mapping. */ 2675 olddecl->decl_with_vis.symtab_node = snode; 2676 2677 if (new_template_info) 2678 /* If newdecl is a template instantiation, it is possible that 2679 the following sequence of events has occurred: 2680 2681 o A friend function was declared in a class template. The 2682 class template was instantiated. 2683 2684 o The instantiation of the friend declaration was 2685 recorded on the instantiation list, and is newdecl. 2686 2687 o Later, however, instantiate_class_template called pushdecl 2688 on the newdecl to perform name injection. But, pushdecl in 2689 turn called duplicate_decls when it discovered that another 2690 declaration of a global function with the same name already 2691 existed. 2692 2693 o Here, in duplicate_decls, we decided to clobber newdecl. 2694 2695 If we're going to do that, we'd better make sure that 2696 olddecl, and not newdecl, is on the list of 2697 instantiations so that if we try to do the instantiation 2698 again we won't get the clobbered declaration. */ 2699 reregister_specialization (newdecl, 2700 new_template_info, 2701 olddecl); 2702 } 2703 else 2704 { 2705 size_t size = tree_code_size (TREE_CODE (newdecl)); 2706 2707 memcpy ((char *) olddecl + sizeof (struct tree_common), 2708 (char *) newdecl + sizeof (struct tree_common), 2709 sizeof (struct tree_decl_common) - sizeof (struct tree_common)); 2710 switch (TREE_CODE (newdecl)) 2711 { 2712 case LABEL_DECL: 2713 case VAR_DECL: 2714 case RESULT_DECL: 2715 case PARM_DECL: 2716 case FIELD_DECL: 2717 case TYPE_DECL: 2718 case CONST_DECL: 2719 { 2720 struct symtab_node *snode = NULL; 2721 2722 if (VAR_P (newdecl) 2723 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl) 2724 || DECL_EXTERNAL (olddecl))) 2725 snode = symtab_node::get (olddecl); 2726 memcpy ((char *) olddecl + sizeof (struct tree_decl_common), 2727 (char *) newdecl + sizeof (struct tree_decl_common), 2728 size - sizeof (struct tree_decl_common) 2729 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *)); 2730 if (VAR_P (newdecl)) 2731 olddecl->decl_with_vis.symtab_node = snode; 2732 } 2733 break; 2734 default: 2735 memcpy ((char *) olddecl + sizeof (struct tree_decl_common), 2736 (char *) newdecl + sizeof (struct tree_decl_common), 2737 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common) 2738 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *)); 2739 break; 2740 } 2741 } 2742 2743 if (VAR_OR_FUNCTION_DECL_P (newdecl)) 2744 { 2745 if (DECL_EXTERNAL (olddecl) 2746 || TREE_PUBLIC (olddecl) 2747 || TREE_STATIC (olddecl)) 2748 { 2749 /* Merge the section attribute. 2750 We want to issue an error if the sections conflict but that must be 2751 done later in decl_attributes since we are called before attributes 2752 are assigned. */ 2753 if (DECL_SECTION_NAME (newdecl) != NULL) 2754 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl)); 2755 2756 if (DECL_ONE_ONLY (newdecl)) 2757 { 2758 struct symtab_node *oldsym, *newsym; 2759 if (TREE_CODE (olddecl) == FUNCTION_DECL) 2760 oldsym = cgraph_node::get_create (olddecl); 2761 else 2762 oldsym = varpool_node::get_create (olddecl); 2763 newsym = symtab_node::get (newdecl); 2764 oldsym->set_comdat_group (newsym->get_comdat_group ()); 2765 } 2766 } 2767 2768 if (VAR_P (newdecl) 2769 && CP_DECL_THREAD_LOCAL_P (newdecl)) 2770 { 2771 CP_DECL_THREAD_LOCAL_P (olddecl) = true; 2772 if (!processing_template_decl) 2773 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl)); 2774 } 2775 } 2776 2777 DECL_UID (olddecl) = olddecl_uid; 2778 if (olddecl_friend) 2779 DECL_FRIEND_P (olddecl) = 1; 2780 if (hidden_friend) 2781 { 2782 DECL_ANTICIPATED (olddecl) = 1; 2783 DECL_HIDDEN_FRIEND_P (olddecl) = 1; 2784 } 2785 2786 /* NEWDECL contains the merged attribute lists. 2787 Update OLDDECL to be the same. */ 2788 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl); 2789 2790 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl 2791 so that encode_section_info has a chance to look at the new decl 2792 flags and attributes. */ 2793 if (DECL_RTL_SET_P (olddecl) 2794 && (TREE_CODE (olddecl) == FUNCTION_DECL 2795 || (VAR_P (olddecl) 2796 && TREE_STATIC (olddecl)))) 2797 make_decl_rtl (olddecl); 2798 2799 /* The NEWDECL will no longer be needed. Because every out-of-class 2800 declaration of a member results in a call to duplicate_decls, 2801 freeing these nodes represents in a significant savings. 2802 2803 Before releasing the node, be sore to remove function from symbol 2804 table that might have been inserted there to record comdat group. 2805 Be sure to however do not free DECL_STRUCT_FUNCTION because this 2806 structure is shared in between newdecl and oldecl. */ 2807 if (TREE_CODE (newdecl) == FUNCTION_DECL) 2808 DECL_STRUCT_FUNCTION (newdecl) = NULL; 2809 if (VAR_OR_FUNCTION_DECL_P (newdecl)) 2810 { 2811 struct symtab_node *snode = symtab_node::get (newdecl); 2812 if (snode) 2813 snode->remove (); 2814 } 2815 2816 /* Remove the associated constraints for newdecl, if any, before 2817 reclaiming memory. */ 2818 if (flag_concepts) 2819 remove_constraints (newdecl); 2820 2821 ggc_free (newdecl); 2822 2823 return olddecl; 2824 } 2825 2826 /* Return zero if the declaration NEWDECL is valid 2827 when the declaration OLDDECL (assumed to be for the same name) 2828 has already been seen. 2829 Otherwise return an error message format string with a %s 2830 where the identifier should go. */ 2831 2832 static const char * 2833 redeclaration_error_message (tree newdecl, tree olddecl) 2834 { 2835 if (TREE_CODE (newdecl) == TYPE_DECL) 2836 { 2837 /* Because C++ can put things into name space for free, 2838 constructs like "typedef struct foo { ... } foo" 2839 would look like an erroneous redeclaration. */ 2840 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl))) 2841 return NULL; 2842 else 2843 return G_("redefinition of %q#D"); 2844 } 2845 else if (TREE_CODE (newdecl) == FUNCTION_DECL) 2846 { 2847 /* If this is a pure function, its olddecl will actually be 2848 the original initialization to `0' (which we force to call 2849 abort()). Don't complain about redefinition in this case. */ 2850 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl) 2851 && DECL_INITIAL (olddecl) == NULL_TREE) 2852 return NULL; 2853 2854 /* If both functions come from different namespaces, this is not 2855 a redeclaration - this is a conflict with a used function. */ 2856 if (DECL_NAMESPACE_SCOPE_P (olddecl) 2857 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl) 2858 && ! decls_match (olddecl, newdecl)) 2859 return G_("%qD conflicts with used function"); 2860 2861 /* We'll complain about linkage mismatches in 2862 warn_extern_redeclared_static. */ 2863 2864 /* Defining the same name twice is no good. */ 2865 if (decl_defined_p (olddecl) 2866 && decl_defined_p (newdecl)) 2867 { 2868 if (DECL_NAME (olddecl) == NULL_TREE) 2869 return G_("%q#D not declared in class"); 2870 else if (!GNU_INLINE_P (olddecl) 2871 || GNU_INLINE_P (newdecl)) 2872 return G_("redefinition of %q#D"); 2873 } 2874 2875 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl)) 2876 { 2877 bool olda = GNU_INLINE_P (olddecl); 2878 bool newa = GNU_INLINE_P (newdecl); 2879 2880 if (olda != newa) 2881 { 2882 if (newa) 2883 return G_("%q+D redeclared inline with " 2884 "%<gnu_inline%> attribute"); 2885 else 2886 return G_("%q+D redeclared inline without " 2887 "%<gnu_inline%> attribute"); 2888 } 2889 } 2890 2891 check_abi_tag_redeclaration 2892 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)), 2893 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl))); 2894 2895 return NULL; 2896 } 2897 else if (TREE_CODE (newdecl) == TEMPLATE_DECL) 2898 { 2899 tree nt, ot; 2900 2901 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL) 2902 { 2903 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl)) 2904 && COMPLETE_TYPE_P (TREE_TYPE (olddecl))) 2905 return G_("redefinition of %q#D"); 2906 return NULL; 2907 } 2908 2909 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL 2910 || (DECL_TEMPLATE_RESULT (newdecl) 2911 == DECL_TEMPLATE_RESULT (olddecl))) 2912 return NULL; 2913 2914 nt = DECL_TEMPLATE_RESULT (newdecl); 2915 if (DECL_TEMPLATE_INFO (nt)) 2916 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt)); 2917 ot = DECL_TEMPLATE_RESULT (olddecl); 2918 if (DECL_TEMPLATE_INFO (ot)) 2919 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot)); 2920 if (DECL_INITIAL (nt) && DECL_INITIAL (ot) 2921 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt))) 2922 return G_("redefinition of %q#D"); 2923 2924 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt)) 2925 { 2926 bool olda = GNU_INLINE_P (ot); 2927 bool newa = GNU_INLINE_P (nt); 2928 2929 if (olda != newa) 2930 { 2931 if (newa) 2932 return G_("%q+D redeclared inline with " 2933 "%<gnu_inline%> attribute"); 2934 else 2935 return G_("%q+D redeclared inline without " 2936 "%<gnu_inline%> attribute"); 2937 } 2938 } 2939 2940 /* Core issue #226 (C++0x): 2941 2942 If a friend function template declaration specifies a 2943 default template-argument, that declaration shall be a 2944 definition and shall be the only declaration of the 2945 function template in the translation unit. */ 2946 if ((cxx_dialect != cxx98) 2947 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot) 2948 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl), 2949 /*is_primary=*/true, 2950 /*is_partial=*/false, 2951 /*is_friend_decl=*/2)) 2952 return G_("redeclaration of friend %q#D " 2953 "may not have default template arguments"); 2954 2955 return NULL; 2956 } 2957 else if (VAR_P (newdecl) 2958 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl) 2959 && (! DECL_LANG_SPECIFIC (olddecl) 2960 || ! CP_DECL_THREADPRIVATE_P (olddecl) 2961 || CP_DECL_THREAD_LOCAL_P (newdecl))) 2962 { 2963 /* Only variables can be thread-local, and all declarations must 2964 agree on this property. */ 2965 if (CP_DECL_THREAD_LOCAL_P (newdecl)) 2966 return G_("thread-local declaration of %q#D follows " 2967 "non-thread-local declaration"); 2968 else 2969 return G_("non-thread-local declaration of %q#D follows " 2970 "thread-local declaration"); 2971 } 2972 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl)) 2973 { 2974 /* The objects have been declared at namespace scope. If either 2975 is a member of an anonymous union, then this is an invalid 2976 redeclaration. For example: 2977 2978 int i; 2979 union { int i; }; 2980 2981 is invalid. */ 2982 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl)) 2983 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl))) 2984 return G_("redeclaration of %q#D"); 2985 /* If at least one declaration is a reference, there is no 2986 conflict. For example: 2987 2988 int i = 3; 2989 extern int i; 2990 2991 is valid. */ 2992 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl)) 2993 return NULL; 2994 2995 /* Static data member declared outside a class definition 2996 if the variable is defined within the class with constexpr 2997 specifier is declaration rather than definition (and 2998 deprecated). */ 2999 if (cxx_dialect >= cxx17 3000 && VAR_P (olddecl) 3001 && DECL_CLASS_SCOPE_P (olddecl) 3002 && DECL_DECLARED_CONSTEXPR_P (olddecl) 3003 && !DECL_INITIAL (newdecl)) 3004 { 3005 DECL_EXTERNAL (newdecl) = 1; 3006 /* For now, only warn with explicit -Wdeprecated. */ 3007 if (global_options_set.x_warn_deprecated 3008 && warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated, 3009 "redundant redeclaration of %<constexpr%> static " 3010 "data member %qD", newdecl)) 3011 inform (DECL_SOURCE_LOCATION (olddecl), 3012 "previous declaration of %qD", olddecl); 3013 return NULL; 3014 } 3015 3016 /* Reject two definitions. */ 3017 return G_("redefinition of %q#D"); 3018 } 3019 else 3020 { 3021 /* Objects declared with block scope: */ 3022 /* Reject two definitions, and reject a definition 3023 together with an external reference. */ 3024 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl))) 3025 return G_("redeclaration of %q#D"); 3026 return NULL; 3027 } 3028 } 3029 3030 3031 /* Hash and equality functions for the named_label table. */ 3032 3033 hashval_t 3034 named_label_hash::hash (const value_type entry) 3035 { 3036 return IDENTIFIER_HASH_VALUE (entry->name); 3037 } 3038 3039 bool 3040 named_label_hash::equal (const value_type entry, compare_type name) 3041 { 3042 return name == entry->name; 3043 } 3044 3045 /* Look for a label named ID in the current function. If one cannot 3046 be found, create one. Return the named_label_entry, or NULL on 3047 failure. */ 3048 3049 static named_label_entry * 3050 lookup_label_1 (tree id, bool making_local_p) 3051 { 3052 /* You can't use labels at global scope. */ 3053 if (current_function_decl == NULL_TREE) 3054 { 3055 error ("label %qE referenced outside of any function", id); 3056 return NULL; 3057 } 3058 3059 if (!named_labels) 3060 named_labels = hash_table<named_label_hash>::create_ggc (13); 3061 3062 hashval_t hash = IDENTIFIER_HASH_VALUE (id); 3063 named_label_entry **slot 3064 = named_labels->find_slot_with_hash (id, hash, INSERT); 3065 named_label_entry *old = *slot; 3066 3067 if (old && old->label_decl) 3068 { 3069 if (!making_local_p) 3070 return old; 3071 3072 if (old->binding_level == current_binding_level) 3073 { 3074 error ("local label %qE conflicts with existing label", id); 3075 inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label"); 3076 return NULL; 3077 } 3078 } 3079 3080 /* We are making a new decl, create or reuse the named_label_entry */ 3081 named_label_entry *ent = NULL; 3082 if (old && !old->label_decl) 3083 ent = old; 3084 else 3085 { 3086 ent = ggc_cleared_alloc<named_label_entry> (); 3087 ent->name = id; 3088 ent->outer = old; 3089 *slot = ent; 3090 } 3091 3092 /* Now create the LABEL_DECL. */ 3093 tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node); 3094 3095 DECL_CONTEXT (decl) = current_function_decl; 3096 SET_DECL_MODE (decl, VOIDmode); 3097 if (making_local_p) 3098 { 3099 C_DECLARED_LABEL_FLAG (decl) = true; 3100 DECL_CHAIN (decl) = current_binding_level->names; 3101 current_binding_level->names = decl; 3102 } 3103 3104 ent->label_decl = decl; 3105 3106 return ent; 3107 } 3108 3109 /* Wrapper for lookup_label_1. */ 3110 3111 tree 3112 lookup_label (tree id) 3113 { 3114 bool subtime = timevar_cond_start (TV_NAME_LOOKUP); 3115 named_label_entry *ent = lookup_label_1 (id, false); 3116 timevar_cond_stop (TV_NAME_LOOKUP, subtime); 3117 return ent ? ent->label_decl : NULL_TREE; 3118 } 3119 3120 tree 3121 declare_local_label (tree id) 3122 { 3123 bool subtime = timevar_cond_start (TV_NAME_LOOKUP); 3124 named_label_entry *ent = lookup_label_1 (id, true); 3125 timevar_cond_stop (TV_NAME_LOOKUP, subtime); 3126 return ent ? ent->label_decl : NULL_TREE; 3127 } 3128 3129 /* Returns nonzero if it is ill-formed to jump past the declaration of 3130 DECL. Returns 2 if it's also a real problem. */ 3131 3132 static int 3133 decl_jump_unsafe (tree decl) 3134 { 3135 /* [stmt.dcl]/3: A program that jumps from a point where a local variable 3136 with automatic storage duration is not in scope to a point where it is 3137 in scope is ill-formed unless the variable has scalar type, class type 3138 with a trivial default constructor and a trivial destructor, a 3139 cv-qualified version of one of these types, or an array of one of the 3140 preceding types and is declared without an initializer (8.5). */ 3141 tree type = TREE_TYPE (decl); 3142 3143 if (!VAR_P (decl) || TREE_STATIC (decl) 3144 || type == error_mark_node) 3145 return 0; 3146 3147 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl) 3148 || variably_modified_type_p (type, NULL_TREE)) 3149 return 2; 3150 3151 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)) 3152 return 1; 3153 3154 return 0; 3155 } 3156 3157 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch 3158 to the user. */ 3159 3160 static bool 3161 identify_goto (tree decl, location_t loc, const location_t *locus, 3162 diagnostic_t diag_kind) 3163 { 3164 bool complained 3165 = emit_diagnostic (diag_kind, loc, 0, 3166 decl ? N_("jump to label %qD") 3167 : N_("jump to case label"), decl); 3168 if (complained && locus) 3169 inform (*locus, " from here"); 3170 return complained; 3171 } 3172 3173 /* Check that a single previously seen jump to a newly defined label 3174 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for 3175 the jump context; NAMES are the names in scope in LEVEL at the jump 3176 context; LOCUS is the source position of the jump or 0. Returns 3177 true if all is well. */ 3178 3179 static bool 3180 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, 3181 bool exited_omp, const location_t *locus) 3182 { 3183 cp_binding_level *b; 3184 bool complained = false; 3185 int identified = 0; 3186 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false; 3187 3188 if (exited_omp) 3189 { 3190 complained = identify_goto (decl, input_location, locus, DK_ERROR); 3191 if (complained) 3192 inform (input_location, " exits OpenMP structured block"); 3193 saw_omp = true; 3194 identified = 2; 3195 } 3196 3197 for (b = current_binding_level; b ; b = b->level_chain) 3198 { 3199 tree new_decls, old_decls = (b == level ? names : NULL_TREE); 3200 3201 for (new_decls = b->names; new_decls != old_decls; 3202 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls) 3203 : TREE_CHAIN (new_decls))) 3204 { 3205 int problem = decl_jump_unsafe (new_decls); 3206 if (! problem) 3207 continue; 3208 3209 if (!identified) 3210 { 3211 complained = identify_goto (decl, input_location, locus, 3212 DK_PERMERROR); 3213 identified = 1; 3214 } 3215 if (complained) 3216 { 3217 if (problem > 1) 3218 inform (DECL_SOURCE_LOCATION (new_decls), 3219 " crosses initialization of %q#D", new_decls); 3220 else 3221 inform (DECL_SOURCE_LOCATION (new_decls), 3222 " enters scope of %q#D, which has " 3223 "non-trivial destructor", new_decls); 3224 } 3225 } 3226 3227 if (b == level) 3228 break; 3229 3230 const char *inf = NULL; 3231 location_t loc = input_location; 3232 switch (b->kind) 3233 { 3234 case sk_try: 3235 if (!saw_eh) 3236 inf = N_("enters try block"); 3237 saw_eh = true; 3238 break; 3239 3240 case sk_catch: 3241 if (!saw_eh) 3242 inf = N_("enters catch block"); 3243 saw_eh = true; 3244 break; 3245 3246 case sk_omp: 3247 if (!saw_omp) 3248 inf = N_("enters OpenMP structured block"); 3249 saw_omp = true; 3250 break; 3251 3252 case sk_transaction: 3253 if (!saw_tm) 3254 inf = N_("enters synchronized or atomic statement"); 3255 saw_tm = true; 3256 break; 3257 3258 case sk_block: 3259 if (!saw_cxif && level_for_constexpr_if (b->level_chain)) 3260 { 3261 inf = N_("enters constexpr if statement"); 3262 loc = EXPR_LOCATION (b->level_chain->this_entity); 3263 saw_cxif = true; 3264 } 3265 break; 3266 3267 default: 3268 break; 3269 } 3270 3271 if (inf) 3272 { 3273 if (identified < 2) 3274 complained = identify_goto (decl, input_location, locus, DK_ERROR); 3275 identified = 2; 3276 if (complained) 3277 inform (loc, " %s", inf); 3278 } 3279 } 3280 3281 return !identified; 3282 } 3283 3284 static void 3285 check_previous_goto (tree decl, struct named_label_use_entry *use) 3286 { 3287 check_previous_goto_1 (decl, use->binding_level, 3288 use->names_in_scope, use->in_omp_scope, 3289 &use->o_goto_locus); 3290 } 3291 3292 static bool 3293 check_switch_goto (cp_binding_level* level) 3294 { 3295 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL); 3296 } 3297 3298 /* Check that a new jump to a label DECL is OK. Called by 3299 finish_goto_stmt. */ 3300 3301 void 3302 check_goto (tree decl) 3303 { 3304 /* We can't know where a computed goto is jumping. 3305 So we assume that it's OK. */ 3306 if (TREE_CODE (decl) != LABEL_DECL) 3307 return; 3308 3309 /* We didn't record any information about this label when we created it, 3310 and there's not much point since it's trivial to analyze as a return. */ 3311 if (decl == cdtor_label) 3312 return; 3313 3314 hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl)); 3315 named_label_entry **slot 3316 = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT); 3317 named_label_entry *ent = *slot; 3318 3319 /* If the label hasn't been defined yet, defer checking. */ 3320 if (! DECL_INITIAL (decl)) 3321 { 3322 /* Don't bother creating another use if the last goto had the 3323 same data, and will therefore create the same set of errors. */ 3324 if (ent->uses 3325 && ent->uses->names_in_scope == current_binding_level->names) 3326 return; 3327 3328 named_label_use_entry *new_use 3329 = ggc_alloc<named_label_use_entry> (); 3330 new_use->binding_level = current_binding_level; 3331 new_use->names_in_scope = current_binding_level->names; 3332 new_use->o_goto_locus = input_location; 3333 new_use->in_omp_scope = false; 3334 3335 new_use->next = ent->uses; 3336 ent->uses = new_use; 3337 return; 3338 } 3339 3340 bool saw_catch = false, complained = false; 3341 int identified = 0; 3342 tree bad; 3343 unsigned ix; 3344 3345 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope 3346 || ent->in_constexpr_if 3347 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls)) 3348 { 3349 diagnostic_t diag_kind = DK_PERMERROR; 3350 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if 3351 || ent->in_transaction_scope || ent->in_omp_scope) 3352 diag_kind = DK_ERROR; 3353 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl), 3354 &input_location, diag_kind); 3355 identified = 1 + (diag_kind == DK_ERROR); 3356 } 3357 3358 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad) 3359 { 3360 int u = decl_jump_unsafe (bad); 3361 3362 if (u > 1 && DECL_ARTIFICIAL (bad)) 3363 { 3364 /* Can't skip init of __exception_info. */ 3365 if (identified == 1) 3366 { 3367 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl), 3368 &input_location, DK_ERROR); 3369 identified = 2; 3370 } 3371 if (complained) 3372 inform (DECL_SOURCE_LOCATION (bad), " enters catch block"); 3373 saw_catch = true; 3374 } 3375 else if (complained) 3376 { 3377 if (u > 1) 3378 inform (DECL_SOURCE_LOCATION (bad), 3379 " skips initialization of %q#D", bad); 3380 else 3381 inform (DECL_SOURCE_LOCATION (bad), 3382 " enters scope of %q#D which has " 3383 "non-trivial destructor", bad); 3384 } 3385 } 3386 3387 if (complained) 3388 { 3389 if (ent->in_try_scope) 3390 inform (input_location, " enters try block"); 3391 else if (ent->in_catch_scope && !saw_catch) 3392 inform (input_location, " enters catch block"); 3393 else if (ent->in_transaction_scope) 3394 inform (input_location, " enters synchronized or atomic statement"); 3395 else if (ent->in_constexpr_if) 3396 inform (input_location, " enters %<constexpr%> if statement"); 3397 } 3398 3399 if (ent->in_omp_scope) 3400 { 3401 if (complained) 3402 inform (input_location, " enters OpenMP structured block"); 3403 } 3404 else if (flag_openmp) 3405 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain) 3406 { 3407 if (b == ent->binding_level) 3408 break; 3409 if (b->kind == sk_omp) 3410 { 3411 if (identified < 2) 3412 { 3413 complained = identify_goto (decl, 3414 DECL_SOURCE_LOCATION (decl), 3415 &input_location, DK_ERROR); 3416 identified = 2; 3417 } 3418 if (complained) 3419 inform (input_location, " exits OpenMP structured block"); 3420 break; 3421 } 3422 } 3423 } 3424 3425 /* Check that a return is ok wrt OpenMP structured blocks. 3426 Called by finish_return_stmt. Returns true if all is well. */ 3427 3428 bool 3429 check_omp_return (void) 3430 { 3431 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain) 3432 if (b->kind == sk_omp) 3433 { 3434 error ("invalid exit from OpenMP structured block"); 3435 return false; 3436 } 3437 else if (b->kind == sk_function_parms) 3438 break; 3439 return true; 3440 } 3441 3442 /* Define a label, specifying the location in the source file. 3443 Return the LABEL_DECL node for the label. */ 3444 3445 static tree 3446 define_label_1 (location_t location, tree name) 3447 { 3448 /* After labels, make any new cleanups in the function go into their 3449 own new (temporary) binding contour. */ 3450 for (cp_binding_level *p = current_binding_level; 3451 p->kind != sk_function_parms; 3452 p = p->level_chain) 3453 p->more_cleanups_ok = 0; 3454 3455 named_label_entry *ent = lookup_label_1 (name, false); 3456 tree decl = ent->label_decl; 3457 3458 if (DECL_INITIAL (decl) != NULL_TREE) 3459 { 3460 error ("duplicate label %qD", decl); 3461 return error_mark_node; 3462 } 3463 else 3464 { 3465 /* Mark label as having been defined. */ 3466 DECL_INITIAL (decl) = error_mark_node; 3467 /* Say where in the source. */ 3468 DECL_SOURCE_LOCATION (decl) = location; 3469 3470 ent->binding_level = current_binding_level; 3471 ent->names_in_scope = current_binding_level->names; 3472 3473 for (named_label_use_entry *use = ent->uses; use; use = use->next) 3474 check_previous_goto (decl, use); 3475 ent->uses = NULL; 3476 } 3477 3478 return decl; 3479 } 3480 3481 /* Wrapper for define_label_1. */ 3482 3483 tree 3484 define_label (location_t location, tree name) 3485 { 3486 bool running = timevar_cond_start (TV_NAME_LOOKUP); 3487 tree ret = define_label_1 (location, name); 3488 timevar_cond_stop (TV_NAME_LOOKUP, running); 3489 return ret; 3490 } 3491 3492 3493 struct cp_switch 3494 { 3495 cp_binding_level *level; 3496 struct cp_switch *next; 3497 /* The SWITCH_STMT being built. */ 3498 tree switch_stmt; 3499 /* A splay-tree mapping the low element of a case range to the high 3500 element, or NULL_TREE if there is no high element. Used to 3501 determine whether or not a new case label duplicates an old case 3502 label. We need a tree, rather than simply a hash table, because 3503 of the GNU case range extension. */ 3504 splay_tree cases; 3505 /* Remember whether there was a case value that is outside the 3506 range of the original type of the controlling expression. */ 3507 bool outside_range_p; 3508 /* Remember whether a default: case label has been seen. */ 3509 bool has_default_p; 3510 /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT. */ 3511 bool break_stmt_seen_p; 3512 /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch, 3513 where BREAK_STMT doesn't belong to the SWITCH_STMT. */ 3514 bool in_loop_body_p; 3515 }; 3516 3517 /* A stack of the currently active switch statements. The innermost 3518 switch statement is on the top of the stack. There is no need to 3519 mark the stack for garbage collection because it is only active 3520 during the processing of the body of a function, and we never 3521 collect at that point. */ 3522 3523 static struct cp_switch *switch_stack; 3524 3525 /* Called right after a switch-statement condition is parsed. 3526 SWITCH_STMT is the switch statement being parsed. */ 3527 3528 void 3529 push_switch (tree switch_stmt) 3530 { 3531 struct cp_switch *p = XNEW (struct cp_switch); 3532 p->level = current_binding_level; 3533 p->next = switch_stack; 3534 p->switch_stmt = switch_stmt; 3535 p->cases = splay_tree_new (case_compare, NULL, NULL); 3536 p->outside_range_p = false; 3537 p->has_default_p = false; 3538 p->break_stmt_seen_p = false; 3539 p->in_loop_body_p = false; 3540 switch_stack = p; 3541 } 3542 3543 void 3544 pop_switch (void) 3545 { 3546 struct cp_switch *cs = switch_stack; 3547 location_t switch_location; 3548 3549 /* Emit warnings as needed. */ 3550 switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location); 3551 const bool bool_cond_p 3552 = (SWITCH_STMT_TYPE (cs->switch_stmt) 3553 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE); 3554 if (!processing_template_decl) 3555 c_do_switch_warnings (cs->cases, switch_location, 3556 SWITCH_STMT_TYPE (cs->switch_stmt), 3557 SWITCH_STMT_COND (cs->switch_stmt), 3558 bool_cond_p, cs->outside_range_p); 3559 3560 /* For the benefit of block_may_fallthru remember if the switch body 3561 case labels cover all possible values and if there are break; stmts. */ 3562 if (cs->has_default_p 3563 || (!processing_template_decl 3564 && c_switch_covers_all_cases_p (cs->cases, 3565 SWITCH_STMT_TYPE (cs->switch_stmt)))) 3566 SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1; 3567 if (!cs->break_stmt_seen_p) 3568 SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1; 3569 gcc_assert (!cs->in_loop_body_p); 3570 splay_tree_delete (cs->cases); 3571 switch_stack = switch_stack->next; 3572 free (cs); 3573 } 3574 3575 /* Note that a BREAK_STMT is about to be added. If it is inside of 3576 a SWITCH_STMT and not inside of a loop body inside of it, note 3577 in switch_stack we've seen a BREAK_STMT. */ 3578 3579 void 3580 note_break_stmt (void) 3581 { 3582 if (switch_stack && !switch_stack->in_loop_body_p) 3583 switch_stack->break_stmt_seen_p = true; 3584 } 3585 3586 /* Note the start of processing of an iteration statement's body. 3587 The note_break_stmt function will do nothing while processing it. 3588 Return a flag that should be passed to note_iteration_stmt_body_end. */ 3589 3590 bool 3591 note_iteration_stmt_body_start (void) 3592 { 3593 if (!switch_stack) 3594 return false; 3595 bool ret = switch_stack->in_loop_body_p; 3596 switch_stack->in_loop_body_p = true; 3597 return ret; 3598 } 3599 3600 /* Note the end of processing of an iteration statement's body. */ 3601 3602 void 3603 note_iteration_stmt_body_end (bool prev) 3604 { 3605 if (switch_stack) 3606 switch_stack->in_loop_body_p = prev; 3607 } 3608 3609 /* Convert a case constant VALUE in a switch to the type TYPE of the switch 3610 condition. Note that if TYPE and VALUE are already integral we don't 3611 really do the conversion because the language-independent 3612 warning/optimization code will work better that way. */ 3613 3614 static tree 3615 case_conversion (tree type, tree value) 3616 { 3617 if (value == NULL_TREE) 3618 return value; 3619 3620 value = mark_rvalue_use (value); 3621 3622 if (cxx_dialect >= cxx11 3623 && (SCOPED_ENUM_P (type) 3624 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value)))) 3625 { 3626 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type)) 3627 type = type_promotes_to (type); 3628 value = (perform_implicit_conversion_flags 3629 (type, value, tf_warning_or_error, 3630 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL)); 3631 } 3632 return cxx_constant_value (value); 3633 } 3634 3635 /* Note that we've seen a definition of a case label, and complain if this 3636 is a bad place for one. */ 3637 3638 tree 3639 finish_case_label (location_t loc, tree low_value, tree high_value) 3640 { 3641 tree cond, r; 3642 cp_binding_level *p; 3643 tree type; 3644 3645 if (low_value == NULL_TREE && high_value == NULL_TREE) 3646 switch_stack->has_default_p = true; 3647 3648 if (processing_template_decl) 3649 { 3650 tree label; 3651 3652 /* For templates, just add the case label; we'll do semantic 3653 analysis at instantiation-time. */ 3654 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE); 3655 return add_stmt (build_case_label (low_value, high_value, label)); 3656 } 3657 3658 /* Find the condition on which this switch statement depends. */ 3659 cond = SWITCH_STMT_COND (switch_stack->switch_stmt); 3660 if (cond && TREE_CODE (cond) == TREE_LIST) 3661 cond = TREE_VALUE (cond); 3662 3663 if (!check_switch_goto (switch_stack->level)) 3664 return error_mark_node; 3665 3666 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt); 3667 3668 low_value = case_conversion (type, low_value); 3669 high_value = case_conversion (type, high_value); 3670 3671 r = c_add_case_label (loc, switch_stack->cases, cond, type, 3672 low_value, high_value, 3673 &switch_stack->outside_range_p); 3674 3675 /* After labels, make any new cleanups in the function go into their 3676 own new (temporary) binding contour. */ 3677 for (p = current_binding_level; 3678 p->kind != sk_function_parms; 3679 p = p->level_chain) 3680 p->more_cleanups_ok = 0; 3681 3682 return r; 3683 } 3684 3685 struct typename_info { 3686 tree scope; 3687 tree name; 3688 tree template_id; 3689 bool enum_p; 3690 bool class_p; 3691 }; 3692 3693 struct typename_hasher : ggc_ptr_hash<tree_node> 3694 { 3695 typedef typename_info *compare_type; 3696 3697 /* Hash a TYPENAME_TYPE. */ 3698 3699 static hashval_t 3700 hash (tree t) 3701 { 3702 hashval_t hash; 3703 3704 hash = (htab_hash_pointer (TYPE_CONTEXT (t)) 3705 ^ htab_hash_pointer (TYPE_IDENTIFIER (t))); 3706 3707 return hash; 3708 } 3709 3710 /* Compare two TYPENAME_TYPEs. */ 3711 3712 static bool 3713 equal (tree t1, const typename_info *t2) 3714 { 3715 return (TYPE_IDENTIFIER (t1) == t2->name 3716 && TYPE_CONTEXT (t1) == t2->scope 3717 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id 3718 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p 3719 && TYPENAME_IS_CLASS_P (t1) == t2->class_p); 3720 } 3721 }; 3722 3723 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is 3724 the type of `T', NAME is the IDENTIFIER_NODE for `t'. 3725 3726 Returns the new TYPENAME_TYPE. */ 3727 3728 static GTY (()) hash_table<typename_hasher> *typename_htab; 3729 3730 tree 3731 build_typename_type (tree context, tree name, tree fullname, 3732 enum tag_types tag_type) 3733 { 3734 tree t; 3735 tree d; 3736 typename_info ti; 3737 tree *e; 3738 hashval_t hash; 3739 3740 if (typename_htab == NULL) 3741 typename_htab = hash_table<typename_hasher>::create_ggc (61); 3742 3743 ti.scope = FROB_CONTEXT (context); 3744 ti.name = name; 3745 ti.template_id = fullname; 3746 ti.enum_p = tag_type == enum_type; 3747 ti.class_p = (tag_type == class_type 3748 || tag_type == record_type 3749 || tag_type == union_type); 3750 hash = (htab_hash_pointer (ti.scope) 3751 ^ htab_hash_pointer (ti.name)); 3752 3753 /* See if we already have this type. */ 3754 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT); 3755 if (*e) 3756 t = *e; 3757 else 3758 { 3759 /* Build the TYPENAME_TYPE. */ 3760 t = cxx_make_type (TYPENAME_TYPE); 3761 TYPE_CONTEXT (t) = ti.scope; 3762 TYPENAME_TYPE_FULLNAME (t) = ti.template_id; 3763 TYPENAME_IS_ENUM_P (t) = ti.enum_p; 3764 TYPENAME_IS_CLASS_P (t) = ti.class_p; 3765 3766 /* Build the corresponding TYPE_DECL. */ 3767 d = build_decl (input_location, TYPE_DECL, name, t); 3768 TYPE_NAME (TREE_TYPE (d)) = d; 3769 TYPE_STUB_DECL (TREE_TYPE (d)) = d; 3770 DECL_CONTEXT (d) = FROB_CONTEXT (context); 3771 DECL_ARTIFICIAL (d) = 1; 3772 3773 /* Store it in the hash table. */ 3774 *e = t; 3775 3776 /* TYPENAME_TYPEs must always be compared structurally, because 3777 they may or may not resolve down to another type depending on 3778 the currently open classes. */ 3779 SET_TYPE_STRUCTURAL_EQUALITY (t); 3780 } 3781 3782 return t; 3783 } 3784 3785 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag 3786 provided to name the type. Returns an appropriate type, unless an 3787 error occurs, in which case error_mark_node is returned. If we 3788 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we 3789 return that, rather than the _TYPE it corresponds to, in other 3790 cases we look through the type decl. If TF_ERROR is set, complain 3791 about errors, otherwise be quiet. */ 3792 3793 tree 3794 make_typename_type (tree context, tree name, enum tag_types tag_type, 3795 tsubst_flags_t complain) 3796 { 3797 tree fullname; 3798 tree t; 3799 bool want_template; 3800 3801 if (name == error_mark_node 3802 || context == NULL_TREE 3803 || context == error_mark_node) 3804 return error_mark_node; 3805 3806 if (TYPE_P (name)) 3807 { 3808 if (!(TYPE_LANG_SPECIFIC (name) 3809 && (CLASSTYPE_IS_TEMPLATE (name) 3810 || CLASSTYPE_USE_TEMPLATE (name)))) 3811 name = TYPE_IDENTIFIER (name); 3812 else 3813 /* Create a TEMPLATE_ID_EXPR for the type. */ 3814 name = build_nt (TEMPLATE_ID_EXPR, 3815 CLASSTYPE_TI_TEMPLATE (name), 3816 CLASSTYPE_TI_ARGS (name)); 3817 } 3818 else if (TREE_CODE (name) == TYPE_DECL) 3819 name = DECL_NAME (name); 3820 3821 fullname = name; 3822 3823 if (TREE_CODE (name) == TEMPLATE_ID_EXPR) 3824 { 3825 name = TREE_OPERAND (name, 0); 3826 if (DECL_TYPE_TEMPLATE_P (name)) 3827 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name); 3828 if (TREE_CODE (name) != IDENTIFIER_NODE) 3829 { 3830 if (complain & tf_error) 3831 error ("%qD is not a type", name); 3832 return error_mark_node; 3833 } 3834 } 3835 if (TREE_CODE (name) == TEMPLATE_DECL) 3836 { 3837 if (complain & tf_error) 3838 error ("%qD used without template parameters", name); 3839 return error_mark_node; 3840 } 3841 gcc_assert (identifier_p (name)); 3842 gcc_assert (TYPE_P (context)); 3843 3844 if (!MAYBE_CLASS_TYPE_P (context)) 3845 { 3846 if (complain & tf_error) 3847 error ("%q#T is not a class", context); 3848 return error_mark_node; 3849 } 3850 3851 /* When the CONTEXT is a dependent type, NAME could refer to a 3852 dependent base class of CONTEXT. But look inside it anyway 3853 if CONTEXT is a currently open scope, in case it refers to a 3854 member of the current instantiation or a non-dependent base; 3855 lookup will stop when we hit a dependent base. */ 3856 if (!dependent_scope_p (context)) 3857 /* We should only set WANT_TYPE when we're a nested typename type. 3858 Then we can give better diagnostics if we find a non-type. */ 3859 t = lookup_field (context, name, 2, /*want_type=*/true); 3860 else 3861 t = NULL_TREE; 3862 3863 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context)) 3864 return build_typename_type (context, name, fullname, tag_type); 3865 3866 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR; 3867 3868 if (!t) 3869 { 3870 if (complain & tf_error) 3871 { 3872 if (!COMPLETE_TYPE_P (context)) 3873 cxx_incomplete_type_error (NULL_TREE, context); 3874 else 3875 error (want_template ? G_("no class template named %q#T in %q#T") 3876 : G_("no type named %q#T in %q#T"), name, context); 3877 } 3878 return error_mark_node; 3879 } 3880 3881 /* Pull out the template from an injected-class-name (or multiple). */ 3882 if (want_template) 3883 t = maybe_get_template_decl_from_type_decl (t); 3884 3885 if (TREE_CODE (t) == TREE_LIST) 3886 { 3887 if (complain & tf_error) 3888 { 3889 error ("lookup of %qT in %qT is ambiguous", name, context); 3890 print_candidates (t); 3891 } 3892 return error_mark_node; 3893 } 3894 3895 if (want_template && !DECL_TYPE_TEMPLATE_P (t)) 3896 { 3897 if (complain & tf_error) 3898 error ("%<typename %T::%D%> names %q#T, which is not a class template", 3899 context, name, t); 3900 return error_mark_node; 3901 } 3902 if (!want_template && TREE_CODE (t) != TYPE_DECL) 3903 { 3904 if (complain & tf_error) 3905 error ("%<typename %T::%D%> names %q#T, which is not a type", 3906 context, name, t); 3907 return error_mark_node; 3908 } 3909 3910 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain)) 3911 return error_mark_node; 3912 3913 /* If we are currently parsing a template and if T is a typedef accessed 3914 through CONTEXT then we need to remember and check access of T at 3915 template instantiation time. */ 3916 add_typedef_to_current_template_for_access_check (t, context, input_location); 3917 3918 if (want_template) 3919 return lookup_template_class (t, TREE_OPERAND (fullname, 1), 3920 NULL_TREE, context, 3921 /*entering_scope=*/0, 3922 complain | tf_user); 3923 3924 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl)) 3925 t = TREE_TYPE (t); 3926 3927 maybe_record_typedef_use (t); 3928 3929 return t; 3930 } 3931 3932 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name 3933 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs, 3934 in which case error_mark_node is returned. 3935 3936 If PARM_LIST is non-NULL, also make sure that the template parameter 3937 list of TEMPLATE_DECL matches. 3938 3939 If COMPLAIN zero, don't complain about any errors that occur. */ 3940 3941 tree 3942 make_unbound_class_template (tree context, tree name, tree parm_list, 3943 tsubst_flags_t complain) 3944 { 3945 tree t; 3946 tree d; 3947 3948 if (TYPE_P (name)) 3949 name = TYPE_IDENTIFIER (name); 3950 else if (DECL_P (name)) 3951 name = DECL_NAME (name); 3952 gcc_assert (identifier_p (name)); 3953 3954 if (!dependent_type_p (context) 3955 || currently_open_class (context)) 3956 { 3957 tree tmpl = NULL_TREE; 3958 3959 if (MAYBE_CLASS_TYPE_P (context)) 3960 tmpl = lookup_field (context, name, 0, false); 3961 3962 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL) 3963 tmpl = maybe_get_template_decl_from_type_decl (tmpl); 3964 3965 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl)) 3966 { 3967 if (complain & tf_error) 3968 error ("no class template named %q#T in %q#T", name, context); 3969 return error_mark_node; 3970 } 3971 3972 if (parm_list 3973 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list)) 3974 { 3975 if (complain & tf_error) 3976 { 3977 error ("template parameters do not match template %qD", tmpl); 3978 inform (DECL_SOURCE_LOCATION (tmpl), 3979 "%qD declared here", tmpl); 3980 } 3981 return error_mark_node; 3982 } 3983 3984 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl, 3985 complain)) 3986 return error_mark_node; 3987 3988 return tmpl; 3989 } 3990 3991 /* Build the UNBOUND_CLASS_TEMPLATE. */ 3992 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE); 3993 TYPE_CONTEXT (t) = FROB_CONTEXT (context); 3994 TREE_TYPE (t) = NULL_TREE; 3995 SET_TYPE_STRUCTURAL_EQUALITY (t); 3996 3997 /* Build the corresponding TEMPLATE_DECL. */ 3998 d = build_decl (input_location, TEMPLATE_DECL, name, t); 3999 TYPE_NAME (TREE_TYPE (d)) = d; 4000 TYPE_STUB_DECL (TREE_TYPE (d)) = d; 4001 DECL_CONTEXT (d) = FROB_CONTEXT (context); 4002 DECL_ARTIFICIAL (d) = 1; 4003 DECL_TEMPLATE_PARMS (d) = parm_list; 4004 4005 return t; 4006 } 4007 4008 4009 4010 /* Push the declarations of builtin types into the global namespace. 4011 RID_INDEX is the index of the builtin type in the array 4012 RID_POINTERS. NAME is the name used when looking up the builtin 4013 type. TYPE is the _TYPE node for the builtin type. 4014 4015 The calls to set_global_binding below should be 4016 eliminated. Built-in types should not be looked up name; their 4017 names are keywords that the parser can recognize. However, there 4018 is code in c-common.c that uses identifier_global_value to look up 4019 built-in types by name. */ 4020 4021 void 4022 record_builtin_type (enum rid rid_index, 4023 const char* name, 4024 tree type) 4025 { 4026 tree decl = NULL_TREE; 4027 4028 if (name) 4029 { 4030 tree tname = get_identifier (name); 4031 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type); 4032 DECL_ARTIFICIAL (tdecl) = 1; 4033 set_global_binding (tdecl); 4034 decl = tdecl; 4035 } 4036 4037 if ((int) rid_index < (int) RID_MAX) 4038 if (tree rname = ridpointers[(int) rid_index]) 4039 if (!decl || DECL_NAME (decl) != rname) 4040 { 4041 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type); 4042 DECL_ARTIFICIAL (rdecl) = 1; 4043 set_global_binding (rdecl); 4044 if (!decl) 4045 decl = rdecl; 4046 } 4047 4048 if (decl) 4049 { 4050 if (!TYPE_NAME (type)) 4051 TYPE_NAME (type) = decl; 4052 debug_hooks->type_decl (decl, 0); 4053 } 4054 } 4055 4056 /* Push a type into the namespace so that the back ends ignore it. */ 4057 4058 static void 4059 record_unknown_type (tree type, const char* name) 4060 { 4061 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION, 4062 TYPE_DECL, get_identifier (name), type)); 4063 /* Make sure the "unknown type" typedecl gets ignored for debug info. */ 4064 DECL_IGNORED_P (decl) = 1; 4065 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1; 4066 TYPE_SIZE (type) = TYPE_SIZE (void_type_node); 4067 SET_TYPE_ALIGN (type, 1); 4068 TYPE_USER_ALIGN (type) = 0; 4069 SET_TYPE_MODE (type, TYPE_MODE (void_type_node)); 4070 } 4071 4072 /* Create all the predefined identifiers. */ 4073 4074 static void 4075 initialize_predefined_identifiers (void) 4076 { 4077 struct predefined_identifier 4078 { 4079 const char *name; /* Name. */ 4080 tree *node; /* Node to store it in. */ 4081 cp_identifier_kind kind; /* Kind of identifier. */ 4082 }; 4083 4084 /* A table of identifiers to create at startup. */ 4085 static const predefined_identifier predefined_identifiers[] = { 4086 {"C++", &lang_name_cplusplus, cik_normal}, 4087 {"C", &lang_name_c, cik_normal}, 4088 /* Some of these names have a trailing space so that it is 4089 impossible for them to conflict with names written by users. */ 4090 {"__ct ", &ctor_identifier, cik_ctor}, 4091 {"__ct_base ", &base_ctor_identifier, cik_ctor}, 4092 {"__ct_comp ", &complete_ctor_identifier, cik_ctor}, 4093 {"__dt ", &dtor_identifier, cik_dtor}, 4094 {"__dt_base ", &base_dtor_identifier, cik_dtor}, 4095 {"__dt_comp ", &complete_dtor_identifier, cik_dtor}, 4096 {"__dt_del ", &deleting_dtor_identifier, cik_dtor}, 4097 {"__conv_op ", &conv_op_identifier, cik_conv_op}, 4098 {"__in_chrg", &in_charge_identifier, cik_normal}, 4099 {"this", &this_identifier, cik_normal}, 4100 {"__delta", &delta_identifier, cik_normal}, 4101 {"__pfn", &pfn_identifier, cik_normal}, 4102 {"_vptr", &vptr_identifier, cik_normal}, 4103 {"__vtt_parm", &vtt_parm_identifier, cik_normal}, 4104 {"::", &global_identifier, cik_normal}, 4105 {"std", &std_identifier, cik_normal}, 4106 /* The demangler expects anonymous namespaces to be called 4107 something starting with '_GLOBAL__N_'. It no longer needs 4108 to be unique to the TU. */ 4109 {"_GLOBAL__N_1", &anon_identifier, cik_normal}, 4110 {"auto", &auto_identifier, cik_normal}, 4111 {"decltype(auto)", &decltype_auto_identifier, cik_normal}, 4112 {"initializer_list", &init_list_identifier, cik_normal}, 4113 {NULL, NULL, cik_normal} 4114 }; 4115 4116 for (const predefined_identifier *pid = predefined_identifiers; 4117 pid->name; ++pid) 4118 { 4119 *pid->node = get_identifier (pid->name); 4120 /* Some of these identifiers already have a special kind. */ 4121 if (pid->kind != cik_normal) 4122 set_identifier_kind (*pid->node, pid->kind); 4123 } 4124 } 4125 4126 /* Create the predefined scalar types of C, 4127 and some nodes representing standard constants (0, 1, (void *)0). 4128 Initialize the global binding level. 4129 Make definitions for built-in primitive functions. */ 4130 4131 void 4132 cxx_init_decl_processing (void) 4133 { 4134 tree void_ftype; 4135 tree void_ftype_ptr; 4136 4137 /* Create all the identifiers we need. */ 4138 initialize_predefined_identifiers (); 4139 4140 /* Create the global variables. */ 4141 push_to_top_level (); 4142 4143 current_function_decl = NULL_TREE; 4144 current_binding_level = NULL; 4145 /* Enter the global namespace. */ 4146 gcc_assert (global_namespace == NULL_TREE); 4147 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier, 4148 void_type_node); 4149 TREE_PUBLIC (global_namespace) = 1; 4150 DECL_CONTEXT (global_namespace) 4151 = build_translation_unit_decl (get_identifier (main_input_filename)); 4152 /* Remember whether we want the empty class passing ABI change warning 4153 in this TU. */ 4154 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace)) 4155 = warn_abi && abi_version_crosses (12); 4156 debug_hooks->register_main_translation_unit 4157 (DECL_CONTEXT (global_namespace)); 4158 begin_scope (sk_namespace, global_namespace); 4159 current_namespace = global_namespace; 4160 4161 if (flag_visibility_ms_compat) 4162 default_visibility = VISIBILITY_HIDDEN; 4163 4164 /* Initially, C. */ 4165 current_lang_name = lang_name_c; 4166 4167 /* Create the `std' namespace. */ 4168 push_namespace (std_identifier); 4169 std_node = current_namespace; 4170 pop_namespace (); 4171 4172 flag_noexcept_type = (cxx_dialect >= cxx17); 4173 /* There's no fixed location for <command-line>, the current 4174 location is <builtins>, which is somewhat confusing. */ 4175 if (!flag_new_for_scope) 4176 warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated, 4177 "%<-fno-for-scope%> is deprecated"); 4178 if (flag_friend_injection) 4179 warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated, 4180 "%<-ffriend-injection%> is deprecated"); 4181 4182 c_common_nodes_and_builtins (); 4183 4184 integer_two_node = build_int_cst (NULL_TREE, 2); 4185 4186 /* Guess at the initial static decls size. */ 4187 vec_alloc (static_decls, 500); 4188 4189 /* ... and keyed classes. */ 4190 vec_alloc (keyed_classes, 100); 4191 4192 record_builtin_type (RID_BOOL, "bool", boolean_type_node); 4193 truthvalue_type_node = boolean_type_node; 4194 truthvalue_false_node = boolean_false_node; 4195 truthvalue_true_node = boolean_true_node; 4196 4197 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE); 4198 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE); 4199 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE); 4200 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT), 4201 NULL_TREE); 4202 4203 #if 0 4204 record_builtin_type (RID_MAX, NULL, string_type_node); 4205 #endif 4206 4207 delta_type_node = ptrdiff_type_node; 4208 vtable_index_type = ptrdiff_type_node; 4209 4210 vtt_parm_type = build_pointer_type (const_ptr_type_node); 4211 void_ftype = build_function_type_list (void_type_node, NULL_TREE); 4212 void_ftype_ptr = build_function_type_list (void_type_node, 4213 ptr_type_node, NULL_TREE); 4214 void_ftype_ptr 4215 = build_exception_variant (void_ftype_ptr, empty_except_spec); 4216 4217 /* Create the conversion operator marker. This operator's DECL_NAME 4218 is in the identifier table, so we can use identifier equality to 4219 find it. */ 4220 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier, 4221 void_ftype); 4222 4223 /* C++ extensions */ 4224 4225 unknown_type_node = make_node (LANG_TYPE); 4226 record_unknown_type (unknown_type_node, "unknown type"); 4227 4228 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */ 4229 TREE_TYPE (unknown_type_node) = unknown_type_node; 4230 4231 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same 4232 result. */ 4233 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node; 4234 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node; 4235 4236 init_list_type_node = make_node (LANG_TYPE); 4237 record_unknown_type (init_list_type_node, "init list"); 4238 4239 { 4240 /* Make sure we get a unique function type, so we can give 4241 its pointer type a name. (This wins for gdb.) */ 4242 tree vfunc_type = make_node (FUNCTION_TYPE); 4243 TREE_TYPE (vfunc_type) = integer_type_node; 4244 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE; 4245 layout_type (vfunc_type); 4246 4247 vtable_entry_type = build_pointer_type (vfunc_type); 4248 } 4249 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type); 4250 4251 vtbl_type_node 4252 = build_cplus_array_type (vtable_entry_type, NULL_TREE); 4253 layout_type (vtbl_type_node); 4254 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST); 4255 record_builtin_type (RID_MAX, NULL, vtbl_type_node); 4256 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type); 4257 layout_type (vtbl_ptr_type_node); 4258 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node); 4259 4260 push_namespace (get_identifier ("__cxxabiv1")); 4261 abi_node = current_namespace; 4262 pop_namespace (); 4263 4264 global_type_node = make_node (LANG_TYPE); 4265 record_unknown_type (global_type_node, "global type"); 4266 4267 any_targ_node = make_node (LANG_TYPE); 4268 record_unknown_type (any_targ_node, "any type"); 4269 4270 /* Now, C++. */ 4271 current_lang_name = lang_name_cplusplus; 4272 4273 if (aligned_new_threshold > 1 4274 && !pow2p_hwi (aligned_new_threshold)) 4275 { 4276 error ("-faligned-new=%d is not a power of two", aligned_new_threshold); 4277 aligned_new_threshold = 1; 4278 } 4279 if (aligned_new_threshold == -1) 4280 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0; 4281 if (aligned_new_threshold == 1) 4282 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT; 4283 4284 { 4285 tree newattrs, extvisattr; 4286 tree newtype, deltype; 4287 tree ptr_ftype_sizetype; 4288 tree new_eh_spec; 4289 4290 ptr_ftype_sizetype 4291 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE); 4292 if (cxx_dialect == cxx98) 4293 { 4294 tree bad_alloc_id; 4295 tree bad_alloc_type_node; 4296 tree bad_alloc_decl; 4297 4298 push_namespace (std_identifier); 4299 bad_alloc_id = get_identifier ("bad_alloc"); 4300 bad_alloc_type_node = make_class_type (RECORD_TYPE); 4301 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace; 4302 bad_alloc_decl 4303 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node); 4304 DECL_CONTEXT (bad_alloc_decl) = current_namespace; 4305 pop_namespace (); 4306 4307 new_eh_spec 4308 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1); 4309 } 4310 else 4311 new_eh_spec = noexcept_false_spec; 4312 4313 /* Ensure attribs.c is initialized. */ 4314 init_attributes (); 4315 4316 /* Ensure constraint.cc is initialized. */ 4317 init_constraint_processing (); 4318 4319 extvisattr = build_tree_list (get_identifier ("externally_visible"), 4320 NULL_TREE); 4321 newattrs = tree_cons (get_identifier ("alloc_size"), 4322 build_tree_list (NULL_TREE, integer_one_node), 4323 extvisattr); 4324 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs); 4325 newtype = build_exception_variant (newtype, new_eh_spec); 4326 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr); 4327 deltype = build_exception_variant (deltype, empty_except_spec); 4328 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0); 4329 DECL_IS_MALLOC (opnew) = 1; 4330 DECL_IS_OPERATOR_NEW (opnew) = 1; 4331 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0); 4332 DECL_IS_MALLOC (opnew) = 1; 4333 DECL_IS_OPERATOR_NEW (opnew) = 1; 4334 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW); 4335 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW); 4336 if (flag_sized_deallocation) 4337 { 4338 /* Also push the sized deallocation variants: 4339 void operator delete(void*, std::size_t) throw(); 4340 void operator delete[](void*, std::size_t) throw(); */ 4341 tree void_ftype_ptr_size 4342 = build_function_type_list (void_type_node, ptr_type_node, 4343 size_type_node, NULL_TREE); 4344 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size, 4345 extvisattr); 4346 deltype = build_exception_variant (deltype, empty_except_spec); 4347 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW); 4348 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW); 4349 } 4350 4351 if (aligned_new_threshold) 4352 { 4353 push_namespace (std_identifier); 4354 tree align_id = get_identifier ("align_val_t"); 4355 align_type_node = start_enum (align_id, NULL_TREE, size_type_node, 4356 NULL_TREE, /*scoped*/true, NULL); 4357 pop_namespace (); 4358 4359 /* operator new (size_t, align_val_t); */ 4360 newtype = build_function_type_list (ptr_type_node, size_type_node, 4361 align_type_node, NULL_TREE); 4362 newtype = cp_build_type_attribute_variant (newtype, newattrs); 4363 newtype = build_exception_variant (newtype, new_eh_spec); 4364 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0); 4365 DECL_IS_MALLOC (opnew) = 1; 4366 DECL_IS_OPERATOR_NEW (opnew) = 1; 4367 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0); 4368 DECL_IS_MALLOC (opnew) = 1; 4369 DECL_IS_OPERATOR_NEW (opnew) = 1; 4370 4371 /* operator delete (void *, align_val_t); */ 4372 deltype = build_function_type_list (void_type_node, ptr_type_node, 4373 align_type_node, NULL_TREE); 4374 deltype = cp_build_type_attribute_variant (deltype, extvisattr); 4375 deltype = build_exception_variant (deltype, empty_except_spec); 4376 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW); 4377 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW); 4378 4379 if (flag_sized_deallocation) 4380 { 4381 /* operator delete (void *, size_t, align_val_t); */ 4382 deltype = build_function_type_list (void_type_node, ptr_type_node, 4383 size_type_node, align_type_node, 4384 NULL_TREE); 4385 deltype = cp_build_type_attribute_variant (deltype, extvisattr); 4386 deltype = build_exception_variant (deltype, empty_except_spec); 4387 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW); 4388 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW); 4389 } 4390 } 4391 4392 nullptr_type_node = make_node (NULLPTR_TYPE); 4393 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode)); 4394 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode)); 4395 TYPE_UNSIGNED (nullptr_type_node) = 1; 4396 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode); 4397 if (abi_version_at_least (9)) 4398 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode)); 4399 SET_TYPE_MODE (nullptr_type_node, ptr_mode); 4400 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node); 4401 nullptr_node = build_int_cst (nullptr_type_node, 0); 4402 } 4403 4404 abort_fndecl 4405 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype, 4406 ECF_NORETURN | ECF_NOTHROW | ECF_COLD); 4407 4408 /* Perform other language dependent initializations. */ 4409 init_class_processing (); 4410 init_rtti_processing (); 4411 init_template_processing (); 4412 4413 if (flag_exceptions) 4414 init_exception_processing (); 4415 4416 if (! supports_one_only ()) 4417 flag_weak = 0; 4418 4419 make_fname_decl = cp_make_fname_decl; 4420 start_fname_decls (); 4421 4422 /* Show we use EH for cleanups. */ 4423 if (flag_exceptions) 4424 using_eh_for_cleanups (); 4425 } 4426 4427 /* Generate an initializer for a function naming variable from 4428 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is 4429 filled in with the type of the init. */ 4430 4431 tree 4432 cp_fname_init (const char* name, tree *type_p) 4433 { 4434 tree domain = NULL_TREE; 4435 tree type; 4436 tree init = NULL_TREE; 4437 size_t length = 0; 4438 4439 if (name) 4440 { 4441 length = strlen (name); 4442 domain = build_index_type (size_int (length)); 4443 init = build_string (length + 1, name); 4444 } 4445 4446 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST); 4447 type = build_cplus_array_type (type, domain); 4448 4449 *type_p = type; 4450 4451 if (init) 4452 TREE_TYPE (init) = type; 4453 else 4454 init = error_mark_node; 4455 4456 return init; 4457 } 4458 4459 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give 4460 the decl, LOC is the location to give the decl, NAME is the 4461 initialization string and TYPE_DEP indicates whether NAME depended 4462 on the type of the function. We make use of that to detect 4463 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily 4464 at the point of first use, so we mustn't push the decl now. */ 4465 4466 static tree 4467 cp_make_fname_decl (location_t loc, tree id, int type_dep) 4468 { 4469 const char *const name = (type_dep && processing_template_decl 4470 ? NULL : fname_as_string (type_dep)); 4471 tree type; 4472 tree init = cp_fname_init (name, &type); 4473 tree decl = build_decl (loc, VAR_DECL, id, type); 4474 4475 if (name) 4476 free (CONST_CAST (char *, name)); 4477 4478 TREE_STATIC (decl) = 1; 4479 TREE_READONLY (decl) = 1; 4480 DECL_ARTIFICIAL (decl) = 1; 4481 4482 TREE_USED (decl) = 1; 4483 4484 if (current_function_decl) 4485 { 4486 DECL_CONTEXT (decl) = current_function_decl; 4487 decl = pushdecl_outermost_localscope (decl); 4488 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE, 4489 LOOKUP_ONLYCONVERTING); 4490 } 4491 else 4492 { 4493 DECL_THIS_STATIC (decl) = true; 4494 pushdecl_top_level_and_finish (decl, init); 4495 } 4496 4497 return decl; 4498 } 4499 4500 static tree 4501 builtin_function_1 (tree decl, tree context, bool is_global) 4502 { 4503 tree id = DECL_NAME (decl); 4504 const char *name = IDENTIFIER_POINTER (id); 4505 4506 retrofit_lang_decl (decl); 4507 4508 DECL_ARTIFICIAL (decl) = 1; 4509 SET_DECL_LANGUAGE (decl, lang_c); 4510 /* Runtime library routines are, by definition, available in an 4511 external shared object. */ 4512 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT; 4513 DECL_VISIBILITY_SPECIFIED (decl) = 1; 4514 4515 DECL_CONTEXT (decl) = context; 4516 4517 /* A function in the user's namespace should have an explicit 4518 declaration before it is used. Mark the built-in function as 4519 anticipated but not actually declared. */ 4520 if (name[0] != '_' || name[1] != '_') 4521 DECL_ANTICIPATED (decl) = 1; 4522 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0) 4523 { 4524 size_t len = strlen (name); 4525 4526 /* Treat __*_chk fortification functions as anticipated as well, 4527 unless they are __builtin_*. */ 4528 if (len > strlen ("___chk") 4529 && memcmp (name + len - strlen ("_chk"), 4530 "_chk", strlen ("_chk") + 1) == 0) 4531 DECL_ANTICIPATED (decl) = 1; 4532 } 4533 4534 if (is_global) 4535 pushdecl_top_level (decl); 4536 else 4537 pushdecl (decl); 4538 4539 return decl; 4540 } 4541 4542 tree 4543 cxx_builtin_function (tree decl) 4544 { 4545 tree id = DECL_NAME (decl); 4546 const char *name = IDENTIFIER_POINTER (id); 4547 /* All builtins that don't begin with an '_' should additionally 4548 go in the 'std' namespace. */ 4549 if (name[0] != '_') 4550 { 4551 tree decl2 = copy_node(decl); 4552 push_namespace (std_identifier); 4553 builtin_function_1 (decl2, std_node, false); 4554 pop_namespace (); 4555 } 4556 4557 return builtin_function_1 (decl, NULL_TREE, false); 4558 } 4559 4560 /* Like cxx_builtin_function, but guarantee the function is added to the global 4561 scope. This is to allow function specific options to add new machine 4562 dependent builtins when the target ISA changes via attribute((target(...))) 4563 which saves space on program startup if the program does not use non-generic 4564 ISAs. */ 4565 4566 tree 4567 cxx_builtin_function_ext_scope (tree decl) 4568 { 4569 4570 tree id = DECL_NAME (decl); 4571 const char *name = IDENTIFIER_POINTER (id); 4572 /* All builtins that don't begin with an '_' should additionally 4573 go in the 'std' namespace. */ 4574 if (name[0] != '_') 4575 { 4576 tree decl2 = copy_node(decl); 4577 push_namespace (std_identifier); 4578 builtin_function_1 (decl2, std_node, true); 4579 pop_namespace (); 4580 } 4581 4582 return builtin_function_1 (decl, NULL_TREE, true); 4583 } 4584 4585 /* Generate a FUNCTION_DECL with the typical flags for a runtime library 4586 function. Not called directly. */ 4587 4588 static tree 4589 build_library_fn (tree name, enum tree_code operator_code, tree type, 4590 int ecf_flags) 4591 { 4592 tree fn = build_lang_decl (FUNCTION_DECL, name, type); 4593 DECL_EXTERNAL (fn) = 1; 4594 TREE_PUBLIC (fn) = 1; 4595 DECL_ARTIFICIAL (fn) = 1; 4596 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn) 4597 = OVL_OP_INFO (false, operator_code)->ovl_op_code; 4598 SET_DECL_LANGUAGE (fn, lang_c); 4599 /* Runtime library routines are, by definition, available in an 4600 external shared object. */ 4601 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT; 4602 DECL_VISIBILITY_SPECIFIED (fn) = 1; 4603 set_call_expr_flags (fn, ecf_flags); 4604 return fn; 4605 } 4606 4607 /* Returns the _DECL for a library function with C++ linkage. */ 4608 4609 static tree 4610 build_cp_library_fn (tree name, enum tree_code operator_code, tree type, 4611 int ecf_flags) 4612 { 4613 tree fn = build_library_fn (name, operator_code, type, ecf_flags); 4614 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace); 4615 SET_DECL_LANGUAGE (fn, lang_cplusplus); 4616 return fn; 4617 } 4618 4619 /* Like build_library_fn, but takes a C string instead of an 4620 IDENTIFIER_NODE. */ 4621 4622 tree 4623 build_library_fn_ptr (const char* name, tree type, int ecf_flags) 4624 { 4625 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags); 4626 } 4627 4628 /* Like build_cp_library_fn, but takes a C string instead of an 4629 IDENTIFIER_NODE. */ 4630 4631 tree 4632 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags) 4633 { 4634 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type, 4635 ecf_flags); 4636 } 4637 4638 /* Like build_library_fn, but also pushes the function so that we will 4639 be able to find it via get_global_binding. Also, the function 4640 may throw exceptions listed in RAISES. */ 4641 4642 tree 4643 push_library_fn (tree name, tree type, tree raises, int ecf_flags) 4644 { 4645 tree fn; 4646 4647 if (raises) 4648 type = build_exception_variant (type, raises); 4649 4650 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags); 4651 pushdecl_top_level (fn); 4652 return fn; 4653 } 4654 4655 /* Like build_cp_library_fn, but also pushes the function so that it 4656 will be found by normal lookup. */ 4657 4658 static tree 4659 push_cp_library_fn (enum tree_code operator_code, tree type, 4660 int ecf_flags) 4661 { 4662 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code), 4663 operator_code, type, ecf_flags); 4664 pushdecl (fn); 4665 if (flag_tm) 4666 apply_tm_attr (fn, get_identifier ("transaction_safe")); 4667 return fn; 4668 } 4669 4670 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than 4671 a FUNCTION_TYPE. */ 4672 4673 tree 4674 push_void_library_fn (tree name, tree parmtypes, int ecf_flags) 4675 { 4676 tree type = build_function_type (void_type_node, parmtypes); 4677 return push_library_fn (name, type, NULL_TREE, ecf_flags); 4678 } 4679 4680 /* Like push_library_fn, but also note that this function throws 4681 and does not return. Used for __throw_foo and the like. */ 4682 4683 tree 4684 push_throw_library_fn (tree name, tree type) 4685 { 4686 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD); 4687 return fn; 4688 } 4689 4690 /* When we call finish_struct for an anonymous union, we create 4691 default copy constructors and such. But, an anonymous union 4692 shouldn't have such things; this function undoes the damage to the 4693 anonymous union type T. 4694 4695 (The reason that we create the synthesized methods is that we don't 4696 distinguish `union { int i; }' from `typedef union { int i; } U'. 4697 The first is an anonymous union; the second is just an ordinary 4698 union type.) */ 4699 4700 void 4701 fixup_anonymous_aggr (tree t) 4702 { 4703 /* Wipe out memory of synthesized methods. */ 4704 TYPE_HAS_USER_CONSTRUCTOR (t) = 0; 4705 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0; 4706 TYPE_HAS_COPY_CTOR (t) = 0; 4707 TYPE_HAS_CONST_COPY_CTOR (t) = 0; 4708 TYPE_HAS_COPY_ASSIGN (t) = 0; 4709 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0; 4710 4711 /* Splice the implicitly generated functions out of TYPE_FIELDS. */ 4712 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);) 4713 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe)) 4714 *prev_p = DECL_CHAIN (probe); 4715 else 4716 prev_p = &DECL_CHAIN (probe); 4717 4718 /* Anonymous aggregates cannot have fields with ctors, dtors or complex 4719 assignment operators (because they cannot have these methods themselves). 4720 For anonymous unions this is already checked because they are not allowed 4721 in any union, otherwise we have to check it. */ 4722 if (TREE_CODE (t) != UNION_TYPE) 4723 { 4724 tree field, type; 4725 4726 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field)) 4727 if (TREE_CODE (field) == FIELD_DECL) 4728 { 4729 type = TREE_TYPE (field); 4730 if (CLASS_TYPE_P (type)) 4731 { 4732 if (TYPE_NEEDS_CONSTRUCTING (type)) 4733 error ("member %q+#D with constructor not allowed " 4734 "in anonymous aggregate", field); 4735 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)) 4736 error ("member %q+#D with destructor not allowed " 4737 "in anonymous aggregate", field); 4738 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type)) 4739 error ("member %q+#D with copy assignment operator " 4740 "not allowed in anonymous aggregate", field); 4741 } 4742 } 4743 } 4744 } 4745 4746 /* Warn for an attribute located at LOCATION that appertains to the 4747 class type CLASS_TYPE that has not been properly placed after its 4748 class-key, in it class-specifier. */ 4749 4750 void 4751 warn_misplaced_attr_for_class_type (source_location location, 4752 tree class_type) 4753 { 4754 gcc_assert (OVERLOAD_TYPE_P (class_type)); 4755 4756 if (warning_at (location, OPT_Wattributes, 4757 "attribute ignored in declaration " 4758 "of %q#T", class_type)) 4759 inform (location, 4760 "attribute for %q#T must follow the %qs keyword", 4761 class_type, class_key_or_enum_as_string (class_type)); 4762 } 4763 4764 /* Make sure that a declaration with no declarator is well-formed, i.e. 4765 just declares a tagged type or anonymous union. 4766 4767 Returns the type declared; or NULL_TREE if none. */ 4768 4769 tree 4770 check_tag_decl (cp_decl_specifier_seq *declspecs, 4771 bool explicit_type_instantiation_p) 4772 { 4773 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend); 4774 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef); 4775 /* If a class, struct, or enum type is declared by the DECLSPECS 4776 (i.e, if a class-specifier, enum-specifier, or non-typename 4777 elaborated-type-specifier appears in the DECLSPECS), 4778 DECLARED_TYPE is set to the corresponding type. */ 4779 tree declared_type = NULL_TREE; 4780 bool error_p = false; 4781 4782 if (declspecs->multiple_types_p) 4783 error ("multiple types in one declaration"); 4784 else if (declspecs->redefined_builtin_type) 4785 { 4786 if (!in_system_header_at (input_location)) 4787 permerror (declspecs->locations[ds_redefined_builtin_type_spec], 4788 "redeclaration of C++ built-in type %qT", 4789 declspecs->redefined_builtin_type); 4790 return NULL_TREE; 4791 } 4792 4793 if (declspecs->type 4794 && TYPE_P (declspecs->type) 4795 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE 4796 && MAYBE_CLASS_TYPE_P (declspecs->type)) 4797 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE)) 4798 declared_type = declspecs->type; 4799 else if (declspecs->type == error_mark_node) 4800 error_p = true; 4801 if (declared_type == NULL_TREE && ! saw_friend && !error_p) 4802 permerror (input_location, "declaration does not declare anything"); 4803 else if (declared_type != NULL_TREE && type_uses_auto (declared_type)) 4804 { 4805 error_at (declspecs->locations[ds_type_spec], 4806 "%<auto%> can only be specified for variables " 4807 "or function declarations"); 4808 return error_mark_node; 4809 } 4810 /* Check for an anonymous union. */ 4811 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type)) 4812 && TYPE_UNNAMED_P (declared_type)) 4813 { 4814 /* 7/3 In a simple-declaration, the optional init-declarator-list 4815 can be omitted only when declaring a class (clause 9) or 4816 enumeration (7.2), that is, when the decl-specifier-seq contains 4817 either a class-specifier, an elaborated-type-specifier with 4818 a class-key (9.1), or an enum-specifier. In these cases and 4819 whenever a class-specifier or enum-specifier is present in the 4820 decl-specifier-seq, the identifiers in these specifiers are among 4821 the names being declared by the declaration (as class-name, 4822 enum-names, or enumerators, depending on the syntax). In such 4823 cases, and except for the declaration of an unnamed bit-field (9.6), 4824 the decl-specifier-seq shall introduce one or more names into the 4825 program, or shall redeclare a name introduced by a previous 4826 declaration. [Example: 4827 enum { }; // ill-formed 4828 typedef class { }; // ill-formed 4829 --end example] */ 4830 if (saw_typedef) 4831 { 4832 error ("missing type-name in typedef-declaration"); 4833 return NULL_TREE; 4834 } 4835 /* Anonymous unions are objects, so they can have specifiers. */; 4836 SET_ANON_AGGR_TYPE_P (declared_type); 4837 4838 if (TREE_CODE (declared_type) != UNION_TYPE 4839 && !in_system_header_at (input_location)) 4840 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs"); 4841 } 4842 4843 else 4844 { 4845 if (decl_spec_seq_has_spec_p (declspecs, ds_inline)) 4846 error_at (declspecs->locations[ds_inline], 4847 "%<inline%> can only be specified for functions"); 4848 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual)) 4849 error_at (declspecs->locations[ds_virtual], 4850 "%<virtual%> can only be specified for functions"); 4851 else if (saw_friend 4852 && (!current_class_type 4853 || current_scope () != current_class_type)) 4854 error_at (declspecs->locations[ds_friend], 4855 "%<friend%> can only be specified inside a class"); 4856 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit)) 4857 error_at (declspecs->locations[ds_explicit], 4858 "%<explicit%> can only be specified for constructors"); 4859 else if (declspecs->storage_class) 4860 error_at (declspecs->locations[ds_storage_class], 4861 "a storage class can only be specified for objects " 4862 "and functions"); 4863 else if (decl_spec_seq_has_spec_p (declspecs, ds_const)) 4864 error_at (declspecs->locations[ds_const], 4865 "%<const%> can only be specified for objects and " 4866 "functions"); 4867 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile)) 4868 error_at (declspecs->locations[ds_volatile], 4869 "%<volatile%> can only be specified for objects and " 4870 "functions"); 4871 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict)) 4872 error_at (declspecs->locations[ds_restrict], 4873 "%<__restrict%> can only be specified for objects and " 4874 "functions"); 4875 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread)) 4876 error_at (declspecs->locations[ds_thread], 4877 "%<__thread%> can only be specified for objects " 4878 "and functions"); 4879 else if (saw_typedef) 4880 warning_at (declspecs->locations[ds_typedef], 0, 4881 "%<typedef%> was ignored in this declaration"); 4882 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr)) 4883 error_at (declspecs->locations[ds_constexpr], 4884 "%<constexpr%> cannot be used for type declarations"); 4885 } 4886 4887 if (declspecs->attributes && warn_attributes && declared_type) 4888 { 4889 location_t loc; 4890 if (!CLASS_TYPE_P (declared_type) 4891 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type)) 4892 /* For a non-template class, use the name location. */ 4893 loc = location_of (declared_type); 4894 else 4895 /* For a template class (an explicit instantiation), use the 4896 current location. */ 4897 loc = input_location; 4898 4899 if (explicit_type_instantiation_p) 4900 /* [dcl.attr.grammar]/4: 4901 4902 No attribute-specifier-seq shall appertain to an explicit 4903 instantiation. */ 4904 { 4905 if (warning_at (loc, OPT_Wattributes, 4906 "attribute ignored in explicit instantiation %q#T", 4907 declared_type)) 4908 inform (loc, 4909 "no attribute can be applied to " 4910 "an explicit instantiation"); 4911 } 4912 else 4913 warn_misplaced_attr_for_class_type (loc, declared_type); 4914 } 4915 4916 return declared_type; 4917 } 4918 4919 /* Called when a declaration is seen that contains no names to declare. 4920 If its type is a reference to a structure, union or enum inherited 4921 from a containing scope, shadow that tag name for the current scope 4922 with a forward reference. 4923 If its type defines a new named structure or union 4924 or defines an enum, it is valid but we need not do anything here. 4925 Otherwise, it is an error. 4926 4927 C++: may have to grok the declspecs to learn about static, 4928 complain for anonymous unions. 4929 4930 Returns the TYPE declared -- or NULL_TREE if none. */ 4931 4932 tree 4933 shadow_tag (cp_decl_specifier_seq *declspecs) 4934 { 4935 tree t = check_tag_decl (declspecs, 4936 /*explicit_type_instantiation_p=*/false); 4937 4938 if (!t) 4939 return NULL_TREE; 4940 4941 if (maybe_process_partial_specialization (t) == error_mark_node) 4942 return NULL_TREE; 4943 4944 /* This is where the variables in an anonymous union are 4945 declared. An anonymous union declaration looks like: 4946 union { ... } ; 4947 because there is no declarator after the union, the parser 4948 sends that declaration here. */ 4949 if (ANON_AGGR_TYPE_P (t)) 4950 { 4951 fixup_anonymous_aggr (t); 4952 4953 if (TYPE_FIELDS (t)) 4954 { 4955 tree decl = grokdeclarator (/*declarator=*/NULL, 4956 declspecs, NORMAL, 0, NULL); 4957 finish_anon_union (decl); 4958 } 4959 } 4960 4961 return t; 4962 } 4963 4964 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */ 4965 4966 tree 4967 groktypename (cp_decl_specifier_seq *type_specifiers, 4968 const cp_declarator *declarator, 4969 bool is_template_arg) 4970 { 4971 tree attrs; 4972 tree type; 4973 enum decl_context context 4974 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME; 4975 attrs = type_specifiers->attributes; 4976 type_specifiers->attributes = NULL_TREE; 4977 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs); 4978 if (attrs && type != error_mark_node) 4979 { 4980 if (CLASS_TYPE_P (type)) 4981 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT " 4982 "outside of definition", type); 4983 else if (MAYBE_CLASS_TYPE_P (type)) 4984 /* A template type parameter or other dependent type. */ 4985 warning (OPT_Wattributes, "ignoring attributes applied to dependent " 4986 "type %qT without an associated declaration", type); 4987 else 4988 cplus_decl_attributes (&type, attrs, 0); 4989 } 4990 return type; 4991 } 4992 4993 /* Process a DECLARATOR for a function-scope variable declaration, 4994 namespace-scope variable declaration, or function declaration. 4995 (Function definitions go through start_function; class member 4996 declarations appearing in the body of the class go through 4997 grokfield.) The DECL corresponding to the DECLARATOR is returned. 4998 If an error occurs, the error_mark_node is returned instead. 4999 5000 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is 5001 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED 5002 for an explicitly defaulted function, or SD_DELETED for an explicitly 5003 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable 5004 implicitly initialized via a default constructor. ATTRIBUTES and 5005 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration. 5006 5007 The scope represented by the context of the returned DECL is pushed 5008 (if it is not the global namespace) and is assigned to 5009 *PUSHED_SCOPE_P. The caller is then responsible for calling 5010 pop_scope on *PUSHED_SCOPE_P if it is set. */ 5011 5012 tree 5013 start_decl (const cp_declarator *declarator, 5014 cp_decl_specifier_seq *declspecs, 5015 int initialized, 5016 tree attributes, 5017 tree prefix_attributes, 5018 tree *pushed_scope_p) 5019 { 5020 tree decl; 5021 tree context; 5022 bool was_public; 5023 int flags; 5024 bool alias; 5025 5026 *pushed_scope_p = NULL_TREE; 5027 5028 /* An object declared as __attribute__((deprecated)) suppresses 5029 warnings of uses of other deprecated items. */ 5030 if (lookup_attribute ("deprecated", attributes)) 5031 deprecated_state = DEPRECATED_SUPPRESS; 5032 5033 attributes = chainon (attributes, prefix_attributes); 5034 5035 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized, 5036 &attributes); 5037 5038 deprecated_state = DEPRECATED_NORMAL; 5039 5040 if (decl == NULL_TREE || VOID_TYPE_P (decl) 5041 || decl == error_mark_node) 5042 return error_mark_node; 5043 5044 context = CP_DECL_CONTEXT (decl); 5045 if (context != global_namespace) 5046 *pushed_scope_p = push_scope (context); 5047 5048 /* Is it valid for this decl to have an initializer at all? 5049 If not, set INITIALIZED to zero, which will indirectly 5050 tell `cp_finish_decl' to ignore the initializer once it is parsed. */ 5051 if (initialized 5052 && TREE_CODE (decl) == TYPE_DECL) 5053 { 5054 error ("typedef %qD is initialized (use decltype instead)", decl); 5055 return error_mark_node; 5056 } 5057 5058 if (initialized) 5059 { 5060 if (! toplevel_bindings_p () 5061 && DECL_EXTERNAL (decl)) 5062 warning (0, "declaration of %q#D has %<extern%> and is initialized", 5063 decl); 5064 DECL_EXTERNAL (decl) = 0; 5065 if (toplevel_bindings_p ()) 5066 TREE_STATIC (decl) = 1; 5067 } 5068 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0; 5069 5070 if (alias && TREE_CODE (decl) == FUNCTION_DECL) 5071 record_key_method_defined (decl); 5072 5073 /* If this is a typedef that names the class for linkage purposes 5074 (7.1.3p8), apply any attributes directly to the type. */ 5075 if (TREE_CODE (decl) == TYPE_DECL 5076 && OVERLOAD_TYPE_P (TREE_TYPE (decl)) 5077 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl)))) 5078 flags = ATTR_FLAG_TYPE_IN_PLACE; 5079 else 5080 flags = 0; 5081 5082 /* Set attributes here so if duplicate decl, will have proper attributes. */ 5083 cplus_decl_attributes (&decl, attributes, flags); 5084 5085 /* Dllimported symbols cannot be defined. Static data members (which 5086 can be initialized in-class and dllimported) go through grokfield, 5087 not here, so we don't need to exclude those decls when checking for 5088 a definition. */ 5089 if (initialized && DECL_DLLIMPORT_P (decl)) 5090 { 5091 error ("definition of %q#D is marked %<dllimport%>", decl); 5092 DECL_DLLIMPORT_P (decl) = 0; 5093 } 5094 5095 /* If #pragma weak was used, mark the decl weak now. */ 5096 if (!processing_template_decl && !DECL_DECOMPOSITION_P (decl)) 5097 maybe_apply_pragma_weak (decl); 5098 5099 if (TREE_CODE (decl) == FUNCTION_DECL 5100 && DECL_DECLARED_INLINE_P (decl) 5101 && DECL_UNINLINABLE (decl) 5102 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl))) 5103 warning_at (DECL_SOURCE_LOCATION (decl), 0, 5104 "inline function %qD given attribute noinline", decl); 5105 5106 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context))) 5107 { 5108 bool this_tmpl = (processing_template_decl 5109 > template_class_depth (context)); 5110 if (VAR_P (decl)) 5111 { 5112 tree field = lookup_field (context, DECL_NAME (decl), 0, false); 5113 if (field == NULL_TREE 5114 || !(VAR_P (field) || variable_template_p (field))) 5115 error ("%q+#D is not a static data member of %q#T", decl, context); 5116 else if (variable_template_p (field) 5117 && (DECL_LANG_SPECIFIC (decl) 5118 && DECL_TEMPLATE_SPECIALIZATION (decl))) 5119 /* OK, specialization was already checked. */; 5120 else if (variable_template_p (field) && !this_tmpl) 5121 { 5122 error_at (DECL_SOURCE_LOCATION (decl), 5123 "non-member-template declaration of %qD", decl); 5124 inform (DECL_SOURCE_LOCATION (field), "does not match " 5125 "member template declaration here"); 5126 return error_mark_node; 5127 } 5128 else 5129 { 5130 if (variable_template_p (field)) 5131 field = DECL_TEMPLATE_RESULT (field); 5132 5133 if (DECL_CONTEXT (field) != context) 5134 { 5135 if (!same_type_p (DECL_CONTEXT (field), context)) 5136 permerror (input_location, "ISO C++ does not permit %<%T::%D%> " 5137 "to be defined as %<%T::%D%>", 5138 DECL_CONTEXT (field), DECL_NAME (decl), 5139 context, DECL_NAME (decl)); 5140 DECL_CONTEXT (decl) = DECL_CONTEXT (field); 5141 } 5142 /* Static data member are tricky; an in-class initialization 5143 still doesn't provide a definition, so the in-class 5144 declaration will have DECL_EXTERNAL set, but will have an 5145 initialization. Thus, duplicate_decls won't warn 5146 about this situation, and so we check here. */ 5147 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field)) 5148 error ("duplicate initialization of %qD", decl); 5149 field = duplicate_decls (decl, field, 5150 /*newdecl_is_friend=*/false); 5151 if (field == error_mark_node) 5152 return error_mark_node; 5153 else if (field) 5154 decl = field; 5155 } 5156 } 5157 else 5158 { 5159 tree field = check_classfn (context, decl, 5160 this_tmpl 5161 ? current_template_parms 5162 : NULL_TREE); 5163 if (field && field != error_mark_node 5164 && duplicate_decls (decl, field, 5165 /*newdecl_is_friend=*/false)) 5166 decl = field; 5167 } 5168 5169 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */ 5170 DECL_IN_AGGR_P (decl) = 0; 5171 /* Do not mark DECL as an explicit specialization if it was not 5172 already marked as an instantiation; a declaration should 5173 never be marked as a specialization unless we know what 5174 template is being specialized. */ 5175 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl)) 5176 { 5177 SET_DECL_TEMPLATE_SPECIALIZATION (decl); 5178 if (TREE_CODE (decl) == FUNCTION_DECL) 5179 DECL_COMDAT (decl) = (TREE_PUBLIC (decl) 5180 && DECL_DECLARED_INLINE_P (decl)); 5181 else 5182 DECL_COMDAT (decl) = false; 5183 5184 /* [temp.expl.spec] An explicit specialization of a static data 5185 member of a template is a definition if the declaration 5186 includes an initializer; otherwise, it is a declaration. 5187 5188 We check for processing_specialization so this only applies 5189 to the new specialization syntax. */ 5190 if (!initialized && processing_specialization) 5191 DECL_EXTERNAL (decl) = 1; 5192 } 5193 5194 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl) 5195 /* Aliases are definitions. */ 5196 && !alias) 5197 permerror (input_location, "declaration of %q#D outside of class is not definition", 5198 decl); 5199 } 5200 5201 was_public = TREE_PUBLIC (decl); 5202 5203 /* Enter this declaration into the symbol table. Don't push the plain 5204 VAR_DECL for a variable template. */ 5205 if (!template_parm_scope_p () 5206 || !VAR_P (decl)) 5207 decl = maybe_push_decl (decl); 5208 5209 if (processing_template_decl) 5210 decl = push_template_decl (decl); 5211 if (decl == error_mark_node) 5212 return error_mark_node; 5213 5214 if (VAR_P (decl) 5215 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public 5216 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl)) 5217 { 5218 /* This is a const variable with implicit 'static'. Set 5219 DECL_THIS_STATIC so we can tell it from variables that are 5220 !TREE_PUBLIC because of the anonymous namespace. */ 5221 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount); 5222 DECL_THIS_STATIC (decl) = 1; 5223 } 5224 5225 if (current_function_decl && VAR_P (decl) 5226 && DECL_DECLARED_CONSTEXPR_P (current_function_decl)) 5227 { 5228 bool ok = false; 5229 if (CP_DECL_THREAD_LOCAL_P (decl)) 5230 error ("%qD declared %<thread_local%> in %<constexpr%> function", 5231 decl); 5232 else if (TREE_STATIC (decl)) 5233 error ("%qD declared %<static%> in %<constexpr%> function", decl); 5234 else 5235 ok = true; 5236 if (!ok) 5237 cp_function_chain->invalid_constexpr = true; 5238 } 5239 5240 if (!processing_template_decl && VAR_P (decl)) 5241 start_decl_1 (decl, initialized); 5242 5243 return decl; 5244 } 5245 5246 /* Process the declaration of a variable DECL. INITIALIZED is true 5247 iff DECL is explicitly initialized. (INITIALIZED is false if the 5248 variable is initialized via an implicitly-called constructor.) 5249 This function must be called for ordinary variables (including, for 5250 example, implicit instantiations of templates), but must not be 5251 called for template declarations. */ 5252 5253 void 5254 start_decl_1 (tree decl, bool initialized) 5255 { 5256 tree type; 5257 bool complete_p; 5258 bool aggregate_definition_p; 5259 5260 gcc_assert (!processing_template_decl); 5261 5262 if (error_operand_p (decl)) 5263 return; 5264 5265 gcc_assert (VAR_P (decl)); 5266 5267 type = TREE_TYPE (decl); 5268 complete_p = COMPLETE_TYPE_P (type); 5269 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl); 5270 5271 /* If an explicit initializer is present, or if this is a definition 5272 of an aggregate, then we need a complete type at this point. 5273 (Scalars are always complete types, so there is nothing to 5274 check.) This code just sets COMPLETE_P; errors (if necessary) 5275 are issued below. */ 5276 if ((initialized || aggregate_definition_p) 5277 && !complete_p 5278 && COMPLETE_TYPE_P (complete_type (type))) 5279 { 5280 complete_p = true; 5281 /* We will not yet have set TREE_READONLY on DECL if the type 5282 was "const", but incomplete, before this point. But, now, we 5283 have a complete type, so we can try again. */ 5284 cp_apply_type_quals_to_decl (cp_type_quals (type), decl); 5285 } 5286 5287 if (initialized) 5288 /* Is it valid for this decl to have an initializer at all? */ 5289 { 5290 /* Don't allow initializations for incomplete types except for 5291 arrays which might be completed by the initialization. */ 5292 if (complete_p) 5293 ; /* A complete type is ok. */ 5294 else if (type_uses_auto (type)) 5295 ; /* An auto type is ok. */ 5296 else if (TREE_CODE (type) != ARRAY_TYPE) 5297 { 5298 error ("variable %q#D has initializer but incomplete type", decl); 5299 type = TREE_TYPE (decl) = error_mark_node; 5300 } 5301 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type)))) 5302 { 5303 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl)) 5304 error ("elements of array %q#D have incomplete type", decl); 5305 /* else we already gave an error in start_decl. */ 5306 } 5307 } 5308 else if (aggregate_definition_p && !complete_p) 5309 { 5310 if (type_uses_auto (type)) 5311 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type)); 5312 else 5313 { 5314 error ("aggregate %q#D has incomplete type and cannot be defined", 5315 decl); 5316 /* Change the type so that assemble_variable will give 5317 DECL an rtl we can live with: (mem (const_int 0)). */ 5318 type = TREE_TYPE (decl) = error_mark_node; 5319 } 5320 } 5321 5322 /* Create a new scope to hold this declaration if necessary. 5323 Whether or not a new scope is necessary cannot be determined 5324 until after the type has been completed; if the type is a 5325 specialization of a class template it is not until after 5326 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR 5327 will be set correctly. */ 5328 maybe_push_cleanup_level (type); 5329 } 5330 5331 /* Handle initialization of references. DECL, TYPE, and INIT have the 5332 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry, 5333 but will be set to a new CLEANUP_STMT if a temporary is created 5334 that must be destroyed subsequently. 5335 5336 Returns an initializer expression to use to initialize DECL, or 5337 NULL if the initialization can be performed statically. 5338 5339 Quotes on semantics can be found in ARM 8.4.3. */ 5340 5341 static tree 5342 grok_reference_init (tree decl, tree type, tree init, int flags) 5343 { 5344 if (init == NULL_TREE) 5345 { 5346 if ((DECL_LANG_SPECIFIC (decl) == 0 5347 || DECL_IN_AGGR_P (decl) == 0) 5348 && ! DECL_THIS_EXTERN (decl)) 5349 error ("%qD declared as reference but not initialized", decl); 5350 return NULL_TREE; 5351 } 5352 5353 if (TREE_CODE (init) == TREE_LIST) 5354 init = build_x_compound_expr_from_list (init, ELK_INIT, 5355 tf_warning_or_error); 5356 5357 tree ttype = TREE_TYPE (type); 5358 if (TREE_CODE (ttype) != ARRAY_TYPE 5359 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE) 5360 /* Note: default conversion is only called in very special cases. */ 5361 init = decay_conversion (init, tf_warning_or_error); 5362 5363 /* check_initializer handles this for non-reference variables, but for 5364 references we need to do it here or the initializer will get the 5365 incomplete array type and confuse later calls to 5366 cp_complete_array_type. */ 5367 if (TREE_CODE (ttype) == ARRAY_TYPE 5368 && TYPE_DOMAIN (ttype) == NULL_TREE 5369 && (BRACE_ENCLOSED_INITIALIZER_P (init) 5370 || TREE_CODE (init) == STRING_CST)) 5371 { 5372 cp_complete_array_type (&ttype, init, false); 5373 if (ttype != TREE_TYPE (type)) 5374 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type)); 5375 } 5376 5377 /* Convert INIT to the reference type TYPE. This may involve the 5378 creation of a temporary, whose lifetime must be the same as that 5379 of the reference. If so, a DECL_EXPR for the temporary will be 5380 added just after the DECL_EXPR for DECL. That's why we don't set 5381 DECL_INITIAL for local references (instead assigning to them 5382 explicitly); we need to allow the temporary to be initialized 5383 first. */ 5384 return initialize_reference (type, init, flags, 5385 tf_warning_or_error); 5386 } 5387 5388 /* Designated initializers in arrays are not supported in GNU C++. 5389 The parser cannot detect this error since it does not know whether 5390 a given brace-enclosed initializer is for a class type or for an 5391 array. This function checks that CE does not use a designated 5392 initializer. If it does, an error is issued. Returns true if CE 5393 is valid, i.e., does not have a designated initializer. */ 5394 5395 bool 5396 check_array_designated_initializer (constructor_elt *ce, 5397 unsigned HOST_WIDE_INT index) 5398 { 5399 /* Designated initializers for array elements are not supported. */ 5400 if (ce->index) 5401 { 5402 /* The parser only allows identifiers as designated 5403 initializers. */ 5404 if (ce->index == error_mark_node) 5405 { 5406 error ("name used in a GNU-style designated " 5407 "initializer for an array"); 5408 return false; 5409 } 5410 else if (identifier_p (ce->index)) 5411 { 5412 error ("name %qD used in a GNU-style designated " 5413 "initializer for an array", ce->index); 5414 return false; 5415 } 5416 5417 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM, 5418 ce->index, true); 5419 if (ce_index 5420 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index)) 5421 && (TREE_CODE (ce_index = fold_non_dependent_expr (ce_index)) 5422 == INTEGER_CST)) 5423 { 5424 /* A C99 designator is OK if it matches the current index. */ 5425 if (wi::to_wide (ce_index) == index) 5426 { 5427 ce->index = ce_index; 5428 return true; 5429 } 5430 else 5431 sorry ("non-trivial designated initializers not supported"); 5432 } 5433 else 5434 error ("C99 designator %qE is not an integral constant-expression", 5435 ce->index); 5436 5437 return false; 5438 } 5439 5440 return true; 5441 } 5442 5443 /* When parsing `int a[] = {1, 2};' we don't know the size of the 5444 array until we finish parsing the initializer. If that's the 5445 situation we're in, update DECL accordingly. */ 5446 5447 static void 5448 maybe_deduce_size_from_array_init (tree decl, tree init) 5449 { 5450 tree type = TREE_TYPE (decl); 5451 5452 if (TREE_CODE (type) == ARRAY_TYPE 5453 && TYPE_DOMAIN (type) == NULL_TREE 5454 && TREE_CODE (decl) != TYPE_DECL) 5455 { 5456 /* do_default is really a C-ism to deal with tentative definitions. 5457 But let's leave it here to ease the eventual merge. */ 5458 int do_default = !DECL_EXTERNAL (decl); 5459 tree initializer = init ? init : DECL_INITIAL (decl); 5460 int failure = 0; 5461 5462 /* Check that there are no designated initializers in INIT, as 5463 those are not supported in GNU C++, and as the middle-end 5464 will crash if presented with a non-numeric designated 5465 initializer. */ 5466 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer)) 5467 { 5468 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer); 5469 constructor_elt *ce; 5470 HOST_WIDE_INT i; 5471 FOR_EACH_VEC_SAFE_ELT (v, i, ce) 5472 { 5473 if (instantiation_dependent_expression_p (ce->index)) 5474 return; 5475 if (!check_array_designated_initializer (ce, i)) 5476 failure = 1; 5477 } 5478 } 5479 5480 if (failure) 5481 TREE_TYPE (decl) = error_mark_node; 5482 else 5483 { 5484 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer, 5485 do_default); 5486 if (failure == 1) 5487 { 5488 error_at (EXPR_LOC_OR_LOC (initializer, 5489 DECL_SOURCE_LOCATION (decl)), 5490 "initializer fails to determine size of %qD", decl); 5491 } 5492 else if (failure == 2) 5493 { 5494 if (do_default) 5495 { 5496 error_at (DECL_SOURCE_LOCATION (decl), 5497 "array size missing in %qD", decl); 5498 } 5499 /* If a `static' var's size isn't known, make it extern as 5500 well as static, so it does not get allocated. If it's not 5501 `static', then don't mark it extern; finish_incomplete_decl 5502 will give it a default size and it will get allocated. */ 5503 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl)) 5504 DECL_EXTERNAL (decl) = 1; 5505 } 5506 else if (failure == 3) 5507 { 5508 error_at (DECL_SOURCE_LOCATION (decl), 5509 "zero-size array %qD", decl); 5510 } 5511 } 5512 5513 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl); 5514 5515 relayout_decl (decl); 5516 } 5517 } 5518 5519 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue 5520 any appropriate error messages regarding the layout. */ 5521 5522 static void 5523 layout_var_decl (tree decl) 5524 { 5525 tree type; 5526 5527 type = TREE_TYPE (decl); 5528 if (type == error_mark_node) 5529 return; 5530 5531 /* If we haven't already laid out this declaration, do so now. 5532 Note that we must not call complete type for an external object 5533 because it's type might involve templates that we are not 5534 supposed to instantiate yet. (And it's perfectly valid to say 5535 `extern X x' for some incomplete type `X'.) */ 5536 if (!DECL_EXTERNAL (decl)) 5537 complete_type (type); 5538 if (!DECL_SIZE (decl) 5539 && TREE_TYPE (decl) != error_mark_node 5540 && complete_or_array_type_p (type)) 5541 layout_decl (decl, 0); 5542 5543 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE) 5544 { 5545 /* An automatic variable with an incomplete type: that is an error. 5546 Don't talk about array types here, since we took care of that 5547 message in grokdeclarator. */ 5548 error_at (DECL_SOURCE_LOCATION (decl), 5549 "storage size of %qD isn%'t known", decl); 5550 TREE_TYPE (decl) = error_mark_node; 5551 } 5552 #if 0 5553 /* Keep this code around in case we later want to control debug info 5554 based on whether a type is "used". (jason 1999-11-11) */ 5555 5556 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype)) 5557 /* Let debugger know it should output info for this type. */ 5558 note_debug_info_needed (ttype); 5559 5560 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl)) 5561 note_debug_info_needed (DECL_CONTEXT (decl)); 5562 #endif 5563 5564 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl)) 5565 && DECL_SIZE (decl) != NULL_TREE 5566 && ! TREE_CONSTANT (DECL_SIZE (decl))) 5567 { 5568 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST) 5569 constant_expression_warning (DECL_SIZE (decl)); 5570 else 5571 { 5572 error_at (DECL_SOURCE_LOCATION (decl), 5573 "storage size of %qD isn%'t constant", decl); 5574 TREE_TYPE (decl) = error_mark_node; 5575 } 5576 } 5577 } 5578 5579 /* If a local static variable is declared in an inline function, or if 5580 we have a weak definition, we must endeavor to create only one 5581 instance of the variable at link-time. */ 5582 5583 void 5584 maybe_commonize_var (tree decl) 5585 { 5586 /* Static data in a function with comdat linkage also has comdat 5587 linkage. */ 5588 if ((TREE_STATIC (decl) 5589 /* Don't mess with __FUNCTION__. */ 5590 && ! DECL_ARTIFICIAL (decl) 5591 && DECL_FUNCTION_SCOPE_P (decl) 5592 && vague_linkage_p (DECL_CONTEXT (decl))) 5593 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl))) 5594 { 5595 if (flag_weak) 5596 { 5597 /* With weak symbols, we simply make the variable COMDAT; 5598 that will cause copies in multiple translations units to 5599 be merged. */ 5600 comdat_linkage (decl); 5601 } 5602 else 5603 { 5604 if (DECL_INITIAL (decl) == NULL_TREE 5605 || DECL_INITIAL (decl) == error_mark_node) 5606 { 5607 /* Without weak symbols, we can use COMMON to merge 5608 uninitialized variables. */ 5609 TREE_PUBLIC (decl) = 1; 5610 DECL_COMMON (decl) = 1; 5611 } 5612 else 5613 { 5614 /* While for initialized variables, we must use internal 5615 linkage -- which means that multiple copies will not 5616 be merged. */ 5617 TREE_PUBLIC (decl) = 0; 5618 DECL_COMMON (decl) = 0; 5619 const char *msg; 5620 if (DECL_INLINE_VAR_P (decl)) 5621 msg = G_("sorry: semantics of inline variable " 5622 "%q#D are wrong (you%'ll wind up with " 5623 "multiple copies)"); 5624 else 5625 msg = G_("sorry: semantics of inline function " 5626 "static data %q#D are wrong (you%'ll wind " 5627 "up with multiple copies)"); 5628 if (warning_at (DECL_SOURCE_LOCATION (decl), 0, 5629 msg, decl)) 5630 inform (DECL_SOURCE_LOCATION (decl), 5631 "you can work around this by removing the initializer"); 5632 } 5633 } 5634 } 5635 } 5636 5637 /* Issue an error message if DECL is an uninitialized const variable. 5638 CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr 5639 context from potential_constant_expression. Returns true if all is well, 5640 false otherwise. */ 5641 5642 bool 5643 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p, 5644 tsubst_flags_t complain) 5645 { 5646 tree type = strip_array_types (TREE_TYPE (decl)); 5647 5648 /* ``Unless explicitly declared extern, a const object does not have 5649 external linkage and must be initialized. ($8.4; $12.1)'' ARM 5650 7.1.6 */ 5651 if (VAR_P (decl) 5652 && TREE_CODE (type) != REFERENCE_TYPE 5653 && (constexpr_context_p 5654 || CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl)) 5655 && !DECL_NONTRIVIALLY_INITIALIZED_P (decl)) 5656 { 5657 tree field = default_init_uninitialized_part (type); 5658 if (!field) 5659 return true; 5660 5661 if (!constexpr_context_p) 5662 { 5663 if (CP_TYPE_CONST_P (type)) 5664 { 5665 if (complain & tf_error) 5666 permerror (DECL_SOURCE_LOCATION (decl), 5667 "uninitialized const %qD", decl); 5668 } 5669 else 5670 { 5671 if (!is_instantiation_of_constexpr (current_function_decl) 5672 && (complain & tf_error)) 5673 error_at (DECL_SOURCE_LOCATION (decl), 5674 "uninitialized variable %qD in %<constexpr%> " 5675 "function", decl); 5676 cp_function_chain->invalid_constexpr = true; 5677 } 5678 } 5679 else if (complain & tf_error) 5680 error_at (DECL_SOURCE_LOCATION (decl), 5681 "uninitialized variable %qD in %<constexpr%> context", 5682 decl); 5683 5684 if (CLASS_TYPE_P (type) && (complain & tf_error)) 5685 { 5686 tree defaulted_ctor; 5687 5688 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)), 5689 "%q#T has no user-provided default constructor", type); 5690 defaulted_ctor = in_class_defaulted_default_constructor (type); 5691 if (defaulted_ctor) 5692 inform (DECL_SOURCE_LOCATION (defaulted_ctor), 5693 "constructor is not user-provided because it is " 5694 "explicitly defaulted in the class body"); 5695 inform (DECL_SOURCE_LOCATION (field), 5696 "and the implicitly-defined constructor does not " 5697 "initialize %q#D", field); 5698 } 5699 5700 return false; 5701 } 5702 5703 return true; 5704 } 5705 5706 /* Structure holding the current initializer being processed by reshape_init. 5707 CUR is a pointer to the current element being processed, END is a pointer 5708 after the last element present in the initializer. */ 5709 struct reshape_iter 5710 { 5711 constructor_elt *cur; 5712 constructor_elt *end; 5713 }; 5714 5715 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t); 5716 5717 /* FIELD is a FIELD_DECL or NULL. In the former case, the value 5718 returned is the next FIELD_DECL (possibly FIELD itself) that can be 5719 initialized. If there are no more such fields, the return value 5720 will be NULL. */ 5721 5722 tree 5723 next_initializable_field (tree field) 5724 { 5725 while (field 5726 && (TREE_CODE (field) != FIELD_DECL 5727 || DECL_UNNAMED_BIT_FIELD (field) 5728 || (DECL_ARTIFICIAL (field) 5729 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field))))) 5730 field = DECL_CHAIN (field); 5731 5732 return field; 5733 } 5734 5735 /* Return true for [dcl.init.list] direct-list-initialization from 5736 single element of enumeration with a fixed underlying type. */ 5737 5738 bool 5739 is_direct_enum_init (tree type, tree init) 5740 { 5741 if (cxx_dialect >= cxx17 5742 && TREE_CODE (type) == ENUMERAL_TYPE 5743 && ENUM_FIXED_UNDERLYING_TYPE_P (type) 5744 && TREE_CODE (init) == CONSTRUCTOR 5745 && CONSTRUCTOR_IS_DIRECT_INIT (init) 5746 && CONSTRUCTOR_NELTS (init) == 1) 5747 return true; 5748 return false; 5749 } 5750 5751 /* Subroutine of reshape_init_array and reshape_init_vector, which does 5752 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an 5753 INTEGER_CST representing the size of the array minus one (the maximum index), 5754 or NULL_TREE if the array was declared without specifying the size. D is 5755 the iterator within the constructor. */ 5756 5757 static tree 5758 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d, 5759 tsubst_flags_t complain) 5760 { 5761 tree new_init; 5762 bool sized_array_p = (max_index && TREE_CONSTANT (max_index)); 5763 unsigned HOST_WIDE_INT max_index_cst = 0; 5764 unsigned HOST_WIDE_INT index; 5765 5766 /* The initializer for an array is always a CONSTRUCTOR. */ 5767 new_init = build_constructor (init_list_type_node, NULL); 5768 5769 if (sized_array_p) 5770 { 5771 /* Minus 1 is used for zero sized arrays. */ 5772 if (integer_all_onesp (max_index)) 5773 return new_init; 5774 5775 if (tree_fits_uhwi_p (max_index)) 5776 max_index_cst = tree_to_uhwi (max_index); 5777 /* sizetype is sign extended, not zero extended. */ 5778 else 5779 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index)); 5780 } 5781 5782 /* Loop until there are no more initializers. */ 5783 for (index = 0; 5784 d->cur != d->end && (!sized_array_p || index <= max_index_cst); 5785 ++index) 5786 { 5787 tree elt_init; 5788 constructor_elt *old_cur = d->cur; 5789 5790 check_array_designated_initializer (d->cur, index); 5791 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false, 5792 complain); 5793 if (elt_init == error_mark_node) 5794 return error_mark_node; 5795 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), 5796 size_int (index), elt_init); 5797 if (!TREE_CONSTANT (elt_init)) 5798 TREE_CONSTANT (new_init) = false; 5799 5800 /* This can happen with an invalid initializer (c++/54501). */ 5801 if (d->cur == old_cur && !sized_array_p) 5802 break; 5803 } 5804 5805 return new_init; 5806 } 5807 5808 /* Subroutine of reshape_init_r, processes the initializers for arrays. 5809 Parameters are the same of reshape_init_r. */ 5810 5811 static tree 5812 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain) 5813 { 5814 tree max_index = NULL_TREE; 5815 5816 gcc_assert (TREE_CODE (type) == ARRAY_TYPE); 5817 5818 if (TYPE_DOMAIN (type)) 5819 max_index = array_type_nelts (type); 5820 5821 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain); 5822 } 5823 5824 /* Subroutine of reshape_init_r, processes the initializers for vectors. 5825 Parameters are the same of reshape_init_r. */ 5826 5827 static tree 5828 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain) 5829 { 5830 tree max_index = NULL_TREE; 5831 5832 gcc_assert (VECTOR_TYPE_P (type)); 5833 5834 if (COMPOUND_LITERAL_P (d->cur->value)) 5835 { 5836 tree value = d->cur->value; 5837 if (!same_type_p (TREE_TYPE (value), type)) 5838 { 5839 if (complain & tf_error) 5840 error ("invalid type %qT as initializer for a vector of type %qT", 5841 TREE_TYPE (d->cur->value), type); 5842 value = error_mark_node; 5843 } 5844 ++d->cur; 5845 return value; 5846 } 5847 5848 /* For a vector, we initialize it as an array of the appropriate size. */ 5849 if (VECTOR_TYPE_P (type)) 5850 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1); 5851 5852 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain); 5853 } 5854 5855 /* Subroutine of reshape_init_r, processes the initializers for classes 5856 or union. Parameters are the same of reshape_init_r. */ 5857 5858 static tree 5859 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p, 5860 tsubst_flags_t complain) 5861 { 5862 tree field; 5863 tree new_init; 5864 5865 gcc_assert (CLASS_TYPE_P (type)); 5866 5867 /* The initializer for a class is always a CONSTRUCTOR. */ 5868 new_init = build_constructor (init_list_type_node, NULL); 5869 field = next_initializable_field (TYPE_FIELDS (type)); 5870 5871 if (!field) 5872 { 5873 /* [dcl.init.aggr] 5874 5875 An initializer for an aggregate member that is an 5876 empty class shall have the form of an empty 5877 initializer-list {}. */ 5878 if (!first_initializer_p) 5879 { 5880 if (complain & tf_error) 5881 error ("initializer for %qT must be brace-enclosed", type); 5882 return error_mark_node; 5883 } 5884 return new_init; 5885 } 5886 5887 /* Loop through the initializable fields, gathering initializers. */ 5888 while (d->cur != d->end) 5889 { 5890 tree field_init; 5891 constructor_elt *old_cur = d->cur; 5892 5893 /* Handle designated initializers, as an extension. */ 5894 if (d->cur->index) 5895 { 5896 if (d->cur->index == error_mark_node) 5897 return error_mark_node; 5898 5899 if (TREE_CODE (d->cur->index) == FIELD_DECL) 5900 { 5901 /* We already reshaped this. */ 5902 if (field != d->cur->index) 5903 { 5904 tree id = DECL_NAME (d->cur->index); 5905 gcc_assert (id); 5906 gcc_checking_assert (d->cur->index 5907 == get_class_binding (type, id, false)); 5908 field = d->cur->index; 5909 } 5910 } 5911 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE) 5912 field = get_class_binding (type, d->cur->index, false); 5913 else 5914 { 5915 if (complain & tf_error) 5916 error ("%<[%E] =%> used in a GNU-style designated initializer" 5917 " for class %qT", d->cur->index, type); 5918 return error_mark_node; 5919 } 5920 5921 if (!field || TREE_CODE (field) != FIELD_DECL) 5922 { 5923 if (complain & tf_error) 5924 error ("%qT has no non-static data member named %qD", type, 5925 d->cur->index); 5926 return error_mark_node; 5927 } 5928 } 5929 5930 /* If we processed all the member of the class, we are done. */ 5931 if (!field) 5932 break; 5933 5934 field_init = reshape_init_r (TREE_TYPE (field), d, 5935 /*first_initializer_p=*/false, complain); 5936 if (field_init == error_mark_node) 5937 return error_mark_node; 5938 5939 if (d->cur == old_cur && d->cur->index) 5940 { 5941 /* This can happen with an invalid initializer for a flexible 5942 array member (c++/54441). */ 5943 if (complain & tf_error) 5944 error ("invalid initializer for %q#D", field); 5945 return error_mark_node; 5946 } 5947 5948 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init); 5949 5950 /* [dcl.init.aggr] 5951 5952 When a union is initialized with a brace-enclosed 5953 initializer, the braces shall only contain an 5954 initializer for the first member of the union. */ 5955 if (TREE_CODE (type) == UNION_TYPE) 5956 break; 5957 5958 field = next_initializable_field (DECL_CHAIN (field)); 5959 } 5960 5961 return new_init; 5962 } 5963 5964 /* Subroutine of reshape_init_r. We're in a context where C99 initializer 5965 designators are not valid; either complain or return true to indicate 5966 that reshape_init_r should return error_mark_node. */ 5967 5968 static bool 5969 has_designator_problem (reshape_iter *d, tsubst_flags_t complain) 5970 { 5971 if (d->cur->index) 5972 { 5973 if (complain & tf_error) 5974 error ("C99 designator %qE outside aggregate initializer", 5975 d->cur->index); 5976 else 5977 return true; 5978 } 5979 return false; 5980 } 5981 5982 /* Subroutine of reshape_init, which processes a single initializer (part of 5983 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the 5984 iterator within the CONSTRUCTOR which points to the initializer to process. 5985 FIRST_INITIALIZER_P is true if this is the first initializer of the 5986 outermost CONSTRUCTOR node. */ 5987 5988 static tree 5989 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p, 5990 tsubst_flags_t complain) 5991 { 5992 tree init = d->cur->value; 5993 5994 if (error_operand_p (init)) 5995 return error_mark_node; 5996 5997 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type) 5998 && has_designator_problem (d, complain)) 5999 return error_mark_node; 6000 6001 if (TREE_CODE (type) == COMPLEX_TYPE) 6002 { 6003 /* A complex type can be initialized from one or two initializers, 6004 but braces are not elided. */ 6005 d->cur++; 6006 if (BRACE_ENCLOSED_INITIALIZER_P (init)) 6007 { 6008 if (CONSTRUCTOR_NELTS (init) > 2) 6009 { 6010 if (complain & tf_error) 6011 error ("too many initializers for %qT", type); 6012 else 6013 return error_mark_node; 6014 } 6015 } 6016 else if (first_initializer_p && d->cur != d->end) 6017 { 6018 vec<constructor_elt, va_gc> *v = 0; 6019 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init); 6020 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value); 6021 if (has_designator_problem (d, complain)) 6022 return error_mark_node; 6023 d->cur++; 6024 init = build_constructor (init_list_type_node, v); 6025 } 6026 return init; 6027 } 6028 6029 /* A non-aggregate type is always initialized with a single 6030 initializer. */ 6031 if (!CP_AGGREGATE_TYPE_P (type)) 6032 { 6033 /* It is invalid to initialize a non-aggregate type with a 6034 brace-enclosed initializer before C++0x. 6035 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because 6036 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is 6037 a CONSTRUCTOR (with a record type). */ 6038 if (TREE_CODE (init) == CONSTRUCTOR 6039 /* Don't complain about a capture-init. */ 6040 && !CONSTRUCTOR_IS_DIRECT_INIT (init) 6041 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */ 6042 { 6043 if (SCALAR_TYPE_P (type)) 6044 { 6045 if (cxx_dialect < cxx11 6046 /* Isn't value-initialization. */ 6047 || CONSTRUCTOR_NELTS (init) > 0) 6048 { 6049 if (complain & tf_error) 6050 error ("braces around scalar initializer for type %qT", 6051 type); 6052 init = error_mark_node; 6053 } 6054 } 6055 else 6056 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS); 6057 } 6058 6059 d->cur++; 6060 return init; 6061 } 6062 6063 /* "If T is a class type and the initializer list has a single element of 6064 type cv U, where U is T or a class derived from T, the object is 6065 initialized from that element." Even if T is an aggregate. */ 6066 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type)) 6067 && first_initializer_p 6068 && d->end - d->cur == 1 6069 && reference_related_p (type, TREE_TYPE (init))) 6070 { 6071 d->cur++; 6072 return init; 6073 } 6074 6075 /* [dcl.init.aggr] 6076 6077 All implicit type conversions (clause _conv_) are considered when 6078 initializing the aggregate member with an initializer from an 6079 initializer-list. If the initializer can initialize a member, 6080 the member is initialized. Otherwise, if the member is itself a 6081 non-empty subaggregate, brace elision is assumed and the 6082 initializer is considered for the initialization of the first 6083 member of the subaggregate. */ 6084 if (TREE_CODE (init) != CONSTRUCTOR 6085 /* But don't try this for the first initializer, since that would be 6086 looking through the outermost braces; A a2 = { a1 }; is not a 6087 valid aggregate initialization. */ 6088 && !first_initializer_p 6089 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init)) 6090 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL, 6091 complain))) 6092 { 6093 d->cur++; 6094 return init; 6095 } 6096 6097 /* [dcl.init.string] 6098 6099 A char array (whether plain char, signed char, or unsigned char) 6100 can be initialized by a string-literal (optionally enclosed in 6101 braces); a wchar_t array can be initialized by a wide 6102 string-literal (optionally enclosed in braces). */ 6103 if (TREE_CODE (type) == ARRAY_TYPE 6104 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type)))) 6105 { 6106 tree str_init = init; 6107 6108 /* Strip one level of braces if and only if they enclose a single 6109 element (as allowed by [dcl.init.string]). */ 6110 if (!first_initializer_p 6111 && TREE_CODE (str_init) == CONSTRUCTOR 6112 && CONSTRUCTOR_NELTS (str_init) == 1) 6113 { 6114 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value; 6115 } 6116 6117 /* If it's a string literal, then it's the initializer for the array 6118 as a whole. Otherwise, continue with normal initialization for 6119 array types (one value per array element). */ 6120 if (TREE_CODE (str_init) == STRING_CST) 6121 { 6122 if (has_designator_problem (d, complain)) 6123 return error_mark_node; 6124 d->cur++; 6125 return str_init; 6126 } 6127 } 6128 6129 /* The following cases are about aggregates. If we are not within a full 6130 initializer already, and there is not a CONSTRUCTOR, it means that there 6131 is a missing set of braces (that is, we are processing the case for 6132 which reshape_init exists). */ 6133 if (!first_initializer_p) 6134 { 6135 if (TREE_CODE (init) == CONSTRUCTOR) 6136 { 6137 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init))) 6138 /* There is no need to reshape pointer-to-member function 6139 initializers, as they are always constructed correctly 6140 by the front end. */ 6141 ; 6142 else if (COMPOUND_LITERAL_P (init)) 6143 /* For a nested compound literal, there is no need to reshape since 6144 brace elision is not allowed. Even if we decided to allow it, 6145 we should add a call to reshape_init in finish_compound_literal, 6146 before calling digest_init, so changing this code would still 6147 not be necessary. */ 6148 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init)); 6149 else 6150 { 6151 ++d->cur; 6152 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init)); 6153 return reshape_init (type, init, complain); 6154 } 6155 } 6156 6157 if (complain & tf_warning) 6158 warning (OPT_Wmissing_braces, 6159 "missing braces around initializer for %qT", 6160 type); 6161 } 6162 6163 /* Dispatch to specialized routines. */ 6164 if (CLASS_TYPE_P (type)) 6165 return reshape_init_class (type, d, first_initializer_p, complain); 6166 else if (TREE_CODE (type) == ARRAY_TYPE) 6167 return reshape_init_array (type, d, complain); 6168 else if (VECTOR_TYPE_P (type)) 6169 return reshape_init_vector (type, d, complain); 6170 else 6171 gcc_unreachable(); 6172 } 6173 6174 /* Undo the brace-elision allowed by [dcl.init.aggr] in a 6175 brace-enclosed aggregate initializer. 6176 6177 INIT is the CONSTRUCTOR containing the list of initializers describing 6178 a brace-enclosed initializer for an entity of the indicated aggregate TYPE. 6179 It may not presently match the shape of the TYPE; for example: 6180 6181 struct S { int a; int b; }; 6182 struct S a[] = { 1, 2, 3, 4 }; 6183 6184 Here INIT will hold a vector of four elements, rather than a 6185 vector of two elements, each itself a vector of two elements. This 6186 routine transforms INIT from the former form into the latter. The 6187 revised CONSTRUCTOR node is returned. */ 6188 6189 tree 6190 reshape_init (tree type, tree init, tsubst_flags_t complain) 6191 { 6192 vec<constructor_elt, va_gc> *v; 6193 reshape_iter d; 6194 tree new_init; 6195 6196 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init)); 6197 6198 v = CONSTRUCTOR_ELTS (init); 6199 6200 /* An empty constructor does not need reshaping, and it is always a valid 6201 initializer. */ 6202 if (vec_safe_is_empty (v)) 6203 return init; 6204 6205 /* Handle [dcl.init.list] direct-list-initialization from 6206 single element of enumeration with a fixed underlying type. */ 6207 if (is_direct_enum_init (type, init)) 6208 { 6209 tree elt = CONSTRUCTOR_ELT (init, 0)->value; 6210 type = cv_unqualified (type); 6211 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain)) 6212 { 6213 warning_sentinel w (warn_useless_cast); 6214 warning_sentinel w2 (warn_ignored_qualifiers); 6215 return cp_build_c_cast (type, elt, tf_warning_or_error); 6216 } 6217 else 6218 return error_mark_node; 6219 } 6220 6221 /* Recurse on this CONSTRUCTOR. */ 6222 d.cur = &(*v)[0]; 6223 d.end = d.cur + v->length (); 6224 6225 new_init = reshape_init_r (type, &d, true, complain); 6226 if (new_init == error_mark_node) 6227 return error_mark_node; 6228 6229 /* Make sure all the element of the constructor were used. Otherwise, 6230 issue an error about exceeding initializers. */ 6231 if (d.cur != d.end) 6232 { 6233 if (complain & tf_error) 6234 error ("too many initializers for %qT", type); 6235 return error_mark_node; 6236 } 6237 6238 if (CONSTRUCTOR_IS_DIRECT_INIT (init) 6239 && BRACE_ENCLOSED_INITIALIZER_P (new_init)) 6240 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true; 6241 6242 return new_init; 6243 } 6244 6245 /* Verify array initializer. Returns true if errors have been reported. */ 6246 6247 bool 6248 check_array_initializer (tree decl, tree type, tree init) 6249 { 6250 tree element_type = TREE_TYPE (type); 6251 6252 /* The array type itself need not be complete, because the 6253 initializer may tell us how many elements are in the array. 6254 But, the elements of the array must be complete. */ 6255 if (!COMPLETE_TYPE_P (complete_type (element_type))) 6256 { 6257 if (decl) 6258 error_at (DECL_SOURCE_LOCATION (decl), 6259 "elements of array %q#D have incomplete type", decl); 6260 else 6261 error ("elements of array %q#T have incomplete type", type); 6262 return true; 6263 } 6264 /* A compound literal can't have variable size. */ 6265 if (init && !decl 6266 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type))) 6267 || !TREE_CONSTANT (TYPE_SIZE (element_type)))) 6268 { 6269 error ("variable-sized compound literal"); 6270 return true; 6271 } 6272 return false; 6273 } 6274 6275 /* Subroutine of check_initializer; args are passed down from that function. 6276 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */ 6277 6278 static tree 6279 build_aggr_init_full_exprs (tree decl, tree init, int flags) 6280 6281 { 6282 gcc_assert (stmts_are_full_exprs_p ()); 6283 return build_aggr_init (decl, init, flags, tf_warning_or_error); 6284 } 6285 6286 /* Verify INIT (the initializer for DECL), and record the 6287 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for 6288 grok_reference_init. 6289 6290 If the return value is non-NULL, it is an expression that must be 6291 evaluated dynamically to initialize DECL. */ 6292 6293 static tree 6294 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups) 6295 { 6296 tree type = TREE_TYPE (decl); 6297 tree init_code = NULL; 6298 tree core_type; 6299 6300 /* Things that are going to be initialized need to have complete 6301 type. */ 6302 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl)); 6303 6304 if (DECL_HAS_VALUE_EXPR_P (decl)) 6305 { 6306 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder, 6307 it doesn't have storage to be initialized. */ 6308 gcc_assert (init == NULL_TREE); 6309 return NULL_TREE; 6310 } 6311 6312 if (type == error_mark_node) 6313 /* We will have already complained. */ 6314 return NULL_TREE; 6315 6316 if (TREE_CODE (type) == ARRAY_TYPE) 6317 { 6318 if (check_array_initializer (decl, type, init)) 6319 return NULL_TREE; 6320 } 6321 else if (!COMPLETE_TYPE_P (type)) 6322 { 6323 error_at (DECL_SOURCE_LOCATION (decl), 6324 "%q#D has incomplete type", decl); 6325 TREE_TYPE (decl) = error_mark_node; 6326 return NULL_TREE; 6327 } 6328 else 6329 /* There is no way to make a variable-sized class type in GNU C++. */ 6330 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type))); 6331 6332 if (init && BRACE_ENCLOSED_INITIALIZER_P (init)) 6333 { 6334 int init_len = CONSTRUCTOR_NELTS (init); 6335 if (SCALAR_TYPE_P (type)) 6336 { 6337 if (init_len == 0) 6338 { 6339 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS); 6340 init = build_zero_init (type, NULL_TREE, false); 6341 } 6342 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE) 6343 { 6344 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)), 6345 "scalar object %qD requires one element in " 6346 "initializer", decl); 6347 TREE_TYPE (decl) = error_mark_node; 6348 return NULL_TREE; 6349 } 6350 } 6351 } 6352 6353 if (TREE_CODE (decl) == CONST_DECL) 6354 { 6355 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE); 6356 6357 DECL_INITIAL (decl) = init; 6358 6359 gcc_assert (init != NULL_TREE); 6360 init = NULL_TREE; 6361 } 6362 else if (!init && DECL_REALLY_EXTERN (decl)) 6363 ; 6364 else if (init || type_build_ctor_call (type) 6365 || TREE_CODE (type) == REFERENCE_TYPE) 6366 { 6367 if (TREE_CODE (type) == REFERENCE_TYPE) 6368 { 6369 init = grok_reference_init (decl, type, init, flags); 6370 flags |= LOOKUP_ALREADY_DIGESTED; 6371 } 6372 else if (!init) 6373 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false, 6374 tf_warning_or_error); 6375 /* Do not reshape constructors of vectors (they don't need to be 6376 reshaped. */ 6377 else if (BRACE_ENCLOSED_INITIALIZER_P (init)) 6378 { 6379 if (is_std_init_list (type)) 6380 { 6381 init = perform_implicit_conversion (type, init, 6382 tf_warning_or_error); 6383 flags |= LOOKUP_ALREADY_DIGESTED; 6384 } 6385 else if (TYPE_NON_AGGREGATE_CLASS (type)) 6386 { 6387 /* Don't reshape if the class has constructors. */ 6388 if (cxx_dialect == cxx98) 6389 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)), 6390 "in C++98 %qD must be initialized by " 6391 "constructor, not by %<{...}%>", 6392 decl); 6393 } 6394 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type)) 6395 { 6396 error ("opaque vector types cannot be initialized"); 6397 init = error_mark_node; 6398 } 6399 else 6400 { 6401 init = reshape_init (type, init, tf_warning_or_error); 6402 flags |= LOOKUP_NO_NARROWING; 6403 } 6404 } 6405 else if (TREE_CODE (init) == TREE_LIST 6406 && TREE_TYPE (init) != unknown_type_node 6407 && !MAYBE_CLASS_TYPE_P (type)) 6408 { 6409 gcc_assert (TREE_CODE (decl) != RESULT_DECL); 6410 6411 /* We get here with code like `int a (2);' */ 6412 init = build_x_compound_expr_from_list (init, ELK_INIT, 6413 tf_warning_or_error); 6414 } 6415 6416 /* If DECL has an array type without a specific bound, deduce the 6417 array size from the initializer. */ 6418 maybe_deduce_size_from_array_init (decl, init); 6419 type = TREE_TYPE (decl); 6420 if (type == error_mark_node) 6421 return NULL_TREE; 6422 6423 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type)) 6424 && !(flags & LOOKUP_ALREADY_DIGESTED) 6425 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init) 6426 && CP_AGGREGATE_TYPE_P (type) 6427 && (CLASS_TYPE_P (type) 6428 || !TYPE_NEEDS_CONSTRUCTING (type) 6429 || type_has_extended_temps (type)))) 6430 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE)) 6431 { 6432 init_code = build_aggr_init_full_exprs (decl, init, flags); 6433 6434 /* A constructor call is a non-trivial initializer even if 6435 it isn't explicitly written. */ 6436 if (TREE_SIDE_EFFECTS (init_code)) 6437 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true; 6438 6439 /* If this is a constexpr initializer, expand_default_init will 6440 have returned an INIT_EXPR rather than a CALL_EXPR. In that 6441 case, pull the initializer back out and pass it down into 6442 store_init_value. */ 6443 while (TREE_CODE (init_code) == EXPR_STMT 6444 || TREE_CODE (init_code) == CONVERT_EXPR) 6445 init_code = TREE_OPERAND (init_code, 0); 6446 if (TREE_CODE (init_code) == INIT_EXPR) 6447 { 6448 init = TREE_OPERAND (init_code, 1); 6449 init_code = NULL_TREE; 6450 /* Don't call digest_init; it's unnecessary and will complain 6451 about aggregate initialization of non-aggregate classes. */ 6452 flags |= LOOKUP_ALREADY_DIGESTED; 6453 } 6454 else if (DECL_DECLARED_CONSTEXPR_P (decl)) 6455 { 6456 /* Declared constexpr, but no suitable initializer; massage 6457 init appropriately so we can pass it into store_init_value 6458 for the error. */ 6459 if (CLASS_TYPE_P (type) 6460 && (!init || TREE_CODE (init) == TREE_LIST)) 6461 { 6462 init = build_functional_cast (type, init, tf_none); 6463 if (TREE_CODE (init) == TARGET_EXPR) 6464 TARGET_EXPR_DIRECT_INIT_P (init) = true; 6465 } 6466 init_code = NULL_TREE; 6467 } 6468 else 6469 init = NULL_TREE; 6470 } 6471 6472 if (init && TREE_CODE (init) != TREE_VEC) 6473 { 6474 /* In aggregate initialization of a variable, each element 6475 initialization is a full-expression because there is no 6476 enclosing expression. */ 6477 gcc_assert (stmts_are_full_exprs_p ()); 6478 6479 init_code = store_init_value (decl, init, cleanups, flags); 6480 6481 if (pedantic && TREE_CODE (type) == ARRAY_TYPE 6482 && DECL_INITIAL (decl) 6483 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST 6484 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl))) 6485 warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl), 6486 DECL_SOURCE_LOCATION (decl)), 6487 0, "array %qD initialized by parenthesized " 6488 "string literal %qE", 6489 decl, DECL_INITIAL (decl)); 6490 init = NULL; 6491 } 6492 } 6493 else 6494 { 6495 if (CLASS_TYPE_P (core_type = strip_array_types (type)) 6496 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type) 6497 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type))) 6498 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false, 6499 /*complain=*/true); 6500 6501 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false, 6502 tf_warning_or_error); 6503 } 6504 6505 if (init && init != error_mark_node) 6506 init_code = build2 (INIT_EXPR, type, decl, init); 6507 6508 if (init_code) 6509 { 6510 /* We might have set these in cp_finish_decl. */ 6511 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false; 6512 TREE_CONSTANT (decl) = false; 6513 } 6514 6515 if (init_code 6516 && (DECL_IN_AGGR_P (decl) 6517 && DECL_INITIALIZED_IN_CLASS_P (decl) 6518 && !DECL_VAR_DECLARED_INLINE_P (decl))) 6519 { 6520 static int explained = 0; 6521 6522 if (cxx_dialect < cxx11) 6523 error ("initializer invalid for static member with constructor"); 6524 else if (cxx_dialect < cxx17) 6525 error ("non-constant in-class initialization invalid for static " 6526 "member %qD", decl); 6527 else 6528 error ("non-constant in-class initialization invalid for non-inline " 6529 "static member %qD", decl); 6530 if (!explained) 6531 { 6532 inform (input_location, 6533 "(an out of class initialization is required)"); 6534 explained = 1; 6535 } 6536 return NULL_TREE; 6537 } 6538 6539 return init_code; 6540 } 6541 6542 /* If DECL is not a local variable, give it RTL. */ 6543 6544 static void 6545 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec) 6546 { 6547 int toplev = toplevel_bindings_p (); 6548 int defer_p; 6549 6550 /* Set the DECL_ASSEMBLER_NAME for the object. */ 6551 if (asmspec) 6552 { 6553 /* The `register' keyword, when used together with an 6554 asm-specification, indicates that the variable should be 6555 placed in a particular register. */ 6556 if (VAR_P (decl) && DECL_REGISTER (decl)) 6557 { 6558 set_user_assembler_name (decl, asmspec); 6559 DECL_HARD_REGISTER (decl) = 1; 6560 } 6561 else 6562 { 6563 if (TREE_CODE (decl) == FUNCTION_DECL 6564 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL) 6565 set_builtin_user_assembler_name (decl, asmspec); 6566 set_user_assembler_name (decl, asmspec); 6567 } 6568 } 6569 6570 /* Handle non-variables up front. */ 6571 if (!VAR_P (decl)) 6572 { 6573 rest_of_decl_compilation (decl, toplev, at_eof); 6574 return; 6575 } 6576 6577 /* If we see a class member here, it should be a static data 6578 member. */ 6579 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl)) 6580 { 6581 gcc_assert (TREE_STATIC (decl)); 6582 /* An in-class declaration of a static data member should be 6583 external; it is only a declaration, and not a definition. */ 6584 if (init == NULL_TREE) 6585 gcc_assert (DECL_EXTERNAL (decl) 6586 || !TREE_PUBLIC (decl) 6587 || DECL_INLINE_VAR_P (decl)); 6588 } 6589 6590 /* We don't create any RTL for local variables. */ 6591 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl)) 6592 return; 6593 6594 /* We defer emission of local statics until the corresponding 6595 DECL_EXPR is expanded. But with constexpr its function might never 6596 be expanded, so go ahead and tell cgraph about the variable now. */ 6597 defer_p = ((DECL_FUNCTION_SCOPE_P (decl) 6598 && !var_in_maybe_constexpr_fn (decl)) 6599 || DECL_VIRTUAL_P (decl)); 6600 6601 /* Defer template instantiations. */ 6602 if (DECL_LANG_SPECIFIC (decl) 6603 && DECL_IMPLICIT_INSTANTIATION (decl)) 6604 defer_p = 1; 6605 6606 /* If we're not deferring, go ahead and assemble the variable. */ 6607 if (!defer_p) 6608 rest_of_decl_compilation (decl, toplev, at_eof); 6609 } 6610 6611 /* walk_tree helper for wrap_temporary_cleanups, below. */ 6612 6613 static tree 6614 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data) 6615 { 6616 /* Stop at types or full-expression boundaries. */ 6617 if (TYPE_P (*stmt_p) 6618 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR) 6619 { 6620 *walk_subtrees = 0; 6621 return NULL_TREE; 6622 } 6623 6624 if (TREE_CODE (*stmt_p) == TARGET_EXPR) 6625 { 6626 tree guard = (tree)data; 6627 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p); 6628 6629 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard); 6630 /* Tell honor_protect_cleanup_actions to handle this as a separate 6631 cleanup. */ 6632 TRY_CATCH_IS_CLEANUP (tcleanup) = 1; 6633 6634 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup; 6635 } 6636 6637 return NULL_TREE; 6638 } 6639 6640 /* We're initializing a local variable which has a cleanup GUARD. If there 6641 are any temporaries used in the initializer INIT of this variable, we 6642 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the 6643 variable will be cleaned up properly if one of them throws. 6644 6645 Unfortunately, there's no way to express this properly in terms of 6646 nesting, as the regions for the temporaries overlap the region for the 6647 variable itself; if there are two temporaries, the variable needs to be 6648 the first thing destroyed if either of them throws. However, we only 6649 want to run the variable's cleanup if it actually got constructed. So 6650 we need to guard the temporary cleanups with the variable's cleanup if 6651 they are run on the normal path, but not if they are run on the 6652 exceptional path. We implement this by telling 6653 honor_protect_cleanup_actions to strip the variable cleanup from the 6654 exceptional path. */ 6655 6656 static void 6657 wrap_temporary_cleanups (tree init, tree guard) 6658 { 6659 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard); 6660 } 6661 6662 /* Generate code to initialize DECL (a local variable). */ 6663 6664 static void 6665 initialize_local_var (tree decl, tree init) 6666 { 6667 tree type = TREE_TYPE (decl); 6668 tree cleanup; 6669 int already_used; 6670 6671 gcc_assert (VAR_P (decl) 6672 || TREE_CODE (decl) == RESULT_DECL); 6673 gcc_assert (!TREE_STATIC (decl)); 6674 6675 if (DECL_SIZE (decl) == NULL_TREE) 6676 { 6677 /* If we used it already as memory, it must stay in memory. */ 6678 DECL_INITIAL (decl) = NULL_TREE; 6679 TREE_ADDRESSABLE (decl) = TREE_USED (decl); 6680 return; 6681 } 6682 6683 if (type == error_mark_node) 6684 return; 6685 6686 /* Compute and store the initial value. */ 6687 already_used = TREE_USED (decl) || TREE_USED (type); 6688 if (TREE_USED (type)) 6689 DECL_READ_P (decl) = 1; 6690 6691 /* Generate a cleanup, if necessary. */ 6692 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error); 6693 6694 /* Perform the initialization. */ 6695 if (init) 6696 { 6697 tree rinit = (TREE_CODE (init) == INIT_EXPR 6698 ? TREE_OPERAND (init, 1) : NULL_TREE); 6699 if (rinit && !TREE_SIDE_EFFECTS (rinit)) 6700 { 6701 /* Stick simple initializers in DECL_INITIAL so that 6702 -Wno-init-self works (c++/34772). */ 6703 gcc_assert (TREE_OPERAND (init, 0) == decl); 6704 DECL_INITIAL (decl) = rinit; 6705 6706 if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE) 6707 { 6708 STRIP_NOPS (rinit); 6709 if (rinit == decl) 6710 warning_at (DECL_SOURCE_LOCATION (decl), 6711 OPT_Winit_self, 6712 "reference %qD is initialized with itself", decl); 6713 } 6714 } 6715 else 6716 { 6717 int saved_stmts_are_full_exprs_p; 6718 6719 /* If we're only initializing a single object, guard the 6720 destructors of any temporaries used in its initializer with 6721 its destructor. This isn't right for arrays because each 6722 element initialization is a full-expression. */ 6723 if (cleanup && TREE_CODE (type) != ARRAY_TYPE) 6724 wrap_temporary_cleanups (init, cleanup); 6725 6726 gcc_assert (building_stmt_list_p ()); 6727 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p (); 6728 current_stmt_tree ()->stmts_are_full_exprs_p = 1; 6729 finish_expr_stmt (init); 6730 current_stmt_tree ()->stmts_are_full_exprs_p = 6731 saved_stmts_are_full_exprs_p; 6732 } 6733 } 6734 6735 /* Set this to 0 so we can tell whether an aggregate which was 6736 initialized was ever used. Don't do this if it has a 6737 destructor, so we don't complain about the 'resource 6738 allocation is initialization' idiom. Now set 6739 attribute((unused)) on types so decls of that type will be 6740 marked used. (see TREE_USED, above.) */ 6741 if (TYPE_NEEDS_CONSTRUCTING (type) 6742 && ! already_used 6743 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type) 6744 && DECL_NAME (decl)) 6745 TREE_USED (decl) = 0; 6746 else if (already_used) 6747 TREE_USED (decl) = 1; 6748 6749 if (cleanup) 6750 finish_decl_cleanup (decl, cleanup); 6751 } 6752 6753 /* DECL is a VAR_DECL for a compiler-generated variable with static 6754 storage duration (like a virtual table) whose initializer is a 6755 compile-time constant. Initialize the variable and provide it to the 6756 back end. */ 6757 6758 void 6759 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v) 6760 { 6761 tree init; 6762 gcc_assert (DECL_ARTIFICIAL (decl)); 6763 init = build_constructor (TREE_TYPE (decl), v); 6764 gcc_assert (TREE_CODE (init) == CONSTRUCTOR); 6765 DECL_INITIAL (decl) = init; 6766 DECL_INITIALIZED_P (decl) = 1; 6767 determine_visibility (decl); 6768 layout_var_decl (decl); 6769 maybe_commonize_var (decl); 6770 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL); 6771 } 6772 6773 /* INIT is the initializer for a variable, as represented by the 6774 parser. Returns true iff INIT is value-dependent. */ 6775 6776 static bool 6777 value_dependent_init_p (tree init) 6778 { 6779 if (TREE_CODE (init) == TREE_LIST) 6780 /* A parenthesized initializer, e.g.: int i (3, 2); ? */ 6781 return any_value_dependent_elements_p (init); 6782 else if (TREE_CODE (init) == CONSTRUCTOR) 6783 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */ 6784 { 6785 if (dependent_type_p (TREE_TYPE (init))) 6786 return true; 6787 6788 vec<constructor_elt, va_gc> *elts; 6789 size_t nelts; 6790 size_t i; 6791 6792 elts = CONSTRUCTOR_ELTS (init); 6793 nelts = vec_safe_length (elts); 6794 for (i = 0; i < nelts; ++i) 6795 if (value_dependent_init_p ((*elts)[i].value)) 6796 return true; 6797 } 6798 else 6799 /* It must be a simple expression, e.g., int i = 3; */ 6800 return value_dependent_expression_p (init); 6801 6802 return false; 6803 } 6804 6805 // Returns true if a DECL is VAR_DECL with the concept specifier. 6806 static inline bool 6807 is_concept_var (tree decl) 6808 { 6809 return (VAR_P (decl) 6810 // Not all variables have DECL_LANG_SPECIFIC. 6811 && DECL_LANG_SPECIFIC (decl) 6812 && DECL_DECLARED_CONCEPT_P (decl)); 6813 } 6814 6815 /* A helper function to be called via walk_tree. If any label exists 6816 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */ 6817 6818 static tree 6819 notice_forced_label_r (tree *tp, int *walk_subtrees, void *) 6820 { 6821 if (TYPE_P (*tp)) 6822 *walk_subtrees = 0; 6823 if (TREE_CODE (*tp) == LABEL_DECL) 6824 cfun->has_forced_label_in_static = 1; 6825 return NULL_TREE; 6826 } 6827 6828 /* Finish processing of a declaration; 6829 install its line number and initial value. 6830 If the length of an array type is not known before, 6831 it must be determined now, from the initial value, or it is an error. 6832 6833 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is 6834 true, then INIT is an integral constant expression. 6835 6836 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0 6837 if the (init) syntax was used. */ 6838 6839 void 6840 cp_finish_decl (tree decl, tree init, bool init_const_expr_p, 6841 tree asmspec_tree, int flags) 6842 { 6843 tree type; 6844 vec<tree, va_gc> *cleanups = NULL; 6845 const char *asmspec = NULL; 6846 int was_readonly = 0; 6847 bool var_definition_p = false; 6848 tree auto_node; 6849 6850 if (decl == error_mark_node) 6851 return; 6852 else if (! decl) 6853 { 6854 if (init) 6855 error ("assignment (not initialization) in declaration"); 6856 return; 6857 } 6858 6859 gcc_assert (TREE_CODE (decl) != RESULT_DECL); 6860 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */ 6861 gcc_assert (TREE_CODE (decl) != PARM_DECL); 6862 6863 type = TREE_TYPE (decl); 6864 if (type == error_mark_node) 6865 return; 6866 6867 /* Warn about register storage specifiers except when in GNU global 6868 or local register variable extension. */ 6869 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE) 6870 { 6871 if (cxx_dialect >= cxx17) 6872 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister, 6873 "ISO C++17 does not allow %<register%> storage " 6874 "class specifier"); 6875 else 6876 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister, 6877 "%<register%> storage class specifier used"); 6878 } 6879 6880 /* If a name was specified, get the string. */ 6881 if (at_namespace_scope_p ()) 6882 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree); 6883 if (asmspec_tree && asmspec_tree != error_mark_node) 6884 asmspec = TREE_STRING_POINTER (asmspec_tree); 6885 6886 if (current_class_type 6887 && CP_DECL_CONTEXT (decl) == current_class_type 6888 && TYPE_BEING_DEFINED (current_class_type) 6889 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type) 6890 && (DECL_INITIAL (decl) || init)) 6891 DECL_INITIALIZED_IN_CLASS_P (decl) = 1; 6892 6893 if (TREE_CODE (decl) != FUNCTION_DECL 6894 && (auto_node = type_uses_auto (type))) 6895 { 6896 tree d_init; 6897 if (init == NULL_TREE) 6898 { 6899 if (DECL_LANG_SPECIFIC (decl) 6900 && DECL_TEMPLATE_INSTANTIATION (decl) 6901 && !DECL_TEMPLATE_INSTANTIATED (decl)) 6902 { 6903 /* init is null because we're deferring instantiating the 6904 initializer until we need it. Well, we need it now. */ 6905 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false); 6906 return; 6907 } 6908 6909 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node)); 6910 } 6911 d_init = init; 6912 if (d_init) 6913 { 6914 if (TREE_CODE (d_init) == TREE_LIST 6915 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node)) 6916 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT, 6917 tf_warning_or_error); 6918 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error); 6919 } 6920 enum auto_deduction_context adc = adc_variable_type; 6921 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl)) 6922 adc = adc_decomp_type; 6923 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node, 6924 tf_warning_or_error, adc, 6925 NULL_TREE, flags); 6926 if (type == error_mark_node) 6927 return; 6928 if (TREE_CODE (type) == FUNCTION_TYPE) 6929 { 6930 error ("initializer for %<decltype(auto) %D%> has function type " 6931 "(did you forget the %<()%> ?)", decl); 6932 TREE_TYPE (decl) = error_mark_node; 6933 return; 6934 } 6935 cp_apply_type_quals_to_decl (cp_type_quals (type), decl); 6936 } 6937 6938 if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node) 6939 { 6940 DECL_DECLARED_CONSTEXPR_P (decl) = 0; 6941 if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl)) 6942 { 6943 init = NULL_TREE; 6944 DECL_EXTERNAL (decl) = 1; 6945 } 6946 } 6947 6948 if (VAR_P (decl) 6949 && DECL_CLASS_SCOPE_P (decl) 6950 && DECL_INITIALIZED_IN_CLASS_P (decl)) 6951 check_static_variable_definition (decl, type); 6952 6953 if (init && TREE_CODE (decl) == FUNCTION_DECL) 6954 { 6955 tree clone; 6956 if (init == ridpointers[(int)RID_DELETE]) 6957 { 6958 /* FIXME check this is 1st decl. */ 6959 DECL_DELETED_FN (decl) = 1; 6960 DECL_DECLARED_INLINE_P (decl) = 1; 6961 DECL_INITIAL (decl) = error_mark_node; 6962 FOR_EACH_CLONE (clone, decl) 6963 { 6964 DECL_DELETED_FN (clone) = 1; 6965 DECL_DECLARED_INLINE_P (clone) = 1; 6966 DECL_INITIAL (clone) = error_mark_node; 6967 } 6968 init = NULL_TREE; 6969 } 6970 else if (init == ridpointers[(int)RID_DEFAULT]) 6971 { 6972 if (defaultable_fn_check (decl)) 6973 DECL_DEFAULTED_FN (decl) = 1; 6974 else 6975 DECL_INITIAL (decl) = NULL_TREE; 6976 } 6977 } 6978 6979 if (init && VAR_P (decl)) 6980 { 6981 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1; 6982 /* If DECL is a reference, then we want to know whether init is a 6983 reference constant; init_const_expr_p as passed tells us whether 6984 it's an rvalue constant. */ 6985 if (TREE_CODE (type) == REFERENCE_TYPE) 6986 init_const_expr_p = potential_constant_expression (init); 6987 if (init_const_expr_p) 6988 { 6989 /* Set these flags now for templates. We'll update the flags in 6990 store_init_value for instantiations. */ 6991 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1; 6992 if (decl_maybe_constant_var_p (decl) 6993 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */ 6994 && TREE_CODE (type) != REFERENCE_TYPE) 6995 TREE_CONSTANT (decl) = 1; 6996 } 6997 } 6998 6999 if (processing_template_decl) 7000 { 7001 bool type_dependent_p; 7002 7003 /* Add this declaration to the statement-tree. */ 7004 if (at_function_scope_p ()) 7005 add_decl_expr (decl); 7006 7007 type_dependent_p = dependent_type_p (type); 7008 7009 if (check_for_bare_parameter_packs (init)) 7010 { 7011 init = NULL_TREE; 7012 DECL_INITIAL (decl) = NULL_TREE; 7013 } 7014 7015 /* Generally, initializers in templates are expanded when the 7016 template is instantiated. But, if DECL is a variable constant 7017 then it can be used in future constant expressions, so its value 7018 must be available. */ 7019 7020 bool dep_init = false; 7021 7022 if (!VAR_P (decl) || type_dependent_p) 7023 /* We can't do anything if the decl has dependent type. */; 7024 else if (!init && is_concept_var (decl)) 7025 { 7026 error ("variable concept has no initializer"); 7027 init = boolean_true_node; 7028 } 7029 else if (init 7030 && init_const_expr_p 7031 && TREE_CODE (type) != REFERENCE_TYPE 7032 && decl_maybe_constant_var_p (decl) 7033 && !(dep_init = value_dependent_init_p (init))) 7034 { 7035 /* This variable seems to be a non-dependent constant, so process 7036 its initializer. If check_initializer returns non-null the 7037 initialization wasn't constant after all. */ 7038 tree init_code; 7039 cleanups = make_tree_vector (); 7040 init_code = check_initializer (decl, init, flags, &cleanups); 7041 if (init_code == NULL_TREE) 7042 init = NULL_TREE; 7043 release_tree_vector (cleanups); 7044 } 7045 else if (!DECL_PRETTY_FUNCTION_P (decl)) 7046 { 7047 /* Deduce array size even if the initializer is dependent. */ 7048 maybe_deduce_size_from_array_init (decl, init); 7049 /* And complain about multiple initializers. */ 7050 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init) 7051 && !MAYBE_CLASS_TYPE_P (type)) 7052 init = build_x_compound_expr_from_list (init, ELK_INIT, 7053 tf_warning_or_error); 7054 } 7055 7056 if (init) 7057 { 7058 if (TREE_CODE (init) == TREE_LIST) 7059 lookup_list_keep (init, true); 7060 DECL_INITIAL (decl) = init; 7061 } 7062 if (dep_init) 7063 { 7064 retrofit_lang_decl (decl); 7065 SET_DECL_DEPENDENT_INIT_P (decl, true); 7066 } 7067 return; 7068 } 7069 7070 /* Just store non-static data member initializers for later. */ 7071 if (init && TREE_CODE (decl) == FIELD_DECL) 7072 DECL_INITIAL (decl) = init; 7073 7074 /* Take care of TYPE_DECLs up front. */ 7075 if (TREE_CODE (decl) == TYPE_DECL) 7076 { 7077 if (type != error_mark_node 7078 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl)) 7079 { 7080 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type) 7081 warning (0, "shadowing previous type declaration of %q#D", decl); 7082 set_identifier_type_value (DECL_NAME (decl), decl); 7083 } 7084 7085 /* If we have installed this as the canonical typedef for this 7086 type, and that type has not been defined yet, delay emitting 7087 the debug information for it, as we will emit it later. */ 7088 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl 7089 && !COMPLETE_TYPE_P (TREE_TYPE (decl))) 7090 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1; 7091 7092 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl), 7093 at_eof); 7094 return; 7095 } 7096 7097 /* A reference will be modified here, as it is initialized. */ 7098 if (! DECL_EXTERNAL (decl) 7099 && TREE_READONLY (decl) 7100 && TREE_CODE (type) == REFERENCE_TYPE) 7101 { 7102 was_readonly = 1; 7103 TREE_READONLY (decl) = 0; 7104 } 7105 7106 if (VAR_P (decl)) 7107 { 7108 /* If this is a local variable that will need a mangled name, 7109 register it now. We must do this before processing the 7110 initializer for the variable, since the initialization might 7111 require a guard variable, and since the mangled name of the 7112 guard variable will depend on the mangled name of this 7113 variable. */ 7114 if (DECL_FUNCTION_SCOPE_P (decl) 7115 && TREE_STATIC (decl) 7116 && !DECL_ARTIFICIAL (decl)) 7117 { 7118 push_local_name (decl); 7119 /* Normally has_forced_label_in_static is set during GIMPLE 7120 lowering, but [cd]tors are never actually compiled directly. 7121 We need to set this early so we can deal with the label 7122 address extension. */ 7123 if ((DECL_CONSTRUCTOR_P (current_function_decl) 7124 || DECL_DESTRUCTOR_P (current_function_decl)) 7125 && init) 7126 { 7127 walk_tree (&init, notice_forced_label_r, NULL, NULL); 7128 add_local_decl (cfun, decl); 7129 } 7130 /* And make sure it's in the symbol table for 7131 c_parse_final_cleanups to find. */ 7132 varpool_node::get_create (decl); 7133 } 7134 7135 /* Convert the initializer to the type of DECL, if we have not 7136 already initialized DECL. */ 7137 if (!DECL_INITIALIZED_P (decl) 7138 /* If !DECL_EXTERNAL then DECL is being defined. In the 7139 case of a static data member initialized inside the 7140 class-specifier, there can be an initializer even if DECL 7141 is *not* defined. */ 7142 && (!DECL_EXTERNAL (decl) || init)) 7143 { 7144 cleanups = make_tree_vector (); 7145 init = check_initializer (decl, init, flags, &cleanups); 7146 7147 /* Handle: 7148 7149 [dcl.init] 7150 7151 The memory occupied by any object of static storage 7152 duration is zero-initialized at program startup before 7153 any other initialization takes place. 7154 7155 We cannot create an appropriate initializer until after 7156 the type of DECL is finalized. If DECL_INITIAL is set, 7157 then the DECL is statically initialized, and any 7158 necessary zero-initialization has already been performed. */ 7159 if (TREE_STATIC (decl) && !DECL_INITIAL (decl)) 7160 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl), 7161 /*nelts=*/NULL_TREE, 7162 /*static_storage_p=*/true); 7163 /* Remember that the initialization for this variable has 7164 taken place. */ 7165 DECL_INITIALIZED_P (decl) = 1; 7166 /* This declaration is the definition of this variable, 7167 unless we are initializing a static data member within 7168 the class specifier. */ 7169 if (!DECL_EXTERNAL (decl)) 7170 var_definition_p = true; 7171 } 7172 /* If the variable has an array type, lay out the type, even if 7173 there is no initializer. It is valid to index through the 7174 array, and we must get TYPE_ALIGN set correctly on the array 7175 type. */ 7176 else if (TREE_CODE (type) == ARRAY_TYPE) 7177 layout_type (type); 7178 7179 if (TREE_STATIC (decl) 7180 && !at_function_scope_p () 7181 && current_function_decl == NULL) 7182 /* So decl is a global variable or a static member of a 7183 non local class. Record the types it uses 7184 so that we can decide later to emit debug info for them. */ 7185 record_types_used_by_current_var_decl (decl); 7186 } 7187 7188 /* Add this declaration to the statement-tree. This needs to happen 7189 after the call to check_initializer so that the DECL_EXPR for a 7190 reference temp is added before the DECL_EXPR for the reference itself. */ 7191 if (DECL_FUNCTION_SCOPE_P (decl)) 7192 { 7193 /* If we're building a variable sized type, and we might be 7194 reachable other than via the top of the current binding 7195 level, then create a new BIND_EXPR so that we deallocate 7196 the object at the right time. */ 7197 if (VAR_P (decl) 7198 && DECL_SIZE (decl) 7199 && !TREE_CONSTANT (DECL_SIZE (decl)) 7200 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list)) 7201 { 7202 tree bind; 7203 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL); 7204 TREE_SIDE_EFFECTS (bind) = 1; 7205 add_stmt (bind); 7206 BIND_EXPR_BODY (bind) = push_stmt_list (); 7207 } 7208 add_decl_expr (decl); 7209 } 7210 7211 /* Let the middle end know about variables and functions -- but not 7212 static data members in uninstantiated class templates. */ 7213 if (VAR_OR_FUNCTION_DECL_P (decl)) 7214 { 7215 if (VAR_P (decl)) 7216 { 7217 layout_var_decl (decl); 7218 maybe_commonize_var (decl); 7219 } 7220 7221 /* This needs to happen after the linkage is set. */ 7222 determine_visibility (decl); 7223 7224 if (var_definition_p && TREE_STATIC (decl)) 7225 { 7226 /* If a TREE_READONLY variable needs initialization 7227 at runtime, it is no longer readonly and we need to 7228 avoid MEM_READONLY_P being set on RTL created for it. */ 7229 if (init) 7230 { 7231 if (TREE_READONLY (decl)) 7232 TREE_READONLY (decl) = 0; 7233 was_readonly = 0; 7234 } 7235 else if (was_readonly) 7236 TREE_READONLY (decl) = 1; 7237 7238 /* Likewise if it needs destruction. */ 7239 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)) 7240 TREE_READONLY (decl) = 0; 7241 } 7242 7243 make_rtl_for_nonlocal_decl (decl, init, asmspec); 7244 7245 /* Check for abstractness of the type. Notice that there is no 7246 need to strip array types here since the check for those types 7247 is already done within create_array_type_for_decl. */ 7248 abstract_virtuals_error (decl, type); 7249 7250 if (TREE_TYPE (decl) == error_mark_node) 7251 /* No initialization required. */ 7252 ; 7253 else if (TREE_CODE (decl) == FUNCTION_DECL) 7254 { 7255 if (init) 7256 { 7257 if (init == ridpointers[(int)RID_DEFAULT]) 7258 { 7259 /* An out-of-class default definition is defined at 7260 the point where it is explicitly defaulted. */ 7261 if (DECL_DELETED_FN (decl)) 7262 maybe_explain_implicit_delete (decl); 7263 else if (DECL_INITIAL (decl) == error_mark_node) 7264 synthesize_method (decl); 7265 } 7266 else 7267 error ("function %q#D is initialized like a variable", decl); 7268 } 7269 /* else no initialization required. */ 7270 } 7271 else if (DECL_EXTERNAL (decl) 7272 && ! (DECL_LANG_SPECIFIC (decl) 7273 && DECL_NOT_REALLY_EXTERN (decl))) 7274 { 7275 if (init) 7276 DECL_INITIAL (decl) = init; 7277 } 7278 /* A variable definition. */ 7279 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl)) 7280 /* Initialize the local variable. */ 7281 initialize_local_var (decl, init); 7282 7283 /* If a variable is defined, and then a subsequent 7284 definition with external linkage is encountered, we will 7285 get here twice for the same variable. We want to avoid 7286 calling expand_static_init more than once. For variables 7287 that are not static data members, we can call 7288 expand_static_init only when we actually process the 7289 initializer. It is not legal to redeclare a static data 7290 member, so this issue does not arise in that case. */ 7291 else if (var_definition_p && TREE_STATIC (decl)) 7292 expand_static_init (decl, init); 7293 } 7294 7295 /* If a CLEANUP_STMT was created to destroy a temporary bound to a 7296 reference, insert it in the statement-tree now. */ 7297 if (cleanups) 7298 { 7299 unsigned i; tree t; 7300 FOR_EACH_VEC_ELT (*cleanups, i, t) 7301 push_cleanup (decl, t, false); 7302 release_tree_vector (cleanups); 7303 } 7304 7305 if (was_readonly) 7306 TREE_READONLY (decl) = 1; 7307 7308 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl); 7309 } 7310 7311 /* For class TYPE return itself or some its bases that contain 7312 any direct non-static data members. Return error_mark_node if an 7313 error has been diagnosed. */ 7314 7315 static tree 7316 find_decomp_class_base (location_t loc, tree type, tree ret) 7317 { 7318 bool member_seen = false; 7319 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field)) 7320 if (TREE_CODE (field) != FIELD_DECL 7321 || DECL_ARTIFICIAL (field) 7322 || DECL_UNNAMED_BIT_FIELD (field)) 7323 continue; 7324 else if (ret) 7325 return type; 7326 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field))) 7327 { 7328 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE) 7329 error_at (loc, "cannot decompose class type %qT because it has an " 7330 "anonymous struct member", type); 7331 else 7332 error_at (loc, "cannot decompose class type %qT because it has an " 7333 "anonymous union member", type); 7334 inform (DECL_SOURCE_LOCATION (field), "declared here"); 7335 return error_mark_node; 7336 } 7337 else if (!accessible_p (type, field, true)) 7338 { 7339 error_at (loc, "cannot decompose inaccessible member %qD of %qT", 7340 field, type); 7341 inform (DECL_SOURCE_LOCATION (field), 7342 TREE_PRIVATE (field) 7343 ? G_("declared private here") 7344 : G_("declared protected here")); 7345 return error_mark_node; 7346 } 7347 else 7348 member_seen = true; 7349 7350 tree base_binfo, binfo; 7351 tree orig_ret = ret; 7352 int i; 7353 if (member_seen) 7354 ret = type; 7355 for (binfo = TYPE_BINFO (type), i = 0; 7356 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++) 7357 { 7358 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret); 7359 if (t == error_mark_node) 7360 return error_mark_node; 7361 if (t != NULL_TREE && t != ret) 7362 { 7363 if (ret == type) 7364 { 7365 error_at (loc, "cannot decompose class type %qT: both it and " 7366 "its base class %qT have non-static data members", 7367 type, t); 7368 return error_mark_node; 7369 } 7370 else if (orig_ret != NULL_TREE) 7371 return t; 7372 else if (ret != NULL_TREE) 7373 { 7374 error_at (loc, "cannot decompose class type %qT: its base " 7375 "classes %qT and %qT have non-static data " 7376 "members", type, ret, t); 7377 return error_mark_node; 7378 } 7379 else 7380 ret = t; 7381 } 7382 } 7383 return ret; 7384 } 7385 7386 /* Return std::tuple_size<TYPE>::value. */ 7387 7388 static tree 7389 get_tuple_size (tree type) 7390 { 7391 tree args = make_tree_vec (1); 7392 TREE_VEC_ELT (args, 0) = type; 7393 tree inst = lookup_template_class (get_identifier ("tuple_size"), args, 7394 /*in_decl*/NULL_TREE, 7395 /*context*/std_node, 7396 /*entering_scope*/false, tf_none); 7397 inst = complete_type (inst); 7398 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst)) 7399 return NULL_TREE; 7400 tree val = lookup_qualified_name (inst, get_identifier ("value"), 7401 /*type*/false, /*complain*/false); 7402 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL) 7403 val = maybe_constant_value (val); 7404 if (TREE_CODE (val) == INTEGER_CST) 7405 return val; 7406 else 7407 return error_mark_node; 7408 } 7409 7410 /* Return std::tuple_element<I,TYPE>::type. */ 7411 7412 static tree 7413 get_tuple_element_type (tree type, unsigned i) 7414 { 7415 tree args = make_tree_vec (2); 7416 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i); 7417 TREE_VEC_ELT (args, 1) = type; 7418 tree inst = lookup_template_class (get_identifier ("tuple_element"), args, 7419 /*in_decl*/NULL_TREE, 7420 /*context*/std_node, 7421 /*entering_scope*/false, 7422 tf_warning_or_error); 7423 return make_typename_type (inst, get_identifier ("type"), 7424 none_type, tf_warning_or_error); 7425 } 7426 7427 /* Return e.get<i>() or get<i>(e). */ 7428 7429 static tree 7430 get_tuple_decomp_init (tree decl, unsigned i) 7431 { 7432 tree get_id = get_identifier ("get"); 7433 tree targs = make_tree_vec (1); 7434 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i); 7435 7436 tree etype = TREE_TYPE (decl); 7437 tree e = convert_from_reference (decl); 7438 7439 /* [The id-expression] e is an lvalue if the type of the entity e is an 7440 lvalue reference and an xvalue otherwise. */ 7441 if (TREE_CODE (etype) != REFERENCE_TYPE 7442 || TYPE_REF_IS_RVALUE (etype)) 7443 e = move (e); 7444 7445 tree fns = lookup_qualified_name (TREE_TYPE (e), get_id, 7446 /*type*/false, /*complain*/false); 7447 bool use_member_get = false; 7448 7449 /* To use a member get, member lookup must find at least one 7450 declaration that is a function template 7451 whose first template parameter is a non-type parameter. */ 7452 for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter) 7453 { 7454 tree fn = *iter; 7455 if (TREE_CODE (fn) == TEMPLATE_DECL) 7456 { 7457 tree tparms = DECL_TEMPLATE_PARMS (fn); 7458 tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0); 7459 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL) 7460 { 7461 use_member_get = true; 7462 break; 7463 } 7464 } 7465 } 7466 7467 if (use_member_get) 7468 { 7469 fns = lookup_template_function (fns, targs); 7470 return build_new_method_call (e, fns, /*args*/NULL, 7471 /*path*/NULL_TREE, LOOKUP_NORMAL, 7472 /*fn_p*/NULL, tf_warning_or_error); 7473 } 7474 else 7475 { 7476 vec<tree,va_gc> *args = make_tree_vector_single (e); 7477 fns = lookup_template_function (get_id, targs); 7478 fns = perform_koenig_lookup (fns, args, tf_warning_or_error); 7479 return finish_call_expr (fns, &args, /*novirt*/false, 7480 /*koenig*/true, tf_warning_or_error); 7481 } 7482 } 7483 7484 /* It's impossible to recover the decltype of a tuple decomposition variable 7485 based on the actual type of the variable, so store it in a hash table. */ 7486 7487 static GTY((cache)) tree_cache_map *decomp_type_table; 7488 static void 7489 store_decomp_type (tree v, tree t) 7490 { 7491 if (!decomp_type_table) 7492 decomp_type_table = tree_cache_map::create_ggc (13); 7493 decomp_type_table->put (v, t); 7494 } 7495 7496 tree 7497 lookup_decomp_type (tree v) 7498 { 7499 return *decomp_type_table->get (v); 7500 } 7501 7502 /* Mangle a decomposition declaration if needed. Arguments like 7503 in cp_finish_decomp. */ 7504 7505 void 7506 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count) 7507 { 7508 if (!processing_template_decl 7509 && !error_operand_p (decl) 7510 && DECL_NAMESPACE_SCOPE_P (decl)) 7511 { 7512 auto_vec<tree, 16> v; 7513 v.safe_grow (count); 7514 tree d = first; 7515 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d)) 7516 v[count - i - 1] = d; 7517 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v)); 7518 maybe_apply_pragma_weak (decl); 7519 } 7520 } 7521 7522 /* Finish a decomposition declaration. DECL is the underlying declaration 7523 "e", FIRST is the head of a chain of decls for the individual identifiers 7524 chained through DECL_CHAIN in reverse order and COUNT is the number of 7525 those decls. */ 7526 7527 void 7528 cp_finish_decomp (tree decl, tree first, unsigned int count) 7529 { 7530 if (error_operand_p (decl)) 7531 { 7532 error_out: 7533 while (count--) 7534 { 7535 TREE_TYPE (first) = error_mark_node; 7536 if (DECL_HAS_VALUE_EXPR_P (first)) 7537 { 7538 SET_DECL_VALUE_EXPR (first, NULL_TREE); 7539 DECL_HAS_VALUE_EXPR_P (first) = 0; 7540 } 7541 first = DECL_CHAIN (first); 7542 } 7543 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl)) 7544 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>")); 7545 return; 7546 } 7547 7548 location_t loc = DECL_SOURCE_LOCATION (decl); 7549 if (type_dependent_expression_p (decl) 7550 /* This happens for range for when not in templates. 7551 Still add the DECL_VALUE_EXPRs for later processing. */ 7552 || (!processing_template_decl 7553 && type_uses_auto (TREE_TYPE (decl)))) 7554 { 7555 for (unsigned int i = 0; i < count; i++) 7556 { 7557 if (!DECL_HAS_VALUE_EXPR_P (first)) 7558 { 7559 tree v = build_nt (ARRAY_REF, decl, 7560 size_int (count - i - 1), 7561 NULL_TREE, NULL_TREE); 7562 SET_DECL_VALUE_EXPR (first, v); 7563 DECL_HAS_VALUE_EXPR_P (first) = 1; 7564 } 7565 if (processing_template_decl) 7566 fit_decomposition_lang_decl (first, decl); 7567 first = DECL_CHAIN (first); 7568 } 7569 return; 7570 } 7571 7572 auto_vec<tree, 16> v; 7573 v.safe_grow (count); 7574 tree d = first; 7575 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d)) 7576 { 7577 v[count - i - 1] = d; 7578 fit_decomposition_lang_decl (d, decl); 7579 } 7580 7581 tree type = TREE_TYPE (decl); 7582 tree dexp = decl; 7583 7584 if (TREE_CODE (type) == REFERENCE_TYPE) 7585 { 7586 dexp = convert_from_reference (dexp); 7587 type = complete_type (TREE_TYPE (type)); 7588 if (type == error_mark_node) 7589 goto error_out; 7590 if (!COMPLETE_TYPE_P (type)) 7591 { 7592 error_at (loc, "structured binding refers to incomplete type %qT", 7593 type); 7594 goto error_out; 7595 } 7596 } 7597 7598 tree eltype = NULL_TREE; 7599 unsigned HOST_WIDE_INT eltscnt = 0; 7600 if (TREE_CODE (type) == ARRAY_TYPE) 7601 { 7602 tree nelts; 7603 nelts = array_type_nelts_top (type); 7604 if (nelts == error_mark_node) 7605 goto error_out; 7606 if (!tree_fits_uhwi_p (nelts)) 7607 { 7608 error_at (loc, "cannot decompose variable length array %qT", type); 7609 goto error_out; 7610 } 7611 eltscnt = tree_to_uhwi (nelts); 7612 if (count != eltscnt) 7613 { 7614 cnt_mismatch: 7615 if (count > eltscnt) 7616 error_n (loc, count, 7617 "%u name provided for structured binding", 7618 "%u names provided for structured binding", count); 7619 else 7620 error_n (loc, count, 7621 "only %u name provided for structured binding", 7622 "only %u names provided for structured binding", count); 7623 inform_n (loc, eltscnt, 7624 "while %qT decomposes into %wu element", 7625 "while %qT decomposes into %wu elements", 7626 type, eltscnt); 7627 goto error_out; 7628 } 7629 eltype = TREE_TYPE (type); 7630 for (unsigned int i = 0; i < count; i++) 7631 { 7632 TREE_TYPE (v[i]) = eltype; 7633 layout_decl (v[i], 0); 7634 if (processing_template_decl) 7635 continue; 7636 tree t = unshare_expr (dexp); 7637 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF, 7638 eltype, t, size_int (i), NULL_TREE, 7639 NULL_TREE); 7640 SET_DECL_VALUE_EXPR (v[i], t); 7641 DECL_HAS_VALUE_EXPR_P (v[i]) = 1; 7642 } 7643 } 7644 /* 2 GNU extensions. */ 7645 else if (TREE_CODE (type) == COMPLEX_TYPE) 7646 { 7647 eltscnt = 2; 7648 if (count != eltscnt) 7649 goto cnt_mismatch; 7650 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type)); 7651 for (unsigned int i = 0; i < count; i++) 7652 { 7653 TREE_TYPE (v[i]) = eltype; 7654 layout_decl (v[i], 0); 7655 if (processing_template_decl) 7656 continue; 7657 tree t = unshare_expr (dexp); 7658 t = build1_loc (DECL_SOURCE_LOCATION (v[i]), 7659 i ? IMAGPART_EXPR : REALPART_EXPR, eltype, 7660 t); 7661 SET_DECL_VALUE_EXPR (v[i], t); 7662 DECL_HAS_VALUE_EXPR_P (v[i]) = 1; 7663 } 7664 } 7665 else if (TREE_CODE (type) == VECTOR_TYPE) 7666 { 7667 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt)) 7668 { 7669 error_at (loc, "cannot decompose variable length vector %qT", type); 7670 goto error_out; 7671 } 7672 if (count != eltscnt) 7673 goto cnt_mismatch; 7674 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type)); 7675 for (unsigned int i = 0; i < count; i++) 7676 { 7677 TREE_TYPE (v[i]) = eltype; 7678 layout_decl (v[i], 0); 7679 if (processing_template_decl) 7680 continue; 7681 tree t = unshare_expr (dexp); 7682 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]), 7683 &t, size_int (i)); 7684 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF, 7685 eltype, t, size_int (i), NULL_TREE, 7686 NULL_TREE); 7687 SET_DECL_VALUE_EXPR (v[i], t); 7688 DECL_HAS_VALUE_EXPR_P (v[i]) = 1; 7689 } 7690 } 7691 else if (tree tsize = get_tuple_size (type)) 7692 { 7693 if (tsize == error_mark_node) 7694 { 7695 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral " 7696 "constant expression", type); 7697 goto error_out; 7698 } 7699 if (!tree_fits_uhwi_p (tsize)) 7700 { 7701 error_n (loc, count, 7702 "%u name provided for structured binding", 7703 "%u names provided for structured binding", count); 7704 inform (loc, "while %qT decomposes into %E elements", 7705 type, tsize); 7706 goto error_out; 7707 } 7708 eltscnt = tree_to_uhwi (tsize); 7709 if (count != eltscnt) 7710 goto cnt_mismatch; 7711 int save_read = DECL_READ_P (decl); 7712 for (unsigned i = 0; i < count; ++i) 7713 { 7714 location_t sloc = input_location; 7715 location_t dloc = DECL_SOURCE_LOCATION (v[i]); 7716 7717 input_location = dloc; 7718 tree init = get_tuple_decomp_init (decl, i); 7719 tree eltype = (init == error_mark_node ? error_mark_node 7720 : get_tuple_element_type (type, i)); 7721 input_location = sloc; 7722 7723 if (init == error_mark_node || eltype == error_mark_node) 7724 { 7725 inform (dloc, "in initialization of structured binding " 7726 "variable %qD", v[i]); 7727 goto error_out; 7728 } 7729 /* Save the decltype away before reference collapse. */ 7730 store_decomp_type (v[i], eltype); 7731 eltype = cp_build_reference_type (eltype, !lvalue_p (init)); 7732 TREE_TYPE (v[i]) = eltype; 7733 layout_decl (v[i], 0); 7734 if (DECL_HAS_VALUE_EXPR_P (v[i])) 7735 { 7736 /* In this case the names are variables, not just proxies. */ 7737 SET_DECL_VALUE_EXPR (v[i], NULL_TREE); 7738 DECL_HAS_VALUE_EXPR_P (v[i]) = 0; 7739 } 7740 if (!processing_template_decl) 7741 cp_finish_decl (v[i], init, /*constexpr*/false, 7742 /*asm*/NULL_TREE, LOOKUP_NORMAL); 7743 } 7744 /* Ignore reads from the underlying decl performed during initialization 7745 of the individual variables. If those will be read, we'll mark 7746 the underlying decl as read at that point. */ 7747 DECL_READ_P (decl) = save_read; 7748 } 7749 else if (TREE_CODE (type) == UNION_TYPE) 7750 { 7751 error_at (loc, "cannot decompose union type %qT", type); 7752 goto error_out; 7753 } 7754 else if (!CLASS_TYPE_P (type)) 7755 { 7756 error_at (loc, "cannot decompose non-array non-class type %qT", type); 7757 goto error_out; 7758 } 7759 else if (LAMBDA_TYPE_P (type)) 7760 { 7761 error_at (loc, "cannot decompose lambda closure type %qT", type); 7762 goto error_out; 7763 } 7764 else if (processing_template_decl && !COMPLETE_TYPE_P (type)) 7765 pedwarn (loc, 0, "structured binding refers to incomplete class type %qT", 7766 type); 7767 else 7768 { 7769 tree btype = find_decomp_class_base (loc, type, NULL_TREE); 7770 if (btype == error_mark_node) 7771 goto error_out; 7772 else if (btype == NULL_TREE) 7773 { 7774 error_at (loc, "cannot decompose class type %qT without non-static " 7775 "data members", type); 7776 goto error_out; 7777 } 7778 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field)) 7779 if (TREE_CODE (field) != FIELD_DECL 7780 || DECL_ARTIFICIAL (field) 7781 || DECL_UNNAMED_BIT_FIELD (field)) 7782 continue; 7783 else 7784 eltscnt++; 7785 if (count != eltscnt) 7786 goto cnt_mismatch; 7787 tree t = dexp; 7788 if (type != btype) 7789 { 7790 t = convert_to_base (t, btype, /*check_access*/true, 7791 /*nonnull*/false, tf_warning_or_error); 7792 type = btype; 7793 } 7794 unsigned int i = 0; 7795 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field)) 7796 if (TREE_CODE (field) != FIELD_DECL 7797 || DECL_ARTIFICIAL (field) 7798 || DECL_UNNAMED_BIT_FIELD (field)) 7799 continue; 7800 else 7801 { 7802 tree tt = finish_non_static_data_member (field, unshare_expr (t), 7803 NULL_TREE); 7804 if (REFERENCE_REF_P (tt)) 7805 tt = TREE_OPERAND (tt, 0); 7806 TREE_TYPE (v[i]) = TREE_TYPE (tt); 7807 layout_decl (v[i], 0); 7808 if (!processing_template_decl) 7809 { 7810 SET_DECL_VALUE_EXPR (v[i], tt); 7811 DECL_HAS_VALUE_EXPR_P (v[i]) = 1; 7812 } 7813 i++; 7814 } 7815 } 7816 if (processing_template_decl) 7817 { 7818 for (unsigned int i = 0; i < count; i++) 7819 if (!DECL_HAS_VALUE_EXPR_P (v[i])) 7820 { 7821 tree a = build_nt (ARRAY_REF, decl, size_int (i), 7822 NULL_TREE, NULL_TREE); 7823 SET_DECL_VALUE_EXPR (v[i], a); 7824 DECL_HAS_VALUE_EXPR_P (v[i]) = 1; 7825 } 7826 } 7827 } 7828 7829 /* Returns a declaration for a VAR_DECL as if: 7830 7831 extern "C" TYPE NAME; 7832 7833 had been seen. Used to create compiler-generated global 7834 variables. */ 7835 7836 static tree 7837 declare_global_var (tree name, tree type) 7838 { 7839 tree decl; 7840 7841 push_to_top_level (); 7842 decl = build_decl (input_location, VAR_DECL, name, type); 7843 TREE_PUBLIC (decl) = 1; 7844 DECL_EXTERNAL (decl) = 1; 7845 DECL_ARTIFICIAL (decl) = 1; 7846 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace); 7847 /* If the user has explicitly declared this variable (perhaps 7848 because the code we are compiling is part of a low-level runtime 7849 library), then it is possible that our declaration will be merged 7850 with theirs by pushdecl. */ 7851 decl = pushdecl (decl); 7852 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0); 7853 pop_from_top_level (); 7854 7855 return decl; 7856 } 7857 7858 /* Returns the type for the argument to "__cxa_atexit" (or "atexit", 7859 if "__cxa_atexit" is not being used) corresponding to the function 7860 to be called when the program exits. */ 7861 7862 static tree 7863 get_atexit_fn_ptr_type (void) 7864 { 7865 tree fn_type; 7866 7867 if (!atexit_fn_ptr_type_node) 7868 { 7869 tree arg_type; 7870 if (flag_use_cxa_atexit 7871 && !targetm.cxx.use_atexit_for_cxa_atexit ()) 7872 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */ 7873 arg_type = ptr_type_node; 7874 else 7875 /* The parameter to "atexit" is "void (*)(void)". */ 7876 arg_type = NULL_TREE; 7877 7878 fn_type = build_function_type_list (void_type_node, 7879 arg_type, NULL_TREE); 7880 atexit_fn_ptr_type_node = build_pointer_type (fn_type); 7881 } 7882 7883 return atexit_fn_ptr_type_node; 7884 } 7885 7886 /* Returns a pointer to the `atexit' function. Note that if 7887 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new 7888 `__cxa_atexit' function specified in the IA64 C++ ABI. */ 7889 7890 static tree 7891 get_atexit_node (void) 7892 { 7893 tree atexit_fndecl; 7894 tree fn_type; 7895 tree fn_ptr_type; 7896 const char *name; 7897 bool use_aeabi_atexit; 7898 7899 if (atexit_node) 7900 return atexit_node; 7901 7902 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ()) 7903 { 7904 /* The declaration for `__cxa_atexit' is: 7905 7906 int __cxa_atexit (void (*)(void *), void *, void *) 7907 7908 We build up the argument types and then the function type 7909 itself. */ 7910 tree argtype0, argtype1, argtype2; 7911 7912 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit (); 7913 /* First, build the pointer-to-function type for the first 7914 argument. */ 7915 fn_ptr_type = get_atexit_fn_ptr_type (); 7916 /* Then, build the rest of the argument types. */ 7917 argtype2 = ptr_type_node; 7918 if (use_aeabi_atexit) 7919 { 7920 argtype1 = fn_ptr_type; 7921 argtype0 = ptr_type_node; 7922 } 7923 else 7924 { 7925 argtype1 = ptr_type_node; 7926 argtype0 = fn_ptr_type; 7927 } 7928 /* And the final __cxa_atexit type. */ 7929 fn_type = build_function_type_list (integer_type_node, 7930 argtype0, argtype1, argtype2, 7931 NULL_TREE); 7932 if (use_aeabi_atexit) 7933 name = "__aeabi_atexit"; 7934 else 7935 name = "__cxa_atexit"; 7936 } 7937 else 7938 { 7939 /* The declaration for `atexit' is: 7940 7941 int atexit (void (*)()); 7942 7943 We build up the argument types and then the function type 7944 itself. */ 7945 fn_ptr_type = get_atexit_fn_ptr_type (); 7946 /* Build the final atexit type. */ 7947 fn_type = build_function_type_list (integer_type_node, 7948 fn_ptr_type, NULL_TREE); 7949 name = "atexit"; 7950 } 7951 7952 /* Now, build the function declaration. */ 7953 push_lang_context (lang_name_c); 7954 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW); 7955 mark_used (atexit_fndecl); 7956 pop_lang_context (); 7957 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error); 7958 7959 return atexit_node; 7960 } 7961 7962 /* Like get_atexit_node, but for thread-local cleanups. */ 7963 7964 static tree 7965 get_thread_atexit_node (void) 7966 { 7967 /* The declaration for `__cxa_thread_atexit' is: 7968 7969 int __cxa_thread_atexit (void (*)(void *), void *, void *) */ 7970 tree fn_type = build_function_type_list (integer_type_node, 7971 get_atexit_fn_ptr_type (), 7972 ptr_type_node, ptr_type_node, 7973 NULL_TREE); 7974 7975 /* Now, build the function declaration. */ 7976 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type, 7977 ECF_LEAF | ECF_NOTHROW); 7978 return decay_conversion (atexit_fndecl, tf_warning_or_error); 7979 } 7980 7981 /* Returns the __dso_handle VAR_DECL. */ 7982 7983 static tree 7984 get_dso_handle_node (void) 7985 { 7986 if (dso_handle_node) 7987 return dso_handle_node; 7988 7989 /* Declare the variable. */ 7990 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"), 7991 ptr_type_node); 7992 7993 #ifdef HAVE_GAS_HIDDEN 7994 if (dso_handle_node != error_mark_node) 7995 { 7996 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN; 7997 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1; 7998 } 7999 #endif 8000 8001 return dso_handle_node; 8002 } 8003 8004 /* Begin a new function with internal linkage whose job will be simply 8005 to destroy some particular variable. */ 8006 8007 static GTY(()) int start_cleanup_cnt; 8008 8009 static tree 8010 start_cleanup_fn (void) 8011 { 8012 char name[32]; 8013 tree fntype; 8014 tree fndecl; 8015 bool use_cxa_atexit = flag_use_cxa_atexit 8016 && !targetm.cxx.use_atexit_for_cxa_atexit (); 8017 8018 push_to_top_level (); 8019 8020 /* No need to mangle this. */ 8021 push_lang_context (lang_name_c); 8022 8023 /* Build the name of the function. */ 8024 sprintf (name, "__tcf_%d", start_cleanup_cnt++); 8025 /* Build the function declaration. */ 8026 fntype = TREE_TYPE (get_atexit_fn_ptr_type ()); 8027 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype); 8028 /* It's a function with internal linkage, generated by the 8029 compiler. */ 8030 TREE_PUBLIC (fndecl) = 0; 8031 DECL_ARTIFICIAL (fndecl) = 1; 8032 /* Make the function `inline' so that it is only emitted if it is 8033 actually needed. It is unlikely that it will be inlined, since 8034 it is only called via a function pointer, but we avoid unnecessary 8035 emissions this way. */ 8036 DECL_DECLARED_INLINE_P (fndecl) = 1; 8037 DECL_INTERFACE_KNOWN (fndecl) = 1; 8038 /* Build the parameter. */ 8039 if (use_cxa_atexit) 8040 { 8041 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node); 8042 TREE_USED (parmdecl) = 1; 8043 DECL_READ_P (parmdecl) = 1; 8044 DECL_ARGUMENTS (fndecl) = parmdecl; 8045 } 8046 8047 pushdecl (fndecl); 8048 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED); 8049 8050 pop_lang_context (); 8051 8052 return current_function_decl; 8053 } 8054 8055 /* Finish the cleanup function begun by start_cleanup_fn. */ 8056 8057 static void 8058 end_cleanup_fn (void) 8059 { 8060 expand_or_defer_fn (finish_function (/*inline_p=*/false)); 8061 8062 pop_from_top_level (); 8063 } 8064 8065 /* Generate code to handle the destruction of DECL, an object with 8066 static storage duration. */ 8067 8068 tree 8069 register_dtor_fn (tree decl) 8070 { 8071 tree cleanup; 8072 tree addr; 8073 tree compound_stmt; 8074 tree fcall; 8075 tree type; 8076 bool ob_parm, dso_parm, use_dtor; 8077 tree arg0, arg1, arg2; 8078 tree atex_node; 8079 8080 type = TREE_TYPE (decl); 8081 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type)) 8082 return void_node; 8083 8084 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or 8085 "__aeabi_atexit"), and DECL is a class object, we can just pass the 8086 destructor to "__cxa_atexit"; we don't have to build a temporary 8087 function to do the cleanup. */ 8088 dso_parm = (flag_use_cxa_atexit 8089 && !targetm.cxx.use_atexit_for_cxa_atexit ()); 8090 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm); 8091 use_dtor = ob_parm && CLASS_TYPE_P (type); 8092 if (use_dtor) 8093 { 8094 cleanup = get_class_binding (type, complete_dtor_identifier); 8095 8096 /* Make sure it is accessible. */ 8097 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup, 8098 tf_warning_or_error); 8099 } 8100 else 8101 { 8102 /* Call build_cleanup before we enter the anonymous function so 8103 that any access checks will be done relative to the current 8104 scope, rather than the scope of the anonymous function. */ 8105 build_cleanup (decl); 8106 8107 /* Now start the function. */ 8108 cleanup = start_cleanup_fn (); 8109 8110 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer 8111 to the original function, rather than the anonymous one. That 8112 will make the back end think that nested functions are in use, 8113 which causes confusion. */ 8114 push_deferring_access_checks (dk_no_check); 8115 fcall = build_cleanup (decl); 8116 pop_deferring_access_checks (); 8117 8118 /* Create the body of the anonymous function. */ 8119 compound_stmt = begin_compound_stmt (BCS_FN_BODY); 8120 finish_expr_stmt (fcall); 8121 finish_compound_stmt (compound_stmt); 8122 end_cleanup_fn (); 8123 } 8124 8125 /* Call atexit with the cleanup function. */ 8126 mark_used (cleanup); 8127 cleanup = build_address (cleanup); 8128 8129 if (CP_DECL_THREAD_LOCAL_P (decl)) 8130 atex_node = get_thread_atexit_node (); 8131 else 8132 atex_node = get_atexit_node (); 8133 8134 if (use_dtor) 8135 { 8136 /* We must convert CLEANUP to the type that "__cxa_atexit" 8137 expects. */ 8138 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup); 8139 /* "__cxa_atexit" will pass the address of DECL to the 8140 cleanup function. */ 8141 mark_used (decl); 8142 addr = build_address (decl); 8143 /* The declared type of the parameter to "__cxa_atexit" is 8144 "void *". For plain "T*", we could just let the 8145 machinery in cp_build_function_call convert it -- but if the 8146 type is "cv-qualified T *", then we need to convert it 8147 before passing it in, to avoid spurious errors. */ 8148 addr = build_nop (ptr_type_node, addr); 8149 } 8150 else 8151 /* Since the cleanup functions we build ignore the address 8152 they're given, there's no reason to pass the actual address 8153 in, and, in general, it's cheaper to pass NULL than any 8154 other value. */ 8155 addr = null_pointer_node; 8156 8157 if (dso_parm) 8158 arg2 = cp_build_addr_expr (get_dso_handle_node (), 8159 tf_warning_or_error); 8160 else if (ob_parm) 8161 /* Just pass NULL to the dso handle parm if we don't actually 8162 have a DSO handle on this target. */ 8163 arg2 = null_pointer_node; 8164 else 8165 arg2 = NULL_TREE; 8166 8167 if (ob_parm) 8168 { 8169 if (!CP_DECL_THREAD_LOCAL_P (decl) 8170 && targetm.cxx.use_aeabi_atexit ()) 8171 { 8172 arg1 = cleanup; 8173 arg0 = addr; 8174 } 8175 else 8176 { 8177 arg1 = addr; 8178 arg0 = cleanup; 8179 } 8180 } 8181 else 8182 { 8183 arg0 = cleanup; 8184 arg1 = NULL_TREE; 8185 } 8186 return cp_build_function_call_nary (atex_node, tf_warning_or_error, 8187 arg0, arg1, arg2, NULL_TREE); 8188 } 8189 8190 /* DECL is a VAR_DECL with static storage duration. INIT, if present, 8191 is its initializer. Generate code to handle the construction 8192 and destruction of DECL. */ 8193 8194 static void 8195 expand_static_init (tree decl, tree init) 8196 { 8197 gcc_assert (VAR_P (decl)); 8198 gcc_assert (TREE_STATIC (decl)); 8199 8200 /* Some variables require no dynamic initialization. */ 8201 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl))) 8202 { 8203 /* Make sure the destructor is callable. */ 8204 cxx_maybe_build_cleanup (decl, tf_warning_or_error); 8205 if (!init) 8206 return; 8207 } 8208 8209 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl) 8210 && !DECL_FUNCTION_SCOPE_P (decl)) 8211 { 8212 if (init) 8213 error ("non-local variable %qD declared %<__thread%> " 8214 "needs dynamic initialization", decl); 8215 else 8216 error ("non-local variable %qD declared %<__thread%> " 8217 "has a non-trivial destructor", decl); 8218 static bool informed; 8219 if (!informed) 8220 { 8221 inform (DECL_SOURCE_LOCATION (decl), 8222 "C++11 %<thread_local%> allows dynamic initialization " 8223 "and destruction"); 8224 informed = true; 8225 } 8226 return; 8227 } 8228 8229 if (DECL_FUNCTION_SCOPE_P (decl)) 8230 { 8231 /* Emit code to perform this initialization but once. */ 8232 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE; 8233 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE; 8234 tree guard, guard_addr; 8235 tree flag, begin; 8236 /* We don't need thread-safety code for thread-local vars. */ 8237 bool thread_guard = (flag_threadsafe_statics 8238 && !CP_DECL_THREAD_LOCAL_P (decl)); 8239 8240 /* Emit code to perform this initialization but once. This code 8241 looks like: 8242 8243 static <type> guard; 8244 if (!__atomic_load (guard.first_byte)) { 8245 if (__cxa_guard_acquire (&guard)) { 8246 bool flag = false; 8247 try { 8248 // Do initialization. 8249 flag = true; __cxa_guard_release (&guard); 8250 // Register variable for destruction at end of program. 8251 } catch { 8252 if (!flag) __cxa_guard_abort (&guard); 8253 } 8254 } 8255 } 8256 8257 Note that the `flag' variable is only set to 1 *after* the 8258 initialization is complete. This ensures that an exception, 8259 thrown during the construction, will cause the variable to 8260 reinitialized when we pass through this code again, as per: 8261 8262 [stmt.dcl] 8263 8264 If the initialization exits by throwing an exception, the 8265 initialization is not complete, so it will be tried again 8266 the next time control enters the declaration. 8267 8268 This process should be thread-safe, too; multiple threads 8269 should not be able to initialize the variable more than 8270 once. */ 8271 8272 /* Create the guard variable. */ 8273 guard = get_guard (decl); 8274 8275 /* Begin the conditional initialization. */ 8276 if_stmt = begin_if_stmt (); 8277 8278 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt); 8279 then_clause = begin_compound_stmt (BCS_NO_SCOPE); 8280 8281 if (thread_guard) 8282 { 8283 tree vfntype = NULL_TREE; 8284 tree acquire_name, release_name, abort_name; 8285 tree acquire_fn, release_fn, abort_fn; 8286 guard_addr = build_address (guard); 8287 8288 acquire_name = get_identifier ("__cxa_guard_acquire"); 8289 release_name = get_identifier ("__cxa_guard_release"); 8290 abort_name = get_identifier ("__cxa_guard_abort"); 8291 acquire_fn = get_global_binding (acquire_name); 8292 release_fn = get_global_binding (release_name); 8293 abort_fn = get_global_binding (abort_name); 8294 if (!acquire_fn) 8295 acquire_fn = push_library_fn 8296 (acquire_name, build_function_type_list (integer_type_node, 8297 TREE_TYPE (guard_addr), 8298 NULL_TREE), 8299 NULL_TREE, ECF_NOTHROW | ECF_LEAF); 8300 if (!release_fn || !abort_fn) 8301 vfntype = build_function_type_list (void_type_node, 8302 TREE_TYPE (guard_addr), 8303 NULL_TREE); 8304 if (!release_fn) 8305 release_fn = push_library_fn (release_name, vfntype, NULL_TREE, 8306 ECF_NOTHROW | ECF_LEAF); 8307 if (!abort_fn) 8308 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE, 8309 ECF_NOTHROW | ECF_LEAF); 8310 8311 inner_if_stmt = begin_if_stmt (); 8312 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr), 8313 inner_if_stmt); 8314 8315 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE); 8316 begin = get_target_expr (boolean_false_node); 8317 flag = TARGET_EXPR_SLOT (begin); 8318 8319 TARGET_EXPR_CLEANUP (begin) 8320 = build3 (COND_EXPR, void_type_node, flag, 8321 void_node, 8322 build_call_n (abort_fn, 1, guard_addr)); 8323 CLEANUP_EH_ONLY (begin) = 1; 8324 8325 /* Do the initialization itself. */ 8326 init = add_stmt_to_compound (begin, init); 8327 init = add_stmt_to_compound 8328 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node)); 8329 init = add_stmt_to_compound 8330 (init, build_call_n (release_fn, 1, guard_addr)); 8331 } 8332 else 8333 init = add_stmt_to_compound (init, set_guard (guard)); 8334 8335 /* Use atexit to register a function for destroying this static 8336 variable. */ 8337 init = add_stmt_to_compound (init, register_dtor_fn (decl)); 8338 8339 finish_expr_stmt (init); 8340 8341 if (thread_guard) 8342 { 8343 finish_compound_stmt (inner_then_clause); 8344 finish_then_clause (inner_if_stmt); 8345 finish_if_stmt (inner_if_stmt); 8346 } 8347 8348 finish_compound_stmt (then_clause); 8349 finish_then_clause (if_stmt); 8350 finish_if_stmt (if_stmt); 8351 } 8352 else if (CP_DECL_THREAD_LOCAL_P (decl)) 8353 tls_aggregates = tree_cons (init, decl, tls_aggregates); 8354 else 8355 static_aggregates = tree_cons (init, decl, static_aggregates); 8356 } 8357 8358 8359 /* Make TYPE a complete type based on INITIAL_VALUE. 8360 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered, 8361 2 if there was no information (in which case assume 0 if DO_DEFAULT), 8362 3 if the initializer list is empty (in pedantic mode). */ 8363 8364 int 8365 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default) 8366 { 8367 int failure; 8368 tree type, elt_type; 8369 8370 /* Don't get confused by a CONSTRUCTOR for some other type. */ 8371 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR 8372 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value) 8373 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE) 8374 return 1; 8375 8376 if (initial_value) 8377 { 8378 unsigned HOST_WIDE_INT i; 8379 tree value; 8380 8381 /* An array of character type can be initialized from a 8382 brace-enclosed string constant. 8383 8384 FIXME: this code is duplicated from reshape_init. Probably 8385 we should just call reshape_init here? */ 8386 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype))) 8387 && TREE_CODE (initial_value) == CONSTRUCTOR 8388 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value))) 8389 { 8390 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value); 8391 tree value = (*v)[0].value; 8392 8393 if (TREE_CODE (value) == STRING_CST 8394 && v->length () == 1) 8395 initial_value = value; 8396 } 8397 8398 /* If any of the elements are parameter packs, we can't actually 8399 complete this type now because the array size is dependent. */ 8400 if (TREE_CODE (initial_value) == CONSTRUCTOR) 8401 { 8402 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value), 8403 i, value) 8404 { 8405 if (PACK_EXPANSION_P (value)) 8406 return 0; 8407 } 8408 } 8409 } 8410 8411 failure = complete_array_type (ptype, initial_value, do_default); 8412 8413 /* We can create the array before the element type is complete, which 8414 means that we didn't have these two bits set in the original type 8415 either. In completing the type, we are expected to propagate these 8416 bits. See also complete_type which does the same thing for arrays 8417 of fixed size. */ 8418 type = *ptype; 8419 if (type != error_mark_node && TYPE_DOMAIN (type)) 8420 { 8421 elt_type = TREE_TYPE (type); 8422 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type); 8423 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type) 8424 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type); 8425 } 8426 8427 return failure; 8428 } 8429 8430 /* As above, but either give an error or reject zero-size arrays, depending 8431 on COMPLAIN. */ 8432 8433 int 8434 cp_complete_array_type_or_error (tree *ptype, tree initial_value, 8435 bool do_default, tsubst_flags_t complain) 8436 { 8437 int failure; 8438 bool sfinae = !(complain & tf_error); 8439 /* In SFINAE context we can't be lenient about zero-size arrays. */ 8440 if (sfinae) 8441 ++pedantic; 8442 failure = cp_complete_array_type (ptype, initial_value, do_default); 8443 if (sfinae) 8444 --pedantic; 8445 if (failure) 8446 { 8447 if (sfinae) 8448 /* Not an error. */; 8449 else if (failure == 1) 8450 error ("initializer fails to determine size of %qT", *ptype); 8451 else if (failure == 2) 8452 { 8453 if (do_default) 8454 error ("array size missing in %qT", *ptype); 8455 } 8456 else if (failure == 3) 8457 error ("zero-size array %qT", *ptype); 8458 *ptype = error_mark_node; 8459 } 8460 return failure; 8461 } 8462 8463 /* Return zero if something is declared to be a member of type 8464 CTYPE when in the context of CUR_TYPE. STRING is the error 8465 message to print in that case. Otherwise, quietly return 1. */ 8466 8467 static int 8468 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags) 8469 { 8470 if (ctype && ctype != cur_type) 8471 { 8472 if (flags == DTOR_FLAG) 8473 error ("destructor for alien class %qT cannot be a member", ctype); 8474 else 8475 error ("constructor for alien class %qT cannot be a member", ctype); 8476 return 0; 8477 } 8478 return 1; 8479 } 8480 8481 /* Subroutine of `grokdeclarator'. */ 8482 8483 /* Generate errors possibly applicable for a given set of specifiers. 8484 This is for ARM $7.1.2. */ 8485 8486 static void 8487 bad_specifiers (tree object, 8488 enum bad_spec_place type, 8489 int virtualp, 8490 int quals, 8491 int inlinep, 8492 int friendp, 8493 int raises) 8494 { 8495 switch (type) 8496 { 8497 case BSP_VAR: 8498 if (virtualp) 8499 error ("%qD declared as a %<virtual%> variable", object); 8500 if (quals) 8501 error ("%<const%> and %<volatile%> function specifiers on " 8502 "%qD invalid in variable declaration", object); 8503 break; 8504 case BSP_PARM: 8505 if (virtualp) 8506 error ("%qD declared as a %<virtual%> parameter", object); 8507 if (inlinep) 8508 error ("%qD declared as an %<inline%> parameter", object); 8509 if (quals) 8510 error ("%<const%> and %<volatile%> function specifiers on " 8511 "%qD invalid in parameter declaration", object); 8512 break; 8513 case BSP_TYPE: 8514 if (virtualp) 8515 error ("%qD declared as a %<virtual%> type", object); 8516 if (inlinep) 8517 error ("%qD declared as an %<inline%> type", object); 8518 if (quals) 8519 error ("%<const%> and %<volatile%> function specifiers on " 8520 "%qD invalid in type declaration", object); 8521 break; 8522 case BSP_FIELD: 8523 if (virtualp) 8524 error ("%qD declared as a %<virtual%> field", object); 8525 if (inlinep) 8526 error ("%qD declared as an %<inline%> field", object); 8527 if (quals) 8528 error ("%<const%> and %<volatile%> function specifiers on " 8529 "%qD invalid in field declaration", object); 8530 break; 8531 default: 8532 gcc_unreachable(); 8533 } 8534 if (friendp) 8535 error ("%q+D declared as a friend", object); 8536 if (raises 8537 && !flag_noexcept_type 8538 && (TREE_CODE (object) == TYPE_DECL 8539 || (!TYPE_PTRFN_P (TREE_TYPE (object)) 8540 && !TYPE_REFFN_P (TREE_TYPE (object)) 8541 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object))))) 8542 error ("%q+D declared with an exception specification", object); 8543 } 8544 8545 /* DECL is a member function or static data member and is presently 8546 being defined. Check that the definition is taking place in a 8547 valid namespace. */ 8548 8549 static void 8550 check_class_member_definition_namespace (tree decl) 8551 { 8552 /* These checks only apply to member functions and static data 8553 members. */ 8554 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl)); 8555 /* We check for problems with specializations in pt.c in 8556 check_specialization_namespace, where we can issue better 8557 diagnostics. */ 8558 if (processing_specialization) 8559 return; 8560 /* We check this in check_explicit_instantiation_namespace. */ 8561 if (processing_explicit_instantiation) 8562 return; 8563 /* [class.mfct] 8564 8565 A member function definition that appears outside of the 8566 class definition shall appear in a namespace scope enclosing 8567 the class definition. 8568 8569 [class.static.data] 8570 8571 The definition for a static data member shall appear in a 8572 namespace scope enclosing the member's class definition. */ 8573 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl))) 8574 permerror (input_location, "definition of %qD is not in namespace enclosing %qT", 8575 decl, DECL_CONTEXT (decl)); 8576 } 8577 8578 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the 8579 METHOD_TYPE for a non-static member function; QUALS are the 8580 cv-qualifiers that apply to the function. */ 8581 8582 tree 8583 build_this_parm (tree fn, tree type, cp_cv_quals quals) 8584 { 8585 tree this_type; 8586 tree qual_type; 8587 tree parm; 8588 cp_cv_quals this_quals; 8589 8590 if (CLASS_TYPE_P (type)) 8591 { 8592 this_type 8593 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT); 8594 this_type = build_pointer_type (this_type); 8595 } 8596 else 8597 this_type = type_of_this_parm (type); 8598 /* The `this' parameter is implicitly `const'; it cannot be 8599 assigned to. */ 8600 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST; 8601 qual_type = cp_build_qualified_type (this_type, this_quals); 8602 parm = build_artificial_parm (fn, this_identifier, qual_type); 8603 cp_apply_type_quals_to_decl (this_quals, parm); 8604 return parm; 8605 } 8606 8607 /* DECL is a static member function. Complain if it was declared 8608 with function-cv-quals. */ 8609 8610 static void 8611 check_static_quals (tree decl, cp_cv_quals quals) 8612 { 8613 if (quals != TYPE_UNQUALIFIED) 8614 error ("static member function %q#D declared with type qualifiers", 8615 decl); 8616 } 8617 8618 // Check that FN takes no arguments and returns bool. 8619 static void 8620 check_concept_fn (tree fn) 8621 { 8622 // A constraint is nullary. 8623 if (DECL_ARGUMENTS (fn)) 8624 error ("concept %q#D declared with function parameters", fn); 8625 8626 // The declared return type of the concept shall be bool, and 8627 // it shall not be deduced from it definition. 8628 tree type = TREE_TYPE (TREE_TYPE (fn)); 8629 if (is_auto (type)) 8630 error ("concept %q#D declared with a deduced return type", fn); 8631 else if (type != boolean_type_node) 8632 error ("concept %q#D with non-%<bool%> return type %qT", fn, type); 8633 } 8634 8635 /* Helper function. Replace the temporary this parameter injected 8636 during cp_finish_omp_declare_simd with the real this parameter. */ 8637 8638 static tree 8639 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data) 8640 { 8641 tree this_parm = (tree) data; 8642 if (TREE_CODE (*tp) == PARM_DECL 8643 && DECL_NAME (*tp) == this_identifier 8644 && *tp != this_parm) 8645 *tp = this_parm; 8646 else if (TYPE_P (*tp)) 8647 *walk_subtrees = 0; 8648 return NULL_TREE; 8649 } 8650 8651 /* CTYPE is class type, or null if non-class. 8652 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE 8653 or METHOD_TYPE. 8654 DECLARATOR is the function's name. 8655 PARMS is a chain of PARM_DECLs for the function. 8656 VIRTUALP is truthvalue of whether the function is virtual or not. 8657 FLAGS are to be passed through to `grokclassfn'. 8658 QUALS are qualifiers indicating whether the function is `const' 8659 or `volatile'. 8660 RAISES is a list of exceptions that this function can raise. 8661 CHECK is 1 if we must find this method in CTYPE, 0 if we should 8662 not look, and -1 if we should not call `grokclassfn' at all. 8663 8664 SFK is the kind of special function (if any) for the new function. 8665 8666 Returns `NULL_TREE' if something goes wrong, after issuing 8667 applicable error messages. */ 8668 8669 static tree 8670 grokfndecl (tree ctype, 8671 tree type, 8672 tree declarator, 8673 tree parms, 8674 tree orig_declarator, 8675 tree decl_reqs, 8676 int virtualp, 8677 enum overload_flags flags, 8678 cp_cv_quals quals, 8679 cp_ref_qualifier rqual, 8680 tree raises, 8681 int check, 8682 int friendp, 8683 int publicp, 8684 int inlinep, 8685 bool deletedp, 8686 special_function_kind sfk, 8687 bool funcdef_flag, 8688 int template_count, 8689 tree in_namespace, 8690 tree* attrlist, 8691 location_t location) 8692 { 8693 tree decl; 8694 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE; 8695 tree t; 8696 8697 // Was the concept specifier present? 8698 bool concept_p = inlinep & 4; 8699 8700 // Concept declarations must have a corresponding definition. 8701 if (concept_p && !funcdef_flag) 8702 { 8703 error ("concept %qD has no definition", declarator); 8704 return NULL_TREE; 8705 } 8706 8707 if (rqual) 8708 type = build_ref_qualified_type (type, rqual); 8709 if (raises) 8710 type = build_exception_variant (type, raises); 8711 8712 decl = build_lang_decl (FUNCTION_DECL, declarator, type); 8713 8714 /* Set the constraints on the declaration. */ 8715 if (flag_concepts) 8716 { 8717 tree tmpl_reqs = NULL_TREE; 8718 if (processing_template_decl > template_class_depth (ctype)) 8719 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms); 8720 8721 /* Adjust the required expression into a constraint. */ 8722 if (decl_reqs) 8723 decl_reqs = normalize_expression (decl_reqs); 8724 8725 tree ci = build_constraints (tmpl_reqs, decl_reqs); 8726 set_constraints (decl, ci); 8727 } 8728 8729 /* If we have an explicit location, use it, otherwise use whatever 8730 build_lang_decl used (probably input_location). */ 8731 if (location != UNKNOWN_LOCATION) 8732 DECL_SOURCE_LOCATION (decl) = location; 8733 8734 if (TREE_CODE (type) == METHOD_TYPE) 8735 { 8736 tree parm = build_this_parm (decl, type, quals); 8737 DECL_CHAIN (parm) = parms; 8738 parms = parm; 8739 8740 /* Allocate space to hold the vptr bit if needed. */ 8741 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY); 8742 } 8743 8744 DECL_ARGUMENTS (decl) = parms; 8745 for (t = parms; t; t = DECL_CHAIN (t)) 8746 DECL_CONTEXT (t) = decl; 8747 8748 /* Propagate volatile out from type to decl. */ 8749 if (TYPE_VOLATILE (type)) 8750 TREE_THIS_VOLATILE (decl) = 1; 8751 8752 /* Setup decl according to sfk. */ 8753 switch (sfk) 8754 { 8755 case sfk_constructor: 8756 case sfk_copy_constructor: 8757 case sfk_move_constructor: 8758 DECL_CXX_CONSTRUCTOR_P (decl) = 1; 8759 DECL_NAME (decl) = ctor_identifier; 8760 break; 8761 case sfk_destructor: 8762 DECL_CXX_DESTRUCTOR_P (decl) = 1; 8763 DECL_NAME (decl) = dtor_identifier; 8764 break; 8765 default: 8766 break; 8767 } 8768 8769 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR) 8770 { 8771 if (funcdef_flag) 8772 error ("defining explicit specialization %qD in friend declaration", 8773 orig_declarator); 8774 else 8775 { 8776 tree fns = TREE_OPERAND (orig_declarator, 0); 8777 tree args = TREE_OPERAND (orig_declarator, 1); 8778 8779 if (PROCESSING_REAL_TEMPLATE_DECL_P ()) 8780 { 8781 /* Something like `template <class T> friend void f<T>()'. */ 8782 error ("invalid use of template-id %qD in declaration " 8783 "of primary template", 8784 orig_declarator); 8785 return NULL_TREE; 8786 } 8787 8788 8789 /* A friend declaration of the form friend void f<>(). Record 8790 the information in the TEMPLATE_ID_EXPR. */ 8791 SET_DECL_IMPLICIT_INSTANTIATION (decl); 8792 8793 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD); 8794 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args); 8795 8796 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t)) 8797 if (TREE_PURPOSE (t) 8798 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG) 8799 { 8800 error ("default arguments are not allowed in declaration " 8801 "of friend template specialization %qD", 8802 decl); 8803 return NULL_TREE; 8804 } 8805 8806 if (inlinep & 1) 8807 { 8808 error ("%<inline%> is not allowed in declaration of friend " 8809 "template specialization %qD", 8810 decl); 8811 return NULL_TREE; 8812 } 8813 } 8814 } 8815 8816 /* If this decl has namespace scope, set that up. */ 8817 if (in_namespace) 8818 set_decl_namespace (decl, in_namespace, friendp); 8819 else if (!ctype) 8820 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ()); 8821 8822 /* `main' and builtins have implicit 'C' linkage. */ 8823 if (ctype == NULL_TREE 8824 && DECL_FILE_SCOPE_P (decl) 8825 && current_lang_name == lang_name_cplusplus 8826 && (MAIN_NAME_P (declarator) 8827 || (IDENTIFIER_LENGTH (declarator) > 10 8828 && IDENTIFIER_POINTER (declarator)[0] == '_' 8829 && IDENTIFIER_POINTER (declarator)[1] == '_' 8830 && strncmp (IDENTIFIER_POINTER (declarator)+2, 8831 "builtin_", 8) == 0) 8832 || (targetcm.cxx_implicit_extern_c 8833 && (targetcm.cxx_implicit_extern_c 8834 (IDENTIFIER_POINTER (declarator)))))) 8835 SET_DECL_LANGUAGE (decl, lang_c); 8836 8837 /* Should probably propagate const out from type to decl I bet (mrs). */ 8838 if (staticp) 8839 { 8840 DECL_STATIC_FUNCTION_P (decl) = 1; 8841 DECL_CONTEXT (decl) = ctype; 8842 } 8843 8844 if (deletedp) 8845 DECL_DELETED_FN (decl) = 1; 8846 8847 if (ctype) 8848 { 8849 DECL_CONTEXT (decl) = ctype; 8850 if (funcdef_flag) 8851 check_class_member_definition_namespace (decl); 8852 } 8853 8854 if (ctype == NULL_TREE && DECL_MAIN_P (decl)) 8855 { 8856 if (PROCESSING_REAL_TEMPLATE_DECL_P()) 8857 error ("cannot declare %<::main%> to be a template"); 8858 if (inlinep & 1) 8859 error ("cannot declare %<::main%> to be inline"); 8860 if (inlinep & 2) 8861 error ("cannot declare %<::main%> to be %<constexpr%>"); 8862 if (!publicp) 8863 error ("cannot declare %<::main%> to be static"); 8864 inlinep = 0; 8865 publicp = 1; 8866 } 8867 8868 /* Members of anonymous types and local classes have no linkage; make 8869 them internal. If a typedef is made later, this will be changed. */ 8870 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype)) 8871 || decl_function_context (TYPE_MAIN_DECL (ctype)))) 8872 publicp = 0; 8873 8874 if (publicp && cxx_dialect == cxx98) 8875 { 8876 /* [basic.link]: A name with no linkage (notably, the name of a class 8877 or enumeration declared in a local scope) shall not be used to 8878 declare an entity with linkage. 8879 8880 DR 757 relaxes this restriction for C++0x. */ 8881 no_linkage_error (decl); 8882 } 8883 8884 TREE_PUBLIC (decl) = publicp; 8885 if (! publicp) 8886 { 8887 DECL_INTERFACE_KNOWN (decl) = 1; 8888 DECL_NOT_REALLY_EXTERN (decl) = 1; 8889 } 8890 8891 /* If the declaration was declared inline, mark it as such. */ 8892 if (inlinep) 8893 { 8894 DECL_DECLARED_INLINE_P (decl) = 1; 8895 if (publicp) 8896 DECL_COMDAT (decl) = 1; 8897 } 8898 if (inlinep & 2) 8899 DECL_DECLARED_CONSTEXPR_P (decl) = true; 8900 8901 // If the concept declaration specifier was found, check 8902 // that the declaration satisfies the necessary requirements. 8903 if (concept_p) 8904 { 8905 DECL_DECLARED_CONCEPT_P (decl) = true; 8906 check_concept_fn (decl); 8907 } 8908 8909 DECL_EXTERNAL (decl) = 1; 8910 if (TREE_CODE (type) == FUNCTION_TYPE) 8911 { 8912 if (quals || rqual) 8913 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl), 8914 TYPE_UNQUALIFIED, 8915 REF_QUAL_NONE); 8916 8917 if (quals) 8918 { 8919 error (ctype 8920 ? G_("static member function %qD cannot have cv-qualifier") 8921 : G_("non-member function %qD cannot have cv-qualifier"), 8922 decl); 8923 quals = TYPE_UNQUALIFIED; 8924 } 8925 8926 if (rqual) 8927 { 8928 error (ctype 8929 ? G_("static member function %qD cannot have ref-qualifier") 8930 : G_("non-member function %qD cannot have ref-qualifier"), 8931 decl); 8932 rqual = REF_QUAL_NONE; 8933 } 8934 } 8935 8936 if (deduction_guide_p (decl)) 8937 { 8938 if (!DECL_NAMESPACE_SCOPE_P (decl)) 8939 { 8940 error_at (location, "deduction guide %qD must be declared at " 8941 "namespace scope", decl); 8942 return NULL_TREE; 8943 } 8944 if (funcdef_flag) 8945 error_at (location, 8946 "deduction guide %qD must not have a function body", decl); 8947 } 8948 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl)) 8949 && !grok_op_properties (decl, /*complain=*/true)) 8950 return NULL_TREE; 8951 else if (UDLIT_OPER_P (DECL_NAME (decl))) 8952 { 8953 bool long_long_unsigned_p; 8954 bool long_double_p; 8955 const char *suffix = NULL; 8956 /* [over.literal]/6: Literal operators shall not have C linkage. */ 8957 if (DECL_LANGUAGE (decl) == lang_c) 8958 { 8959 error ("literal operator with C linkage"); 8960 maybe_show_extern_c_location (); 8961 return NULL_TREE; 8962 } 8963 8964 if (DECL_NAMESPACE_SCOPE_P (decl)) 8965 { 8966 if (!check_literal_operator_args (decl, &long_long_unsigned_p, 8967 &long_double_p)) 8968 { 8969 error ("%qD has invalid argument list", decl); 8970 return NULL_TREE; 8971 } 8972 8973 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl)); 8974 if (long_long_unsigned_p) 8975 { 8976 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix))) 8977 warning (0, "integer suffix %qs" 8978 " shadowed by implementation", suffix); 8979 } 8980 else if (long_double_p) 8981 { 8982 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix))) 8983 warning (0, "floating point suffix %qs" 8984 " shadowed by implementation", suffix); 8985 } 8986 /* 17.6.3.3.5 */ 8987 if (suffix[0] != '_' 8988 && !in_system_header_at (DECL_SOURCE_LOCATION (decl)) 8989 && !current_function_decl && !(friendp && !funcdef_flag)) 8990 warning (OPT_Wliteral_suffix, 8991 "literal operator suffixes not preceded by %<_%>" 8992 " are reserved for future standardization"); 8993 } 8994 else 8995 { 8996 error ("%qD must be a non-member function", decl); 8997 return NULL_TREE; 8998 } 8999 } 9000 9001 if (funcdef_flag) 9002 /* Make the init_value nonzero so pushdecl knows this is not 9003 tentative. error_mark_node is replaced later with the BLOCK. */ 9004 DECL_INITIAL (decl) = error_mark_node; 9005 9006 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl)) 9007 TREE_NOTHROW (decl) = 1; 9008 9009 if (flag_openmp || flag_openmp_simd) 9010 { 9011 /* Adjust "omp declare simd" attributes. */ 9012 tree ods = lookup_attribute ("omp declare simd", *attrlist); 9013 if (ods) 9014 { 9015 tree attr; 9016 for (attr = ods; attr; 9017 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr))) 9018 { 9019 if (TREE_CODE (type) == METHOD_TYPE) 9020 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this, 9021 DECL_ARGUMENTS (decl), NULL); 9022 if (TREE_VALUE (attr) != NULL_TREE) 9023 { 9024 tree cl = TREE_VALUE (TREE_VALUE (attr)); 9025 cl = c_omp_declare_simd_clauses_to_numbers 9026 (DECL_ARGUMENTS (decl), cl); 9027 if (cl) 9028 TREE_VALUE (TREE_VALUE (attr)) = cl; 9029 else 9030 TREE_VALUE (attr) = NULL_TREE; 9031 } 9032 } 9033 } 9034 } 9035 9036 /* Caller will do the rest of this. */ 9037 if (check < 0) 9038 return decl; 9039 9040 if (ctype != NULL_TREE) 9041 grokclassfn (ctype, decl, flags); 9042 9043 /* 12.4/3 */ 9044 if (cxx_dialect >= cxx11 9045 && DECL_DESTRUCTOR_P (decl) 9046 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl)) 9047 && !processing_template_decl) 9048 deduce_noexcept_on_destructor (decl); 9049 9050 decl = check_explicit_specialization (orig_declarator, decl, 9051 template_count, 9052 2 * funcdef_flag + 9053 4 * (friendp != 0) + 9054 8 * concept_p, 9055 *attrlist); 9056 if (decl == error_mark_node) 9057 return NULL_TREE; 9058 9059 if (DECL_STATIC_FUNCTION_P (decl)) 9060 check_static_quals (decl, quals); 9061 9062 if (attrlist) 9063 { 9064 cplus_decl_attributes (&decl, *attrlist, 0); 9065 *attrlist = NULL_TREE; 9066 } 9067 9068 /* Check main's type after attributes have been applied. */ 9069 if (ctype == NULL_TREE && DECL_MAIN_P (decl)) 9070 { 9071 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)), 9072 integer_type_node)) 9073 { 9074 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl)); 9075 tree newtype; 9076 error ("%<::main%> must return %<int%>"); 9077 newtype = build_function_type (integer_type_node, oldtypeargs); 9078 TREE_TYPE (decl) = newtype; 9079 } 9080 if (warn_main) 9081 check_main_parameter_types (decl); 9082 } 9083 9084 if (ctype != NULL_TREE && check) 9085 { 9086 tree old_decl = check_classfn (ctype, decl, 9087 (processing_template_decl 9088 > template_class_depth (ctype)) 9089 ? current_template_parms 9090 : NULL_TREE); 9091 9092 if (old_decl == error_mark_node) 9093 return NULL_TREE; 9094 9095 if (old_decl) 9096 { 9097 tree ok; 9098 tree pushed_scope; 9099 9100 if (TREE_CODE (old_decl) == TEMPLATE_DECL) 9101 /* Because grokfndecl is always supposed to return a 9102 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT 9103 here. We depend on our callers to figure out that its 9104 really a template that's being returned. */ 9105 old_decl = DECL_TEMPLATE_RESULT (old_decl); 9106 9107 if (DECL_STATIC_FUNCTION_P (old_decl) 9108 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE) 9109 { 9110 /* Remove the `this' parm added by grokclassfn. */ 9111 revert_static_member_fn (decl); 9112 check_static_quals (decl, quals); 9113 } 9114 if (DECL_ARTIFICIAL (old_decl)) 9115 { 9116 error ("definition of implicitly-declared %qD", old_decl); 9117 return NULL_TREE; 9118 } 9119 else if (DECL_DEFAULTED_FN (old_decl)) 9120 { 9121 error ("definition of explicitly-defaulted %q+D", decl); 9122 inform (DECL_SOURCE_LOCATION (old_decl), 9123 "%q#D explicitly defaulted here", old_decl); 9124 return NULL_TREE; 9125 } 9126 9127 /* Since we've smashed OLD_DECL to its 9128 DECL_TEMPLATE_RESULT, we must do the same to DECL. */ 9129 if (TREE_CODE (decl) == TEMPLATE_DECL) 9130 decl = DECL_TEMPLATE_RESULT (decl); 9131 9132 /* Attempt to merge the declarations. This can fail, in 9133 the case of some invalid specialization declarations. */ 9134 pushed_scope = push_scope (ctype); 9135 ok = duplicate_decls (decl, old_decl, friendp); 9136 if (pushed_scope) 9137 pop_scope (pushed_scope); 9138 if (!ok) 9139 { 9140 error ("no %q#D member function declared in class %qT", 9141 decl, ctype); 9142 return NULL_TREE; 9143 } 9144 if (ok == error_mark_node) 9145 return NULL_TREE; 9146 return old_decl; 9147 } 9148 } 9149 9150 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl)) 9151 return NULL_TREE; 9152 9153 if (ctype == NULL_TREE || check) 9154 return decl; 9155 9156 if (virtualp) 9157 DECL_VIRTUAL_P (decl) = 1; 9158 9159 return decl; 9160 } 9161 9162 /* decl is a FUNCTION_DECL. 9163 specifiers are the parsed virt-specifiers. 9164 9165 Set flags to reflect the virt-specifiers. 9166 9167 Returns decl. */ 9168 9169 static tree 9170 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers) 9171 { 9172 if (decl == NULL_TREE) 9173 return decl; 9174 if (specifiers & VIRT_SPEC_OVERRIDE) 9175 DECL_OVERRIDE_P (decl) = 1; 9176 if (specifiers & VIRT_SPEC_FINAL) 9177 DECL_FINAL_P (decl) = 1; 9178 return decl; 9179 } 9180 9181 /* DECL is a VAR_DECL for a static data member. Set flags to reflect 9182 the linkage that DECL will receive in the object file. */ 9183 9184 static void 9185 set_linkage_for_static_data_member (tree decl) 9186 { 9187 /* A static data member always has static storage duration and 9188 external linkage. Note that static data members are forbidden in 9189 local classes -- the only situation in which a class has 9190 non-external linkage. */ 9191 TREE_PUBLIC (decl) = 1; 9192 TREE_STATIC (decl) = 1; 9193 /* For non-template classes, static data members are always put 9194 out in exactly those files where they are defined, just as 9195 with ordinary namespace-scope variables. */ 9196 if (!processing_template_decl) 9197 DECL_INTERFACE_KNOWN (decl) = 1; 9198 } 9199 9200 /* Create a VAR_DECL named NAME with the indicated TYPE. 9201 9202 If SCOPE is non-NULL, it is the class type or namespace containing 9203 the variable. If SCOPE is NULL, the variable should is created in 9204 the innermost enclosing scope. */ 9205 9206 static tree 9207 grokvardecl (tree type, 9208 tree name, 9209 tree orig_declarator, 9210 const cp_decl_specifier_seq *declspecs, 9211 int initialized, 9212 int type_quals, 9213 int inlinep, 9214 bool conceptp, 9215 int template_count, 9216 tree scope) 9217 { 9218 tree decl; 9219 tree explicit_scope; 9220 9221 gcc_assert (!name || identifier_p (name)); 9222 9223 bool constp = (type_quals & TYPE_QUAL_CONST) != 0; 9224 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0; 9225 9226 /* Compute the scope in which to place the variable, but remember 9227 whether or not that scope was explicitly specified by the user. */ 9228 explicit_scope = scope; 9229 if (!scope) 9230 { 9231 /* An explicit "extern" specifier indicates a namespace-scope 9232 variable. */ 9233 if (declspecs->storage_class == sc_extern) 9234 scope = current_decl_namespace (); 9235 else if (!at_function_scope_p ()) 9236 scope = current_scope (); 9237 } 9238 9239 if (scope 9240 && (/* If the variable is a namespace-scope variable declared in a 9241 template, we need DECL_LANG_SPECIFIC. */ 9242 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl) 9243 /* Similarly for namespace-scope variables with language linkage 9244 other than C++. */ 9245 || (TREE_CODE (scope) == NAMESPACE_DECL 9246 && current_lang_name != lang_name_cplusplus) 9247 /* Similarly for static data members. */ 9248 || TYPE_P (scope) 9249 /* Similarly for explicit specializations. */ 9250 || (orig_declarator 9251 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR))) 9252 decl = build_lang_decl (VAR_DECL, name, type); 9253 else 9254 decl = build_decl (input_location, VAR_DECL, name, type); 9255 9256 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL) 9257 set_decl_namespace (decl, explicit_scope, 0); 9258 else 9259 DECL_CONTEXT (decl) = FROB_CONTEXT (scope); 9260 9261 if (declspecs->storage_class == sc_extern) 9262 { 9263 DECL_THIS_EXTERN (decl) = 1; 9264 DECL_EXTERNAL (decl) = !initialized; 9265 } 9266 9267 if (DECL_CLASS_SCOPE_P (decl)) 9268 { 9269 set_linkage_for_static_data_member (decl); 9270 /* This function is only called with out-of-class definitions. */ 9271 DECL_EXTERNAL (decl) = 0; 9272 check_class_member_definition_namespace (decl); 9273 } 9274 /* At top level, either `static' or no s.c. makes a definition 9275 (perhaps tentative), and absence of `static' makes it public. */ 9276 else if (toplevel_bindings_p ()) 9277 { 9278 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static 9279 && (DECL_THIS_EXTERN (decl) 9280 || ! constp 9281 || volatilep 9282 || inlinep)); 9283 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl); 9284 } 9285 /* Not at top level, only `static' makes a static definition. */ 9286 else 9287 { 9288 TREE_STATIC (decl) = declspecs->storage_class == sc_static; 9289 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl); 9290 } 9291 9292 if (decl_spec_seq_has_spec_p (declspecs, ds_thread)) 9293 { 9294 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl)) 9295 { 9296 CP_DECL_THREAD_LOCAL_P (decl) = true; 9297 if (!processing_template_decl) 9298 set_decl_tls_model (decl, decl_default_tls_model (decl)); 9299 } 9300 if (declspecs->gnu_thread_keyword_p) 9301 SET_DECL_GNU_TLS_P (decl); 9302 } 9303 9304 /* If the type of the decl has no linkage, make sure that we'll 9305 notice that in mark_used. */ 9306 if (cxx_dialect > cxx98 9307 && decl_linkage (decl) != lk_none 9308 && DECL_LANG_SPECIFIC (decl) == NULL 9309 && !DECL_EXTERN_C_P (decl) 9310 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false)) 9311 retrofit_lang_decl (decl); 9312 9313 if (TREE_PUBLIC (decl)) 9314 { 9315 /* [basic.link]: A name with no linkage (notably, the name of a class 9316 or enumeration declared in a local scope) shall not be used to 9317 declare an entity with linkage. 9318 9319 DR 757 relaxes this restriction for C++0x. */ 9320 if (cxx_dialect < cxx11) 9321 no_linkage_error (decl); 9322 } 9323 else 9324 DECL_INTERFACE_KNOWN (decl) = 1; 9325 9326 if (DECL_NAME (decl) 9327 && MAIN_NAME_P (DECL_NAME (decl)) 9328 && scope == global_namespace) 9329 error ("cannot declare %<::main%> to be a global variable"); 9330 9331 /* Check that the variable can be safely declared as a concept. 9332 Note that this also forbids explicit specializations. */ 9333 if (conceptp) 9334 { 9335 if (!processing_template_decl) 9336 { 9337 error ("a non-template variable cannot be %<concept%>"); 9338 return NULL_TREE; 9339 } 9340 else 9341 DECL_DECLARED_CONCEPT_P (decl) = true; 9342 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node)) 9343 error_at (declspecs->locations[ds_type_spec], 9344 "concept must have type %<bool%>"); 9345 } 9346 else if (flag_concepts 9347 && processing_template_decl > template_class_depth (scope)) 9348 { 9349 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms); 9350 tree ci = build_constraints (reqs, NULL_TREE); 9351 set_constraints (decl, ci); 9352 } 9353 9354 // Handle explicit specializations and instantiations of variable templates. 9355 if (orig_declarator) 9356 decl = check_explicit_specialization (orig_declarator, decl, 9357 template_count, conceptp * 8); 9358 9359 return decl != error_mark_node ? decl : NULL_TREE; 9360 } 9361 9362 /* Create and return a canonical pointer to member function type, for 9363 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */ 9364 9365 tree 9366 build_ptrmemfunc_type (tree type) 9367 { 9368 tree field, fields; 9369 tree t; 9370 9371 if (type == error_mark_node) 9372 return type; 9373 9374 /* Make sure that we always have the unqualified pointer-to-member 9375 type first. */ 9376 if (cp_cv_quals quals = cp_type_quals (type)) 9377 { 9378 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type)); 9379 return cp_build_qualified_type (unqual, quals); 9380 } 9381 9382 /* If a canonical type already exists for this type, use it. We use 9383 this method instead of type_hash_canon, because it only does a 9384 simple equality check on the list of field members. */ 9385 9386 t = TYPE_PTRMEMFUNC_TYPE (type); 9387 if (t) 9388 return t; 9389 9390 t = make_node (RECORD_TYPE); 9391 9392 /* Let the front end know this is a pointer to member function. */ 9393 TYPE_PTRMEMFUNC_FLAG (t) = 1; 9394 9395 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type); 9396 fields = field; 9397 9398 field = build_decl (input_location, FIELD_DECL, delta_identifier, 9399 delta_type_node); 9400 DECL_CHAIN (field) = fields; 9401 fields = field; 9402 9403 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node); 9404 9405 /* Zap out the name so that the back end will give us the debugging 9406 information for this anonymous RECORD_TYPE. */ 9407 TYPE_NAME (t) = NULL_TREE; 9408 9409 /* Cache this pointer-to-member type so that we can find it again 9410 later. */ 9411 TYPE_PTRMEMFUNC_TYPE (type) = t; 9412 9413 if (TYPE_STRUCTURAL_EQUALITY_P (type)) 9414 SET_TYPE_STRUCTURAL_EQUALITY (t); 9415 else if (TYPE_CANONICAL (type) != type) 9416 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type)); 9417 9418 return t; 9419 } 9420 9421 /* Create and return a pointer to data member type. */ 9422 9423 tree 9424 build_ptrmem_type (tree class_type, tree member_type) 9425 { 9426 if (TREE_CODE (member_type) == METHOD_TYPE) 9427 { 9428 cp_cv_quals quals = type_memfn_quals (member_type); 9429 cp_ref_qualifier rqual = type_memfn_rqual (member_type); 9430 member_type = build_memfn_type (member_type, class_type, quals, rqual); 9431 return build_ptrmemfunc_type (build_pointer_type (member_type)); 9432 } 9433 else 9434 { 9435 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE); 9436 return build_offset_type (class_type, member_type); 9437 } 9438 } 9439 9440 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given. 9441 Check to see that the definition is valid. Issue appropriate error 9442 messages. Return 1 if the definition is particularly bad, or 0 9443 otherwise. */ 9444 9445 static int 9446 check_static_variable_definition (tree decl, tree type) 9447 { 9448 /* Avoid redundant diagnostics on out-of-class definitions. */ 9449 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type)) 9450 return 0; 9451 /* Can't check yet if we don't know the type. */ 9452 if (dependent_type_p (type)) 9453 return 0; 9454 /* If DECL is declared constexpr, we'll do the appropriate checks 9455 in check_initializer. Similarly for inline static data members. */ 9456 if (DECL_P (decl) 9457 && (DECL_DECLARED_CONSTEXPR_P (decl) 9458 || DECL_VAR_DECLARED_INLINE_P (decl))) 9459 return 0; 9460 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type)) 9461 { 9462 if (!COMPLETE_TYPE_P (type)) 9463 error_at (DECL_SOURCE_LOCATION (decl), 9464 "in-class initialization of static data member %q#D of " 9465 "incomplete type", decl); 9466 else if (literal_type_p (type)) 9467 permerror (DECL_SOURCE_LOCATION (decl), 9468 "%<constexpr%> needed for in-class initialization of " 9469 "static data member %q#D of non-integral type", decl); 9470 else 9471 error_at (DECL_SOURCE_LOCATION (decl), 9472 "in-class initialization of static data member %q#D of " 9473 "non-literal type", decl); 9474 return 1; 9475 } 9476 9477 /* Motion 10 at San Diego: If a static const integral data member is 9478 initialized with an integral constant expression, the initializer 9479 may appear either in the declaration (within the class), or in 9480 the definition, but not both. If it appears in the class, the 9481 member is a member constant. The file-scope definition is always 9482 required. */ 9483 if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE) 9484 { 9485 error_at (DECL_SOURCE_LOCATION (decl), 9486 "invalid in-class initialization of static data member " 9487 "of non-integral type %qT", 9488 type); 9489 return 1; 9490 } 9491 else if (!CP_TYPE_CONST_P (type)) 9492 error_at (DECL_SOURCE_LOCATION (decl), 9493 "ISO C++ forbids in-class initialization of non-const " 9494 "static member %qD", 9495 decl); 9496 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type)) 9497 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic, 9498 "ISO C++ forbids initialization of member constant " 9499 "%qD of non-integral type %qT", decl, type); 9500 9501 return 0; 9502 } 9503 9504 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any 9505 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those 9506 expressions out into temporary variables so that walk_tree doesn't 9507 step into them (c++/15764). */ 9508 9509 static tree 9510 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data) 9511 { 9512 hash_set<tree> *pset = (hash_set<tree> *)data; 9513 tree expr = *expr_p; 9514 if (TREE_CODE (expr) == SAVE_EXPR) 9515 { 9516 tree op = TREE_OPERAND (expr, 0); 9517 cp_walk_tree (&op, stabilize_save_expr_r, data, pset); 9518 if (TREE_SIDE_EFFECTS (op)) 9519 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op); 9520 *walk_subtrees = 0; 9521 } 9522 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr)) 9523 *walk_subtrees = 0; 9524 return NULL; 9525 } 9526 9527 /* Entry point for the above. */ 9528 9529 static void 9530 stabilize_vla_size (tree size) 9531 { 9532 hash_set<tree> pset; 9533 /* Break out any function calls into temporary variables. */ 9534 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset); 9535 } 9536 9537 /* Reduce a SIZEOF_EXPR to its value. */ 9538 9539 tree 9540 fold_sizeof_expr (tree t) 9541 { 9542 tree r; 9543 if (SIZEOF_EXPR_TYPE_P (t)) 9544 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)), 9545 SIZEOF_EXPR, false, false); 9546 else if (TYPE_P (TREE_OPERAND (t, 0))) 9547 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR, 9548 false, false); 9549 else 9550 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR, 9551 false); 9552 if (r == error_mark_node) 9553 r = size_one_node; 9554 return r; 9555 } 9556 9557 /* Given the SIZE (i.e., number of elements) in an array, compute 9558 an appropriate index type for the array. If non-NULL, NAME is 9559 the name of the entity being declared. */ 9560 9561 tree 9562 compute_array_index_type (tree name, tree size, tsubst_flags_t complain) 9563 { 9564 tree itype; 9565 tree osize = size; 9566 9567 if (error_operand_p (size)) 9568 return error_mark_node; 9569 9570 if (!type_dependent_expression_p (size)) 9571 { 9572 osize = size = mark_rvalue_use (size); 9573 9574 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR 9575 && TREE_SIDE_EFFECTS (size)) 9576 /* In C++98, we mark a non-constant array bound with a magic 9577 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */; 9578 else 9579 { 9580 size = instantiate_non_dependent_expr_sfinae (size, complain); 9581 size = build_converted_constant_expr (size_type_node, size, complain); 9582 size = maybe_constant_value (size); 9583 9584 if (!TREE_CONSTANT (size)) 9585 size = osize; 9586 } 9587 9588 if (error_operand_p (size)) 9589 return error_mark_node; 9590 9591 /* The array bound must be an integer type. */ 9592 tree type = TREE_TYPE (size); 9593 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type)) 9594 { 9595 if (!(complain & tf_error)) 9596 return error_mark_node; 9597 if (name) 9598 error ("size of array %qD has non-integral type %qT", name, type); 9599 else 9600 error ("size of array has non-integral type %qT", type); 9601 size = integer_one_node; 9602 } 9603 } 9604 9605 /* A type is dependent if it is...an array type constructed from any 9606 dependent type or whose size is specified by a constant expression 9607 that is value-dependent. */ 9608 /* We can only call value_dependent_expression_p on integral constant 9609 expressions; treat non-constant expressions as dependent, too. */ 9610 if (processing_template_decl 9611 && (type_dependent_expression_p (size) 9612 || !TREE_CONSTANT (size) || value_dependent_expression_p (size))) 9613 { 9614 /* We cannot do any checking for a SIZE that isn't known to be 9615 constant. Just build the index type and mark that it requires 9616 structural equality checks. */ 9617 itype = build_index_type (build_min (MINUS_EXPR, sizetype, 9618 size, size_one_node)); 9619 TYPE_DEPENDENT_P (itype) = 1; 9620 TYPE_DEPENDENT_P_VALID (itype) = 1; 9621 SET_TYPE_STRUCTURAL_EQUALITY (itype); 9622 return itype; 9623 } 9624 9625 if (TREE_CODE (size) != INTEGER_CST) 9626 { 9627 tree folded = cp_fully_fold (size); 9628 if (TREE_CODE (folded) == INTEGER_CST) 9629 pedwarn (location_of (size), OPT_Wpedantic, 9630 "size of array is not an integral constant-expression"); 9631 /* Use the folded result for VLAs, too; it will have resolved 9632 SIZEOF_EXPR. */ 9633 size = folded; 9634 } 9635 9636 /* Normally, the array-bound will be a constant. */ 9637 if (TREE_CODE (size) == INTEGER_CST) 9638 { 9639 /* An array must have a positive number of elements. */ 9640 if (!valid_constant_size_p (size)) 9641 { 9642 if (!(complain & tf_error)) 9643 return error_mark_node; 9644 9645 if (name) 9646 error ("size of array %qD is negative", name); 9647 else 9648 error ("size of array is negative"); 9649 size = integer_one_node; 9650 } 9651 /* As an extension we allow zero-sized arrays. */ 9652 else if (integer_zerop (size)) 9653 { 9654 if (!(complain & tf_error)) 9655 /* We must fail if performing argument deduction (as 9656 indicated by the state of complain), so that 9657 another substitution can be found. */ 9658 return error_mark_node; 9659 else if (in_system_header_at (input_location)) 9660 /* Allow them in system headers because glibc uses them. */; 9661 else if (name) 9662 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name); 9663 else 9664 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array"); 9665 } 9666 } 9667 else if (TREE_CONSTANT (size) 9668 /* We don't allow VLAs at non-function scopes, or during 9669 tentative template substitution. */ 9670 || !at_function_scope_p () 9671 || !(complain & tf_error)) 9672 { 9673 if (!(complain & tf_error)) 9674 return error_mark_node; 9675 /* `(int) &fn' is not a valid array bound. */ 9676 if (name) 9677 error ("size of array %qD is not an integral constant-expression", 9678 name); 9679 else 9680 error ("size of array is not an integral constant-expression"); 9681 size = integer_one_node; 9682 } 9683 else if (pedantic && warn_vla != 0) 9684 { 9685 if (name) 9686 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name); 9687 else 9688 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array"); 9689 } 9690 else if (warn_vla > 0) 9691 { 9692 if (name) 9693 warning (OPT_Wvla, 9694 "variable length array %qD is used", name); 9695 else 9696 warning (OPT_Wvla, 9697 "variable length array is used"); 9698 } 9699 9700 if (processing_template_decl && !TREE_CONSTANT (size)) 9701 /* A variable sized array. */ 9702 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node); 9703 else 9704 { 9705 /* Compute the index of the largest element in the array. It is 9706 one less than the number of elements in the array. We save 9707 and restore PROCESSING_TEMPLATE_DECL so that computations in 9708 cp_build_binary_op will be appropriately folded. */ 9709 { 9710 processing_template_decl_sentinel s; 9711 itype = cp_build_binary_op (input_location, 9712 MINUS_EXPR, 9713 cp_convert (ssizetype, size, complain), 9714 cp_convert (ssizetype, integer_one_node, 9715 complain), 9716 complain); 9717 itype = maybe_constant_value (itype); 9718 } 9719 9720 if (!TREE_CONSTANT (itype)) 9721 { 9722 /* A variable sized array. */ 9723 itype = variable_size (itype); 9724 9725 stabilize_vla_size (itype); 9726 9727 if (sanitize_flags_p (SANITIZE_VLA) 9728 && current_function_decl != NULL_TREE) 9729 { 9730 /* We have to add 1 -- in the ubsan routine we generate 9731 LE_EXPR rather than LT_EXPR. */ 9732 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype, 9733 build_one_cst (TREE_TYPE (itype))); 9734 t = ubsan_instrument_vla (input_location, t); 9735 finish_expr_stmt (t); 9736 } 9737 } 9738 /* Make sure that there was no overflow when creating to a signed 9739 index type. (For example, on a 32-bit machine, an array with 9740 size 2^32 - 1 is too big.) */ 9741 else if (TREE_CODE (itype) == INTEGER_CST 9742 && TREE_OVERFLOW (itype)) 9743 { 9744 if (!(complain & tf_error)) 9745 return error_mark_node; 9746 error ("overflow in array dimension"); 9747 TREE_OVERFLOW (itype) = 0; 9748 } 9749 } 9750 9751 /* Create and return the appropriate index type. */ 9752 itype = build_index_type (itype); 9753 9754 /* If the index type were dependent, we would have returned early, so 9755 remember that it isn't. */ 9756 TYPE_DEPENDENT_P (itype) = 0; 9757 TYPE_DEPENDENT_P_VALID (itype) = 1; 9758 return itype; 9759 } 9760 9761 /* Returns the scope (if any) in which the entity declared by 9762 DECLARATOR will be located. If the entity was declared with an 9763 unqualified name, NULL_TREE is returned. */ 9764 9765 tree 9766 get_scope_of_declarator (const cp_declarator *declarator) 9767 { 9768 while (declarator && declarator->kind != cdk_id) 9769 declarator = declarator->declarator; 9770 9771 /* If the declarator-id is a SCOPE_REF, the scope in which the 9772 declaration occurs is the first operand. */ 9773 if (declarator 9774 && declarator->u.id.qualifying_scope) 9775 return declarator->u.id.qualifying_scope; 9776 9777 /* Otherwise, the declarator is not a qualified name; the entity will 9778 be declared in the current scope. */ 9779 return NULL_TREE; 9780 } 9781 9782 /* Returns an ARRAY_TYPE for an array with SIZE elements of the 9783 indicated TYPE. If non-NULL, NAME is the NAME of the declaration 9784 with this type. */ 9785 9786 static tree 9787 create_array_type_for_decl (tree name, tree type, tree size) 9788 { 9789 tree itype = NULL_TREE; 9790 9791 /* If things have already gone awry, bail now. */ 9792 if (type == error_mark_node || size == error_mark_node) 9793 return error_mark_node; 9794 9795 /* 8.3.4/1: If the type of the identifier of D contains the auto 9796 type-specifier, the program is ill-formed. */ 9797 if (type_uses_auto (type)) 9798 { 9799 error ("%qD declared as array of %qT", name, type); 9800 return error_mark_node; 9801 } 9802 9803 /* If there are some types which cannot be array elements, 9804 issue an error-message and return. */ 9805 switch (TREE_CODE (type)) 9806 { 9807 case VOID_TYPE: 9808 if (name) 9809 error ("declaration of %qD as array of void", name); 9810 else 9811 error ("creating array of void"); 9812 return error_mark_node; 9813 9814 case FUNCTION_TYPE: 9815 if (name) 9816 error ("declaration of %qD as array of functions", name); 9817 else 9818 error ("creating array of functions"); 9819 return error_mark_node; 9820 9821 case REFERENCE_TYPE: 9822 if (name) 9823 error ("declaration of %qD as array of references", name); 9824 else 9825 error ("creating array of references"); 9826 return error_mark_node; 9827 9828 case METHOD_TYPE: 9829 if (name) 9830 error ("declaration of %qD as array of function members", name); 9831 else 9832 error ("creating array of function members"); 9833 return error_mark_node; 9834 9835 default: 9836 break; 9837 } 9838 9839 /* [dcl.array] 9840 9841 The constant expressions that specify the bounds of the arrays 9842 can be omitted only for the first member of the sequence. */ 9843 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)) 9844 { 9845 if (name) 9846 error ("declaration of %qD as multidimensional array must " 9847 "have bounds for all dimensions except the first", 9848 name); 9849 else 9850 error ("multidimensional array must have bounds for all " 9851 "dimensions except the first"); 9852 9853 return error_mark_node; 9854 } 9855 9856 /* Figure out the index type for the array. */ 9857 if (size) 9858 itype = compute_array_index_type (name, size, tf_warning_or_error); 9859 9860 /* [dcl.array] 9861 T is called the array element type; this type shall not be [...] an 9862 abstract class type. */ 9863 abstract_virtuals_error (name, type); 9864 9865 return build_cplus_array_type (type, itype); 9866 } 9867 9868 /* Returns the smallest location != UNKNOWN_LOCATION among the 9869 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile], 9870 and LOCATIONS[ds_restrict]. */ 9871 9872 static location_t 9873 smallest_type_quals_location (int type_quals, const location_t* locations) 9874 { 9875 location_t loc = UNKNOWN_LOCATION; 9876 9877 if (type_quals & TYPE_QUAL_CONST) 9878 loc = locations[ds_const]; 9879 9880 if ((type_quals & TYPE_QUAL_VOLATILE) 9881 && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc)) 9882 loc = locations[ds_volatile]; 9883 9884 if ((type_quals & TYPE_QUAL_RESTRICT) 9885 && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc)) 9886 loc = locations[ds_restrict]; 9887 9888 return loc; 9889 } 9890 9891 /* Check that it's OK to declare a function with the indicated TYPE 9892 and TYPE_QUALS. SFK indicates the kind of special function (if any) 9893 that this function is. OPTYPE is the type given in a conversion 9894 operator declaration, or the class type for a constructor/destructor. 9895 Returns the actual return type of the function; that may be different 9896 than TYPE if an error occurs, or for certain special functions. */ 9897 9898 static tree 9899 check_special_function_return_type (special_function_kind sfk, 9900 tree type, 9901 tree optype, 9902 int type_quals, 9903 const location_t* locations) 9904 { 9905 switch (sfk) 9906 { 9907 case sfk_constructor: 9908 if (type) 9909 error ("return type specification for constructor invalid"); 9910 else if (type_quals != TYPE_UNQUALIFIED) 9911 error_at (smallest_type_quals_location (type_quals, locations), 9912 "qualifiers are not allowed on constructor declaration"); 9913 9914 if (targetm.cxx.cdtor_returns_this ()) 9915 type = build_pointer_type (optype); 9916 else 9917 type = void_type_node; 9918 break; 9919 9920 case sfk_destructor: 9921 if (type) 9922 error ("return type specification for destructor invalid"); 9923 else if (type_quals != TYPE_UNQUALIFIED) 9924 error_at (smallest_type_quals_location (type_quals, locations), 9925 "qualifiers are not allowed on destructor declaration"); 9926 9927 /* We can't use the proper return type here because we run into 9928 problems with ambiguous bases and covariant returns. */ 9929 if (targetm.cxx.cdtor_returns_this ()) 9930 type = build_pointer_type (void_type_node); 9931 else 9932 type = void_type_node; 9933 break; 9934 9935 case sfk_conversion: 9936 if (type) 9937 error ("return type specified for %<operator %T%>", optype); 9938 else if (type_quals != TYPE_UNQUALIFIED) 9939 error_at (smallest_type_quals_location (type_quals, locations), 9940 "qualifiers are not allowed on declaration of " 9941 "%<operator %T%>", optype); 9942 9943 type = optype; 9944 break; 9945 9946 case sfk_deduction_guide: 9947 if (type) 9948 error ("return type specified for deduction guide"); 9949 else if (type_quals != TYPE_UNQUALIFIED) 9950 error_at (smallest_type_quals_location (type_quals, locations), 9951 "qualifiers are not allowed on declaration of " 9952 "deduction guide"); 9953 if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM) 9954 { 9955 error ("template template parameter %qT in declaration of " 9956 "deduction guide", optype); 9957 type = error_mark_node; 9958 } 9959 else 9960 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype)); 9961 for (int i = 0; i < ds_last; ++i) 9962 if (i != ds_explicit && locations[i]) 9963 error_at (locations[i], 9964 "decl-specifier in declaration of deduction guide"); 9965 break; 9966 9967 default: 9968 gcc_unreachable (); 9969 } 9970 9971 return type; 9972 } 9973 9974 /* A variable or data member (whose unqualified name is IDENTIFIER) 9975 has been declared with the indicated TYPE. If the TYPE is not 9976 acceptable, issue an error message and return a type to use for 9977 error-recovery purposes. */ 9978 9979 tree 9980 check_var_type (tree identifier, tree type) 9981 { 9982 if (VOID_TYPE_P (type)) 9983 { 9984 if (!identifier) 9985 error ("unnamed variable or field declared void"); 9986 else if (identifier_p (identifier)) 9987 { 9988 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier)); 9989 error ("variable or field %qE declared void", identifier); 9990 } 9991 else 9992 error ("variable or field declared void"); 9993 type = error_mark_node; 9994 } 9995 9996 return type; 9997 } 9998 9999 /* Handle declaring DECL as an inline variable. */ 10000 10001 static void 10002 mark_inline_variable (tree decl) 10003 { 10004 bool inlinep = true; 10005 if (! toplevel_bindings_p ()) 10006 { 10007 error ("%<inline%> specifier invalid for variable " 10008 "%qD declared at block scope", decl); 10009 inlinep = false; 10010 } 10011 else if (cxx_dialect < cxx17) 10012 pedwarn (DECL_SOURCE_LOCATION (decl), 0, 10013 "inline variables are only available " 10014 "with -std=c++17 or -std=gnu++17"); 10015 if (inlinep) 10016 { 10017 retrofit_lang_decl (decl); 10018 SET_DECL_VAR_DECLARED_INLINE_P (decl); 10019 } 10020 } 10021 10022 10023 /* Assign a typedef-given name to a class or enumeration type declared 10024 as anonymous at first. This was split out of grokdeclarator 10025 because it is also used in libcc1. */ 10026 10027 void 10028 name_unnamed_type (tree type, tree decl) 10029 { 10030 gcc_assert (TYPE_UNNAMED_P (type)); 10031 10032 /* Replace the anonymous name with the real name everywhere. */ 10033 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t)) 10034 { 10035 if (anon_aggrname_p (TYPE_IDENTIFIER (t))) 10036 /* We do not rename the debug info representing the 10037 unnamed tagged type because the standard says in 10038 [dcl.typedef] that the naming applies only for 10039 linkage purposes. */ 10040 /*debug_hooks->set_name (t, decl);*/ 10041 TYPE_NAME (t) = decl; 10042 } 10043 10044 if (TYPE_LANG_SPECIFIC (type)) 10045 TYPE_WAS_UNNAMED (type) = 1; 10046 10047 /* If this is a typedef within a template class, the nested 10048 type is a (non-primary) template. The name for the 10049 template needs updating as well. */ 10050 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type)) 10051 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)) 10052 = TYPE_IDENTIFIER (type); 10053 10054 /* Adjust linkage now that we aren't unnamed anymore. */ 10055 reset_type_linkage (type); 10056 10057 /* FIXME remangle member functions; member functions of a 10058 type with external linkage have external linkage. */ 10059 10060 /* Check that our job is done, and that it would fail if we 10061 attempted to do it again. */ 10062 gcc_assert (!TYPE_UNNAMED_P (type)); 10063 } 10064 10065 /* Given declspecs and a declarator (abstract or otherwise), determine 10066 the name and type of the object declared and construct a DECL node 10067 for it. 10068 10069 DECLSPECS points to the representation of declaration-specifier 10070 sequence that precedes declarator. 10071 10072 DECL_CONTEXT says which syntactic context this declaration is in: 10073 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL. 10074 FUNCDEF for a function definition. Like NORMAL but a few different 10075 error messages in each case. Return value may be zero meaning 10076 this definition is too screwy to try to parse. 10077 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to 10078 handle member functions (which have FIELD context). 10079 Return value may be zero meaning this definition is too screwy to 10080 try to parse. 10081 PARM for a parameter declaration (either within a function prototype 10082 or before a function body). Make a PARM_DECL, or return void_type_node. 10083 TPARM for a template parameter declaration. 10084 CATCHPARM for a parameter declaration before a catch clause. 10085 TYPENAME if for a typename (in a cast or sizeof). 10086 Don't make a DECL node; just return the ..._TYPE node. 10087 FIELD for a struct or union field; make a FIELD_DECL. 10088 BITFIELD for a field with specified width. 10089 10090 INITIALIZED is as for start_decl. 10091 10092 ATTRLIST is a pointer to the list of attributes, which may be NULL 10093 if there are none; *ATTRLIST may be modified if attributes from inside 10094 the declarator should be applied to the declaration. 10095 10096 When this function is called, scoping variables (such as 10097 CURRENT_CLASS_TYPE) should reflect the scope in which the 10098 declaration occurs, not the scope in which the new declaration will 10099 be placed. For example, on: 10100 10101 void S::f() { ... } 10102 10103 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE 10104 should not be `S'. 10105 10106 Returns a DECL (if a declarator is present), a TYPE (if there is no 10107 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an 10108 error occurs. */ 10109 10110 tree 10111 grokdeclarator (const cp_declarator *declarator, 10112 cp_decl_specifier_seq *declspecs, 10113 enum decl_context decl_context, 10114 int initialized, 10115 tree* attrlist) 10116 { 10117 tree type = NULL_TREE; 10118 int longlong = 0; 10119 int explicit_intN = 0; 10120 int virtualp, explicitp, friendp, inlinep, staticp; 10121 int explicit_int = 0; 10122 int explicit_char = 0; 10123 int defaulted_int = 0; 10124 10125 tree typedef_decl = NULL_TREE; 10126 const char *name = NULL; 10127 tree typedef_type = NULL_TREE; 10128 /* True if this declarator is a function definition. */ 10129 bool funcdef_flag = false; 10130 cp_declarator_kind innermost_code = cdk_error; 10131 int bitfield = 0; 10132 #if 0 10133 /* See the code below that used this. */ 10134 tree decl_attr = NULL_TREE; 10135 #endif 10136 10137 /* Keep track of what sort of function is being processed 10138 so that we can warn about default return values, or explicit 10139 return values which do not match prescribed defaults. */ 10140 special_function_kind sfk = sfk_none; 10141 10142 tree dname = NULL_TREE; 10143 tree ctor_return_type = NULL_TREE; 10144 enum overload_flags flags = NO_SPECIAL; 10145 /* cv-qualifiers that apply to the declarator, for a declaration of 10146 a member function. */ 10147 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED; 10148 /* virt-specifiers that apply to the declarator, for a declaration of 10149 a member function. */ 10150 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED; 10151 /* ref-qualifier that applies to the declarator, for a declaration of 10152 a member function. */ 10153 cp_ref_qualifier rqual = REF_QUAL_NONE; 10154 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */ 10155 int type_quals = TYPE_UNQUALIFIED; 10156 tree raises = NULL_TREE; 10157 int template_count = 0; 10158 tree returned_attrs = NULL_TREE; 10159 tree parms = NULL_TREE; 10160 const cp_declarator *id_declarator; 10161 /* The unqualified name of the declarator; either an 10162 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */ 10163 tree unqualified_id; 10164 /* The class type, if any, in which this entity is located, 10165 or NULL_TREE if none. Note that this value may be different from 10166 the current class type; for example if an attempt is made to declare 10167 "A::f" inside "B", this value will be "A". */ 10168 tree ctype = current_class_type; 10169 /* The NAMESPACE_DECL for the namespace in which this entity is 10170 located. If an unqualified name is used to declare the entity, 10171 this value will be NULL_TREE, even if the entity is located at 10172 namespace scope. */ 10173 tree in_namespace = NULL_TREE; 10174 cp_storage_class storage_class; 10175 bool unsigned_p, signed_p, short_p, long_p, thread_p; 10176 bool type_was_error_mark_node = false; 10177 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false; 10178 bool template_type_arg = false; 10179 bool template_parm_flag = false; 10180 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef); 10181 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr); 10182 bool late_return_type_p = false; 10183 bool array_parameter_p = false; 10184 source_location saved_loc = input_location; 10185 tree reqs = NULL_TREE; 10186 10187 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed); 10188 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned); 10189 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short); 10190 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long); 10191 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long); 10192 explicit_intN = declspecs->explicit_intN_p; 10193 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread); 10194 10195 // Was concept_p specified? Note that ds_concept 10196 // implies ds_constexpr! 10197 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept); 10198 if (concept_p) 10199 constexpr_p = true; 10200 10201 if (decl_spec_seq_has_spec_p (declspecs, ds_const)) 10202 type_quals |= TYPE_QUAL_CONST; 10203 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile)) 10204 type_quals |= TYPE_QUAL_VOLATILE; 10205 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict)) 10206 type_quals |= TYPE_QUAL_RESTRICT; 10207 10208 if (decl_context == FUNCDEF) 10209 funcdef_flag = true, decl_context = NORMAL; 10210 else if (decl_context == MEMFUNCDEF) 10211 funcdef_flag = true, decl_context = FIELD; 10212 else if (decl_context == BITFIELD) 10213 bitfield = 1, decl_context = FIELD; 10214 else if (decl_context == TEMPLATE_TYPE_ARG) 10215 template_type_arg = true, decl_context = TYPENAME; 10216 else if (decl_context == TPARM) 10217 template_parm_flag = true, decl_context = PARM; 10218 10219 if (initialized > 1) 10220 funcdef_flag = true; 10221 10222 location_t typespec_loc = smallest_type_quals_location (type_quals, 10223 declspecs->locations); 10224 if (typespec_loc == UNKNOWN_LOCATION) 10225 typespec_loc = declspecs->locations[ds_type_spec]; 10226 if (typespec_loc == UNKNOWN_LOCATION) 10227 typespec_loc = input_location; 10228 10229 /* Look inside a declarator for the name being declared 10230 and get it as a string, for an error message. */ 10231 for (id_declarator = declarator; 10232 id_declarator; 10233 id_declarator = id_declarator->declarator) 10234 { 10235 if (id_declarator->kind != cdk_id) 10236 innermost_code = id_declarator->kind; 10237 10238 switch (id_declarator->kind) 10239 { 10240 case cdk_function: 10241 if (id_declarator->declarator 10242 && id_declarator->declarator->kind == cdk_id) 10243 { 10244 sfk = id_declarator->declarator->u.id.sfk; 10245 if (sfk == sfk_destructor) 10246 flags = DTOR_FLAG; 10247 } 10248 break; 10249 10250 case cdk_id: 10251 { 10252 tree qualifying_scope = id_declarator->u.id.qualifying_scope; 10253 tree decl = id_declarator->u.id.unqualified_name; 10254 if (!decl) 10255 break; 10256 if (qualifying_scope) 10257 { 10258 if (at_function_scope_p ()) 10259 { 10260 /* [dcl.meaning] 10261 10262 A declarator-id shall not be qualified except 10263 for ... 10264 10265 None of the cases are permitted in block 10266 scope. */ 10267 if (qualifying_scope == global_namespace) 10268 error ("invalid use of qualified-name %<::%D%>", 10269 decl); 10270 else if (TYPE_P (qualifying_scope)) 10271 error ("invalid use of qualified-name %<%T::%D%>", 10272 qualifying_scope, decl); 10273 else 10274 error ("invalid use of qualified-name %<%D::%D%>", 10275 qualifying_scope, decl); 10276 return error_mark_node; 10277 } 10278 else if (TYPE_P (qualifying_scope)) 10279 { 10280 ctype = qualifying_scope; 10281 if (!MAYBE_CLASS_TYPE_P (ctype)) 10282 { 10283 error ("%q#T is not a class or a namespace", ctype); 10284 ctype = NULL_TREE; 10285 } 10286 else if (innermost_code != cdk_function 10287 && current_class_type 10288 && !uniquely_derived_from_p (ctype, 10289 current_class_type)) 10290 { 10291 error ("invalid use of qualified-name %<%T::%D%>", 10292 qualifying_scope, decl); 10293 return error_mark_node; 10294 } 10295 } 10296 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL) 10297 in_namespace = qualifying_scope; 10298 } 10299 switch (TREE_CODE (decl)) 10300 { 10301 case BIT_NOT_EXPR: 10302 { 10303 if (innermost_code != cdk_function) 10304 { 10305 error ("declaration of %qD as non-function", decl); 10306 return error_mark_node; 10307 } 10308 else if (!qualifying_scope 10309 && !(current_class_type && at_class_scope_p ())) 10310 { 10311 error ("declaration of %qD as non-member", decl); 10312 return error_mark_node; 10313 } 10314 10315 tree type = TREE_OPERAND (decl, 0); 10316 if (TYPE_P (type)) 10317 type = constructor_name (type); 10318 name = identifier_to_locale (IDENTIFIER_POINTER (type)); 10319 dname = decl; 10320 } 10321 break; 10322 10323 case TEMPLATE_ID_EXPR: 10324 { 10325 tree fns = TREE_OPERAND (decl, 0); 10326 10327 dname = fns; 10328 if (!identifier_p (dname)) 10329 dname = OVL_NAME (dname); 10330 } 10331 /* Fall through. */ 10332 10333 case IDENTIFIER_NODE: 10334 if (identifier_p (decl)) 10335 dname = decl; 10336 10337 if (IDENTIFIER_KEYWORD_P (dname)) 10338 { 10339 error ("declarator-id missing; using reserved word %qD", 10340 dname); 10341 name = identifier_to_locale (IDENTIFIER_POINTER (dname)); 10342 } 10343 else if (!IDENTIFIER_CONV_OP_P (dname)) 10344 name = identifier_to_locale (IDENTIFIER_POINTER (dname)); 10345 else 10346 { 10347 gcc_assert (flags == NO_SPECIAL); 10348 flags = TYPENAME_FLAG; 10349 sfk = sfk_conversion; 10350 tree glob = get_global_binding (dname); 10351 if (glob && TREE_CODE (glob) == TYPE_DECL) 10352 name = identifier_to_locale (IDENTIFIER_POINTER (dname)); 10353 else 10354 name = "<invalid operator>"; 10355 } 10356 break; 10357 10358 default: 10359 gcc_unreachable (); 10360 } 10361 break; 10362 } 10363 10364 case cdk_array: 10365 case cdk_pointer: 10366 case cdk_reference: 10367 case cdk_ptrmem: 10368 break; 10369 10370 case cdk_decomp: 10371 name = "structured binding"; 10372 break; 10373 10374 case cdk_error: 10375 return error_mark_node; 10376 10377 default: 10378 gcc_unreachable (); 10379 } 10380 if (id_declarator->kind == cdk_id) 10381 break; 10382 } 10383 10384 /* [dcl.fct.edf] 10385 10386 The declarator in a function-definition shall have the form 10387 D1 ( parameter-declaration-clause) ... */ 10388 if (funcdef_flag && innermost_code != cdk_function) 10389 { 10390 error ("function definition does not declare parameters"); 10391 return error_mark_node; 10392 } 10393 10394 if (flags == TYPENAME_FLAG 10395 && innermost_code != cdk_function 10396 && ! (ctype && !declspecs->any_specifiers_p)) 10397 { 10398 error ("declaration of %qD as non-function", dname); 10399 return error_mark_node; 10400 } 10401 10402 if (dname && identifier_p (dname)) 10403 { 10404 if (UDLIT_OPER_P (dname) 10405 && innermost_code != cdk_function) 10406 { 10407 error ("declaration of %qD as non-function", dname); 10408 return error_mark_node; 10409 } 10410 10411 if (IDENTIFIER_ANY_OP_P (dname)) 10412 { 10413 if (typedef_p) 10414 { 10415 error ("declaration of %qD as %<typedef%>", dname); 10416 return error_mark_node; 10417 } 10418 else if (decl_context == PARM || decl_context == CATCHPARM) 10419 { 10420 error ("declaration of %qD as parameter", dname); 10421 return error_mark_node; 10422 } 10423 } 10424 } 10425 10426 /* Anything declared one level down from the top level 10427 must be one of the parameters of a function 10428 (because the body is at least two levels down). */ 10429 10430 /* This heuristic cannot be applied to C++ nodes! Fixed, however, 10431 by not allowing C++ class definitions to specify their parameters 10432 with xdecls (must be spec.d in the parmlist). 10433 10434 Since we now wait to push a class scope until we are sure that 10435 we are in a legitimate method context, we must set oldcname 10436 explicitly (since current_class_name is not yet alive). 10437 10438 We also want to avoid calling this a PARM if it is in a namespace. */ 10439 10440 if (decl_context == NORMAL && !toplevel_bindings_p ()) 10441 { 10442 cp_binding_level *b = current_binding_level; 10443 current_binding_level = b->level_chain; 10444 if (current_binding_level != 0 && toplevel_bindings_p ()) 10445 decl_context = PARM; 10446 current_binding_level = b; 10447 } 10448 10449 if (name == NULL) 10450 name = decl_context == PARM ? "parameter" : "type name"; 10451 10452 if (concept_p && typedef_p) 10453 { 10454 error ("%<concept%> cannot appear in a typedef declaration"); 10455 return error_mark_node; 10456 } 10457 10458 if (constexpr_p && typedef_p) 10459 { 10460 error ("%<constexpr%> cannot appear in a typedef declaration"); 10461 return error_mark_node; 10462 } 10463 10464 /* If there were multiple types specified in the decl-specifier-seq, 10465 issue an error message. */ 10466 if (declspecs->multiple_types_p) 10467 { 10468 error ("two or more data types in declaration of %qs", name); 10469 return error_mark_node; 10470 } 10471 10472 if (declspecs->conflicting_specifiers_p) 10473 { 10474 error ("conflicting specifiers in declaration of %qs", name); 10475 return error_mark_node; 10476 } 10477 10478 /* Extract the basic type from the decl-specifier-seq. */ 10479 type = declspecs->type; 10480 if (type == error_mark_node) 10481 { 10482 type = NULL_TREE; 10483 type_was_error_mark_node = true; 10484 } 10485 /* If the entire declaration is itself tagged as deprecated then 10486 suppress reports of deprecated items. */ 10487 if (type && TREE_DEPRECATED (type) 10488 && deprecated_state != DEPRECATED_SUPPRESS) 10489 cp_warn_deprecated_use (type); 10490 if (type && TREE_CODE (type) == TYPE_DECL) 10491 { 10492 typedef_decl = type; 10493 type = TREE_TYPE (typedef_decl); 10494 if (TREE_DEPRECATED (type) 10495 && DECL_ARTIFICIAL (typedef_decl) 10496 && deprecated_state != DEPRECATED_SUPPRESS) 10497 cp_warn_deprecated_use (type); 10498 } 10499 /* No type at all: default to `int', and set DEFAULTED_INT 10500 because it was not a user-defined typedef. */ 10501 if (type == NULL_TREE) 10502 { 10503 if (signed_p || unsigned_p || long_p || short_p) 10504 { 10505 /* These imply 'int'. */ 10506 type = integer_type_node; 10507 defaulted_int = 1; 10508 } 10509 /* If we just have "complex", it is equivalent to "complex double". */ 10510 else if (!longlong && !explicit_intN 10511 && decl_spec_seq_has_spec_p (declspecs, ds_complex)) 10512 { 10513 type = double_type_node; 10514 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic, 10515 "ISO C++ does not support plain %<complex%> meaning " 10516 "%<double complex%>"); 10517 } 10518 } 10519 /* Gather flags. */ 10520 explicit_int = declspecs->explicit_int_p; 10521 explicit_char = declspecs->explicit_char_p; 10522 10523 #if 0 10524 /* See the code below that used this. */ 10525 if (typedef_decl) 10526 decl_attr = DECL_ATTRIBUTES (typedef_decl); 10527 #endif 10528 typedef_type = type; 10529 10530 if (sfk == sfk_conversion || sfk == sfk_deduction_guide) 10531 ctor_return_type = TREE_TYPE (dname); 10532 else 10533 ctor_return_type = ctype; 10534 10535 if (sfk != sfk_none) 10536 { 10537 type = check_special_function_return_type (sfk, type, 10538 ctor_return_type, 10539 type_quals, 10540 declspecs->locations); 10541 type_quals = TYPE_UNQUALIFIED; 10542 } 10543 else if (type == NULL_TREE) 10544 { 10545 int is_main; 10546 10547 explicit_int = -1; 10548 10549 /* We handle `main' specially here, because 'main () { }' is so 10550 common. With no options, it is allowed. With -Wreturn-type, 10551 it is a warning. It is only an error with -pedantic-errors. */ 10552 is_main = (funcdef_flag 10553 && dname && identifier_p (dname) 10554 && MAIN_NAME_P (dname) 10555 && ctype == NULL_TREE 10556 && in_namespace == NULL_TREE 10557 && current_namespace == global_namespace); 10558 10559 if (type_was_error_mark_node) 10560 /* We've already issued an error, don't complain more. */; 10561 else if (in_system_header_at (input_location) || flag_ms_extensions) 10562 /* Allow it, sigh. */; 10563 else if (! is_main) 10564 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name); 10565 else if (pedantic) 10566 pedwarn (input_location, OPT_Wpedantic, 10567 "ISO C++ forbids declaration of %qs with no type", name); 10568 else 10569 warning (OPT_Wreturn_type, 10570 "ISO C++ forbids declaration of %qs with no type", name); 10571 10572 if (type_was_error_mark_node && template_parm_flag) 10573 /* FIXME we should be able to propagate the error_mark_node as is 10574 for other contexts too. */ 10575 type = error_mark_node; 10576 else 10577 type = integer_type_node; 10578 } 10579 10580 ctype = NULL_TREE; 10581 10582 if (explicit_intN) 10583 { 10584 if (! int_n_enabled_p[declspecs->int_n_idx]) 10585 { 10586 error ("%<__int%d%> is not supported by this target", 10587 int_n_data[declspecs->int_n_idx].bitsize); 10588 explicit_intN = false; 10589 } 10590 else if (pedantic && ! in_system_header_at (input_location)) 10591 pedwarn (input_location, OPT_Wpedantic, 10592 "ISO C++ does not support %<__int%d%> for %qs", 10593 int_n_data[declspecs->int_n_idx].bitsize, name); 10594 } 10595 10596 /* Now process the modifiers that were specified 10597 and check for invalid combinations. */ 10598 10599 /* Long double is a special combination. */ 10600 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node) 10601 { 10602 long_p = false; 10603 type = cp_build_qualified_type (long_double_type_node, 10604 cp_type_quals (type)); 10605 } 10606 10607 /* Check all other uses of type modifiers. */ 10608 10609 if (unsigned_p || signed_p || long_p || short_p) 10610 { 10611 int ok = 0; 10612 10613 if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE) 10614 error ("%<signed%> or %<unsigned%> invalid for %qs", name); 10615 else if (signed_p && unsigned_p) 10616 error ("%<signed%> and %<unsigned%> specified together for %qs", name); 10617 else if (longlong && TREE_CODE (type) != INTEGER_TYPE) 10618 error ("%<long long%> invalid for %qs", name); 10619 else if (long_p && TREE_CODE (type) == REAL_TYPE) 10620 error ("%<long%> invalid for %qs", name); 10621 else if (short_p && TREE_CODE (type) == REAL_TYPE) 10622 error ("%<short%> invalid for %qs", name); 10623 else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE) 10624 error ("%<long%> or %<short%> invalid for %qs", name); 10625 else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN) 10626 error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name); 10627 else if ((long_p || short_p) && explicit_char) 10628 error ("%<long%> or %<short%> specified with char for %qs", name); 10629 else if (long_p && short_p) 10630 error ("%<long%> and %<short%> specified together for %qs", name); 10631 else if (type == char16_type_node || type == char32_type_node) 10632 { 10633 if (signed_p || unsigned_p) 10634 error ("%<signed%> or %<unsigned%> invalid for %qs", name); 10635 else if (short_p || long_p) 10636 error ("%<short%> or %<long%> invalid for %qs", name); 10637 } 10638 else 10639 { 10640 ok = 1; 10641 if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic) 10642 { 10643 pedwarn (input_location, OPT_Wpedantic, 10644 "long, short, signed or unsigned used invalidly for %qs", 10645 name); 10646 if (flag_pedantic_errors) 10647 ok = 0; 10648 } 10649 } 10650 10651 /* Discard the type modifiers if they are invalid. */ 10652 if (! ok) 10653 { 10654 unsigned_p = false; 10655 signed_p = false; 10656 long_p = false; 10657 short_p = false; 10658 longlong = 0; 10659 } 10660 } 10661 10662 /* Decide whether an integer type is signed or not. 10663 Optionally treat bitfields as signed by default. */ 10664 if (unsigned_p 10665 /* [class.bit] 10666 10667 It is implementation-defined whether a plain (neither 10668 explicitly signed or unsigned) char, short, int, or long 10669 bit-field is signed or unsigned. 10670 10671 Naturally, we extend this to long long as well. Note that 10672 this does not include wchar_t. */ 10673 || (bitfield && !flag_signed_bitfields 10674 && !signed_p 10675 /* A typedef for plain `int' without `signed' can be 10676 controlled just like plain `int', but a typedef for 10677 `signed int' cannot be so controlled. */ 10678 && !(typedef_decl 10679 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)) 10680 && TREE_CODE (type) == INTEGER_TYPE 10681 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node))) 10682 { 10683 if (explicit_intN) 10684 type = int_n_trees[declspecs->int_n_idx].unsigned_type; 10685 else if (longlong) 10686 type = long_long_unsigned_type_node; 10687 else if (long_p) 10688 type = long_unsigned_type_node; 10689 else if (short_p) 10690 type = short_unsigned_type_node; 10691 else if (type == char_type_node) 10692 type = unsigned_char_type_node; 10693 else if (typedef_decl) 10694 type = unsigned_type_for (type); 10695 else 10696 type = unsigned_type_node; 10697 } 10698 else if (signed_p && type == char_type_node) 10699 type = signed_char_type_node; 10700 else if (explicit_intN) 10701 type = int_n_trees[declspecs->int_n_idx].signed_type; 10702 else if (longlong) 10703 type = long_long_integer_type_node; 10704 else if (long_p) 10705 type = long_integer_type_node; 10706 else if (short_p) 10707 type = short_integer_type_node; 10708 10709 if (decl_spec_seq_has_spec_p (declspecs, ds_complex)) 10710 { 10711 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE) 10712 error ("complex invalid for %qs", name); 10713 /* If a modifier is specified, the resulting complex is the complex 10714 form of TYPE. E.g, "complex short" is "complex short int". */ 10715 else if (type == integer_type_node) 10716 type = complex_integer_type_node; 10717 else if (type == float_type_node) 10718 type = complex_float_type_node; 10719 else if (type == double_type_node) 10720 type = complex_double_type_node; 10721 else if (type == long_double_type_node) 10722 type = complex_long_double_type_node; 10723 else 10724 type = build_complex_type (type); 10725 } 10726 10727 /* If we're using the injected-class-name to form a compound type or a 10728 declaration, replace it with the underlying class so we don't get 10729 redundant typedefs in the debug output. But if we are returning the 10730 type unchanged, leave it alone so that it's available to 10731 maybe_get_template_decl_from_type_decl. */ 10732 if (CLASS_TYPE_P (type) 10733 && DECL_SELF_REFERENCE_P (TYPE_NAME (type)) 10734 && type == TREE_TYPE (TYPE_NAME (type)) 10735 && (declarator || type_quals)) 10736 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type)); 10737 10738 type_quals |= cp_type_quals (type); 10739 type = cp_build_qualified_type_real 10740 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl)) 10741 || declspecs->decltype_p) 10742 ? tf_ignore_bad_quals : 0) | tf_warning_or_error)); 10743 /* We might have ignored or rejected some of the qualifiers. */ 10744 type_quals = cp_type_quals (type); 10745 10746 if (cxx_dialect >= cxx17 && type && is_auto (type) 10747 && innermost_code != cdk_function 10748 && id_declarator && declarator != id_declarator) 10749 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type)) 10750 { 10751 error_at (typespec_loc, "template placeholder type %qT must be followed " 10752 "by a simple declarator-id", type); 10753 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl); 10754 } 10755 10756 staticp = 0; 10757 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline); 10758 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual); 10759 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit); 10760 10761 storage_class = declspecs->storage_class; 10762 if (storage_class == sc_static) 10763 staticp = 1 + (decl_context == FIELD); 10764 10765 if (virtualp) 10766 { 10767 if (staticp == 2) 10768 { 10769 error ("member %qD cannot be declared both %<virtual%> " 10770 "and %<static%>", dname); 10771 storage_class = sc_none; 10772 staticp = 0; 10773 } 10774 if (constexpr_p) 10775 error ("member %qD cannot be declared both %<virtual%> " 10776 "and %<constexpr%>", dname); 10777 } 10778 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend); 10779 10780 /* Issue errors about use of storage classes for parameters. */ 10781 if (decl_context == PARM) 10782 { 10783 if (typedef_p) 10784 { 10785 error ("typedef declaration invalid in parameter declaration"); 10786 return error_mark_node; 10787 } 10788 else if (template_parm_flag && storage_class != sc_none) 10789 { 10790 error ("storage class specified for template parameter %qs", name); 10791 return error_mark_node; 10792 } 10793 else if (storage_class == sc_static 10794 || storage_class == sc_extern 10795 || thread_p) 10796 error ("storage class specifiers invalid in parameter declarations"); 10797 10798 /* Function parameters cannot be concept. */ 10799 if (concept_p) 10800 error ("a parameter cannot be declared %<concept%>"); 10801 /* Function parameters cannot be constexpr. If we saw one, moan 10802 and pretend it wasn't there. */ 10803 else if (constexpr_p) 10804 { 10805 error ("a parameter cannot be declared %<constexpr%>"); 10806 constexpr_p = 0; 10807 } 10808 } 10809 10810 /* Give error if `virtual' is used outside of class declaration. */ 10811 if (virtualp 10812 && (current_class_name == NULL_TREE || decl_context != FIELD)) 10813 { 10814 error_at (declspecs->locations[ds_virtual], 10815 "%<virtual%> outside class declaration"); 10816 virtualp = 0; 10817 } 10818 10819 if (innermost_code == cdk_decomp) 10820 { 10821 location_t loc = (declarator->kind == cdk_reference 10822 ? declarator->declarator->id_loc : declarator->id_loc); 10823 if (inlinep) 10824 error_at (declspecs->locations[ds_inline], 10825 "structured binding declaration cannot be %<inline%>"); 10826 if (typedef_p) 10827 error_at (declspecs->locations[ds_typedef], 10828 "structured binding declaration cannot be %<typedef%>"); 10829 if (constexpr_p) 10830 error_at (declspecs->locations[ds_constexpr], "structured " 10831 "binding declaration cannot be %<constexpr%>"); 10832 if (thread_p) 10833 error_at (declspecs->locations[ds_thread], 10834 "structured binding declaration cannot be %qs", 10835 declspecs->gnu_thread_keyword_p 10836 ? "__thread" : "thread_local"); 10837 if (concept_p) 10838 error_at (declspecs->locations[ds_concept], 10839 "structured binding declaration cannot be %<concept%>"); 10840 switch (storage_class) 10841 { 10842 case sc_none: 10843 break; 10844 case sc_register: 10845 error_at (loc, "structured binding declaration cannot be " 10846 "%<register%>"); 10847 break; 10848 case sc_static: 10849 error_at (loc, "structured binding declaration cannot be " 10850 "%<static%>"); 10851 break; 10852 case sc_extern: 10853 error_at (loc, "structured binding declaration cannot be " 10854 "%<extern%>"); 10855 break; 10856 case sc_mutable: 10857 error_at (loc, "structured binding declaration cannot be " 10858 "%<mutable%>"); 10859 break; 10860 case sc_auto: 10861 error_at (loc, "structured binding declaration cannot be " 10862 "C++98 %<auto%>"); 10863 break; 10864 default: 10865 gcc_unreachable (); 10866 } 10867 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM 10868 || TYPE_IDENTIFIER (type) != auto_identifier) 10869 { 10870 if (type != error_mark_node) 10871 { 10872 error_at (loc, "structured binding declaration cannot have " 10873 "type %qT", type); 10874 inform (loc, 10875 "type must be cv-qualified %<auto%> or reference to " 10876 "cv-qualified %<auto%>"); 10877 } 10878 type = build_qualified_type (make_auto (), type_quals); 10879 declspecs->type = type; 10880 } 10881 inlinep = 0; 10882 typedef_p = 0; 10883 constexpr_p = 0; 10884 thread_p = 0; 10885 concept_p = 0; 10886 storage_class = sc_none; 10887 staticp = 0; 10888 declspecs->storage_class = sc_none; 10889 declspecs->locations[ds_thread] = UNKNOWN_LOCATION; 10890 } 10891 10892 /* Static anonymous unions are dealt with here. */ 10893 if (staticp && decl_context == TYPENAME 10894 && declspecs->type 10895 && ANON_AGGR_TYPE_P (declspecs->type)) 10896 decl_context = FIELD; 10897 10898 /* Warn about storage classes that are invalid for certain 10899 kinds of declarations (parameters, typenames, etc.). */ 10900 if (thread_p 10901 && ((storage_class 10902 && storage_class != sc_extern 10903 && storage_class != sc_static) 10904 || typedef_p)) 10905 { 10906 error ("multiple storage classes in declaration of %qs", name); 10907 thread_p = false; 10908 } 10909 if (decl_context != NORMAL 10910 && ((storage_class != sc_none 10911 && storage_class != sc_mutable) 10912 || thread_p)) 10913 { 10914 if ((decl_context == PARM || decl_context == CATCHPARM) 10915 && (storage_class == sc_register 10916 || storage_class == sc_auto)) 10917 ; 10918 else if (typedef_p) 10919 ; 10920 else if (decl_context == FIELD 10921 /* C++ allows static class elements. */ 10922 && storage_class == sc_static) 10923 /* C++ also allows inlines and signed and unsigned elements, 10924 but in those cases we don't come in here. */ 10925 ; 10926 else 10927 { 10928 if (decl_context == FIELD) 10929 error ("storage class specified for %qs", name); 10930 else 10931 { 10932 if (decl_context == PARM || decl_context == CATCHPARM) 10933 error ("storage class specified for parameter %qs", name); 10934 else 10935 error ("storage class specified for typename"); 10936 } 10937 if (storage_class == sc_register 10938 || storage_class == sc_auto 10939 || storage_class == sc_extern 10940 || thread_p) 10941 storage_class = sc_none; 10942 } 10943 } 10944 else if (storage_class == sc_extern && funcdef_flag 10945 && ! toplevel_bindings_p ()) 10946 error ("nested function %qs declared %<extern%>", name); 10947 else if (toplevel_bindings_p ()) 10948 { 10949 if (storage_class == sc_auto) 10950 error ("top-level declaration of %qs specifies %<auto%>", name); 10951 } 10952 else if (thread_p 10953 && storage_class != sc_extern 10954 && storage_class != sc_static) 10955 { 10956 if (declspecs->gnu_thread_keyword_p) 10957 pedwarn (input_location, 0, "function-scope %qs implicitly auto and " 10958 "declared %<__thread%>", name); 10959 10960 /* When thread_local is applied to a variable of block scope the 10961 storage-class-specifier static is implied if it does not appear 10962 explicitly. */ 10963 storage_class = declspecs->storage_class = sc_static; 10964 staticp = 1; 10965 } 10966 10967 if (storage_class && friendp) 10968 { 10969 error ("storage class specifiers invalid in friend function declarations"); 10970 storage_class = sc_none; 10971 staticp = 0; 10972 } 10973 10974 if (!id_declarator) 10975 unqualified_id = NULL_TREE; 10976 else 10977 { 10978 unqualified_id = id_declarator->u.id.unqualified_name; 10979 switch (TREE_CODE (unqualified_id)) 10980 { 10981 case BIT_NOT_EXPR: 10982 unqualified_id = TREE_OPERAND (unqualified_id, 0); 10983 if (TYPE_P (unqualified_id)) 10984 unqualified_id = constructor_name (unqualified_id); 10985 break; 10986 10987 case IDENTIFIER_NODE: 10988 case TEMPLATE_ID_EXPR: 10989 break; 10990 10991 default: 10992 gcc_unreachable (); 10993 } 10994 } 10995 10996 if (declspecs->std_attributes) 10997 { 10998 location_t attr_loc = declspecs->locations[ds_std_attribute]; 10999 if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored")) 11000 inform (attr_loc, "an attribute that appertains to a type-specifier " 11001 "is ignored"); 11002 } 11003 11004 /* Determine the type of the entity declared by recurring on the 11005 declarator. */ 11006 for (; declarator; declarator = declarator->declarator) 11007 { 11008 const cp_declarator *inner_declarator; 11009 tree attrs; 11010 11011 if (type == error_mark_node) 11012 return error_mark_node; 11013 11014 attrs = declarator->attributes; 11015 if (attrs) 11016 { 11017 int attr_flags; 11018 11019 attr_flags = 0; 11020 if (declarator == NULL || declarator->kind == cdk_id) 11021 attr_flags |= (int) ATTR_FLAG_DECL_NEXT; 11022 if (declarator->kind == cdk_function) 11023 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT; 11024 if (declarator->kind == cdk_array) 11025 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT; 11026 returned_attrs = decl_attributes (&type, 11027 chainon (returned_attrs, attrs), 11028 attr_flags); 11029 } 11030 11031 inner_declarator = declarator->declarator; 11032 11033 /* We don't want to warn in parameter context because we don't 11034 yet know if the parse will succeed, and this might turn out 11035 to be a constructor call. */ 11036 if (decl_context != PARM 11037 && decl_context != TYPENAME 11038 && !typedef_p 11039 && declarator->parenthesized != UNKNOWN_LOCATION 11040 /* If the type is class-like and the inner name used a 11041 global namespace qualifier, we need the parens. 11042 Unfortunately all we can tell is whether a qualified name 11043 was used or not. */ 11044 && !(inner_declarator 11045 && inner_declarator->kind == cdk_id 11046 && inner_declarator->u.id.qualifying_scope 11047 && (MAYBE_CLASS_TYPE_P (type) 11048 || TREE_CODE (type) == ENUMERAL_TYPE))) 11049 warning_at (declarator->parenthesized, OPT_Wparentheses, 11050 "unnecessary parentheses in declaration of %qs", name); 11051 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp) 11052 break; 11053 11054 switch (declarator->kind) 11055 { 11056 case cdk_array: 11057 type = create_array_type_for_decl (dname, type, 11058 declarator->u.array.bounds); 11059 if (!valid_array_size_p (input_location, type, dname)) 11060 type = error_mark_node; 11061 11062 if (declarator->std_attributes) 11063 /* [dcl.array]/1: 11064 11065 The optional attribute-specifier-seq appertains to the 11066 array. */ 11067 returned_attrs = chainon (returned_attrs, 11068 declarator->std_attributes); 11069 break; 11070 11071 case cdk_function: 11072 { 11073 tree arg_types; 11074 int funcdecl_p; 11075 11076 /* Declaring a function type. */ 11077 11078 input_location = declspecs->locations[ds_type_spec]; 11079 abstract_virtuals_error (ACU_RETURN, type); 11080 input_location = saved_loc; 11081 11082 /* Pick up type qualifiers which should be applied to `this'. */ 11083 memfn_quals = declarator->u.function.qualifiers; 11084 /* Pick up virt-specifiers. */ 11085 virt_specifiers = declarator->u.function.virt_specifiers; 11086 /* And ref-qualifier, too */ 11087 rqual = declarator->u.function.ref_qualifier; 11088 /* And tx-qualifier. */ 11089 tree tx_qual = declarator->u.function.tx_qualifier; 11090 /* Pick up the exception specifications. */ 11091 raises = declarator->u.function.exception_specification; 11092 /* If the exception-specification is ill-formed, let's pretend 11093 there wasn't one. */ 11094 if (raises == error_mark_node) 11095 raises = NULL_TREE; 11096 11097 if (reqs) 11098 error_at (location_of (reqs), "requires-clause on return type"); 11099 reqs = declarator->u.function.requires_clause; 11100 11101 /* Say it's a definition only for the CALL_EXPR 11102 closest to the identifier. */ 11103 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id; 11104 11105 /* Handle a late-specified return type. */ 11106 tree late_return_type = declarator->u.function.late_return_type; 11107 if (funcdecl_p) 11108 { 11109 if (tree auto_node = type_uses_auto (type)) 11110 { 11111 if (!late_return_type) 11112 { 11113 if (current_class_type 11114 && LAMBDA_TYPE_P (current_class_type)) 11115 /* OK for C++11 lambdas. */; 11116 else if (cxx_dialect < cxx14) 11117 { 11118 error ("%qs function uses " 11119 "%<auto%> type specifier without trailing " 11120 "return type", name); 11121 inform (input_location, "deduced return type " 11122 "only available with -std=c++14 or " 11123 "-std=gnu++14"); 11124 } 11125 else if (virtualp) 11126 { 11127 error ("virtual function cannot " 11128 "have deduced return type"); 11129 virtualp = false; 11130 } 11131 } 11132 else if (!is_auto (type) && sfk != sfk_conversion) 11133 { 11134 error ("%qs function with trailing return type has" 11135 " %qT as its type rather than plain %<auto%>", 11136 name, type); 11137 return error_mark_node; 11138 } 11139 tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node); 11140 if (!tmpl) 11141 if (tree late_auto = type_uses_auto (late_return_type)) 11142 tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto); 11143 if (tmpl) 11144 { 11145 if (!dguide_name_p (unqualified_id)) 11146 { 11147 error_at (declarator->id_loc, "deduced class " 11148 "type %qD in function return type", 11149 DECL_NAME (tmpl)); 11150 inform (DECL_SOURCE_LOCATION (tmpl), 11151 "%qD declared here", tmpl); 11152 return error_mark_node; 11153 } 11154 else if (!late_return_type) 11155 { 11156 error_at (declarator->id_loc, "deduction guide " 11157 "for %qT must have trailing return " 11158 "type", TREE_TYPE (tmpl)); 11159 inform (DECL_SOURCE_LOCATION (tmpl), 11160 "%qD declared here", tmpl); 11161 return error_mark_node; 11162 } 11163 else if (CLASS_TYPE_P (late_return_type) 11164 && CLASSTYPE_TEMPLATE_INFO (late_return_type) 11165 && (CLASSTYPE_TI_TEMPLATE (late_return_type) 11166 == tmpl)) 11167 /* OK */; 11168 else 11169 error ("trailing return type %qT of deduction guide " 11170 "is not a specialization of %qT", 11171 late_return_type, TREE_TYPE (tmpl)); 11172 } 11173 } 11174 else if (late_return_type 11175 && sfk != sfk_conversion) 11176 { 11177 if (cxx_dialect < cxx11) 11178 /* Not using maybe_warn_cpp0x because this should 11179 always be an error. */ 11180 error ("trailing return type only available with " 11181 "-std=c++11 or -std=gnu++11"); 11182 else 11183 error ("%qs function with trailing return type not " 11184 "declared with %<auto%> type specifier", name); 11185 return error_mark_node; 11186 } 11187 } 11188 type = splice_late_return_type (type, late_return_type); 11189 if (type == error_mark_node) 11190 return error_mark_node; 11191 11192 if (late_return_type) 11193 { 11194 late_return_type_p = true; 11195 type_quals = cp_type_quals (type); 11196 } 11197 11198 if (type_quals != TYPE_UNQUALIFIED) 11199 { 11200 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type)) 11201 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type " 11202 "qualifiers ignored on function return type"); 11203 /* We now know that the TYPE_QUALS don't apply to the 11204 decl, but to its return type. */ 11205 type_quals = TYPE_UNQUALIFIED; 11206 } 11207 11208 /* Error about some types functions can't return. */ 11209 11210 if (TREE_CODE (type) == FUNCTION_TYPE) 11211 { 11212 error_at (typespec_loc, "%qs declared as function returning " 11213 "a function", name); 11214 return error_mark_node; 11215 } 11216 if (TREE_CODE (type) == ARRAY_TYPE) 11217 { 11218 error_at (typespec_loc, "%qs declared as function returning " 11219 "an array", name); 11220 return error_mark_node; 11221 } 11222 11223 if (ctype == NULL_TREE 11224 && decl_context == FIELD 11225 && funcdecl_p 11226 && friendp == 0) 11227 ctype = current_class_type; 11228 11229 if (ctype && (sfk == sfk_constructor 11230 || sfk == sfk_destructor)) 11231 { 11232 /* We are within a class's scope. If our declarator name 11233 is the same as the class name, and we are defining 11234 a function, then it is a constructor/destructor, and 11235 therefore returns a void type. */ 11236 11237 /* ISO C++ 12.4/2. A destructor may not be declared 11238 const or volatile. A destructor may not be static. 11239 A destructor may not be declared with ref-qualifier. 11240 11241 ISO C++ 12.1. A constructor may not be declared 11242 const or volatile. A constructor may not be 11243 virtual. A constructor may not be static. 11244 A constructor may not be declared with ref-qualifier. */ 11245 if (staticp == 2) 11246 error ((flags == DTOR_FLAG) 11247 ? G_("destructor cannot be static member function") 11248 : G_("constructor cannot be static member function")); 11249 if (memfn_quals) 11250 { 11251 error ((flags == DTOR_FLAG) 11252 ? G_("destructors may not be cv-qualified") 11253 : G_("constructors may not be cv-qualified")); 11254 memfn_quals = TYPE_UNQUALIFIED; 11255 } 11256 11257 if (rqual) 11258 { 11259 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER); 11260 error ((flags == DTOR_FLAG) 11261 ? G_("destructors may not be ref-qualified") 11262 : G_("constructors may not be ref-qualified")); 11263 rqual = REF_QUAL_NONE; 11264 } 11265 11266 if (decl_context == FIELD 11267 && !member_function_or_else (ctype, 11268 current_class_type, 11269 flags)) 11270 return error_mark_node; 11271 11272 if (flags != DTOR_FLAG) 11273 { 11274 /* It's a constructor. */ 11275 if (explicitp == 1) 11276 explicitp = 2; 11277 if (virtualp) 11278 { 11279 permerror (input_location, 11280 "constructors cannot be declared %<virtual%>"); 11281 virtualp = 0; 11282 } 11283 if (decl_context == FIELD 11284 && sfk != sfk_constructor) 11285 return error_mark_node; 11286 } 11287 if (decl_context == FIELD) 11288 staticp = 0; 11289 } 11290 else if (friendp) 11291 { 11292 if (virtualp) 11293 { 11294 /* Cannot be both friend and virtual. */ 11295 error ("virtual functions cannot be friends"); 11296 friendp = 0; 11297 } 11298 if (decl_context == NORMAL) 11299 error ("friend declaration not in class definition"); 11300 if (current_function_decl && funcdef_flag) 11301 error ("can%'t define friend function %qs in a local " 11302 "class definition", 11303 name); 11304 } 11305 else if (ctype && sfk == sfk_conversion) 11306 { 11307 if (explicitp == 1) 11308 { 11309 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION); 11310 explicitp = 2; 11311 } 11312 if (late_return_type_p) 11313 error ("a conversion function cannot have a trailing return type"); 11314 } 11315 else if (sfk == sfk_deduction_guide) 11316 { 11317 if (explicitp == 1) 11318 explicitp = 2; 11319 } 11320 11321 tree pushed_scope = NULL_TREE; 11322 if (funcdecl_p 11323 && decl_context != FIELD 11324 && inner_declarator->u.id.qualifying_scope 11325 && CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope)) 11326 pushed_scope 11327 = push_scope (inner_declarator->u.id.qualifying_scope); 11328 11329 arg_types = grokparms (declarator->u.function.parameters, &parms); 11330 11331 if (pushed_scope) 11332 pop_scope (pushed_scope); 11333 11334 if (inner_declarator 11335 && inner_declarator->kind == cdk_id 11336 && inner_declarator->u.id.sfk == sfk_destructor 11337 && arg_types != void_list_node) 11338 { 11339 error ("destructors may not have parameters"); 11340 arg_types = void_list_node; 11341 parms = NULL_TREE; 11342 } 11343 11344 type = build_function_type (type, arg_types); 11345 11346 tree attrs = declarator->std_attributes; 11347 if (tx_qual) 11348 { 11349 tree att = build_tree_list (tx_qual, NULL_TREE); 11350 /* transaction_safe applies to the type, but 11351 transaction_safe_dynamic applies to the function. */ 11352 if (is_attribute_p ("transaction_safe", tx_qual)) 11353 attrs = chainon (attrs, att); 11354 else 11355 returned_attrs = chainon (returned_attrs, att); 11356 } 11357 if (attrs) 11358 /* [dcl.fct]/2: 11359 11360 The optional attribute-specifier-seq appertains to 11361 the function type. */ 11362 decl_attributes (&type, attrs, 0); 11363 11364 if (raises) 11365 type = build_exception_variant (type, raises); 11366 } 11367 break; 11368 11369 case cdk_pointer: 11370 case cdk_reference: 11371 case cdk_ptrmem: 11372 /* Filter out pointers-to-references and references-to-references. 11373 We can get these if a TYPE_DECL is used. */ 11374 11375 if (TREE_CODE (type) == REFERENCE_TYPE) 11376 { 11377 if (declarator->kind != cdk_reference) 11378 { 11379 error ("cannot declare pointer to %q#T", type); 11380 type = TREE_TYPE (type); 11381 } 11382 11383 /* In C++0x, we allow reference to reference declarations 11384 that occur indirectly through typedefs [7.1.3/8 dcl.typedef] 11385 and template type arguments [14.3.1/4 temp.arg.type]. The 11386 check for direct reference to reference declarations, which 11387 are still forbidden, occurs below. Reasoning behind the change 11388 can be found in DR106, DR540, and the rvalue reference 11389 proposals. */ 11390 else if (cxx_dialect == cxx98) 11391 { 11392 error ("cannot declare reference to %q#T", type); 11393 type = TREE_TYPE (type); 11394 } 11395 } 11396 else if (VOID_TYPE_P (type)) 11397 { 11398 if (declarator->kind == cdk_reference) 11399 error ("cannot declare reference to %q#T", type); 11400 else if (declarator->kind == cdk_ptrmem) 11401 error ("cannot declare pointer to %q#T member", type); 11402 } 11403 11404 /* We now know that the TYPE_QUALS don't apply to the decl, 11405 but to the target of the pointer. */ 11406 type_quals = TYPE_UNQUALIFIED; 11407 11408 /* This code used to handle METHOD_TYPE, but I don't think it's 11409 possible to get it here anymore. */ 11410 gcc_assert (TREE_CODE (type) != METHOD_TYPE); 11411 if (declarator->kind == cdk_ptrmem 11412 && TREE_CODE (type) == FUNCTION_TYPE) 11413 { 11414 memfn_quals |= type_memfn_quals (type); 11415 type = build_memfn_type (type, 11416 declarator->u.pointer.class_type, 11417 memfn_quals, 11418 rqual); 11419 if (type == error_mark_node) 11420 return error_mark_node; 11421 11422 rqual = REF_QUAL_NONE; 11423 memfn_quals = TYPE_UNQUALIFIED; 11424 } 11425 11426 if (TREE_CODE (type) == FUNCTION_TYPE 11427 && (type_memfn_quals (type) != TYPE_UNQUALIFIED 11428 || type_memfn_rqual (type) != REF_QUAL_NONE)) 11429 error (declarator->kind == cdk_reference 11430 ? G_("cannot declare reference to qualified function type %qT") 11431 : G_("cannot declare pointer to qualified function type %qT"), 11432 type); 11433 11434 /* When the pointed-to type involves components of variable size, 11435 care must be taken to ensure that the size evaluation code is 11436 emitted early enough to dominate all the possible later uses 11437 and late enough for the variables on which it depends to have 11438 been assigned. 11439 11440 This is expected to happen automatically when the pointed-to 11441 type has a name/declaration of it's own, but special attention 11442 is required if the type is anonymous. 11443 11444 We handle the NORMAL and FIELD contexts here by inserting a 11445 dummy statement that just evaluates the size at a safe point 11446 and ensures it is not deferred until e.g. within a deeper 11447 conditional context (c++/43555). 11448 11449 We expect nothing to be needed here for PARM or TYPENAME. 11450 Evaluating the size at this point for TYPENAME would 11451 actually be incorrect, as we might be in the middle of an 11452 expression with side effects on the pointed-to type size 11453 "arguments" prior to the pointer declaration point and the 11454 size evaluation could end up prior to the side effects. */ 11455 11456 if (!TYPE_NAME (type) 11457 && (decl_context == NORMAL || decl_context == FIELD) 11458 && at_function_scope_p () 11459 && variably_modified_type_p (type, NULL_TREE)) 11460 { 11461 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL, 11462 NULL_TREE, type); 11463 add_decl_expr (TYPE_NAME (type)); 11464 } 11465 11466 if (declarator->kind == cdk_reference) 11467 { 11468 /* In C++0x, the type we are creating a reference to might be 11469 a typedef which is itself a reference type. In that case, 11470 we follow the reference collapsing rules in 11471 [7.1.3/8 dcl.typedef] to create the final reference type: 11472 11473 "If a typedef TD names a type that is a reference to a type 11474 T, an attempt to create the type 'lvalue reference to cv TD' 11475 creates the type 'lvalue reference to T,' while an attempt 11476 to create the type "rvalue reference to cv TD' creates the 11477 type TD." 11478 */ 11479 if (VOID_TYPE_P (type)) 11480 /* We already gave an error. */; 11481 else if (TREE_CODE (type) == REFERENCE_TYPE) 11482 { 11483 if (declarator->u.reference.rvalue_ref) 11484 /* Leave type alone. */; 11485 else 11486 type = cp_build_reference_type (TREE_TYPE (type), false); 11487 } 11488 else 11489 type = cp_build_reference_type 11490 (type, declarator->u.reference.rvalue_ref); 11491 11492 /* In C++0x, we need this check for direct reference to 11493 reference declarations, which are forbidden by 11494 [8.3.2/5 dcl.ref]. Reference to reference declarations 11495 are only allowed indirectly through typedefs and template 11496 type arguments. Example: 11497 11498 void foo(int & &); // invalid ref-to-ref decl 11499 11500 typedef int & int_ref; 11501 void foo(int_ref &); // valid ref-to-ref decl 11502 */ 11503 if (inner_declarator && inner_declarator->kind == cdk_reference) 11504 error ("cannot declare reference to %q#T, which is not " 11505 "a typedef or a template type argument", type); 11506 } 11507 else if (TREE_CODE (type) == METHOD_TYPE) 11508 type = build_ptrmemfunc_type (build_pointer_type (type)); 11509 else if (declarator->kind == cdk_ptrmem) 11510 { 11511 gcc_assert (TREE_CODE (declarator->u.pointer.class_type) 11512 != NAMESPACE_DECL); 11513 if (declarator->u.pointer.class_type == error_mark_node) 11514 /* We will already have complained. */ 11515 type = error_mark_node; 11516 else 11517 type = build_ptrmem_type (declarator->u.pointer.class_type, 11518 type); 11519 } 11520 else 11521 type = build_pointer_type (type); 11522 11523 /* Process a list of type modifier keywords (such as 11524 const or volatile) that were given inside the `*' or `&'. */ 11525 11526 if (declarator->u.pointer.qualifiers) 11527 { 11528 type 11529 = cp_build_qualified_type (type, 11530 declarator->u.pointer.qualifiers); 11531 type_quals = cp_type_quals (type); 11532 } 11533 11534 /* Apply C++11 attributes to the pointer, and not to the 11535 type pointed to. This is unlike what is done for GNU 11536 attributes above. It is to comply with [dcl.ptr]/1: 11537 11538 [the optional attribute-specifier-seq (7.6.1) appertains 11539 to the pointer and not to the object pointed to]. */ 11540 if (declarator->std_attributes) 11541 decl_attributes (&type, declarator->std_attributes, 11542 0); 11543 11544 ctype = NULL_TREE; 11545 break; 11546 11547 case cdk_error: 11548 break; 11549 11550 default: 11551 gcc_unreachable (); 11552 } 11553 } 11554 11555 /* A `constexpr' specifier used in an object declaration declares 11556 the object as `const'. */ 11557 if (constexpr_p && innermost_code != cdk_function) 11558 { 11559 /* DR1688 says that a `constexpr' specifier in combination with 11560 `volatile' is valid. */ 11561 11562 if (TREE_CODE (type) != REFERENCE_TYPE) 11563 { 11564 type_quals |= TYPE_QUAL_CONST; 11565 type = cp_build_qualified_type (type, type_quals); 11566 } 11567 } 11568 11569 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR 11570 && TREE_CODE (type) != FUNCTION_TYPE 11571 && TREE_CODE (type) != METHOD_TYPE 11572 && !variable_template_p (TREE_OPERAND (unqualified_id, 0))) 11573 { 11574 error ("template-id %qD used as a declarator", 11575 unqualified_id); 11576 unqualified_id = dname; 11577 } 11578 11579 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly 11580 qualified with a class-name, turn it into a METHOD_TYPE, unless 11581 we know that the function is static. We take advantage of this 11582 opportunity to do other processing that pertains to entities 11583 explicitly declared to be class members. Note that if DECLARATOR 11584 is non-NULL, we know it is a cdk_id declarator; otherwise, we 11585 would not have exited the loop above. */ 11586 if (declarator 11587 && declarator->kind == cdk_id 11588 && declarator->u.id.qualifying_scope 11589 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope)) 11590 { 11591 ctype = declarator->u.id.qualifying_scope; 11592 ctype = TYPE_MAIN_VARIANT (ctype); 11593 template_count = num_template_headers_for_class (ctype); 11594 11595 if (ctype == current_class_type) 11596 { 11597 if (friendp) 11598 { 11599 permerror (input_location, "member functions are implicitly " 11600 "friends of their class"); 11601 friendp = 0; 11602 } 11603 else 11604 permerror (declarator->id_loc, 11605 "extra qualification %<%T::%> on member %qs", 11606 ctype, name); 11607 } 11608 else if (/* If the qualifying type is already complete, then we 11609 can skip the following checks. */ 11610 !COMPLETE_TYPE_P (ctype) 11611 && (/* If the function is being defined, then 11612 qualifying type must certainly be complete. */ 11613 funcdef_flag 11614 /* A friend declaration of "T::f" is OK, even if 11615 "T" is a template parameter. But, if this 11616 function is not a friend, the qualifying type 11617 must be a class. */ 11618 || (!friendp && !CLASS_TYPE_P (ctype)) 11619 /* For a declaration, the type need not be 11620 complete, if either it is dependent (since there 11621 is no meaningful definition of complete in that 11622 case) or the qualifying class is currently being 11623 defined. */ 11624 || !(dependent_type_p (ctype) 11625 || currently_open_class (ctype))) 11626 /* Check that the qualifying type is complete. */ 11627 && !complete_type_or_else (ctype, NULL_TREE)) 11628 return error_mark_node; 11629 else if (TREE_CODE (type) == FUNCTION_TYPE) 11630 { 11631 if (current_class_type 11632 && (!friendp || funcdef_flag || initialized)) 11633 { 11634 error (funcdef_flag || initialized 11635 ? G_("cannot define member function %<%T::%s%> " 11636 "within %qT") 11637 : G_("cannot declare member function %<%T::%s%> " 11638 "within %qT"), 11639 ctype, name, current_class_type); 11640 return error_mark_node; 11641 } 11642 } 11643 else if (typedef_p && current_class_type) 11644 { 11645 error ("cannot declare member %<%T::%s%> within %qT", 11646 ctype, name, current_class_type); 11647 return error_mark_node; 11648 } 11649 } 11650 11651 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0) 11652 ctype = current_class_type; 11653 11654 /* Now TYPE has the actual type. */ 11655 11656 if (returned_attrs) 11657 { 11658 if (attrlist) 11659 *attrlist = chainon (returned_attrs, *attrlist); 11660 else 11661 attrlist = &returned_attrs; 11662 } 11663 11664 if (declarator 11665 && declarator->kind == cdk_id 11666 && declarator->std_attributes 11667 && attrlist != NULL) 11668 { 11669 /* [dcl.meaning]/1: The optional attribute-specifier-seq following 11670 a declarator-id appertains to the entity that is declared. */ 11671 if (declarator->std_attributes != error_mark_node) 11672 *attrlist = chainon (*attrlist, declarator->std_attributes); 11673 else 11674 /* We should have already diagnosed the issue (c++/78344). */ 11675 gcc_assert (seen_error ()); 11676 } 11677 11678 /* Handle parameter packs. */ 11679 if (parameter_pack_p) 11680 { 11681 if (decl_context == PARM) 11682 /* Turn the type into a pack expansion.*/ 11683 type = make_pack_expansion (type); 11684 else 11685 error ("non-parameter %qs cannot be a parameter pack", name); 11686 } 11687 11688 if ((decl_context == FIELD || decl_context == PARM) 11689 && !processing_template_decl 11690 && variably_modified_type_p (type, NULL_TREE)) 11691 { 11692 if (decl_context == FIELD) 11693 error ("data member may not have variably modified type %qT", type); 11694 else 11695 error ("parameter may not have variably modified type %qT", type); 11696 type = error_mark_node; 11697 } 11698 11699 if (explicitp == 1 || (explicitp && friendp)) 11700 { 11701 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only 11702 in the declaration of a constructor or conversion function within 11703 a class definition. */ 11704 if (!current_class_type) 11705 error_at (declspecs->locations[ds_explicit], 11706 "%<explicit%> outside class declaration"); 11707 else if (friendp) 11708 error_at (declspecs->locations[ds_explicit], 11709 "%<explicit%> in friend declaration"); 11710 else 11711 error_at (declspecs->locations[ds_explicit], 11712 "only declarations of constructors and conversion operators " 11713 "can be %<explicit%>"); 11714 explicitp = 0; 11715 } 11716 11717 if (storage_class == sc_mutable) 11718 { 11719 if (decl_context != FIELD || friendp) 11720 { 11721 error ("non-member %qs cannot be declared %<mutable%>", name); 11722 storage_class = sc_none; 11723 } 11724 else if (decl_context == TYPENAME || typedef_p) 11725 { 11726 error ("non-object member %qs cannot be declared %<mutable%>", name); 11727 storage_class = sc_none; 11728 } 11729 else if (TREE_CODE (type) == FUNCTION_TYPE 11730 || TREE_CODE (type) == METHOD_TYPE) 11731 { 11732 error ("function %qs cannot be declared %<mutable%>", name); 11733 storage_class = sc_none; 11734 } 11735 else if (staticp) 11736 { 11737 error ("static %qs cannot be declared %<mutable%>", name); 11738 storage_class = sc_none; 11739 } 11740 else if (type_quals & TYPE_QUAL_CONST) 11741 { 11742 error ("const %qs cannot be declared %<mutable%>", name); 11743 storage_class = sc_none; 11744 } 11745 else if (TREE_CODE (type) == REFERENCE_TYPE) 11746 { 11747 permerror (input_location, "reference %qs cannot be declared " 11748 "%<mutable%>", name); 11749 storage_class = sc_none; 11750 } 11751 } 11752 11753 /* If this is declaring a typedef name, return a TYPE_DECL. */ 11754 if (typedef_p && decl_context != TYPENAME) 11755 { 11756 tree decl; 11757 11758 /* This declaration: 11759 11760 typedef void f(int) const; 11761 11762 declares a function type which is not a member of any 11763 particular class, but which is cv-qualified; for 11764 example "f S::*" declares a pointer to a const-qualified 11765 member function of S. We record the cv-qualification in the 11766 function type. */ 11767 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE) 11768 { 11769 type = apply_memfn_quals (type, memfn_quals, rqual); 11770 11771 /* We have now dealt with these qualifiers. */ 11772 memfn_quals = TYPE_UNQUALIFIED; 11773 rqual = REF_QUAL_NONE; 11774 } 11775 11776 if (type_uses_auto (type)) 11777 { 11778 error ("typedef declared %<auto%>"); 11779 type = error_mark_node; 11780 } 11781 11782 if (reqs) 11783 error_at (location_of (reqs), "requires-clause on typedef"); 11784 11785 if (id_declarator && declarator->u.id.qualifying_scope) 11786 { 11787 error ("typedef name may not be a nested-name-specifier"); 11788 type = error_mark_node; 11789 } 11790 11791 if (decl_context == FIELD) 11792 decl = build_lang_decl (TYPE_DECL, unqualified_id, type); 11793 else 11794 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type); 11795 11796 if (decl_context != FIELD) 11797 { 11798 if (!current_function_decl) 11799 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace); 11800 else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl) 11801 || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P 11802 (current_function_decl))) 11803 /* The TYPE_DECL is "abstract" because there will be 11804 clones of this constructor/destructor, and there will 11805 be copies of this TYPE_DECL generated in those 11806 clones. The decloning optimization (for space) may 11807 revert this subsequently if it determines that 11808 the clones should share a common implementation. */ 11809 DECL_ABSTRACT_P (decl) = true; 11810 } 11811 else if (current_class_type 11812 && constructor_name_p (unqualified_id, current_class_type)) 11813 permerror (input_location, "ISO C++ forbids nested type %qD with same name " 11814 "as enclosing class", 11815 unqualified_id); 11816 11817 /* If the user declares "typedef struct {...} foo" then the 11818 struct will have an anonymous name. Fill that name in now. 11819 Nothing can refer to it, so nothing needs know about the name 11820 change. */ 11821 if (type != error_mark_node 11822 && unqualified_id 11823 && TYPE_NAME (type) 11824 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL 11825 && TYPE_UNNAMED_P (type) 11826 && declspecs->type_definition_p 11827 && attributes_naming_typedef_ok (*attrlist) 11828 && cp_type_quals (type) == TYPE_UNQUALIFIED) 11829 name_unnamed_type (type, decl); 11830 11831 if (signed_p 11832 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))) 11833 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1; 11834 11835 bad_specifiers (decl, BSP_TYPE, virtualp, 11836 memfn_quals != TYPE_UNQUALIFIED, 11837 inlinep, friendp, raises != NULL_TREE); 11838 11839 if (decl_spec_seq_has_spec_p (declspecs, ds_alias)) 11840 /* Acknowledge that this was written: 11841 `using analias = atype;'. */ 11842 TYPE_DECL_ALIAS_P (decl) = 1; 11843 11844 return decl; 11845 } 11846 11847 /* Detect the case of an array type of unspecified size 11848 which came, as such, direct from a typedef name. 11849 We must copy the type, so that the array's domain can be 11850 individually set by the object's initializer. */ 11851 11852 if (type && typedef_type 11853 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type) 11854 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type)) 11855 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE); 11856 11857 /* Detect where we're using a typedef of function type to declare a 11858 function. PARMS will not be set, so we must create it now. */ 11859 11860 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE) 11861 { 11862 tree decls = NULL_TREE; 11863 tree args; 11864 11865 for (args = TYPE_ARG_TYPES (type); 11866 args && args != void_list_node; 11867 args = TREE_CHAIN (args)) 11868 { 11869 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE, 11870 TREE_VALUE (args)); 11871 11872 DECL_CHAIN (decl) = decls; 11873 decls = decl; 11874 } 11875 11876 parms = nreverse (decls); 11877 11878 if (decl_context != TYPENAME) 11879 { 11880 /* The qualifiers on the function type become the qualifiers on 11881 the non-static member function. */ 11882 memfn_quals |= type_memfn_quals (type); 11883 rqual = type_memfn_rqual (type); 11884 type_quals = TYPE_UNQUALIFIED; 11885 } 11886 } 11887 11888 /* If this is a type name (such as, in a cast or sizeof), 11889 compute the type and return it now. */ 11890 11891 if (decl_context == TYPENAME) 11892 { 11893 /* Note that here we don't care about type_quals. */ 11894 11895 /* Special case: "friend class foo" looks like a TYPENAME context. */ 11896 if (friendp) 11897 { 11898 if (inlinep) 11899 { 11900 error ("%<inline%> specified for friend class declaration"); 11901 inlinep = 0; 11902 } 11903 11904 if (!current_aggr) 11905 { 11906 /* Don't allow friend declaration without a class-key. */ 11907 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM) 11908 permerror (input_location, "template parameters cannot be friends"); 11909 else if (TREE_CODE (type) == TYPENAME_TYPE) 11910 permerror (input_location, "friend declaration requires class-key, " 11911 "i.e. %<friend class %T::%D%>", 11912 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type)); 11913 else 11914 permerror (input_location, "friend declaration requires class-key, " 11915 "i.e. %<friend %#T%>", 11916 type); 11917 } 11918 11919 /* Only try to do this stuff if we didn't already give up. */ 11920 if (type != integer_type_node) 11921 { 11922 /* A friendly class? */ 11923 if (current_class_type) 11924 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type), 11925 /*complain=*/true); 11926 else 11927 error ("trying to make class %qT a friend of global scope", 11928 type); 11929 11930 type = void_type_node; 11931 } 11932 } 11933 else if (memfn_quals || rqual) 11934 { 11935 if (ctype == NULL_TREE 11936 && TREE_CODE (type) == METHOD_TYPE) 11937 ctype = TYPE_METHOD_BASETYPE (type); 11938 11939 if (ctype) 11940 type = build_memfn_type (type, ctype, memfn_quals, rqual); 11941 /* Core issue #547: need to allow this in template type args. 11942 Allow it in general in C++11 for alias-declarations. */ 11943 else if ((template_type_arg || cxx_dialect >= cxx11) 11944 && TREE_CODE (type) == FUNCTION_TYPE) 11945 type = apply_memfn_quals (type, memfn_quals, rqual); 11946 else 11947 error ("invalid qualifiers on non-member function type"); 11948 } 11949 11950 if (reqs) 11951 error_at (location_of (reqs), "requires-clause on type-id"); 11952 11953 return type; 11954 } 11955 else if (unqualified_id == NULL_TREE && decl_context != PARM 11956 && decl_context != CATCHPARM 11957 && TREE_CODE (type) != UNION_TYPE 11958 && ! bitfield 11959 && innermost_code != cdk_decomp) 11960 { 11961 error ("abstract declarator %qT used as declaration", type); 11962 return error_mark_node; 11963 } 11964 11965 if (!FUNC_OR_METHOD_TYPE_P (type)) 11966 { 11967 /* Only functions may be declared using an operator-function-id. */ 11968 if (dname && IDENTIFIER_ANY_OP_P (dname)) 11969 { 11970 error ("declaration of %qD as non-function", dname); 11971 return error_mark_node; 11972 } 11973 11974 if (reqs) 11975 error_at (location_of (reqs), 11976 "requires-clause on declaration of non-function type %qT", 11977 type); 11978 } 11979 11980 /* We don't check parameter types here because we can emit a better 11981 error message later. */ 11982 if (decl_context != PARM) 11983 { 11984 type = check_var_type (unqualified_id, type); 11985 if (type == error_mark_node) 11986 return error_mark_node; 11987 } 11988 11989 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL 11990 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */ 11991 11992 if (decl_context == PARM || decl_context == CATCHPARM) 11993 { 11994 if (ctype || in_namespace) 11995 error ("cannot use %<::%> in parameter declaration"); 11996 11997 if (type_uses_auto (type) 11998 && !(cxx_dialect >= cxx17 && template_parm_flag)) 11999 { 12000 if (cxx_dialect >= cxx14) 12001 error ("%<auto%> parameter not permitted in this context"); 12002 else 12003 error ("parameter declared %<auto%>"); 12004 type = error_mark_node; 12005 } 12006 12007 /* A parameter declared as an array of T is really a pointer to T. 12008 One declared as a function is really a pointer to a function. 12009 One declared as a member is really a pointer to member. */ 12010 12011 if (TREE_CODE (type) == ARRAY_TYPE) 12012 { 12013 /* Transfer const-ness of array into that of type pointed to. */ 12014 type = build_pointer_type (TREE_TYPE (type)); 12015 type_quals = TYPE_UNQUALIFIED; 12016 array_parameter_p = true; 12017 } 12018 else if (TREE_CODE (type) == FUNCTION_TYPE) 12019 type = build_pointer_type (type); 12020 } 12021 12022 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2 12023 && !(identifier_p (unqualified_id) 12024 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))) 12025 { 12026 cp_cv_quals real_quals = memfn_quals; 12027 if (cxx_dialect < cxx14 && constexpr_p 12028 && sfk != sfk_constructor && sfk != sfk_destructor) 12029 real_quals |= TYPE_QUAL_CONST; 12030 type = build_memfn_type (type, ctype, real_quals, rqual); 12031 } 12032 12033 { 12034 tree decl = NULL_TREE; 12035 12036 if (decl_context == PARM) 12037 { 12038 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type); 12039 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p; 12040 12041 bad_specifiers (decl, BSP_PARM, virtualp, 12042 memfn_quals != TYPE_UNQUALIFIED, 12043 inlinep, friendp, raises != NULL_TREE); 12044 } 12045 else if (decl_context == FIELD) 12046 { 12047 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE) 12048 if (tree auto_node = type_uses_auto (type)) 12049 { 12050 location_t loc = declspecs->locations[ds_type_spec]; 12051 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node)) 12052 error_at (loc, "invalid use of template-name %qE without an " 12053 "argument list", 12054 CLASS_PLACEHOLDER_TEMPLATE (auto_node)); 12055 else 12056 error_at (loc, "non-static data member declared with " 12057 "placeholder %qT", auto_node); 12058 type = error_mark_node; 12059 } 12060 12061 /* The C99 flexible array extension. */ 12062 if (!staticp && TREE_CODE (type) == ARRAY_TYPE 12063 && TYPE_DOMAIN (type) == NULL_TREE) 12064 { 12065 if (ctype 12066 && (TREE_CODE (ctype) == UNION_TYPE 12067 || TREE_CODE (ctype) == QUAL_UNION_TYPE)) 12068 { 12069 error ("flexible array member in union"); 12070 type = error_mark_node; 12071 } 12072 else 12073 { 12074 /* Array is a flexible member. */ 12075 if (in_system_header_at (input_location)) 12076 /* Do not warn on flexible array members in system 12077 headers because glibc uses them. */; 12078 else if (name) 12079 pedwarn (input_location, OPT_Wpedantic, 12080 "ISO C++ forbids flexible array member %qs", name); 12081 else 12082 pedwarn (input_location, OPT_Wpedantic, 12083 "ISO C++ forbids flexible array members"); 12084 12085 /* Flexible array member has a null domain. */ 12086 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE); 12087 } 12088 } 12089 12090 if (type == error_mark_node) 12091 { 12092 /* Happens when declaring arrays of sizes which 12093 are error_mark_node, for example. */ 12094 decl = NULL_TREE; 12095 } 12096 else if (in_namespace && !friendp) 12097 { 12098 /* Something like struct S { int N::j; }; */ 12099 error ("invalid use of %<::%>"); 12100 return error_mark_node; 12101 } 12102 else if (TREE_CODE (type) == FUNCTION_TYPE 12103 || TREE_CODE (type) == METHOD_TYPE) 12104 { 12105 int publicp = 0; 12106 tree function_context; 12107 12108 if (friendp == 0) 12109 { 12110 /* This should never happen in pure C++ (the check 12111 could be an assert). It could happen in 12112 Objective-C++ if someone writes invalid code that 12113 uses a function declaration for an instance 12114 variable or property (instance variables and 12115 properties are parsed as FIELD_DECLs, but they are 12116 part of an Objective-C class, not a C++ class). 12117 That code is invalid and is caught by this 12118 check. */ 12119 if (!ctype) 12120 { 12121 error ("declaration of function %qD in invalid context", 12122 unqualified_id); 12123 return error_mark_node; 12124 } 12125 12126 /* ``A union may [ ... ] not [ have ] virtual functions.'' 12127 ARM 9.5 */ 12128 if (virtualp && TREE_CODE (ctype) == UNION_TYPE) 12129 { 12130 error ("function %qD declared %<virtual%> inside a union", 12131 unqualified_id); 12132 return error_mark_node; 12133 } 12134 12135 if (virtualp 12136 && identifier_p (unqualified_id) 12137 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)) 12138 { 12139 error ("%qD cannot be declared %<virtual%>, since it " 12140 "is always static", unqualified_id); 12141 virtualp = 0; 12142 } 12143 } 12144 12145 /* Check that the name used for a destructor makes sense. */ 12146 if (sfk == sfk_destructor) 12147 { 12148 tree uqname = id_declarator->u.id.unqualified_name; 12149 12150 if (!ctype) 12151 { 12152 gcc_assert (friendp); 12153 error ("expected qualified name in friend declaration " 12154 "for destructor %qD", uqname); 12155 return error_mark_node; 12156 } 12157 12158 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0))) 12159 { 12160 error ("declaration of %qD as member of %qT", 12161 uqname, ctype); 12162 return error_mark_node; 12163 } 12164 if (concept_p) 12165 { 12166 error ("a destructor cannot be %<concept%>"); 12167 return error_mark_node; 12168 } 12169 if (constexpr_p) 12170 { 12171 error ("a destructor cannot be %<constexpr%>"); 12172 return error_mark_node; 12173 } 12174 } 12175 else if (sfk == sfk_constructor && friendp && !ctype) 12176 { 12177 error ("expected qualified name in friend declaration " 12178 "for constructor %qD", 12179 id_declarator->u.id.unqualified_name); 12180 return error_mark_node; 12181 } 12182 if (sfk == sfk_constructor) 12183 if (concept_p) 12184 { 12185 error ("a constructor cannot be %<concept%>"); 12186 return error_mark_node; 12187 } 12188 if (concept_p) 12189 { 12190 error ("a concept cannot be a member function"); 12191 concept_p = false; 12192 } 12193 12194 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR) 12195 { 12196 tree tmpl = TREE_OPERAND (unqualified_id, 0); 12197 if (variable_template_p (tmpl)) 12198 { 12199 error ("specialization of variable template %qD " 12200 "declared as function", tmpl); 12201 inform (DECL_SOURCE_LOCATION (tmpl), 12202 "variable template declared here"); 12203 return error_mark_node; 12204 } 12205 } 12206 12207 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */ 12208 function_context = (ctype != NULL_TREE) ? 12209 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE; 12210 publicp = (! friendp || ! staticp) 12211 && function_context == NULL_TREE; 12212 12213 if (late_return_type_p) 12214 TYPE_HAS_LATE_RETURN_TYPE (type) = 1; 12215 12216 decl = grokfndecl (ctype, type, 12217 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR 12218 ? unqualified_id : dname, 12219 parms, 12220 unqualified_id, 12221 reqs, 12222 virtualp, flags, memfn_quals, rqual, raises, 12223 friendp ? -1 : 0, friendp, publicp, 12224 inlinep | (2 * constexpr_p) | (4 * concept_p), 12225 initialized == SD_DELETED, sfk, 12226 funcdef_flag, template_count, in_namespace, 12227 attrlist, declarator->id_loc); 12228 decl = set_virt_specifiers (decl, virt_specifiers); 12229 if (decl == NULL_TREE) 12230 return error_mark_node; 12231 #if 0 12232 /* This clobbers the attrs stored in `decl' from `attrlist'. */ 12233 /* The decl and setting of decl_attr is also turned off. */ 12234 decl = build_decl_attribute_variant (decl, decl_attr); 12235 #endif 12236 12237 /* [class.conv.ctor] 12238 12239 A constructor declared without the function-specifier 12240 explicit that can be called with a single parameter 12241 specifies a conversion from the type of its first 12242 parameter to the type of its class. Such a constructor 12243 is called a converting constructor. */ 12244 if (explicitp == 2) 12245 DECL_NONCONVERTING_P (decl) = 1; 12246 } 12247 else if (!staticp && !dependent_type_p (type) 12248 && !COMPLETE_TYPE_P (complete_type (type)) 12249 && (!complete_or_array_type_p (type) 12250 || initialized == 0)) 12251 { 12252 if (TREE_CODE (type) != ARRAY_TYPE 12253 || !COMPLETE_TYPE_P (TREE_TYPE (type))) 12254 { 12255 if (unqualified_id) 12256 { 12257 error ("field %qD has incomplete type %qT", 12258 unqualified_id, type); 12259 cxx_incomplete_type_inform (strip_array_types (type)); 12260 } 12261 else 12262 error ("name %qT has incomplete type", type); 12263 12264 type = error_mark_node; 12265 decl = NULL_TREE; 12266 } 12267 } 12268 else 12269 { 12270 if (friendp) 12271 { 12272 error ("%qE is neither function nor member function; " 12273 "cannot be declared friend", unqualified_id); 12274 return error_mark_node; 12275 } 12276 decl = NULL_TREE; 12277 } 12278 12279 if (friendp) 12280 { 12281 /* Friends are treated specially. */ 12282 if (ctype == current_class_type) 12283 ; /* We already issued a permerror. */ 12284 else if (decl && DECL_NAME (decl)) 12285 { 12286 if (template_class_depth (current_class_type) == 0) 12287 { 12288 decl = check_explicit_specialization 12289 (unqualified_id, decl, template_count, 12290 2 * funcdef_flag + 4); 12291 if (decl == error_mark_node) 12292 return error_mark_node; 12293 } 12294 12295 decl = do_friend (ctype, unqualified_id, decl, 12296 *attrlist, flags, 12297 funcdef_flag); 12298 return decl; 12299 } 12300 else 12301 return error_mark_node; 12302 } 12303 12304 /* Structure field. It may not be a function, except for C++. */ 12305 12306 if (decl == NULL_TREE) 12307 { 12308 if (staticp) 12309 { 12310 /* C++ allows static class members. All other work 12311 for this is done by grokfield. */ 12312 decl = build_lang_decl_loc (declarator 12313 ? declarator->id_loc 12314 : input_location, 12315 VAR_DECL, unqualified_id, type); 12316 set_linkage_for_static_data_member (decl); 12317 if (concept_p) 12318 error ("static data member %qE declared %<concept%>", 12319 unqualified_id); 12320 else if (constexpr_p && !initialized) 12321 { 12322 error ("%<constexpr%> static data member %qD must have an " 12323 "initializer", decl); 12324 constexpr_p = false; 12325 } 12326 12327 if (inlinep) 12328 mark_inline_variable (decl); 12329 12330 if (!DECL_VAR_DECLARED_INLINE_P (decl) 12331 && !(cxx_dialect >= cxx17 && constexpr_p)) 12332 /* Even if there is an in-class initialization, DECL 12333 is considered undefined until an out-of-class 12334 definition is provided, unless this is an inline 12335 variable. */ 12336 DECL_EXTERNAL (decl) = 1; 12337 12338 if (thread_p) 12339 { 12340 CP_DECL_THREAD_LOCAL_P (decl) = true; 12341 if (!processing_template_decl) 12342 set_decl_tls_model (decl, decl_default_tls_model (decl)); 12343 if (declspecs->gnu_thread_keyword_p) 12344 SET_DECL_GNU_TLS_P (decl); 12345 } 12346 } 12347 else 12348 { 12349 if (concept_p) 12350 error ("non-static data member %qE declared %<concept%>", 12351 unqualified_id); 12352 else if (constexpr_p) 12353 { 12354 error ("non-static data member %qE declared %<constexpr%>", 12355 unqualified_id); 12356 constexpr_p = false; 12357 } 12358 decl = build_decl (input_location, 12359 FIELD_DECL, unqualified_id, type); 12360 DECL_NONADDRESSABLE_P (decl) = bitfield; 12361 if (bitfield && !unqualified_id) 12362 { 12363 TREE_NO_WARNING (decl) = 1; 12364 DECL_PADDING_P (decl) = 1; 12365 } 12366 12367 if (storage_class == sc_mutable) 12368 { 12369 DECL_MUTABLE_P (decl) = 1; 12370 storage_class = sc_none; 12371 } 12372 12373 if (initialized) 12374 { 12375 /* An attempt is being made to initialize a non-static 12376 member. This is new in C++11. */ 12377 maybe_warn_cpp0x (CPP0X_NSDMI); 12378 12379 /* If this has been parsed with static storage class, but 12380 errors forced staticp to be cleared, ensure NSDMI is 12381 not present. */ 12382 if (declspecs->storage_class == sc_static) 12383 DECL_INITIAL (decl) = error_mark_node; 12384 } 12385 } 12386 12387 bad_specifiers (decl, BSP_FIELD, virtualp, 12388 memfn_quals != TYPE_UNQUALIFIED, 12389 staticp ? false : inlinep, friendp, 12390 raises != NULL_TREE); 12391 } 12392 } 12393 else if (TREE_CODE (type) == FUNCTION_TYPE 12394 || TREE_CODE (type) == METHOD_TYPE) 12395 { 12396 tree original_name; 12397 int publicp = 0; 12398 12399 if (!unqualified_id) 12400 return error_mark_node; 12401 12402 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR) 12403 original_name = dname; 12404 else 12405 original_name = unqualified_id; 12406 // FIXME:gcc_assert (original_name == dname); 12407 12408 if (storage_class == sc_auto) 12409 error ("storage class %<auto%> invalid for function %qs", name); 12410 else if (storage_class == sc_register) 12411 error ("storage class %<register%> invalid for function %qs", name); 12412 else if (thread_p) 12413 { 12414 if (declspecs->gnu_thread_keyword_p) 12415 error ("storage class %<__thread%> invalid for function %qs", 12416 name); 12417 else 12418 error ("storage class %<thread_local%> invalid for function %qs", 12419 name); 12420 } 12421 12422 if (virt_specifiers) 12423 error ("virt-specifiers in %qs not allowed outside a class definition", name); 12424 /* Function declaration not at top level. 12425 Storage classes other than `extern' are not allowed 12426 and `extern' makes no difference. */ 12427 if (! toplevel_bindings_p () 12428 && (storage_class == sc_static 12429 || decl_spec_seq_has_spec_p (declspecs, ds_inline)) 12430 && pedantic) 12431 { 12432 if (storage_class == sc_static) 12433 pedwarn (input_location, OPT_Wpedantic, 12434 "%<static%> specifier invalid for function %qs " 12435 "declared out of global scope", name); 12436 else 12437 pedwarn (input_location, OPT_Wpedantic, 12438 "%<inline%> specifier invalid for function %qs " 12439 "declared out of global scope", name); 12440 } 12441 12442 if (ctype == NULL_TREE) 12443 { 12444 if (virtualp) 12445 { 12446 error ("virtual non-class function %qs", name); 12447 virtualp = 0; 12448 } 12449 else if (sfk == sfk_constructor 12450 || sfk == sfk_destructor) 12451 { 12452 error (funcdef_flag 12453 ? G_("%qs defined in a non-class scope") 12454 : G_("%qs declared in a non-class scope"), name); 12455 sfk = sfk_none; 12456 } 12457 } 12458 12459 /* Record whether the function is public. */ 12460 publicp = (ctype != NULL_TREE 12461 || storage_class != sc_static); 12462 12463 if (late_return_type_p) 12464 TYPE_HAS_LATE_RETURN_TYPE (type) = 1; 12465 12466 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id, 12467 reqs, virtualp, flags, memfn_quals, rqual, raises, 12468 1, friendp, 12469 publicp, 12470 inlinep | (2 * constexpr_p) | (4 * concept_p), 12471 initialized == SD_DELETED, 12472 sfk, 12473 funcdef_flag, 12474 template_count, in_namespace, attrlist, 12475 declarator->id_loc); 12476 if (decl == NULL_TREE) 12477 return error_mark_node; 12478 12479 if (explicitp == 2) 12480 DECL_NONCONVERTING_P (decl) = 1; 12481 if (staticp == 1) 12482 { 12483 int invalid_static = 0; 12484 12485 /* Don't allow a static member function in a class, and forbid 12486 declaring main to be static. */ 12487 if (TREE_CODE (type) == METHOD_TYPE) 12488 { 12489 permerror (input_location, "cannot declare member function %qD to have " 12490 "static linkage", decl); 12491 invalid_static = 1; 12492 } 12493 else if (current_function_decl) 12494 { 12495 /* 7.1.1: There can be no static function declarations within a 12496 block. */ 12497 error ("cannot declare static function inside another function"); 12498 invalid_static = 1; 12499 } 12500 12501 if (invalid_static) 12502 { 12503 staticp = 0; 12504 storage_class = sc_none; 12505 } 12506 } 12507 } 12508 else 12509 { 12510 /* It's a variable. */ 12511 12512 /* An uninitialized decl with `extern' is a reference. */ 12513 decl = grokvardecl (type, dname, unqualified_id, 12514 declspecs, 12515 initialized, 12516 type_quals, 12517 inlinep, 12518 concept_p, 12519 template_count, 12520 ctype ? ctype : in_namespace); 12521 if (decl == NULL_TREE) 12522 return error_mark_node; 12523 12524 bad_specifiers (decl, BSP_VAR, virtualp, 12525 memfn_quals != TYPE_UNQUALIFIED, 12526 inlinep, friendp, raises != NULL_TREE); 12527 12528 if (ctype) 12529 { 12530 DECL_CONTEXT (decl) = ctype; 12531 if (staticp == 1) 12532 { 12533 permerror (input_location, "%<static%> may not be used when defining " 12534 "(as opposed to declaring) a static data member"); 12535 staticp = 0; 12536 storage_class = sc_none; 12537 } 12538 if (storage_class == sc_register && TREE_STATIC (decl)) 12539 { 12540 error ("static member %qD declared %<register%>", decl); 12541 storage_class = sc_none; 12542 } 12543 if (storage_class == sc_extern && pedantic) 12544 { 12545 pedwarn (input_location, OPT_Wpedantic, 12546 "cannot explicitly declare member %q#D to have " 12547 "extern linkage", decl); 12548 storage_class = sc_none; 12549 } 12550 } 12551 else if (constexpr_p && DECL_EXTERNAL (decl)) 12552 { 12553 error ("declaration of %<constexpr%> variable %qD " 12554 "is not a definition", decl); 12555 constexpr_p = false; 12556 } 12557 12558 if (inlinep) 12559 mark_inline_variable (decl); 12560 if (innermost_code == cdk_decomp) 12561 { 12562 gcc_assert (declarator && declarator->kind == cdk_decomp); 12563 DECL_SOURCE_LOCATION (decl) = declarator->id_loc; 12564 DECL_ARTIFICIAL (decl) = 1; 12565 fit_decomposition_lang_decl (decl, NULL_TREE); 12566 } 12567 } 12568 12569 if (VAR_P (decl) && !initialized) 12570 if (tree auto_node = type_uses_auto (type)) 12571 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node)) 12572 { 12573 location_t loc = declspecs->locations[ds_type_spec]; 12574 error_at (loc, "declaration of %q#D has no initializer", decl); 12575 TREE_TYPE (decl) = error_mark_node; 12576 } 12577 12578 if (storage_class == sc_extern && initialized && !funcdef_flag) 12579 { 12580 if (toplevel_bindings_p ()) 12581 { 12582 /* It's common practice (and completely valid) to have a const 12583 be initialized and declared extern. */ 12584 if (!(type_quals & TYPE_QUAL_CONST)) 12585 warning (0, "%qs initialized and declared %<extern%>", name); 12586 } 12587 else 12588 { 12589 error ("%qs has both %<extern%> and initializer", name); 12590 return error_mark_node; 12591 } 12592 } 12593 12594 /* Record `register' declaration for warnings on & 12595 and in case doing stupid register allocation. */ 12596 12597 if (storage_class == sc_register) 12598 { 12599 DECL_REGISTER (decl) = 1; 12600 /* Warn about register storage specifiers on PARM_DECLs. */ 12601 if (TREE_CODE (decl) == PARM_DECL) 12602 { 12603 if (cxx_dialect >= cxx17) 12604 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister, 12605 "ISO C++17 does not allow %<register%> storage " 12606 "class specifier"); 12607 else 12608 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister, 12609 "%<register%> storage class specifier used"); 12610 } 12611 } 12612 else if (storage_class == sc_extern) 12613 DECL_THIS_EXTERN (decl) = 1; 12614 else if (storage_class == sc_static) 12615 DECL_THIS_STATIC (decl) = 1; 12616 12617 /* Set constexpr flag on vars (functions got it in grokfndecl). */ 12618 if (constexpr_p && VAR_P (decl)) 12619 DECL_DECLARED_CONSTEXPR_P (decl) = true; 12620 12621 /* Record constancy and volatility on the DECL itself . There's 12622 no need to do this when processing a template; we'll do this 12623 for the instantiated declaration based on the type of DECL. */ 12624 if (!processing_template_decl) 12625 cp_apply_type_quals_to_decl (type_quals, decl); 12626 12627 return decl; 12628 } 12629 } 12630 12631 /* Subroutine of start_function. Ensure that each of the parameter 12632 types (as listed in PARMS) is complete, as is required for a 12633 function definition. */ 12634 12635 static void 12636 require_complete_types_for_parms (tree parms) 12637 { 12638 for (; parms; parms = DECL_CHAIN (parms)) 12639 { 12640 if (dependent_type_p (TREE_TYPE (parms))) 12641 continue; 12642 if (!VOID_TYPE_P (TREE_TYPE (parms)) 12643 && complete_type_or_else (TREE_TYPE (parms), parms)) 12644 { 12645 relayout_decl (parms); 12646 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms)); 12647 12648 maybe_warn_parm_abi (TREE_TYPE (parms), 12649 DECL_SOURCE_LOCATION (parms)); 12650 } 12651 else 12652 /* grokparms or complete_type_or_else will have already issued 12653 an error. */ 12654 TREE_TYPE (parms) = error_mark_node; 12655 } 12656 } 12657 12658 /* Returns nonzero if T is a local variable. */ 12659 12660 int 12661 local_variable_p (const_tree t) 12662 { 12663 if ((VAR_P (t) 12664 /* A VAR_DECL with a context that is a _TYPE is a static data 12665 member. */ 12666 && !TYPE_P (CP_DECL_CONTEXT (t)) 12667 /* Any other non-local variable must be at namespace scope. */ 12668 && !DECL_NAMESPACE_SCOPE_P (t)) 12669 || (TREE_CODE (t) == PARM_DECL)) 12670 return 1; 12671 12672 return 0; 12673 } 12674 12675 /* Like local_variable_p, but suitable for use as a tree-walking 12676 function. */ 12677 12678 static tree 12679 local_variable_p_walkfn (tree *tp, int *walk_subtrees, 12680 void * /*data*/) 12681 { 12682 if (local_variable_p (*tp) 12683 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier)) 12684 return *tp; 12685 else if (TYPE_P (*tp)) 12686 *walk_subtrees = 0; 12687 12688 return NULL_TREE; 12689 } 12690 12691 /* Check that ARG, which is a default-argument expression for a 12692 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if 12693 something goes wrong. DECL may also be a _TYPE node, rather than a 12694 DECL, if there is no DECL available. */ 12695 12696 tree 12697 check_default_argument (tree decl, tree arg, tsubst_flags_t complain) 12698 { 12699 tree var; 12700 tree decl_type; 12701 12702 if (TREE_CODE (arg) == DEFAULT_ARG) 12703 /* We get a DEFAULT_ARG when looking at an in-class declaration 12704 with a default argument. Ignore the argument for now; we'll 12705 deal with it after the class is complete. */ 12706 return arg; 12707 12708 if (TYPE_P (decl)) 12709 { 12710 decl_type = decl; 12711 decl = NULL_TREE; 12712 } 12713 else 12714 decl_type = TREE_TYPE (decl); 12715 12716 if (arg == error_mark_node 12717 || decl == error_mark_node 12718 || TREE_TYPE (arg) == error_mark_node 12719 || decl_type == error_mark_node) 12720 /* Something already went wrong. There's no need to check 12721 further. */ 12722 return error_mark_node; 12723 12724 /* [dcl.fct.default] 12725 12726 A default argument expression is implicitly converted to the 12727 parameter type. */ 12728 ++cp_unevaluated_operand; 12729 /* Avoid digest_init clobbering the initializer. */ 12730 tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg; 12731 perform_implicit_conversion_flags (decl_type, carg, complain, 12732 LOOKUP_IMPLICIT); 12733 --cp_unevaluated_operand; 12734 12735 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at 12736 the call sites. */ 12737 if (TYPE_PTR_OR_PTRMEM_P (decl_type) 12738 && null_ptr_cst_p (arg)) 12739 return nullptr_node; 12740 12741 /* [dcl.fct.default] 12742 12743 Local variables shall not be used in default argument 12744 expressions. 12745 12746 The keyword `this' shall not be used in a default argument of a 12747 member function. */ 12748 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL); 12749 if (var) 12750 { 12751 if (complain & tf_warning_or_error) 12752 { 12753 if (DECL_NAME (var) == this_identifier) 12754 permerror (input_location, "default argument %qE uses %qD", 12755 arg, var); 12756 else 12757 error ("default argument %qE uses local variable %qD", arg, var); 12758 } 12759 return error_mark_node; 12760 } 12761 12762 /* All is well. */ 12763 return arg; 12764 } 12765 12766 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */ 12767 12768 static tree 12769 type_is_deprecated (tree type) 12770 { 12771 enum tree_code code; 12772 if (TREE_DEPRECATED (type)) 12773 return type; 12774 if (TYPE_NAME (type)) 12775 { 12776 if (TREE_DEPRECATED (TYPE_NAME (type))) 12777 return type; 12778 else 12779 return NULL_TREE; 12780 } 12781 12782 /* Do warn about using typedefs to a deprecated class. */ 12783 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type)) 12784 return type_is_deprecated (TYPE_MAIN_VARIANT (type)); 12785 12786 code = TREE_CODE (type); 12787 12788 if (code == POINTER_TYPE || code == REFERENCE_TYPE 12789 || code == OFFSET_TYPE || code == FUNCTION_TYPE 12790 || code == METHOD_TYPE || code == ARRAY_TYPE) 12791 return type_is_deprecated (TREE_TYPE (type)); 12792 12793 if (TYPE_PTRMEMFUNC_P (type)) 12794 return type_is_deprecated 12795 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type)))); 12796 12797 return NULL_TREE; 12798 } 12799 12800 /* Decode the list of parameter types for a function type. 12801 Given the list of things declared inside the parens, 12802 return a list of types. 12803 12804 If this parameter does not end with an ellipsis, we append 12805 void_list_node. 12806 12807 *PARMS is set to the chain of PARM_DECLs created. */ 12808 12809 tree 12810 grokparms (tree parmlist, tree *parms) 12811 { 12812 tree result = NULL_TREE; 12813 tree decls = NULL_TREE; 12814 tree parm; 12815 int any_error = 0; 12816 12817 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm)) 12818 { 12819 tree type = NULL_TREE; 12820 tree init = TREE_PURPOSE (parm); 12821 tree decl = TREE_VALUE (parm); 12822 12823 if (parm == void_list_node) 12824 break; 12825 12826 if (! decl || TREE_TYPE (decl) == error_mark_node) 12827 continue; 12828 12829 type = TREE_TYPE (decl); 12830 if (VOID_TYPE_P (type)) 12831 { 12832 if (same_type_p (type, void_type_node) 12833 && !init 12834 && !DECL_NAME (decl) && !result 12835 && TREE_CHAIN (parm) == void_list_node) 12836 /* DR 577: A parameter list consisting of a single 12837 unnamed parameter of non-dependent type 'void'. */ 12838 break; 12839 else if (cv_qualified_p (type)) 12840 error_at (DECL_SOURCE_LOCATION (decl), 12841 "invalid use of cv-qualified type %qT in " 12842 "parameter declaration", type); 12843 else 12844 error_at (DECL_SOURCE_LOCATION (decl), 12845 "invalid use of type %<void%> in parameter " 12846 "declaration"); 12847 /* It's not a good idea to actually create parameters of 12848 type `void'; other parts of the compiler assume that a 12849 void type terminates the parameter list. */ 12850 type = error_mark_node; 12851 TREE_TYPE (decl) = error_mark_node; 12852 } 12853 12854 if (type != error_mark_node) 12855 { 12856 if (deprecated_state != DEPRECATED_SUPPRESS) 12857 { 12858 tree deptype = type_is_deprecated (type); 12859 if (deptype) 12860 cp_warn_deprecated_use (deptype); 12861 } 12862 12863 /* Top-level qualifiers on the parameters are 12864 ignored for function types. */ 12865 type = cp_build_qualified_type (type, 0); 12866 if (TREE_CODE (type) == METHOD_TYPE) 12867 { 12868 error ("parameter %qD invalidly declared method type", decl); 12869 type = build_pointer_type (type); 12870 TREE_TYPE (decl) = type; 12871 } 12872 else if (abstract_virtuals_error (decl, type)) 12873 any_error = 1; /* Seems like a good idea. */ 12874 else if (cxx_dialect < cxx17 && POINTER_TYPE_P (type)) 12875 { 12876 /* Before C++17 DR 393: 12877 [dcl.fct]/6, parameter types cannot contain pointers 12878 (references) to arrays of unknown bound. */ 12879 tree t = TREE_TYPE (type); 12880 int ptr = TYPE_PTR_P (type); 12881 12882 while (1) 12883 { 12884 if (TYPE_PTR_P (t)) 12885 ptr = 1; 12886 else if (TREE_CODE (t) != ARRAY_TYPE) 12887 break; 12888 else if (!TYPE_DOMAIN (t)) 12889 break; 12890 t = TREE_TYPE (t); 12891 } 12892 if (TREE_CODE (t) == ARRAY_TYPE) 12893 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic, 12894 ptr 12895 ? G_("parameter %qD includes pointer to array of " 12896 "unknown bound %qT") 12897 : G_("parameter %qD includes reference to array of " 12898 "unknown bound %qT"), 12899 decl, t); 12900 } 12901 12902 if (any_error) 12903 init = NULL_TREE; 12904 else if (init && !processing_template_decl) 12905 init = check_default_argument (decl, init, tf_warning_or_error); 12906 } 12907 12908 DECL_CHAIN (decl) = decls; 12909 decls = decl; 12910 result = tree_cons (init, type, result); 12911 } 12912 decls = nreverse (decls); 12913 result = nreverse (result); 12914 if (parm) 12915 result = chainon (result, void_list_node); 12916 *parms = decls; 12917 12918 return result; 12919 } 12920 12921 12922 /* D is a constructor or overloaded `operator='. 12923 12924 Let T be the class in which D is declared. Then, this function 12925 returns: 12926 12927 -1 if D's is an ill-formed constructor or copy assignment operator 12928 whose first parameter is of type `T'. 12929 0 if D is not a copy constructor or copy assignment 12930 operator. 12931 1 if D is a copy constructor or copy assignment operator whose 12932 first parameter is a reference to non-const qualified T. 12933 2 if D is a copy constructor or copy assignment operator whose 12934 first parameter is a reference to const qualified T. 12935 12936 This function can be used as a predicate. Positive values indicate 12937 a copy constructor and nonzero values indicate a copy assignment 12938 operator. */ 12939 12940 int 12941 copy_fn_p (const_tree d) 12942 { 12943 tree args; 12944 tree arg_type; 12945 int result = 1; 12946 12947 gcc_assert (DECL_FUNCTION_MEMBER_P (d)); 12948 12949 if (TREE_CODE (d) == TEMPLATE_DECL 12950 || (DECL_TEMPLATE_INFO (d) 12951 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))) 12952 /* Instantiations of template member functions are never copy 12953 functions. Note that member functions of templated classes are 12954 represented as template functions internally, and we must 12955 accept those as copy functions. */ 12956 return 0; 12957 12958 args = FUNCTION_FIRST_USER_PARMTYPE (d); 12959 if (!args) 12960 return 0; 12961 12962 arg_type = TREE_VALUE (args); 12963 if (arg_type == error_mark_node) 12964 return 0; 12965 12966 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d)) 12967 { 12968 /* Pass by value copy assignment operator. */ 12969 result = -1; 12970 } 12971 else if (TREE_CODE (arg_type) == REFERENCE_TYPE 12972 && !TYPE_REF_IS_RVALUE (arg_type) 12973 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d)) 12974 { 12975 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type))) 12976 result = 2; 12977 } 12978 else 12979 return 0; 12980 12981 args = TREE_CHAIN (args); 12982 12983 if (args && args != void_list_node && !TREE_PURPOSE (args)) 12984 /* There are more non-optional args. */ 12985 return 0; 12986 12987 return result; 12988 } 12989 12990 /* D is a constructor or overloaded `operator='. 12991 12992 Let T be the class in which D is declared. Then, this function 12993 returns true when D is a move constructor or move assignment 12994 operator, false otherwise. */ 12995 12996 bool 12997 move_fn_p (const_tree d) 12998 { 12999 gcc_assert (DECL_FUNCTION_MEMBER_P (d)); 13000 13001 if (cxx_dialect == cxx98) 13002 /* There are no move constructors if we are in C++98 mode. */ 13003 return false; 13004 13005 if (TREE_CODE (d) == TEMPLATE_DECL 13006 || (DECL_TEMPLATE_INFO (d) 13007 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d)))) 13008 /* Instantiations of template member functions are never move 13009 functions. Note that member functions of templated classes are 13010 represented as template functions internally, and we must 13011 accept those as move functions. */ 13012 return 0; 13013 13014 return move_signature_fn_p (d); 13015 } 13016 13017 /* D is a constructor or overloaded `operator='. 13018 13019 Then, this function returns true when D has the same signature as a move 13020 constructor or move assignment operator (because either it is such a 13021 ctor/op= or it is a template specialization with the same signature), 13022 false otherwise. */ 13023 13024 bool 13025 move_signature_fn_p (const_tree d) 13026 { 13027 tree args; 13028 tree arg_type; 13029 bool result = false; 13030 13031 args = FUNCTION_FIRST_USER_PARMTYPE (d); 13032 if (!args) 13033 return 0; 13034 13035 arg_type = TREE_VALUE (args); 13036 if (arg_type == error_mark_node) 13037 return 0; 13038 13039 if (TREE_CODE (arg_type) == REFERENCE_TYPE 13040 && TYPE_REF_IS_RVALUE (arg_type) 13041 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)), 13042 DECL_CONTEXT (d))) 13043 result = true; 13044 13045 args = TREE_CHAIN (args); 13046 13047 if (args && args != void_list_node && !TREE_PURPOSE (args)) 13048 /* There are more non-optional args. */ 13049 return false; 13050 13051 return result; 13052 } 13053 13054 /* Remember any special properties of member function DECL. */ 13055 13056 void 13057 grok_special_member_properties (tree decl) 13058 { 13059 tree class_type; 13060 13061 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl)) 13062 return; 13063 13064 class_type = DECL_CONTEXT (decl); 13065 if (IDENTIFIER_CTOR_P (DECL_NAME (decl))) 13066 { 13067 int ctor = copy_fn_p (decl); 13068 13069 if (!DECL_ARTIFICIAL (decl)) 13070 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1; 13071 13072 if (ctor > 0) 13073 { 13074 /* [class.copy] 13075 13076 A non-template constructor for class X is a copy 13077 constructor if its first parameter is of type X&, const 13078 X&, volatile X& or const volatile X&, and either there 13079 are no other parameters or else all other parameters have 13080 default arguments. */ 13081 TYPE_HAS_COPY_CTOR (class_type) = 1; 13082 if (user_provided_p (decl)) 13083 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1; 13084 if (ctor > 1) 13085 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1; 13086 } 13087 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl))) 13088 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1; 13089 else if (move_fn_p (decl) && user_provided_p (decl)) 13090 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1; 13091 else if (is_list_ctor (decl)) 13092 TYPE_HAS_LIST_CTOR (class_type) = 1; 13093 13094 if (DECL_DECLARED_CONSTEXPR_P (decl) 13095 && !ctor && !move_fn_p (decl)) 13096 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1; 13097 } 13098 else if (DECL_NAME (decl) == assign_op_identifier) 13099 { 13100 /* [class.copy] 13101 13102 A non-template assignment operator for class X is a copy 13103 assignment operator if its parameter is of type X, X&, const 13104 X&, volatile X& or const volatile X&. */ 13105 13106 int assop = copy_fn_p (decl); 13107 13108 if (assop) 13109 { 13110 TYPE_HAS_COPY_ASSIGN (class_type) = 1; 13111 if (user_provided_p (decl)) 13112 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1; 13113 if (assop != 1) 13114 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1; 13115 } 13116 else if (move_fn_p (decl) && user_provided_p (decl)) 13117 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1; 13118 } 13119 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl))) 13120 TYPE_HAS_CONVERSION (class_type) = true; 13121 13122 /* Destructors are handled in check_methods. */ 13123 } 13124 13125 /* Check a constructor DECL has the correct form. Complains 13126 if the class has a constructor of the form X(X). */ 13127 13128 bool 13129 grok_ctor_properties (const_tree ctype, const_tree decl) 13130 { 13131 int ctor_parm = copy_fn_p (decl); 13132 13133 if (ctor_parm < 0) 13134 { 13135 /* [class.copy] 13136 13137 A declaration of a constructor for a class X is ill-formed if 13138 its first parameter is of type (optionally cv-qualified) X 13139 and either there are no other parameters or else all other 13140 parameters have default arguments. 13141 13142 We *don't* complain about member template instantiations that 13143 have this form, though; they can occur as we try to decide 13144 what constructor to use during overload resolution. Since 13145 overload resolution will never prefer such a constructor to 13146 the non-template copy constructor (which is either explicitly 13147 or implicitly defined), there's no need to worry about their 13148 existence. Theoretically, they should never even be 13149 instantiated, but that's hard to forestall. */ 13150 error ("invalid constructor; you probably meant %<%T (const %T&)%>", 13151 ctype, ctype); 13152 return false; 13153 } 13154 13155 return true; 13156 } 13157 13158 /* DECL is a declaration for an overloaded or conversion operator. If 13159 COMPLAIN is true, errors are issued for invalid declarations. */ 13160 13161 bool 13162 grok_op_properties (tree decl, bool complain) 13163 { 13164 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl)); 13165 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE; 13166 tree name = DECL_NAME (decl); 13167 13168 tree class_type = DECL_CONTEXT (decl); 13169 if (class_type && !CLASS_TYPE_P (class_type)) 13170 class_type = NULL_TREE; 13171 13172 tree_code operator_code; 13173 unsigned op_flags; 13174 if (IDENTIFIER_CONV_OP_P (name)) 13175 { 13176 /* Conversion operators are TYPE_EXPR for the purposes of this 13177 function. */ 13178 operator_code = TYPE_EXPR; 13179 op_flags = OVL_OP_FLAG_UNARY; 13180 } 13181 else 13182 { 13183 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name); 13184 13185 operator_code = ovl_op->tree_code; 13186 op_flags = ovl_op->flags; 13187 gcc_checking_assert (operator_code != ERROR_MARK); 13188 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code; 13189 } 13190 13191 if (op_flags & OVL_OP_FLAG_ALLOC) 13192 { 13193 /* operator new and operator delete are quite special. */ 13194 if (class_type) 13195 switch (op_flags) 13196 { 13197 case OVL_OP_FLAG_ALLOC: 13198 TYPE_HAS_NEW_OPERATOR (class_type) = 1; 13199 break; 13200 13201 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE: 13202 TYPE_GETS_DELETE (class_type) |= 1; 13203 break; 13204 13205 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC: 13206 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1; 13207 break; 13208 13209 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC: 13210 TYPE_GETS_DELETE (class_type) |= 2; 13211 break; 13212 13213 default: 13214 gcc_unreachable (); 13215 } 13216 13217 /* [basic.std.dynamic.allocation]/1: 13218 13219 A program is ill-formed if an allocation function is declared 13220 in a namespace scope other than global scope or declared 13221 static in global scope. 13222 13223 The same also holds true for deallocation functions. */ 13224 if (DECL_NAMESPACE_SCOPE_P (decl)) 13225 { 13226 if (CP_DECL_CONTEXT (decl) != global_namespace) 13227 { 13228 error ("%qD may not be declared within a namespace", decl); 13229 return false; 13230 } 13231 13232 if (!TREE_PUBLIC (decl)) 13233 { 13234 error ("%qD may not be declared as static", decl); 13235 return false; 13236 } 13237 } 13238 13239 if (op_flags & OVL_OP_FLAG_DELETE) 13240 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl)); 13241 else 13242 { 13243 DECL_IS_OPERATOR_NEW (decl) = 1; 13244 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl)); 13245 } 13246 13247 return true; 13248 } 13249 13250 /* An operator function must either be a non-static member function 13251 or have at least one parameter of a class, a reference to a class, 13252 an enumeration, or a reference to an enumeration. 13.4.0.6 */ 13253 if (! methodp || DECL_STATIC_FUNCTION_P (decl)) 13254 { 13255 if (operator_code == TYPE_EXPR 13256 || operator_code == CALL_EXPR 13257 || operator_code == COMPONENT_REF 13258 || operator_code == ARRAY_REF 13259 || operator_code == NOP_EXPR) 13260 { 13261 error ("%qD must be a nonstatic member function", decl); 13262 return false; 13263 } 13264 13265 if (DECL_STATIC_FUNCTION_P (decl)) 13266 { 13267 error ("%qD must be either a non-static member " 13268 "function or a non-member function", decl); 13269 return false; 13270 } 13271 13272 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg)) 13273 { 13274 if (!arg || arg == void_list_node) 13275 { 13276 if (complain) 13277 error ("%qD must have an argument of class or " 13278 "enumerated type", decl); 13279 return false; 13280 } 13281 13282 tree type = non_reference (TREE_VALUE (arg)); 13283 if (type == error_mark_node) 13284 return false; 13285 13286 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used 13287 because these checks are performed even on template 13288 functions. */ 13289 if (MAYBE_CLASS_TYPE_P (type) 13290 || TREE_CODE (type) == ENUMERAL_TYPE) 13291 break; 13292 } 13293 } 13294 13295 if (operator_code == CALL_EXPR) 13296 /* There are no further restrictions on the arguments to an overloaded 13297 "operator ()". */ 13298 return true; 13299 13300 if (operator_code == COND_EXPR) 13301 { 13302 /* 13.4.0.3 */ 13303 error ("ISO C++ prohibits overloading operator ?:"); 13304 return false; 13305 } 13306 13307 /* Count the number of arguments and check for ellipsis. */ 13308 int arity = 0; 13309 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg)) 13310 { 13311 if (!arg) 13312 { 13313 /* Variadic. */ 13314 error ("%qD must not have variable number of arguments", decl); 13315 return false; 13316 } 13317 ++arity; 13318 } 13319 13320 /* Verify correct number of arguments. */ 13321 switch (op_flags) 13322 { 13323 case OVL_OP_FLAG_AMBIARY: 13324 if (arity == 1) 13325 { 13326 /* We have a unary instance of an ambi-ary op. Remap to the 13327 unary one. */ 13328 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]]; 13329 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt]; 13330 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY); 13331 operator_code = ovl_op->tree_code; 13332 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code; 13333 } 13334 else if (arity != 2) 13335 { 13336 /* This was an ambiguous operator but is invalid. */ 13337 error (methodp 13338 ? G_("%qD must have either zero or one argument") 13339 : G_("%qD must have either one or two arguments"), decl); 13340 return false; 13341 } 13342 else if ((operator_code == POSTINCREMENT_EXPR 13343 || operator_code == POSTDECREMENT_EXPR) 13344 && ! processing_template_decl 13345 /* x++ and x--'s second argument must be an int. */ 13346 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)), 13347 integer_type_node)) 13348 { 13349 error (methodp 13350 ? G_("postfix %qD must have %<int%> as its argument") 13351 : G_("postfix %qD must have %<int%> as its second argument"), 13352 decl); 13353 return false; 13354 } 13355 break; 13356 13357 case OVL_OP_FLAG_UNARY: 13358 if (arity != 1) 13359 { 13360 error (methodp 13361 ? G_("%qD must have no arguments") 13362 : G_("%qD must have exactly one argument"), decl); 13363 return false; 13364 } 13365 break; 13366 13367 case OVL_OP_FLAG_BINARY: 13368 if (arity != 2) 13369 { 13370 error (methodp 13371 ? G_("%qD must have exactly one argument") 13372 : G_("%qD must have exactly two arguments"), decl); 13373 return false; 13374 } 13375 break; 13376 13377 default: 13378 gcc_unreachable (); 13379 } 13380 13381 /* There can be no default arguments. */ 13382 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg)) 13383 if (TREE_PURPOSE (arg)) 13384 { 13385 TREE_PURPOSE (arg) = NULL_TREE; 13386 if (operator_code == POSTINCREMENT_EXPR 13387 || operator_code == POSTDECREMENT_EXPR) 13388 pedwarn (input_location, OPT_Wpedantic, 13389 "%qD cannot have default arguments", decl); 13390 else 13391 { 13392 error ("%qD cannot have default arguments", decl); 13393 return false; 13394 } 13395 } 13396 13397 /* At this point the declaration is well-formed. It may not be 13398 sensible though. */ 13399 13400 /* Check member function warnings only on the in-class declaration. 13401 There's no point warning on an out-of-class definition. */ 13402 if (class_type && class_type != current_class_type) 13403 return true; 13404 13405 /* Warn about conversion operators that will never be used. */ 13406 if (IDENTIFIER_CONV_OP_P (name) 13407 && ! DECL_TEMPLATE_INFO (decl) 13408 && warn_conversion) 13409 { 13410 tree t = TREE_TYPE (name); 13411 int ref = (TREE_CODE (t) == REFERENCE_TYPE); 13412 13413 if (ref) 13414 t = TYPE_MAIN_VARIANT (TREE_TYPE (t)); 13415 13416 if (VOID_TYPE_P (t)) 13417 warning (OPT_Wconversion, 13418 ref 13419 ? G_("conversion to a reference to void " 13420 "will never use a type conversion operator") 13421 : G_("conversion to void " 13422 "will never use a type conversion operator")); 13423 else if (class_type) 13424 { 13425 if (t == class_type) 13426 warning (OPT_Wconversion, 13427 ref 13428 ? G_("conversion to a reference to the same type " 13429 "will never use a type conversion operator") 13430 : G_("conversion to the same type " 13431 "will never use a type conversion operator")); 13432 /* Don't force t to be complete here. */ 13433 else if (MAYBE_CLASS_TYPE_P (t) 13434 && COMPLETE_TYPE_P (t) 13435 && DERIVED_FROM_P (t, class_type)) 13436 warning (OPT_Wconversion, 13437 ref 13438 ? G_("conversion to a reference to a base class " 13439 "will never use a type conversion operator") 13440 : G_("conversion to a base class " 13441 "will never use a type conversion operator")); 13442 } 13443 } 13444 13445 if (!warn_ecpp) 13446 return true; 13447 13448 /* Effective C++ rules below. */ 13449 13450 /* More Effective C++ rule 7. */ 13451 if (operator_code == TRUTH_ANDIF_EXPR 13452 || operator_code == TRUTH_ORIF_EXPR 13453 || operator_code == COMPOUND_EXPR) 13454 warning (OPT_Weffc__, 13455 "user-defined %qD always evaluates both arguments", decl); 13456 13457 /* More Effective C++ rule 6. */ 13458 if (operator_code == POSTINCREMENT_EXPR 13459 || operator_code == POSTDECREMENT_EXPR 13460 || operator_code == PREINCREMENT_EXPR 13461 || operator_code == PREDECREMENT_EXPR) 13462 { 13463 tree arg = TREE_VALUE (argtypes); 13464 tree ret = TREE_TYPE (TREE_TYPE (decl)); 13465 if (methodp || TREE_CODE (arg) == REFERENCE_TYPE) 13466 arg = TREE_TYPE (arg); 13467 arg = TYPE_MAIN_VARIANT (arg); 13468 13469 if (operator_code == PREINCREMENT_EXPR 13470 || operator_code == PREDECREMENT_EXPR) 13471 { 13472 if (TREE_CODE (ret) != REFERENCE_TYPE 13473 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg)) 13474 warning (OPT_Weffc__, "prefix %qD should return %qT", decl, 13475 build_reference_type (arg)); 13476 } 13477 else 13478 { 13479 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg)) 13480 warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg); 13481 } 13482 } 13483 13484 /* Effective C++ rule 23. */ 13485 if (!DECL_ASSIGNMENT_OPERATOR_P (decl) 13486 && (operator_code == PLUS_EXPR 13487 || operator_code == MINUS_EXPR 13488 || operator_code == TRUNC_DIV_EXPR 13489 || operator_code == MULT_EXPR 13490 || operator_code == TRUNC_MOD_EXPR) 13491 && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE) 13492 warning (OPT_Weffc__, "%qD should return by value", decl); 13493 13494 return true; 13495 } 13496 13497 /* Return a string giving the keyword associate with CODE. */ 13498 13499 static const char * 13500 tag_name (enum tag_types code) 13501 { 13502 switch (code) 13503 { 13504 case record_type: 13505 return "struct"; 13506 case class_type: 13507 return "class"; 13508 case union_type: 13509 return "union"; 13510 case enum_type: 13511 return "enum"; 13512 case typename_type: 13513 return "typename"; 13514 default: 13515 gcc_unreachable (); 13516 } 13517 } 13518 13519 /* Name lookup in an elaborated-type-specifier (after the keyword 13520 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the 13521 elaborated-type-specifier is invalid, issue a diagnostic and return 13522 error_mark_node; otherwise, return the *_TYPE to which it referred. 13523 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */ 13524 13525 tree 13526 check_elaborated_type_specifier (enum tag_types tag_code, 13527 tree decl, 13528 bool allow_template_p) 13529 { 13530 tree type; 13531 13532 /* In the case of: 13533 13534 struct S { struct S *p; }; 13535 13536 name lookup will find the TYPE_DECL for the implicit "S::S" 13537 typedef. Adjust for that here. */ 13538 if (DECL_SELF_REFERENCE_P (decl)) 13539 decl = TYPE_NAME (TREE_TYPE (decl)); 13540 13541 type = TREE_TYPE (decl); 13542 13543 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P 13544 is false for this case as well. */ 13545 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM) 13546 { 13547 error ("using template type parameter %qT after %qs", 13548 type, tag_name (tag_code)); 13549 return error_mark_node; 13550 } 13551 /* Accept template template parameters. */ 13552 else if (allow_template_p 13553 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM 13554 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM)) 13555 ; 13556 /* [dcl.type.elab] 13557 13558 If the identifier resolves to a typedef-name or the 13559 simple-template-id resolves to an alias template 13560 specialization, the elaborated-type-specifier is ill-formed. 13561 13562 In other words, the only legitimate declaration to use in the 13563 elaborated type specifier is the implicit typedef created when 13564 the type is declared. */ 13565 else if (!DECL_IMPLICIT_TYPEDEF_P (decl) 13566 && !DECL_SELF_REFERENCE_P (decl) 13567 && tag_code != typename_type) 13568 { 13569 if (alias_template_specialization_p (type)) 13570 error ("using alias template specialization %qT after %qs", 13571 type, tag_name (tag_code)); 13572 else 13573 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code)); 13574 inform (DECL_SOURCE_LOCATION (decl), 13575 "%qD has a previous declaration here", decl); 13576 return error_mark_node; 13577 } 13578 else if (TREE_CODE (type) != RECORD_TYPE 13579 && TREE_CODE (type) != UNION_TYPE 13580 && tag_code != enum_type 13581 && tag_code != typename_type) 13582 { 13583 error ("%qT referred to as %qs", type, tag_name (tag_code)); 13584 inform (location_of (type), "%qT has a previous declaration here", type); 13585 return error_mark_node; 13586 } 13587 else if (TREE_CODE (type) != ENUMERAL_TYPE 13588 && tag_code == enum_type) 13589 { 13590 error ("%qT referred to as enum", type); 13591 inform (location_of (type), "%qT has a previous declaration here", type); 13592 return error_mark_node; 13593 } 13594 else if (!allow_template_p 13595 && TREE_CODE (type) == RECORD_TYPE 13596 && CLASSTYPE_IS_TEMPLATE (type)) 13597 { 13598 /* If a class template appears as elaborated type specifier 13599 without a template header such as: 13600 13601 template <class T> class C {}; 13602 void f(class C); // No template header here 13603 13604 then the required template argument is missing. */ 13605 error ("template argument required for %<%s %T%>", 13606 tag_name (tag_code), 13607 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))); 13608 return error_mark_node; 13609 } 13610 13611 return type; 13612 } 13613 13614 /* Lookup NAME in elaborate type specifier in scope according to 13615 SCOPE and issue diagnostics if necessary. 13616 Return *_TYPE node upon success, NULL_TREE when the NAME is not 13617 found, and ERROR_MARK_NODE for type error. */ 13618 13619 static tree 13620 lookup_and_check_tag (enum tag_types tag_code, tree name, 13621 tag_scope scope, bool template_header_p) 13622 { 13623 tree t; 13624 tree decl; 13625 if (scope == ts_global) 13626 { 13627 /* First try ordinary name lookup, ignoring hidden class name 13628 injected via friend declaration. */ 13629 decl = lookup_name_prefer_type (name, 2); 13630 decl = strip_using_decl (decl); 13631 /* If that fails, the name will be placed in the smallest 13632 non-class, non-function-prototype scope according to 3.3.1/5. 13633 We may already have a hidden name declared as friend in this 13634 scope. So lookup again but not ignoring hidden names. 13635 If we find one, that name will be made visible rather than 13636 creating a new tag. */ 13637 if (!decl) 13638 decl = lookup_type_scope (name, ts_within_enclosing_non_class); 13639 } 13640 else 13641 decl = lookup_type_scope (name, scope); 13642 13643 if (decl 13644 && (DECL_CLASS_TEMPLATE_P (decl) 13645 /* If scope is ts_current we're defining a class, so ignore a 13646 template template parameter. */ 13647 || (scope != ts_current 13648 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl)))) 13649 decl = DECL_TEMPLATE_RESULT (decl); 13650 13651 if (decl && TREE_CODE (decl) == TYPE_DECL) 13652 { 13653 /* Look for invalid nested type: 13654 class C { 13655 class C {}; 13656 }; */ 13657 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl)) 13658 { 13659 error ("%qD has the same name as the class in which it is " 13660 "declared", 13661 decl); 13662 return error_mark_node; 13663 } 13664 13665 /* Two cases we need to consider when deciding if a class 13666 template is allowed as an elaborated type specifier: 13667 1. It is a self reference to its own class. 13668 2. It comes with a template header. 13669 13670 For example: 13671 13672 template <class T> class C { 13673 class C *c1; // DECL_SELF_REFERENCE_P is true 13674 class D; 13675 }; 13676 template <class U> class C; // template_header_p is true 13677 template <class T> class C<T>::D { 13678 class C *c2; // DECL_SELF_REFERENCE_P is true 13679 }; */ 13680 13681 t = check_elaborated_type_specifier (tag_code, 13682 decl, 13683 template_header_p 13684 | DECL_SELF_REFERENCE_P (decl)); 13685 if (template_header_p && t && CLASS_TYPE_P (t) 13686 && (!CLASSTYPE_TEMPLATE_INFO (t) 13687 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t))))) 13688 { 13689 error ("%qT is not a template", t); 13690 inform (location_of (t), "previous declaration here"); 13691 if (TYPE_CLASS_SCOPE_P (t) 13692 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t))) 13693 inform (input_location, 13694 "perhaps you want to explicitly add %<%T::%>", 13695 TYPE_CONTEXT (t)); 13696 t = error_mark_node; 13697 } 13698 13699 return t; 13700 } 13701 else if (decl && TREE_CODE (decl) == TREE_LIST) 13702 { 13703 error ("reference to %qD is ambiguous", name); 13704 print_candidates (decl); 13705 return error_mark_node; 13706 } 13707 else 13708 return NULL_TREE; 13709 } 13710 13711 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME. 13712 Define the tag as a forward-reference if it is not defined. 13713 13714 If a declaration is given, process it here, and report an error if 13715 multiple declarations are not identical. 13716 13717 SCOPE is TS_CURRENT when this is also a definition. Only look in 13718 the current frame for the name (since C++ allows new names in any 13719 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend 13720 declaration. Only look beginning from the current scope outward up 13721 till the nearest non-class scope. Otherwise it is TS_GLOBAL. 13722 13723 TEMPLATE_HEADER_P is true when this declaration is preceded by 13724 a set of template parameters. */ 13725 13726 static tree 13727 xref_tag_1 (enum tag_types tag_code, tree name, 13728 tag_scope scope, bool template_header_p) 13729 { 13730 enum tree_code code; 13731 tree context = NULL_TREE; 13732 13733 gcc_assert (identifier_p (name)); 13734 13735 switch (tag_code) 13736 { 13737 case record_type: 13738 case class_type: 13739 code = RECORD_TYPE; 13740 break; 13741 case union_type: 13742 code = UNION_TYPE; 13743 break; 13744 case enum_type: 13745 code = ENUMERAL_TYPE; 13746 break; 13747 default: 13748 gcc_unreachable (); 13749 } 13750 13751 /* In case of anonymous name, xref_tag is only called to 13752 make type node and push name. Name lookup is not required. */ 13753 tree t = NULL_TREE; 13754 if (scope != ts_lambda && !anon_aggrname_p (name)) 13755 t = lookup_and_check_tag (tag_code, name, scope, template_header_p); 13756 13757 if (t == error_mark_node) 13758 return error_mark_node; 13759 13760 if (scope != ts_current && t && current_class_type 13761 && template_class_depth (current_class_type) 13762 && template_header_p) 13763 { 13764 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM) 13765 return t; 13766 13767 /* Since SCOPE is not TS_CURRENT, we are not looking at a 13768 definition of this tag. Since, in addition, we are currently 13769 processing a (member) template declaration of a template 13770 class, we must be very careful; consider: 13771 13772 template <class X> struct S1 13773 13774 template <class U> struct S2 13775 { 13776 template <class V> friend struct S1; 13777 }; 13778 13779 Here, the S2::S1 declaration should not be confused with the 13780 outer declaration. In particular, the inner version should 13781 have a template parameter of level 2, not level 1. 13782 13783 On the other hand, when presented with: 13784 13785 template <class T> struct S1 13786 { 13787 template <class U> struct S2 {}; 13788 template <class U> friend struct S2; 13789 }; 13790 13791 the friend must find S1::S2 eventually. We accomplish this 13792 by making sure that the new type we create to represent this 13793 declaration has the right TYPE_CONTEXT. */ 13794 context = TYPE_CONTEXT (t); 13795 t = NULL_TREE; 13796 } 13797 13798 if (! t) 13799 { 13800 /* If no such tag is yet defined, create a forward-reference node 13801 and record it as the "definition". 13802 When a real declaration of this type is found, 13803 the forward-reference will be altered into a real type. */ 13804 if (code == ENUMERAL_TYPE) 13805 { 13806 error ("use of enum %q#D without previous declaration", name); 13807 return error_mark_node; 13808 } 13809 else 13810 { 13811 t = make_class_type (code); 13812 TYPE_CONTEXT (t) = context; 13813 if (scope == ts_lambda) 13814 { 13815 /* Mark it as a lambda type. */ 13816 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node; 13817 /* And push it into current scope. */ 13818 scope = ts_current; 13819 } 13820 t = pushtag (name, t, scope); 13821 } 13822 } 13823 else 13824 { 13825 if (template_header_p && MAYBE_CLASS_TYPE_P (t)) 13826 { 13827 /* Check that we aren't trying to overload a class with different 13828 constraints. */ 13829 tree constr = NULL_TREE; 13830 if (current_template_parms) 13831 { 13832 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms); 13833 constr = build_constraints (reqs, NULL_TREE); 13834 } 13835 if (!redeclare_class_template (t, current_template_parms, constr)) 13836 return error_mark_node; 13837 } 13838 else if (!processing_template_decl 13839 && CLASS_TYPE_P (t) 13840 && CLASSTYPE_IS_TEMPLATE (t)) 13841 { 13842 error ("redeclaration of %qT as a non-template", t); 13843 inform (location_of (t), "previous declaration %qD", t); 13844 return error_mark_node; 13845 } 13846 13847 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t)) 13848 { 13849 /* This is no longer an invisible friend. Make it 13850 visible. */ 13851 tree decl = TYPE_NAME (t); 13852 13853 DECL_ANTICIPATED (decl) = false; 13854 DECL_FRIEND_P (decl) = false; 13855 13856 if (TYPE_TEMPLATE_INFO (t)) 13857 { 13858 tree tmpl = TYPE_TI_TEMPLATE (t); 13859 DECL_ANTICIPATED (tmpl) = false; 13860 DECL_FRIEND_P (tmpl) = false; 13861 } 13862 } 13863 } 13864 13865 return t; 13866 } 13867 13868 /* Wrapper for xref_tag_1. */ 13869 13870 tree 13871 xref_tag (enum tag_types tag_code, tree name, 13872 tag_scope scope, bool template_header_p) 13873 { 13874 tree ret; 13875 bool subtime; 13876 subtime = timevar_cond_start (TV_NAME_LOOKUP); 13877 ret = xref_tag_1 (tag_code, name, scope, template_header_p); 13878 timevar_cond_stop (TV_NAME_LOOKUP, subtime); 13879 return ret; 13880 } 13881 13882 13883 tree 13884 xref_tag_from_type (tree old, tree id, tag_scope scope) 13885 { 13886 enum tag_types tag_kind; 13887 13888 if (TREE_CODE (old) == RECORD_TYPE) 13889 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type); 13890 else 13891 tag_kind = union_type; 13892 13893 if (id == NULL_TREE) 13894 id = TYPE_IDENTIFIER (old); 13895 13896 return xref_tag (tag_kind, id, scope, false); 13897 } 13898 13899 /* Create the binfo hierarchy for REF with (possibly NULL) base list 13900 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an 13901 access_* node, and the TREE_VALUE is the type of the base-class. 13902 Non-NULL TREE_TYPE indicates virtual inheritance. */ 13903 13904 void 13905 xref_basetypes (tree ref, tree base_list) 13906 { 13907 tree *basep; 13908 tree binfo, base_binfo; 13909 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */ 13910 unsigned max_bases = 0; /* Maximum direct bases. */ 13911 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */ 13912 int i; 13913 tree default_access; 13914 tree igo_prev; /* Track Inheritance Graph Order. */ 13915 13916 if (ref == error_mark_node) 13917 return; 13918 13919 /* The base of a derived class is private by default, all others are 13920 public. */ 13921 default_access = (TREE_CODE (ref) == RECORD_TYPE 13922 && CLASSTYPE_DECLARED_CLASS (ref) 13923 ? access_private_node : access_public_node); 13924 13925 /* First, make sure that any templates in base-classes are 13926 instantiated. This ensures that if we call ourselves recursively 13927 we do not get confused about which classes are marked and which 13928 are not. */ 13929 basep = &base_list; 13930 while (*basep) 13931 { 13932 tree basetype = TREE_VALUE (*basep); 13933 13934 /* The dependent_type_p call below should really be dependent_scope_p 13935 so that we give a hard error about using an incomplete type as a 13936 base, but we allow it with a pedwarn for backward 13937 compatibility. */ 13938 if (processing_template_decl 13939 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype)) 13940 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN); 13941 if (!dependent_type_p (basetype) 13942 && !complete_type_or_else (basetype, NULL)) 13943 /* An incomplete type. Remove it from the list. */ 13944 *basep = TREE_CHAIN (*basep); 13945 else 13946 { 13947 max_bases++; 13948 if (TREE_TYPE (*basep)) 13949 max_dvbases++; 13950 if (CLASS_TYPE_P (basetype)) 13951 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype)); 13952 basep = &TREE_CHAIN (*basep); 13953 } 13954 } 13955 max_vbases += max_dvbases; 13956 13957 TYPE_MARKED_P (ref) = 1; 13958 13959 /* The binfo slot should be empty, unless this is an (ill-formed) 13960 redefinition. */ 13961 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref)); 13962 13963 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref); 13964 13965 binfo = make_tree_binfo (max_bases); 13966 13967 TYPE_BINFO (ref) = binfo; 13968 BINFO_OFFSET (binfo) = size_zero_node; 13969 BINFO_TYPE (binfo) = ref; 13970 13971 /* Apply base-class info set up to the variants of this type. */ 13972 fixup_type_variants (ref); 13973 13974 if (max_bases) 13975 { 13976 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases); 13977 /* A C++98 POD cannot have base classes. */ 13978 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true; 13979 13980 if (TREE_CODE (ref) == UNION_TYPE) 13981 { 13982 error ("derived union %qT invalid", ref); 13983 return; 13984 } 13985 } 13986 13987 if (max_bases > 1) 13988 warning (OPT_Wmultiple_inheritance, 13989 "%qT defined with multiple direct bases", ref); 13990 13991 if (max_vbases) 13992 { 13993 /* An aggregate can't have virtual base classes. */ 13994 CLASSTYPE_NON_AGGREGATE (ref) = true; 13995 13996 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases); 13997 13998 if (max_dvbases) 13999 warning (OPT_Wvirtual_inheritance, 14000 "%qT defined with direct virtual base", ref); 14001 } 14002 14003 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list)) 14004 { 14005 tree access = TREE_PURPOSE (base_list); 14006 int via_virtual = TREE_TYPE (base_list) != NULL_TREE; 14007 tree basetype = TREE_VALUE (base_list); 14008 14009 if (access == access_default_node) 14010 access = default_access; 14011 14012 /* Before C++17, an aggregate cannot have base classes. In C++17, an 14013 aggregate can't have virtual, private, or protected base classes. */ 14014 if (cxx_dialect < cxx17 14015 || access != access_public_node 14016 || via_virtual) 14017 CLASSTYPE_NON_AGGREGATE (ref) = true; 14018 14019 if (PACK_EXPANSION_P (basetype)) 14020 basetype = PACK_EXPANSION_PATTERN (basetype); 14021 if (TREE_CODE (basetype) == TYPE_DECL) 14022 basetype = TREE_TYPE (basetype); 14023 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE) 14024 { 14025 error ("base type %qT fails to be a struct or class type", 14026 basetype); 14027 goto dropped_base; 14028 } 14029 14030 base_binfo = NULL_TREE; 14031 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype)) 14032 { 14033 base_binfo = TYPE_BINFO (basetype); 14034 /* The original basetype could have been a typedef'd type. */ 14035 basetype = BINFO_TYPE (base_binfo); 14036 14037 /* Inherit flags from the base. */ 14038 TYPE_HAS_NEW_OPERATOR (ref) 14039 |= TYPE_HAS_NEW_OPERATOR (basetype); 14040 TYPE_HAS_ARRAY_NEW_OPERATOR (ref) 14041 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype); 14042 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype); 14043 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype); 14044 CLASSTYPE_DIAMOND_SHAPED_P (ref) 14045 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype); 14046 CLASSTYPE_REPEATED_BASE_P (ref) 14047 |= CLASSTYPE_REPEATED_BASE_P (basetype); 14048 } 14049 14050 /* We must do this test after we've seen through a typedef 14051 type. */ 14052 if (TYPE_MARKED_P (basetype)) 14053 { 14054 if (basetype == ref) 14055 error ("recursive type %qT undefined", basetype); 14056 else 14057 error ("duplicate base type %qT invalid", basetype); 14058 goto dropped_base; 14059 } 14060 14061 if (PACK_EXPANSION_P (TREE_VALUE (base_list))) 14062 /* Regenerate the pack expansion for the bases. */ 14063 basetype = make_pack_expansion (basetype); 14064 14065 TYPE_MARKED_P (basetype) = 1; 14066 14067 base_binfo = copy_binfo (base_binfo, basetype, ref, 14068 &igo_prev, via_virtual); 14069 if (!BINFO_INHERITANCE_CHAIN (base_binfo)) 14070 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo; 14071 14072 BINFO_BASE_APPEND (binfo, base_binfo); 14073 BINFO_BASE_ACCESS_APPEND (binfo, access); 14074 continue; 14075 14076 dropped_base: 14077 /* Update max_vbases to reflect the reality that we are dropping 14078 this base: if it reaches zero we want to undo the vec_alloc 14079 above to avoid inconsistencies during error-recovery: eg, in 14080 build_special_member_call, CLASSTYPE_VBASECLASSES non null 14081 and vtt null (c++/27952). */ 14082 if (via_virtual) 14083 max_vbases--; 14084 if (CLASS_TYPE_P (basetype)) 14085 max_vbases 14086 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype)); 14087 } 14088 14089 if (CLASSTYPE_VBASECLASSES (ref) 14090 && max_vbases == 0) 14091 vec_free (CLASSTYPE_VBASECLASSES (ref)); 14092 14093 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases) 14094 /* If we didn't get max_vbases vbases, we must have shared at 14095 least one of them, and are therefore diamond shaped. */ 14096 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1; 14097 14098 /* Unmark all the types. */ 14099 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++) 14100 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0; 14101 TYPE_MARKED_P (ref) = 0; 14102 14103 /* Now see if we have a repeated base type. */ 14104 if (!CLASSTYPE_REPEATED_BASE_P (ref)) 14105 { 14106 for (base_binfo = binfo; base_binfo; 14107 base_binfo = TREE_CHAIN (base_binfo)) 14108 { 14109 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo))) 14110 { 14111 CLASSTYPE_REPEATED_BASE_P (ref) = 1; 14112 break; 14113 } 14114 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1; 14115 } 14116 for (base_binfo = binfo; base_binfo; 14117 base_binfo = TREE_CHAIN (base_binfo)) 14118 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo))) 14119 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0; 14120 else 14121 break; 14122 } 14123 } 14124 14125 14126 /* Copies the enum-related properties from type SRC to type DST. 14127 Used with the underlying type of an enum and the enum itself. */ 14128 static void 14129 copy_type_enum (tree dst, tree src) 14130 { 14131 tree t; 14132 for (t = dst; t; t = TYPE_NEXT_VARIANT (t)) 14133 { 14134 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src); 14135 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src); 14136 TYPE_SIZE (t) = TYPE_SIZE (src); 14137 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src); 14138 SET_TYPE_MODE (dst, TYPE_MODE (src)); 14139 TYPE_PRECISION (t) = TYPE_PRECISION (src); 14140 unsigned valign = TYPE_ALIGN (src); 14141 if (TYPE_USER_ALIGN (t)) 14142 valign = MAX (valign, TYPE_ALIGN (t)); 14143 else 14144 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src); 14145 SET_TYPE_ALIGN (t, valign); 14146 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src); 14147 } 14148 } 14149 14150 /* Begin compiling the definition of an enumeration type. 14151 NAME is its name, 14152 14153 if ENUMTYPE is not NULL_TREE then the type has alredy been found. 14154 14155 UNDERLYING_TYPE is the type that will be used as the storage for 14156 the enumeration type. This should be NULL_TREE if no storage type 14157 was specified. 14158 14159 ATTRIBUTES are any attributes specified after the enum-key. 14160 14161 SCOPED_ENUM_P is true if this is a scoped enumeration type. 14162 14163 if IS_NEW is not NULL, gets TRUE iff a new type is created. 14164 14165 Returns the type object, as yet incomplete. 14166 Also records info about it so that build_enumerator 14167 may be used to declare the individual values as they are read. */ 14168 14169 tree 14170 start_enum (tree name, tree enumtype, tree underlying_type, 14171 tree attributes, bool scoped_enum_p, bool *is_new) 14172 { 14173 tree prevtype = NULL_TREE; 14174 gcc_assert (identifier_p (name)); 14175 14176 if (is_new) 14177 *is_new = false; 14178 /* [C++0x dcl.enum]p5: 14179 14180 If not explicitly specified, the underlying type of a scoped 14181 enumeration type is int. */ 14182 if (!underlying_type && scoped_enum_p) 14183 underlying_type = integer_type_node; 14184 14185 if (underlying_type) 14186 underlying_type = cv_unqualified (underlying_type); 14187 14188 /* If this is the real definition for a previous forward reference, 14189 fill in the contents in the same object that used to be the 14190 forward reference. */ 14191 if (!enumtype) 14192 enumtype = lookup_and_check_tag (enum_type, name, 14193 /*tag_scope=*/ts_current, 14194 /*template_header_p=*/false); 14195 14196 /* In case of a template_decl, the only check that should be deferred 14197 to instantiation time is the comparison of underlying types. */ 14198 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE) 14199 { 14200 if (scoped_enum_p != SCOPED_ENUM_P (enumtype)) 14201 { 14202 error_at (input_location, "scoped/unscoped mismatch " 14203 "in enum %q#T", enumtype); 14204 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)), 14205 "previous definition here"); 14206 enumtype = error_mark_node; 14207 } 14208 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type) 14209 { 14210 error_at (input_location, "underlying type mismatch " 14211 "in enum %q#T", enumtype); 14212 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)), 14213 "previous definition here"); 14214 enumtype = error_mark_node; 14215 } 14216 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype) 14217 && !dependent_type_p (underlying_type) 14218 && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype)) 14219 && !same_type_p (underlying_type, 14220 ENUM_UNDERLYING_TYPE (enumtype))) 14221 { 14222 error_at (input_location, "different underlying type " 14223 "in enum %q#T", enumtype); 14224 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)), 14225 "previous definition here"); 14226 underlying_type = NULL_TREE; 14227 } 14228 } 14229 14230 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE 14231 || processing_template_decl) 14232 { 14233 /* In case of error, make a dummy enum to allow parsing to 14234 continue. */ 14235 if (enumtype == error_mark_node) 14236 { 14237 name = make_anon_name (); 14238 enumtype = NULL_TREE; 14239 } 14240 14241 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition 14242 of an opaque enum, or an opaque enum of an already defined 14243 enumeration (C++0x only). 14244 In any other case, it'll be NULL_TREE. */ 14245 if (!enumtype) 14246 { 14247 if (is_new) 14248 *is_new = true; 14249 } 14250 prevtype = enumtype; 14251 14252 /* Do not push the decl more than once, unless we need to 14253 compare underlying types at instantiation time */ 14254 if (!enumtype 14255 || TREE_CODE (enumtype) != ENUMERAL_TYPE 14256 || (underlying_type 14257 && dependent_type_p (underlying_type)) 14258 || (ENUM_UNDERLYING_TYPE (enumtype) 14259 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype)))) 14260 { 14261 enumtype = cxx_make_type (ENUMERAL_TYPE); 14262 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current); 14263 14264 /* std::byte aliases anything. */ 14265 if (enumtype != error_mark_node 14266 && TYPE_CONTEXT (enumtype) == std_node 14267 && !strcmp ("byte", TYPE_NAME_STRING (enumtype))) 14268 TYPE_ALIAS_SET (enumtype) = 0; 14269 } 14270 else 14271 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current, 14272 false); 14273 14274 if (enumtype == error_mark_node) 14275 return error_mark_node; 14276 14277 /* The enum is considered opaque until the opening '{' of the 14278 enumerator list. */ 14279 SET_OPAQUE_ENUM_P (enumtype, true); 14280 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type; 14281 } 14282 14283 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p); 14284 14285 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE); 14286 14287 if (underlying_type) 14288 { 14289 if (ENUM_UNDERLYING_TYPE (enumtype)) 14290 /* We already checked that it matches, don't change it to a different 14291 typedef variant. */; 14292 else if (CP_INTEGRAL_TYPE_P (underlying_type)) 14293 { 14294 copy_type_enum (enumtype, underlying_type); 14295 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type; 14296 } 14297 else if (dependent_type_p (underlying_type)) 14298 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type; 14299 else 14300 error ("underlying type %qT of %qT must be an integral type", 14301 underlying_type, enumtype); 14302 } 14303 14304 /* If into a template class, the returned enum is always the first 14305 declaration (opaque or not) seen. This way all the references to 14306 this type will be to the same declaration. The following ones are used 14307 only to check for definition errors. */ 14308 if (prevtype && processing_template_decl) 14309 return prevtype; 14310 else 14311 return enumtype; 14312 } 14313 14314 /* After processing and defining all the values of an enumeration type, 14315 install their decls in the enumeration type. 14316 ENUMTYPE is the type object. */ 14317 14318 void 14319 finish_enum_value_list (tree enumtype) 14320 { 14321 tree values; 14322 tree underlying_type; 14323 tree decl; 14324 tree value; 14325 tree minnode, maxnode; 14326 tree t; 14327 14328 bool fixed_underlying_type_p 14329 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE; 14330 14331 /* We built up the VALUES in reverse order. */ 14332 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype)); 14333 14334 /* For an enum defined in a template, just set the type of the values; 14335 all further processing is postponed until the template is 14336 instantiated. We need to set the type so that tsubst of a CONST_DECL 14337 works. */ 14338 if (processing_template_decl) 14339 { 14340 for (values = TYPE_VALUES (enumtype); 14341 values; 14342 values = TREE_CHAIN (values)) 14343 TREE_TYPE (TREE_VALUE (values)) = enumtype; 14344 return; 14345 } 14346 14347 /* Determine the minimum and maximum values of the enumerators. */ 14348 if (TYPE_VALUES (enumtype)) 14349 { 14350 minnode = maxnode = NULL_TREE; 14351 14352 for (values = TYPE_VALUES (enumtype); 14353 values; 14354 values = TREE_CHAIN (values)) 14355 { 14356 decl = TREE_VALUE (values); 14357 14358 /* [dcl.enum]: Following the closing brace of an enum-specifier, 14359 each enumerator has the type of its enumeration. Prior to the 14360 closing brace, the type of each enumerator is the type of its 14361 initializing value. */ 14362 TREE_TYPE (decl) = enumtype; 14363 14364 /* Update the minimum and maximum values, if appropriate. */ 14365 value = DECL_INITIAL (decl); 14366 if (value == error_mark_node) 14367 value = integer_zero_node; 14368 /* Figure out what the minimum and maximum values of the 14369 enumerators are. */ 14370 if (!minnode) 14371 minnode = maxnode = value; 14372 else if (tree_int_cst_lt (maxnode, value)) 14373 maxnode = value; 14374 else if (tree_int_cst_lt (value, minnode)) 14375 minnode = value; 14376 } 14377 } 14378 else 14379 /* [dcl.enum] 14380 14381 If the enumerator-list is empty, the underlying type is as if 14382 the enumeration had a single enumerator with value 0. */ 14383 minnode = maxnode = integer_zero_node; 14384 14385 if (!fixed_underlying_type_p) 14386 { 14387 /* Compute the number of bits require to represent all values of the 14388 enumeration. We must do this before the type of MINNODE and 14389 MAXNODE are transformed, since tree_int_cst_min_precision relies 14390 on the TREE_TYPE of the value it is passed. */ 14391 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED; 14392 int lowprec = tree_int_cst_min_precision (minnode, sgn); 14393 int highprec = tree_int_cst_min_precision (maxnode, sgn); 14394 int precision = MAX (lowprec, highprec); 14395 unsigned int itk; 14396 bool use_short_enum; 14397 14398 /* Determine the underlying type of the enumeration. 14399 14400 [dcl.enum] 14401 14402 The underlying type of an enumeration is an integral type that 14403 can represent all the enumerator values defined in the 14404 enumeration. It is implementation-defined which integral type is 14405 used as the underlying type for an enumeration except that the 14406 underlying type shall not be larger than int unless the value of 14407 an enumerator cannot fit in an int or unsigned int. 14408 14409 We use "int" or an "unsigned int" as the underlying type, even if 14410 a smaller integral type would work, unless the user has 14411 explicitly requested that we use the smallest possible type. The 14412 user can request that for all enumerations with a command line 14413 flag, or for just one enumeration with an attribute. */ 14414 14415 use_short_enum = flag_short_enums 14416 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype)); 14417 14418 /* If the precision of the type was specified with an attribute and it 14419 was too small, give an error. Otherwise, use it. */ 14420 if (TYPE_PRECISION (enumtype)) 14421 { 14422 if (precision > TYPE_PRECISION (enumtype)) 14423 error ("specified mode too small for enumeral values"); 14424 else 14425 { 14426 use_short_enum = true; 14427 precision = TYPE_PRECISION (enumtype); 14428 } 14429 } 14430 14431 for (itk = (use_short_enum ? itk_char : itk_int); 14432 itk != itk_none; 14433 itk++) 14434 { 14435 underlying_type = integer_types[itk]; 14436 if (underlying_type != NULL_TREE 14437 && TYPE_PRECISION (underlying_type) >= precision 14438 && TYPE_SIGN (underlying_type) == sgn) 14439 break; 14440 } 14441 if (itk == itk_none) 14442 { 14443 /* DR 377 14444 14445 IF no integral type can represent all the enumerator values, the 14446 enumeration is ill-formed. */ 14447 error ("no integral type can represent all of the enumerator values " 14448 "for %qT", enumtype); 14449 precision = TYPE_PRECISION (long_long_integer_type_node); 14450 underlying_type = integer_types[itk_unsigned_long_long]; 14451 } 14452 14453 /* [dcl.enum] 14454 14455 The value of sizeof() applied to an enumeration type, an object 14456 of an enumeration type, or an enumerator, is the value of sizeof() 14457 applied to the underlying type. */ 14458 copy_type_enum (enumtype, underlying_type); 14459 14460 /* Compute the minimum and maximum values for the type. 14461 14462 [dcl.enum] 14463 14464 For an enumeration where emin is the smallest enumerator and emax 14465 is the largest, the values of the enumeration are the values of the 14466 underlying type in the range bmin to bmax, where bmin and bmax are, 14467 respectively, the smallest and largest values of the smallest bit- 14468 field that can store emin and emax. */ 14469 14470 /* The middle-end currently assumes that types with TYPE_PRECISION 14471 narrower than their underlying type are suitably zero or sign 14472 extended to fill their mode. Similarly, it assumes that the front 14473 end assures that a value of a particular type must be within 14474 TYPE_MIN_VALUE and TYPE_MAX_VALUE. 14475 14476 We used to set these fields based on bmin and bmax, but that led 14477 to invalid assumptions like optimizing away bounds checking. So 14478 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and 14479 TYPE_MAX_VALUE to the values for the mode above and only restrict 14480 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */ 14481 ENUM_UNDERLYING_TYPE (enumtype) 14482 = build_distinct_type_copy (underlying_type); 14483 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision; 14484 set_min_and_max_values_for_integral_type 14485 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn); 14486 14487 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */ 14488 if (flag_strict_enums) 14489 set_min_and_max_values_for_integral_type (enumtype, precision, sgn); 14490 } 14491 else 14492 underlying_type = ENUM_UNDERLYING_TYPE (enumtype); 14493 14494 /* Convert each of the enumerators to the type of the underlying 14495 type of the enumeration. */ 14496 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values)) 14497 { 14498 location_t saved_location; 14499 14500 decl = TREE_VALUE (values); 14501 saved_location = input_location; 14502 input_location = DECL_SOURCE_LOCATION (decl); 14503 if (fixed_underlying_type_p) 14504 /* If the enumeration type has a fixed underlying type, we 14505 already checked all of the enumerator values. */ 14506 value = DECL_INITIAL (decl); 14507 else 14508 value = perform_implicit_conversion (underlying_type, 14509 DECL_INITIAL (decl), 14510 tf_warning_or_error); 14511 input_location = saved_location; 14512 14513 /* Do not clobber shared ints. */ 14514 if (value != error_mark_node) 14515 { 14516 value = copy_node (value); 14517 14518 TREE_TYPE (value) = enumtype; 14519 } 14520 DECL_INITIAL (decl) = value; 14521 } 14522 14523 /* Fix up all variant types of this enum type. */ 14524 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t)) 14525 TYPE_VALUES (t) = TYPE_VALUES (enumtype); 14526 14527 if (at_class_scope_p () 14528 && COMPLETE_TYPE_P (current_class_type) 14529 && UNSCOPED_ENUM_P (enumtype)) 14530 { 14531 insert_late_enum_def_bindings (current_class_type, enumtype); 14532 /* TYPE_FIELDS needs fixup. */ 14533 fixup_type_variants (current_class_type); 14534 } 14535 14536 /* Finish debugging output for this type. */ 14537 rest_of_type_compilation (enumtype, namespace_bindings_p ()); 14538 14539 /* Each enumerator now has the type of its enumeration. Clear the cache 14540 so that this change in types doesn't confuse us later on. */ 14541 clear_cv_and_fold_caches (); 14542 } 14543 14544 /* Finishes the enum type. This is called only the first time an 14545 enumeration is seen, be it opaque or odinary. 14546 ENUMTYPE is the type object. */ 14547 14548 void 14549 finish_enum (tree enumtype) 14550 { 14551 if (processing_template_decl) 14552 { 14553 if (at_function_scope_p ()) 14554 add_stmt (build_min (TAG_DEFN, enumtype)); 14555 return; 14556 } 14557 14558 /* If this is a forward declaration, there should not be any variants, 14559 though we can get a variant in the middle of an enum-specifier with 14560 wacky code like 'enum E { e = sizeof(const E*) };' */ 14561 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype) 14562 && (TYPE_VALUES (enumtype) 14563 || !TYPE_NEXT_VARIANT (enumtype))); 14564 } 14565 14566 /* Build and install a CONST_DECL for an enumeration constant of the 14567 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided. 14568 Apply ATTRIBUTES if available. LOC is the location of NAME. 14569 Assignment of sequential values by default is handled here. */ 14570 14571 void 14572 build_enumerator (tree name, tree value, tree enumtype, tree attributes, 14573 location_t loc) 14574 { 14575 tree decl; 14576 tree context; 14577 tree type; 14578 14579 /* scalar_constant_value will pull out this expression, so make sure 14580 it's folded as appropriate. */ 14581 if (processing_template_decl) 14582 value = fold_non_dependent_expr (value); 14583 14584 /* If the VALUE was erroneous, pretend it wasn't there; that will 14585 result in the enum being assigned the next value in sequence. */ 14586 if (value == error_mark_node) 14587 value = NULL_TREE; 14588 14589 /* Remove no-op casts from the value. */ 14590 if (value) 14591 STRIP_TYPE_NOPS (value); 14592 14593 if (! processing_template_decl) 14594 { 14595 /* Validate and default VALUE. */ 14596 if (value != NULL_TREE) 14597 { 14598 if (!ENUM_UNDERLYING_TYPE (enumtype)) 14599 { 14600 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM, 14601 value, true); 14602 if (tmp_value) 14603 value = tmp_value; 14604 } 14605 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P 14606 (TREE_TYPE (value))) 14607 value = perform_implicit_conversion_flags 14608 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error, 14609 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING); 14610 14611 if (value == error_mark_node) 14612 value = NULL_TREE; 14613 14614 if (value != NULL_TREE) 14615 { 14616 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P 14617 (TREE_TYPE (value))) 14618 { 14619 error ("enumerator value for %qD must have integral or " 14620 "unscoped enumeration type", name); 14621 value = NULL_TREE; 14622 } 14623 else 14624 { 14625 value = cxx_constant_value (value); 14626 14627 if (TREE_CODE (value) != INTEGER_CST) 14628 { 14629 error ("enumerator value for %qD is not an integer " 14630 "constant", name); 14631 value = NULL_TREE; 14632 } 14633 } 14634 } 14635 } 14636 14637 /* Default based on previous value. */ 14638 if (value == NULL_TREE) 14639 { 14640 if (TYPE_VALUES (enumtype)) 14641 { 14642 tree prev_value; 14643 bool overflowed; 14644 14645 /* C++03 7.2/4: If no initializer is specified for the first 14646 enumerator, the type is an unspecified integral 14647 type. Otherwise the type is the same as the type of the 14648 initializing value of the preceding enumerator unless the 14649 incremented value is not representable in that type, in 14650 which case the type is an unspecified integral type 14651 sufficient to contain the incremented value. */ 14652 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype))); 14653 if (error_operand_p (prev_value)) 14654 value = error_mark_node; 14655 else 14656 { 14657 tree type = TREE_TYPE (prev_value); 14658 signop sgn = TYPE_SIGN (type); 14659 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn, 14660 &overflowed); 14661 if (!overflowed) 14662 { 14663 bool pos = !wi::neg_p (wi, sgn); 14664 if (!wi::fits_to_tree_p (wi, type)) 14665 { 14666 unsigned int itk; 14667 for (itk = itk_int; itk != itk_none; itk++) 14668 { 14669 type = integer_types[itk]; 14670 if (type != NULL_TREE 14671 && (pos || !TYPE_UNSIGNED (type)) 14672 && wi::fits_to_tree_p (wi, type)) 14673 break; 14674 } 14675 if (type && cxx_dialect < cxx11 14676 && itk > itk_unsigned_long) 14677 pedwarn (input_location, OPT_Wlong_long, 14678 pos ? G_("\ 14679 incremented enumerator value is too large for %<unsigned long%>") : G_("\ 14680 incremented enumerator value is too large for %<long%>")); 14681 } 14682 if (type == NULL_TREE) 14683 overflowed = true; 14684 else 14685 value = wide_int_to_tree (type, wi); 14686 } 14687 14688 if (overflowed) 14689 { 14690 error ("overflow in enumeration values at %qD", name); 14691 value = error_mark_node; 14692 } 14693 } 14694 } 14695 else 14696 value = integer_zero_node; 14697 } 14698 14699 /* Remove no-op casts from the value. */ 14700 STRIP_TYPE_NOPS (value); 14701 14702 /* If the underlying type of the enum is fixed, check whether 14703 the enumerator values fits in the underlying type. If it 14704 does not fit, the program is ill-formed [C++0x dcl.enum]. */ 14705 if (ENUM_UNDERLYING_TYPE (enumtype) 14706 && value 14707 && TREE_CODE (value) == INTEGER_CST) 14708 { 14709 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype))) 14710 error ("enumerator value %qE is outside the range of underlying " 14711 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype)); 14712 14713 /* Convert the value to the appropriate type. */ 14714 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value); 14715 } 14716 } 14717 14718 /* C++ associates enums with global, function, or class declarations. */ 14719 context = current_scope (); 14720 14721 /* Build the actual enumeration constant. Note that the enumeration 14722 constants have the underlying type of the enum (if it is fixed) 14723 or the type of their initializer (if the underlying type of the 14724 enum is not fixed): 14725 14726 [ C++0x dcl.enum ] 14727 14728 If the underlying type is fixed, the type of each enumerator 14729 prior to the closing brace is the underlying type; if the 14730 initializing value of an enumerator cannot be represented by 14731 the underlying type, the program is ill-formed. If the 14732 underlying type is not fixed, the type of each enumerator is 14733 the type of its initializing value. 14734 14735 If the underlying type is not fixed, it will be computed by 14736 finish_enum and we will reset the type of this enumerator. Of 14737 course, if we're processing a template, there may be no value. */ 14738 type = value ? TREE_TYPE (value) : NULL_TREE; 14739 14740 decl = build_decl (loc, CONST_DECL, name, type); 14741 14742 DECL_CONTEXT (decl) = enumtype; 14743 TREE_CONSTANT (decl) = 1; 14744 TREE_READONLY (decl) = 1; 14745 DECL_INITIAL (decl) = value; 14746 14747 if (attributes) 14748 cplus_decl_attributes (&decl, attributes, 0); 14749 14750 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype)) 14751 { 14752 /* In something like `struct S { enum E { i = 7 }; };' we put `i' 14753 on the TYPE_FIELDS list for `S'. (That's so that you can say 14754 things like `S::i' later.) */ 14755 14756 /* The enumerator may be getting declared outside of its enclosing 14757 class, like so: 14758 14759 class S { public: enum E : int; }; enum S::E : int { i = 7; }; 14760 14761 For which case we need to make sure that the access of `S::i' 14762 matches the access of `S::E'. */ 14763 tree saved_cas = current_access_specifier; 14764 if (TREE_PRIVATE (TYPE_NAME (enumtype))) 14765 current_access_specifier = access_private_node; 14766 else if (TREE_PROTECTED (TYPE_NAME (enumtype))) 14767 current_access_specifier = access_protected_node; 14768 else 14769 current_access_specifier = access_public_node; 14770 14771 finish_member_declaration (decl); 14772 14773 current_access_specifier = saved_cas; 14774 } 14775 else 14776 pushdecl (decl); 14777 14778 /* Add this enumeration constant to the list for this type. */ 14779 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype)); 14780 } 14781 14782 /* Look for an enumerator with the given NAME within the enumeration 14783 type ENUMTYPE. This routine is used primarily for qualified name 14784 lookup into an enumerator in C++0x, e.g., 14785 14786 enum class Color { Red, Green, Blue }; 14787 14788 Color color = Color::Red; 14789 14790 Returns the value corresponding to the enumerator, or 14791 NULL_TREE if no such enumerator was found. */ 14792 tree 14793 lookup_enumerator (tree enumtype, tree name) 14794 { 14795 tree e; 14796 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE); 14797 14798 e = purpose_member (name, TYPE_VALUES (enumtype)); 14799 return e? TREE_VALUE (e) : NULL_TREE; 14800 } 14801 14802 14803 /* We're defining DECL. Make sure that its type is OK. */ 14804 14805 static void 14806 check_function_type (tree decl, tree current_function_parms) 14807 { 14808 tree fntype = TREE_TYPE (decl); 14809 tree return_type = complete_type (TREE_TYPE (fntype)); 14810 14811 /* In a function definition, arg types must be complete. */ 14812 require_complete_types_for_parms (current_function_parms); 14813 14814 if (dependent_type_p (return_type) 14815 || type_uses_auto (return_type)) 14816 return; 14817 if (!COMPLETE_OR_VOID_TYPE_P (return_type)) 14818 { 14819 tree args = TYPE_ARG_TYPES (fntype); 14820 14821 error ("return type %q#T is incomplete", return_type); 14822 14823 /* Make it return void instead. */ 14824 if (TREE_CODE (fntype) == METHOD_TYPE) 14825 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)), 14826 void_type_node, 14827 TREE_CHAIN (args)); 14828 else 14829 fntype = build_function_type (void_type_node, args); 14830 fntype 14831 = build_exception_variant (fntype, 14832 TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl))); 14833 fntype = (cp_build_type_attribute_variant 14834 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl)))); 14835 TREE_TYPE (decl) = fntype; 14836 } 14837 else 14838 { 14839 abstract_virtuals_error (decl, TREE_TYPE (fntype)); 14840 maybe_warn_parm_abi (TREE_TYPE (fntype), 14841 DECL_SOURCE_LOCATION (decl)); 14842 } 14843 } 14844 14845 /* True iff FN is an implicitly-defined default constructor. */ 14846 14847 static bool 14848 implicit_default_ctor_p (tree fn) 14849 { 14850 return (DECL_CONSTRUCTOR_P (fn) 14851 && !user_provided_p (fn) 14852 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn))); 14853 } 14854 14855 /* Clobber the contents of *this to let the back end know that the object 14856 storage is dead when we enter the constructor or leave the destructor. */ 14857 14858 static tree 14859 build_clobber_this () 14860 { 14861 /* Clobbering an empty base is pointless, and harmful if its one byte 14862 TYPE_SIZE overlays real data. */ 14863 if (is_empty_class (current_class_type)) 14864 return void_node; 14865 14866 /* If we have virtual bases, clobber the whole object, but only if we're in 14867 charge. If we don't have virtual bases, clobber the as-base type so we 14868 don't mess with tail padding. */ 14869 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type); 14870 14871 tree ctype = current_class_type; 14872 if (!vbases) 14873 ctype = CLASSTYPE_AS_BASE (ctype); 14874 14875 tree clobber = build_constructor (ctype, NULL); 14876 TREE_THIS_VOLATILE (clobber) = true; 14877 14878 tree thisref = current_class_ref; 14879 if (ctype != current_class_type) 14880 { 14881 thisref = build_nop (build_reference_type (ctype), current_class_ptr); 14882 thisref = convert_from_reference (thisref); 14883 } 14884 14885 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber); 14886 if (vbases) 14887 exprstmt = build_if_in_charge (exprstmt); 14888 14889 return exprstmt; 14890 } 14891 14892 /* Create the FUNCTION_DECL for a function definition. 14893 DECLSPECS and DECLARATOR are the parts of the declaration; 14894 they describe the function's name and the type it returns, 14895 but twisted together in a fashion that parallels the syntax of C. 14896 14897 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the 14898 DECLARATOR is really the DECL for the function we are about to 14899 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE 14900 indicating that the function is an inline defined in-class. 14901 14902 This function creates a binding context for the function body 14903 as well as setting up the FUNCTION_DECL in current_function_decl. 14904 14905 For C++, we must first check whether that datum makes any sense. 14906 For example, "class A local_a(1,2);" means that variable local_a 14907 is an aggregate of type A, which should have a constructor 14908 applied to it with the argument list [1, 2]. 14909 14910 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node, 14911 or may be a BLOCK if the function has been defined previously 14912 in this translation unit. On exit, DECL_INITIAL (decl1) will be 14913 error_mark_node if the function has never been defined, or 14914 a BLOCK if the function has been defined somewhere. */ 14915 14916 bool 14917 start_preparsed_function (tree decl1, tree attrs, int flags) 14918 { 14919 tree ctype = NULL_TREE; 14920 tree fntype; 14921 tree restype; 14922 int doing_friend = 0; 14923 cp_binding_level *bl; 14924 tree current_function_parms; 14925 struct c_fileinfo *finfo 14926 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1))); 14927 bool honor_interface; 14928 14929 /* Sanity check. */ 14930 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node))); 14931 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE); 14932 14933 fntype = TREE_TYPE (decl1); 14934 if (TREE_CODE (fntype) == METHOD_TYPE) 14935 ctype = TYPE_METHOD_BASETYPE (fntype); 14936 14937 /* ISO C++ 11.4/5. A friend function defined in a class is in 14938 the (lexical) scope of the class in which it is defined. */ 14939 if (!ctype && DECL_FRIEND_P (decl1)) 14940 { 14941 ctype = DECL_FRIEND_CONTEXT (decl1); 14942 14943 /* CTYPE could be null here if we're dealing with a template; 14944 for example, `inline friend float foo()' inside a template 14945 will have no CTYPE set. */ 14946 if (ctype && TREE_CODE (ctype) != RECORD_TYPE) 14947 ctype = NULL_TREE; 14948 else 14949 doing_friend = 1; 14950 } 14951 14952 if (DECL_DECLARED_INLINE_P (decl1) 14953 && lookup_attribute ("noinline", attrs)) 14954 warning_at (DECL_SOURCE_LOCATION (decl1), 0, 14955 "inline function %qD given attribute noinline", decl1); 14956 14957 /* Handle gnu_inline attribute. */ 14958 if (GNU_INLINE_P (decl1)) 14959 { 14960 DECL_EXTERNAL (decl1) = 1; 14961 DECL_NOT_REALLY_EXTERN (decl1) = 0; 14962 DECL_INTERFACE_KNOWN (decl1) = 1; 14963 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1; 14964 } 14965 14966 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1)) 14967 /* This is a constructor, we must ensure that any default args 14968 introduced by this definition are propagated to the clones 14969 now. The clones are used directly in overload resolution. */ 14970 adjust_clone_args (decl1); 14971 14972 /* Sometimes we don't notice that a function is a static member, and 14973 build a METHOD_TYPE for it. Fix that up now. */ 14974 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1) 14975 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE)); 14976 14977 /* Set up current_class_type, and enter the scope of the class, if 14978 appropriate. */ 14979 if (ctype) 14980 push_nested_class (ctype); 14981 else if (DECL_STATIC_FUNCTION_P (decl1)) 14982 push_nested_class (DECL_CONTEXT (decl1)); 14983 14984 /* Now that we have entered the scope of the class, we must restore 14985 the bindings for any template parameters surrounding DECL1, if it 14986 is an inline member template. (Order is important; consider the 14987 case where a template parameter has the same name as a field of 14988 the class.) It is not until after this point that 14989 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */ 14990 if (flags & SF_INCLASS_INLINE) 14991 maybe_begin_member_template_processing (decl1); 14992 14993 /* Effective C++ rule 15. */ 14994 if (warn_ecpp 14995 && DECL_ASSIGNMENT_OPERATOR_P (decl1) 14996 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR) 14997 && VOID_TYPE_P (TREE_TYPE (fntype))) 14998 warning (OPT_Weffc__, 14999 "%<operator=%> should return a reference to %<*this%>"); 15000 15001 /* Make the init_value nonzero so pushdecl knows this is not tentative. 15002 error_mark_node is replaced below (in poplevel) with the BLOCK. */ 15003 if (!DECL_INITIAL (decl1)) 15004 DECL_INITIAL (decl1) = error_mark_node; 15005 15006 /* This function exists in static storage. 15007 (This does not mean `static' in the C sense!) */ 15008 TREE_STATIC (decl1) = 1; 15009 15010 /* We must call push_template_decl after current_class_type is set 15011 up. (If we are processing inline definitions after exiting a 15012 class scope, current_class_type will be NULL_TREE until set above 15013 by push_nested_class.) */ 15014 if (processing_template_decl) 15015 { 15016 tree newdecl1 = push_template_decl (decl1); 15017 if (newdecl1 == error_mark_node) 15018 { 15019 if (ctype || DECL_STATIC_FUNCTION_P (decl1)) 15020 pop_nested_class (); 15021 return false; 15022 } 15023 decl1 = newdecl1; 15024 } 15025 15026 /* Make sure the parameter and return types are reasonable. When 15027 you declare a function, these types can be incomplete, but they 15028 must be complete when you define the function. */ 15029 check_function_type (decl1, DECL_ARGUMENTS (decl1)); 15030 15031 /* Build the return declaration for the function. */ 15032 restype = TREE_TYPE (fntype); 15033 15034 if (DECL_RESULT (decl1) == NULL_TREE) 15035 { 15036 tree resdecl; 15037 15038 resdecl = build_decl (input_location, RESULT_DECL, 0, restype); 15039 DECL_ARTIFICIAL (resdecl) = 1; 15040 DECL_IGNORED_P (resdecl) = 1; 15041 DECL_RESULT (decl1) = resdecl; 15042 15043 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl); 15044 } 15045 15046 /* Record the decl so that the function name is defined. 15047 If we already have a decl for this name, and it is a FUNCTION_DECL, 15048 use the old decl. */ 15049 if (!processing_template_decl && !(flags & SF_PRE_PARSED)) 15050 { 15051 /* A specialization is not used to guide overload resolution. */ 15052 if (!DECL_FUNCTION_MEMBER_P (decl1) 15053 && !(DECL_USE_TEMPLATE (decl1) && 15054 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1)))) 15055 { 15056 tree olddecl = pushdecl (decl1); 15057 15058 if (olddecl == error_mark_node) 15059 /* If something went wrong when registering the declaration, 15060 use DECL1; we have to have a FUNCTION_DECL to use when 15061 parsing the body of the function. */ 15062 ; 15063 else 15064 { 15065 /* Otherwise, OLDDECL is either a previous declaration 15066 of the same function or DECL1 itself. */ 15067 15068 if (warn_missing_declarations 15069 && olddecl == decl1 15070 && !DECL_MAIN_P (decl1) 15071 && TREE_PUBLIC (decl1) 15072 && !DECL_DECLARED_INLINE_P (decl1)) 15073 { 15074 tree context; 15075 15076 /* Check whether DECL1 is in an anonymous 15077 namespace. */ 15078 for (context = DECL_CONTEXT (decl1); 15079 context; 15080 context = DECL_CONTEXT (context)) 15081 { 15082 if (TREE_CODE (context) == NAMESPACE_DECL 15083 && DECL_NAME (context) == NULL_TREE) 15084 break; 15085 } 15086 15087 if (context == NULL) 15088 warning_at (DECL_SOURCE_LOCATION (decl1), 15089 OPT_Wmissing_declarations, 15090 "no previous declaration for %qD", decl1); 15091 } 15092 15093 decl1 = olddecl; 15094 } 15095 } 15096 else 15097 { 15098 /* We need to set the DECL_CONTEXT. */ 15099 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1)) 15100 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1)); 15101 } 15102 fntype = TREE_TYPE (decl1); 15103 restype = TREE_TYPE (fntype); 15104 15105 /* If #pragma weak applies, mark the decl appropriately now. 15106 The pragma only applies to global functions. Because 15107 determining whether or not the #pragma applies involves 15108 computing the mangled name for the declaration, we cannot 15109 apply the pragma until after we have merged this declaration 15110 with any previous declarations; if the original declaration 15111 has a linkage specification, that specification applies to 15112 the definition as well, and may affect the mangled name. */ 15113 if (DECL_FILE_SCOPE_P (decl1)) 15114 maybe_apply_pragma_weak (decl1); 15115 } 15116 15117 /* We are now in the scope of the function being defined. */ 15118 current_function_decl = decl1; 15119 15120 /* Save the parm names or decls from this function's declarator 15121 where store_parm_decls will find them. */ 15122 current_function_parms = DECL_ARGUMENTS (decl1); 15123 15124 /* Let the user know we're compiling this function. */ 15125 announce_function (decl1); 15126 15127 gcc_assert (DECL_INITIAL (decl1)); 15128 15129 /* This function may already have been parsed, in which case just 15130 return; our caller will skip over the body without parsing. */ 15131 if (DECL_INITIAL (decl1) != error_mark_node) 15132 return true; 15133 15134 /* Initialize RTL machinery. We cannot do this until 15135 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this 15136 even when processing a template; this is how we get 15137 CFUN set up, and our per-function variables initialized. 15138 FIXME factor out the non-RTL stuff. */ 15139 bl = current_binding_level; 15140 allocate_struct_function (decl1, processing_template_decl); 15141 15142 /* Initialize the language data structures. Whenever we start 15143 a new function, we destroy temporaries in the usual way. */ 15144 cfun->language = ggc_cleared_alloc<language_function> (); 15145 current_stmt_tree ()->stmts_are_full_exprs_p = 1; 15146 current_binding_level = bl; 15147 15148 if (!processing_template_decl && type_uses_auto (restype)) 15149 { 15150 FNDECL_USED_AUTO (decl1) = true; 15151 current_function_auto_return_pattern = restype; 15152 } 15153 15154 /* Start the statement-tree, start the tree now. */ 15155 DECL_SAVED_TREE (decl1) = push_stmt_list (); 15156 15157 /* If we are (erroneously) defining a function that we have already 15158 defined before, wipe out what we knew before. */ 15159 if (!DECL_PENDING_INLINE_P (decl1)) 15160 DECL_SAVED_FUNCTION_DATA (decl1) = NULL; 15161 15162 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1)) 15163 { 15164 /* We know that this was set up by `grokclassfn'. We do not 15165 wait until `store_parm_decls', since evil parse errors may 15166 never get us to that point. Here we keep the consistency 15167 between `current_class_type' and `current_class_ptr'. */ 15168 tree t = DECL_ARGUMENTS (decl1); 15169 15170 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL); 15171 gcc_assert (TYPE_PTR_P (TREE_TYPE (t))); 15172 15173 cp_function_chain->x_current_class_ref 15174 = cp_build_fold_indirect_ref (t); 15175 /* Set this second to avoid shortcut in cp_build_indirect_ref. */ 15176 cp_function_chain->x_current_class_ptr = t; 15177 15178 /* Constructors and destructors need to know whether they're "in 15179 charge" of initializing virtual base classes. */ 15180 t = DECL_CHAIN (t); 15181 if (DECL_HAS_IN_CHARGE_PARM_P (decl1)) 15182 { 15183 current_in_charge_parm = t; 15184 t = DECL_CHAIN (t); 15185 } 15186 if (DECL_HAS_VTT_PARM_P (decl1)) 15187 { 15188 gcc_assert (DECL_NAME (t) == vtt_parm_identifier); 15189 current_vtt_parm = t; 15190 } 15191 } 15192 15193 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1) 15194 /* Implicitly-defined methods (like the 15195 destructor for a class in which no destructor 15196 is explicitly declared) must not be defined 15197 until their definition is needed. So, we 15198 ignore interface specifications for 15199 compiler-generated functions. */ 15200 && !DECL_ARTIFICIAL (decl1)); 15201 15202 if (processing_template_decl) 15203 /* Don't mess with interface flags. */; 15204 else if (DECL_INTERFACE_KNOWN (decl1)) 15205 { 15206 tree ctx = decl_function_context (decl1); 15207 15208 if (DECL_NOT_REALLY_EXTERN (decl1)) 15209 DECL_EXTERNAL (decl1) = 0; 15210 15211 if (ctx != NULL_TREE && vague_linkage_p (ctx)) 15212 /* This is a function in a local class in an extern inline 15213 or template function. */ 15214 comdat_linkage (decl1); 15215 } 15216 /* If this function belongs to an interface, it is public. 15217 If it belongs to someone else's interface, it is also external. 15218 This only affects inlines and template instantiations. */ 15219 else if (!finfo->interface_unknown && honor_interface) 15220 { 15221 if (DECL_DECLARED_INLINE_P (decl1) 15222 || DECL_TEMPLATE_INSTANTIATION (decl1)) 15223 { 15224 DECL_EXTERNAL (decl1) 15225 = (finfo->interface_only 15226 || (DECL_DECLARED_INLINE_P (decl1) 15227 && ! flag_implement_inlines 15228 && !DECL_VINDEX (decl1))); 15229 15230 /* For WIN32 we also want to put these in linkonce sections. */ 15231 maybe_make_one_only (decl1); 15232 } 15233 else 15234 DECL_EXTERNAL (decl1) = 0; 15235 DECL_INTERFACE_KNOWN (decl1) = 1; 15236 /* If this function is in an interface implemented in this file, 15237 make sure that the back end knows to emit this function 15238 here. */ 15239 if (!DECL_EXTERNAL (decl1)) 15240 mark_needed (decl1); 15241 } 15242 else if (finfo->interface_unknown && finfo->interface_only 15243 && honor_interface) 15244 { 15245 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma 15246 interface, we will have both finfo->interface_unknown and 15247 finfo->interface_only set. In that case, we don't want to 15248 use the normal heuristics because someone will supply a 15249 #pragma implementation elsewhere, and deducing it here would 15250 produce a conflict. */ 15251 comdat_linkage (decl1); 15252 DECL_EXTERNAL (decl1) = 0; 15253 DECL_INTERFACE_KNOWN (decl1) = 1; 15254 DECL_DEFER_OUTPUT (decl1) = 1; 15255 } 15256 else 15257 { 15258 /* This is a definition, not a reference. 15259 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */ 15260 if (!GNU_INLINE_P (decl1)) 15261 DECL_EXTERNAL (decl1) = 0; 15262 15263 if ((DECL_DECLARED_INLINE_P (decl1) 15264 || DECL_TEMPLATE_INSTANTIATION (decl1)) 15265 && ! DECL_INTERFACE_KNOWN (decl1)) 15266 DECL_DEFER_OUTPUT (decl1) = 1; 15267 else 15268 DECL_INTERFACE_KNOWN (decl1) = 1; 15269 } 15270 15271 /* Determine the ELF visibility attribute for the function. We must not 15272 do this before calling "pushdecl", as we must allow "duplicate_decls" 15273 to merge any attributes appropriately. We also need to wait until 15274 linkage is set. */ 15275 if (!DECL_CLONED_FUNCTION_P (decl1)) 15276 determine_visibility (decl1); 15277 15278 if (!processing_template_decl) 15279 maybe_instantiate_noexcept (decl1); 15280 15281 begin_scope (sk_function_parms, decl1); 15282 15283 ++function_depth; 15284 15285 if (DECL_DESTRUCTOR_P (decl1) 15286 || (DECL_CONSTRUCTOR_P (decl1) 15287 && targetm.cxx.cdtor_returns_this ())) 15288 { 15289 cdtor_label = create_artificial_label (input_location); 15290 LABEL_DECL_CDTOR (cdtor_label) = true; 15291 } 15292 15293 start_fname_decls (); 15294 15295 store_parm_decls (current_function_parms); 15296 15297 if (!processing_template_decl 15298 && (flag_lifetime_dse > 1) 15299 && DECL_CONSTRUCTOR_P (decl1) 15300 && !DECL_CLONED_FUNCTION_P (decl1) 15301 /* Clobbering an empty base is harmful if it overlays real data. */ 15302 && !is_empty_class (current_class_type) 15303 /* We can't clobber safely for an implicitly-defined default constructor 15304 because part of the initialization might happen before we enter the 15305 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */ 15306 && !implicit_default_ctor_p (decl1)) 15307 finish_expr_stmt (build_clobber_this ()); 15308 15309 if (!processing_template_decl 15310 && DECL_CONSTRUCTOR_P (decl1) 15311 && sanitize_flags_p (SANITIZE_VPTR) 15312 && !DECL_CLONED_FUNCTION_P (decl1) 15313 && !implicit_default_ctor_p (decl1)) 15314 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr); 15315 15316 start_lambda_scope (decl1); 15317 15318 return true; 15319 } 15320 15321 15322 /* Like start_preparsed_function, except that instead of a 15323 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR. 15324 15325 Returns true on success. If the DECLARATOR is not suitable 15326 for a function, we return false, which tells the parser to 15327 skip the entire function. */ 15328 15329 bool 15330 start_function (cp_decl_specifier_seq *declspecs, 15331 const cp_declarator *declarator, 15332 tree attrs) 15333 { 15334 tree decl1; 15335 15336 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs); 15337 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1); 15338 if (decl1 == error_mark_node) 15339 return false; 15340 /* If the declarator is not suitable for a function definition, 15341 cause a syntax error. */ 15342 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL) 15343 { 15344 error ("invalid function declaration"); 15345 return false; 15346 } 15347 15348 if (DECL_MAIN_P (decl1)) 15349 /* main must return int. grokfndecl should have corrected it 15350 (and issued a diagnostic) if the user got it wrong. */ 15351 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)), 15352 integer_type_node)); 15353 15354 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT); 15355 } 15356 15357 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of 15358 FN. */ 15359 15360 static bool 15361 use_eh_spec_block (tree fn) 15362 { 15363 return (flag_exceptions && flag_enforce_eh_specs 15364 && !processing_template_decl 15365 && !type_throw_all_p (TREE_TYPE (fn)) 15366 /* We insert the EH_SPEC_BLOCK only in the original 15367 function; then, it is copied automatically to the 15368 clones. */ 15369 && !DECL_CLONED_FUNCTION_P (fn) 15370 /* Implicitly-generated constructors and destructors have 15371 exception specifications. However, those specifications 15372 are the union of the possible exceptions specified by the 15373 constructors/destructors for bases and members, so no 15374 unallowed exception will ever reach this function. By 15375 not creating the EH_SPEC_BLOCK we save a little memory, 15376 and we avoid spurious warnings about unreachable 15377 code. */ 15378 && !DECL_DEFAULTED_FN (fn)); 15379 } 15380 15381 /* Store the parameter declarations into the current function declaration. 15382 This is called after parsing the parameter declarations, before 15383 digesting the body of the function. 15384 15385 Also install to binding contour return value identifier, if any. */ 15386 15387 static void 15388 store_parm_decls (tree current_function_parms) 15389 { 15390 tree fndecl = current_function_decl; 15391 tree parm; 15392 15393 /* This is a chain of any other decls that came in among the parm 15394 declarations. If a parm is declared with enum {foo, bar} x; 15395 then CONST_DECLs for foo and bar are put here. */ 15396 tree nonparms = NULL_TREE; 15397 15398 if (current_function_parms) 15399 { 15400 /* This case is when the function was defined with an ANSI prototype. 15401 The parms already have decls, so we need not do anything here 15402 except record them as in effect 15403 and complain if any redundant old-style parm decls were written. */ 15404 15405 tree specparms = current_function_parms; 15406 tree next; 15407 15408 /* Must clear this because it might contain TYPE_DECLs declared 15409 at class level. */ 15410 current_binding_level->names = NULL; 15411 15412 /* If we're doing semantic analysis, then we'll call pushdecl 15413 for each of these. We must do them in reverse order so that 15414 they end in the correct forward order. */ 15415 specparms = nreverse (specparms); 15416 15417 for (parm = specparms; parm; parm = next) 15418 { 15419 next = DECL_CHAIN (parm); 15420 if (TREE_CODE (parm) == PARM_DECL) 15421 pushdecl (parm); 15422 else 15423 { 15424 /* If we find an enum constant or a type tag, 15425 put it aside for the moment. */ 15426 TREE_CHAIN (parm) = NULL_TREE; 15427 nonparms = chainon (nonparms, parm); 15428 } 15429 } 15430 15431 /* Get the decls in their original chain order and record in the 15432 function. This is all and only the PARM_DECLs that were 15433 pushed into scope by the loop above. */ 15434 DECL_ARGUMENTS (fndecl) = get_local_decls (); 15435 } 15436 else 15437 DECL_ARGUMENTS (fndecl) = NULL_TREE; 15438 15439 /* Now store the final chain of decls for the arguments 15440 as the decl-chain of the current lexical scope. 15441 Put the enumerators in as well, at the front so that 15442 DECL_ARGUMENTS is not modified. */ 15443 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl)); 15444 15445 if (use_eh_spec_block (current_function_decl)) 15446 current_eh_spec_block = begin_eh_spec_block (); 15447 } 15448 15449 15450 /* We have finished doing semantic analysis on DECL, but have not yet 15451 generated RTL for its body. Save away our current state, so that 15452 when we want to generate RTL later we know what to do. */ 15453 15454 static void 15455 save_function_data (tree decl) 15456 { 15457 struct language_function *f; 15458 15459 /* Save the language-specific per-function data so that we can 15460 get it back when we really expand this function. */ 15461 gcc_assert (!DECL_PENDING_INLINE_P (decl)); 15462 15463 /* Make a copy. */ 15464 f = ggc_alloc<language_function> (); 15465 memcpy (f, cp_function_chain, sizeof (struct language_function)); 15466 DECL_SAVED_FUNCTION_DATA (decl) = f; 15467 15468 /* Clear out the bits we don't need. */ 15469 f->base.x_stmt_tree.x_cur_stmt_list = NULL; 15470 f->bindings = NULL; 15471 f->x_local_names = NULL; 15472 f->base.local_typedefs = NULL; 15473 } 15474 15475 15476 /* Set the return value of the constructor (if present). */ 15477 15478 static void 15479 finish_constructor_body (void) 15480 { 15481 tree val; 15482 tree exprstmt; 15483 15484 if (targetm.cxx.cdtor_returns_this ()) 15485 { 15486 /* Any return from a constructor will end up here. */ 15487 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label)); 15488 15489 val = DECL_ARGUMENTS (current_function_decl); 15490 val = build2 (MODIFY_EXPR, TREE_TYPE (val), 15491 DECL_RESULT (current_function_decl), val); 15492 /* Return the address of the object. */ 15493 exprstmt = build_stmt (input_location, RETURN_EXPR, val); 15494 add_stmt (exprstmt); 15495 } 15496 } 15497 15498 /* Do all the processing for the beginning of a destructor; set up the 15499 vtable pointers and cleanups for bases and members. */ 15500 15501 static void 15502 begin_destructor_body (void) 15503 { 15504 tree compound_stmt; 15505 15506 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already 15507 issued an error message. We still want to try to process the 15508 body of the function, but initialize_vtbl_ptrs will crash if 15509 TYPE_BINFO is NULL. */ 15510 if (COMPLETE_TYPE_P (current_class_type)) 15511 { 15512 compound_stmt = begin_compound_stmt (0); 15513 /* Make all virtual function table pointers in non-virtual base 15514 classes point to CURRENT_CLASS_TYPE's virtual function 15515 tables. */ 15516 initialize_vtbl_ptrs (current_class_ptr); 15517 finish_compound_stmt (compound_stmt); 15518 15519 if (flag_lifetime_dse 15520 /* Clobbering an empty base is harmful if it overlays real data. */ 15521 && !is_empty_class (current_class_type)) 15522 { 15523 if (sanitize_flags_p (SANITIZE_VPTR) 15524 && (flag_sanitize_recover & SANITIZE_VPTR) == 0 15525 && TYPE_CONTAINS_VPTR_P (current_class_type)) 15526 { 15527 tree binfo = TYPE_BINFO (current_class_type); 15528 tree ref 15529 = cp_build_fold_indirect_ref (current_class_ptr); 15530 15531 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo)); 15532 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr)); 15533 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr, 15534 NOP_EXPR, vtbl, 15535 tf_warning_or_error); 15536 finish_decl_cleanup (NULL_TREE, stmt); 15537 } 15538 else 15539 finish_decl_cleanup (NULL_TREE, build_clobber_this ()); 15540 } 15541 15542 /* And insert cleanups for our bases and members so that they 15543 will be properly destroyed if we throw. */ 15544 push_base_cleanups (); 15545 } 15546 } 15547 15548 /* At the end of every destructor we generate code to delete the object if 15549 necessary. Do that now. */ 15550 15551 static void 15552 finish_destructor_body (void) 15553 { 15554 tree exprstmt; 15555 15556 /* Any return from a destructor will end up here; that way all base 15557 and member cleanups will be run when the function returns. */ 15558 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label)); 15559 15560 if (targetm.cxx.cdtor_returns_this ()) 15561 { 15562 tree val; 15563 15564 val = DECL_ARGUMENTS (current_function_decl); 15565 val = build2 (MODIFY_EXPR, TREE_TYPE (val), 15566 DECL_RESULT (current_function_decl), val); 15567 /* Return the address of the object. */ 15568 exprstmt = build_stmt (input_location, RETURN_EXPR, val); 15569 add_stmt (exprstmt); 15570 } 15571 } 15572 15573 /* Do the necessary processing for the beginning of a function body, which 15574 in this case includes member-initializers, but not the catch clauses of 15575 a function-try-block. Currently, this means opening a binding level 15576 for the member-initializers (in a ctor), member cleanups (in a dtor), 15577 and capture proxies (in a lambda operator()). */ 15578 15579 tree 15580 begin_function_body (void) 15581 { 15582 tree stmt; 15583 15584 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl)) 15585 return NULL_TREE; 15586 15587 if (processing_template_decl) 15588 /* Do nothing now. */; 15589 else 15590 /* Always keep the BLOCK node associated with the outermost pair of 15591 curly braces of a function. These are needed for correct 15592 operation of dwarfout.c. */ 15593 keep_next_level (true); 15594 15595 stmt = begin_compound_stmt (BCS_FN_BODY); 15596 15597 if (processing_template_decl) 15598 /* Do nothing now. */; 15599 else if (DECL_DESTRUCTOR_P (current_function_decl)) 15600 begin_destructor_body (); 15601 15602 return stmt; 15603 } 15604 15605 /* Do the processing for the end of a function body. Currently, this means 15606 closing out the cleanups for fully-constructed bases and members, and in 15607 the case of the destructor, deleting the object if desired. Again, this 15608 is only meaningful for [cd]tors, since they are the only functions where 15609 there is a significant distinction between the main body and any 15610 function catch clauses. Handling, say, main() return semantics here 15611 would be wrong, as flowing off the end of a function catch clause for 15612 main() would also need to return 0. */ 15613 15614 void 15615 finish_function_body (tree compstmt) 15616 { 15617 if (compstmt == NULL_TREE) 15618 return; 15619 15620 /* Close the block. */ 15621 finish_compound_stmt (compstmt); 15622 15623 if (processing_template_decl) 15624 /* Do nothing now. */; 15625 else if (DECL_CONSTRUCTOR_P (current_function_decl)) 15626 finish_constructor_body (); 15627 else if (DECL_DESTRUCTOR_P (current_function_decl)) 15628 finish_destructor_body (); 15629 } 15630 15631 /* Given a function, returns the BLOCK corresponding to the outermost level 15632 of curly braces, skipping the artificial block created for constructor 15633 initializers. */ 15634 15635 tree 15636 outer_curly_brace_block (tree fndecl) 15637 { 15638 tree block = DECL_INITIAL (fndecl); 15639 if (BLOCK_OUTER_CURLY_BRACE_P (block)) 15640 return block; 15641 block = BLOCK_SUBBLOCKS (block); 15642 if (BLOCK_OUTER_CURLY_BRACE_P (block)) 15643 return block; 15644 block = BLOCK_SUBBLOCKS (block); 15645 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block)); 15646 return block; 15647 } 15648 15649 /* If FNDECL is a class's key method, add the class to the list of 15650 keyed classes that should be emitted. */ 15651 15652 static void 15653 record_key_method_defined (tree fndecl) 15654 { 15655 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl) 15656 && DECL_VIRTUAL_P (fndecl) 15657 && !processing_template_decl) 15658 { 15659 tree fnclass = DECL_CONTEXT (fndecl); 15660 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass)) 15661 vec_safe_push (keyed_classes, fnclass); 15662 } 15663 } 15664 15665 /* Subroutine of finish_function. 15666 Save the body of constexpr functions for possible 15667 future compile time evaluation. */ 15668 15669 static void 15670 maybe_save_function_definition (tree fun) 15671 { 15672 if (!processing_template_decl 15673 && DECL_DECLARED_CONSTEXPR_P (fun) 15674 && !cp_function_chain->invalid_constexpr 15675 && !DECL_CLONED_FUNCTION_P (fun)) 15676 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun)); 15677 } 15678 15679 /* Finish up a function declaration and compile that function 15680 all the way to assembler language output. The free the storage 15681 for the function definition. INLINE_P is TRUE if we just 15682 finished processing the body of an in-class inline function 15683 definition. (This processing will have taken place after the 15684 class definition is complete.) */ 15685 15686 tree 15687 finish_function (bool inline_p) 15688 { 15689 tree fndecl = current_function_decl; 15690 tree fntype, ctype = NULL_TREE; 15691 15692 /* When we get some parse errors, we can end up without a 15693 current_function_decl, so cope. */ 15694 if (fndecl == NULL_TREE) 15695 return error_mark_node; 15696 15697 finish_lambda_scope (); 15698 15699 if (c_dialect_objc ()) 15700 objc_finish_function (); 15701 15702 record_key_method_defined (fndecl); 15703 15704 fntype = TREE_TYPE (fndecl); 15705 15706 /* TREE_READONLY (fndecl) = 1; 15707 This caused &foo to be of type ptr-to-const-function 15708 which then got a warning when stored in a ptr-to-function variable. */ 15709 15710 gcc_assert (building_stmt_list_p ()); 15711 /* The current function is being defined, so its DECL_INITIAL should 15712 be set, and unless there's a multiple definition, it should be 15713 error_mark_node. */ 15714 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node); 15715 15716 /* For a cloned function, we've already got all the code we need; 15717 there's no need to add any extra bits. */ 15718 if (!DECL_CLONED_FUNCTION_P (fndecl)) 15719 { 15720 /* Make it so that `main' always returns 0 by default. */ 15721 if (DECL_MAIN_P (current_function_decl)) 15722 finish_return_stmt (integer_zero_node); 15723 15724 if (use_eh_spec_block (current_function_decl)) 15725 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS 15726 (TREE_TYPE (current_function_decl)), 15727 current_eh_spec_block); 15728 } 15729 15730 /* If we're saving up tree structure, tie off the function now. */ 15731 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl)); 15732 15733 finish_fname_decls (); 15734 15735 /* If this function can't throw any exceptions, remember that. */ 15736 if (!processing_template_decl 15737 && !cp_function_chain->can_throw 15738 && !flag_non_call_exceptions 15739 && !decl_replaceable_p (fndecl)) 15740 TREE_NOTHROW (fndecl) = 1; 15741 15742 /* This must come after expand_function_end because cleanups might 15743 have declarations (from inline functions) that need to go into 15744 this function's blocks. */ 15745 15746 /* If the current binding level isn't the outermost binding level 15747 for this function, either there is a bug, or we have experienced 15748 syntax errors and the statement tree is malformed. */ 15749 if (current_binding_level->kind != sk_function_parms) 15750 { 15751 /* Make sure we have already experienced errors. */ 15752 gcc_assert (errorcount); 15753 15754 /* Throw away the broken statement tree and extra binding 15755 levels. */ 15756 DECL_SAVED_TREE (fndecl) = alloc_stmt_list (); 15757 15758 while (current_binding_level->kind != sk_function_parms) 15759 { 15760 if (current_binding_level->kind == sk_class) 15761 pop_nested_class (); 15762 else 15763 poplevel (0, 0, 0); 15764 } 15765 } 15766 poplevel (1, 0, 1); 15767 15768 /* Statements should always be full-expressions at the outermost set 15769 of curly braces for a function. */ 15770 gcc_assert (stmts_are_full_exprs_p ()); 15771 15772 /* If there are no return statements in a function with auto return type, 15773 the return type is void. But if the declared type is something like 15774 auto*, this is an error. */ 15775 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl) 15776 && TREE_TYPE (fntype) == current_function_auto_return_pattern) 15777 { 15778 if (is_auto (current_function_auto_return_pattern)) 15779 { 15780 apply_deduced_return_type (fndecl, void_type_node); 15781 fntype = TREE_TYPE (fndecl); 15782 } 15783 else if (!current_function_returns_value 15784 && !current_function_returns_null) 15785 { 15786 error ("no return statements in function returning %qT", 15787 current_function_auto_return_pattern); 15788 inform (input_location, "only plain %<auto%> return type can be " 15789 "deduced to %<void%>"); 15790 } 15791 } 15792 15793 // If this is a concept, check that the definition is reasonable. 15794 if (DECL_DECLARED_CONCEPT_P (fndecl)) 15795 check_function_concept (fndecl); 15796 15797 /* Lambda closure members are implicitly constexpr if possible. */ 15798 if (cxx_dialect >= cxx17 15799 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl))) 15800 DECL_DECLARED_CONSTEXPR_P (fndecl) 15801 = ((processing_template_decl 15802 || is_valid_constexpr_fn (fndecl, /*complain*/false)) 15803 && potential_constant_expression (DECL_SAVED_TREE (fndecl))); 15804 15805 /* Save constexpr function body before it gets munged by 15806 the NRV transformation. */ 15807 maybe_save_function_definition (fndecl); 15808 15809 /* Invoke the pre-genericize plugin before we start munging things. */ 15810 if (!processing_template_decl) 15811 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl); 15812 15813 /* Perform delayed folding before NRV transformation. */ 15814 if (!processing_template_decl) 15815 cp_fold_function (fndecl); 15816 15817 /* Set up the named return value optimization, if we can. Candidate 15818 variables are selected in check_return_expr. */ 15819 if (current_function_return_value) 15820 { 15821 tree r = current_function_return_value; 15822 tree outer; 15823 15824 if (r != error_mark_node 15825 /* This is only worth doing for fns that return in memory--and 15826 simpler, since we don't have to worry about promoted modes. */ 15827 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl) 15828 /* Only allow this for variables declared in the outer scope of 15829 the function so we know that their lifetime always ends with a 15830 return; see g++.dg/opt/nrv6.C. We could be more flexible if 15831 we were to do this optimization in tree-ssa. */ 15832 && (outer = outer_curly_brace_block (fndecl)) 15833 && chain_member (r, BLOCK_VARS (outer))) 15834 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl)); 15835 15836 current_function_return_value = NULL_TREE; 15837 } 15838 15839 /* Remember that we were in class scope. */ 15840 if (current_class_name) 15841 ctype = current_class_type; 15842 15843 /* Must mark the RESULT_DECL as being in this function. */ 15844 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl; 15845 15846 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point 15847 to the FUNCTION_DECL node itself. */ 15848 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl; 15849 15850 /* Save away current state, if appropriate. */ 15851 if (!processing_template_decl) 15852 save_function_data (fndecl); 15853 15854 /* Complain if there's just no return statement. */ 15855 if (warn_return_type 15856 && !VOID_TYPE_P (TREE_TYPE (fntype)) 15857 && !dependent_type_p (TREE_TYPE (fntype)) 15858 && !current_function_returns_value && !current_function_returns_null 15859 /* Don't complain if we abort or throw. */ 15860 && !current_function_returns_abnormally 15861 /* Don't complain if there's an infinite loop. */ 15862 && !current_function_infinite_loop 15863 /* Don't complain if we are declared noreturn. */ 15864 && !TREE_THIS_VOLATILE (fndecl) 15865 && !DECL_NAME (DECL_RESULT (fndecl)) 15866 && !TREE_NO_WARNING (fndecl) 15867 /* Structor return values (if any) are set by the compiler. */ 15868 && !DECL_CONSTRUCTOR_P (fndecl) 15869 && !DECL_DESTRUCTOR_P (fndecl) 15870 && targetm.warn_func_return (fndecl)) 15871 { 15872 warning (OPT_Wreturn_type, 15873 "no return statement in function returning non-void"); 15874 TREE_NO_WARNING (fndecl) = 1; 15875 } 15876 15877 /* Store the end of the function, so that we get good line number 15878 info for the epilogue. */ 15879 cfun->function_end_locus = input_location; 15880 15881 /* Complain about parameters that are only set, but never otherwise used. */ 15882 if (warn_unused_but_set_parameter 15883 && !processing_template_decl 15884 && errorcount == unused_but_set_errorcount 15885 && !DECL_CLONED_FUNCTION_P (fndecl)) 15886 { 15887 tree decl; 15888 15889 for (decl = DECL_ARGUMENTS (fndecl); 15890 decl; 15891 decl = DECL_CHAIN (decl)) 15892 if (TREE_USED (decl) 15893 && TREE_CODE (decl) == PARM_DECL 15894 && !DECL_READ_P (decl) 15895 && DECL_NAME (decl) 15896 && !DECL_ARTIFICIAL (decl) 15897 && !TREE_NO_WARNING (decl) 15898 && !DECL_IN_SYSTEM_HEADER (decl) 15899 && TREE_TYPE (decl) != error_mark_node 15900 && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE 15901 && (!CLASS_TYPE_P (TREE_TYPE (decl)) 15902 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))) 15903 warning_at (DECL_SOURCE_LOCATION (decl), 15904 OPT_Wunused_but_set_parameter, 15905 "parameter %qD set but not used", decl); 15906 unused_but_set_errorcount = errorcount; 15907 } 15908 15909 /* Complain about locally defined typedefs that are not used in this 15910 function. */ 15911 maybe_warn_unused_local_typedefs (); 15912 15913 /* Possibly warn about unused parameters. */ 15914 if (warn_unused_parameter 15915 && !processing_template_decl 15916 && !DECL_CLONED_FUNCTION_P (fndecl)) 15917 do_warn_unused_parameter (fndecl); 15918 15919 /* Genericize before inlining. */ 15920 if (!processing_template_decl) 15921 { 15922 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl); 15923 cp_genericize (fndecl); 15924 /* Clear out the bits we don't need. */ 15925 f->x_current_class_ptr = NULL; 15926 f->x_current_class_ref = NULL; 15927 f->x_eh_spec_block = NULL; 15928 f->x_in_charge_parm = NULL; 15929 f->x_vtt_parm = NULL; 15930 f->x_return_value = NULL; 15931 f->bindings = NULL; 15932 f->extern_decl_map = NULL; 15933 f->infinite_loops = NULL; 15934 } 15935 /* Clear out the bits we don't need. */ 15936 local_names = NULL; 15937 15938 /* We're leaving the context of this function, so zap cfun. It's still in 15939 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */ 15940 set_cfun (NULL); 15941 current_function_decl = NULL; 15942 15943 /* If this is an in-class inline definition, we may have to pop the 15944 bindings for the template parameters that we added in 15945 maybe_begin_member_template_processing when start_function was 15946 called. */ 15947 if (inline_p) 15948 maybe_end_member_template_processing (); 15949 15950 /* Leave the scope of the class. */ 15951 if (ctype) 15952 pop_nested_class (); 15953 15954 --function_depth; 15955 15956 /* Clean up. */ 15957 current_function_decl = NULL_TREE; 15958 15959 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl); 15960 return fndecl; 15961 } 15962 15963 /* Create the FUNCTION_DECL for a function definition. 15964 DECLSPECS and DECLARATOR are the parts of the declaration; 15965 they describe the return type and the name of the function, 15966 but twisted together in a fashion that parallels the syntax of C. 15967 15968 This function creates a binding context for the function body 15969 as well as setting up the FUNCTION_DECL in current_function_decl. 15970 15971 Returns a FUNCTION_DECL on success. 15972 15973 If the DECLARATOR is not suitable for a function (it defines a datum 15974 instead), we return 0, which tells yyparse to report a parse error. 15975 15976 May return void_type_node indicating that this method is actually 15977 a friend. See grokfield for more details. 15978 15979 Came here with a `.pushlevel' . 15980 15981 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING 15982 CHANGES TO CODE IN `grokfield'. */ 15983 15984 tree 15985 grokmethod (cp_decl_specifier_seq *declspecs, 15986 const cp_declarator *declarator, tree attrlist) 15987 { 15988 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0, 15989 &attrlist); 15990 15991 if (fndecl == error_mark_node) 15992 return error_mark_node; 15993 15994 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL) 15995 { 15996 error ("invalid member function declaration"); 15997 return error_mark_node; 15998 } 15999 16000 if (attrlist) 16001 cplus_decl_attributes (&fndecl, attrlist, 0); 16002 16003 /* Pass friends other than inline friend functions back. */ 16004 if (fndecl == void_type_node) 16005 return fndecl; 16006 16007 if (DECL_IN_AGGR_P (fndecl)) 16008 { 16009 if (DECL_CLASS_SCOPE_P (fndecl)) 16010 error ("%qD is already defined in class %qT", fndecl, 16011 DECL_CONTEXT (fndecl)); 16012 return error_mark_node; 16013 } 16014 16015 check_template_shadow (fndecl); 16016 16017 if (TREE_PUBLIC (fndecl)) 16018 DECL_COMDAT (fndecl) = 1; 16019 DECL_DECLARED_INLINE_P (fndecl) = 1; 16020 DECL_NO_INLINE_WARNING_P (fndecl) = 1; 16021 16022 /* We process method specializations in finish_struct_1. */ 16023 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl)) 16024 { 16025 fndecl = push_template_decl (fndecl); 16026 if (fndecl == error_mark_node) 16027 return fndecl; 16028 } 16029 16030 if (! DECL_FRIEND_P (fndecl)) 16031 { 16032 if (DECL_CHAIN (fndecl)) 16033 { 16034 fndecl = copy_node (fndecl); 16035 TREE_CHAIN (fndecl) = NULL_TREE; 16036 } 16037 } 16038 16039 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0); 16040 16041 DECL_IN_AGGR_P (fndecl) = 1; 16042 return fndecl; 16043 } 16044 16045 16046 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that 16047 we can lay it out later, when and if its type becomes complete. 16048 16049 Also handle constexpr variables where the initializer involves 16050 an unlowered PTRMEM_CST because the class isn't complete yet. */ 16051 16052 void 16053 maybe_register_incomplete_var (tree var) 16054 { 16055 gcc_assert (VAR_P (var)); 16056 16057 /* Keep track of variables with incomplete types. */ 16058 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node 16059 && DECL_EXTERNAL (var)) 16060 { 16061 tree inner_type = TREE_TYPE (var); 16062 16063 while (TREE_CODE (inner_type) == ARRAY_TYPE) 16064 inner_type = TREE_TYPE (inner_type); 16065 inner_type = TYPE_MAIN_VARIANT (inner_type); 16066 16067 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type)) 16068 /* RTTI TD entries are created while defining the type_info. */ 16069 || (TYPE_LANG_SPECIFIC (inner_type) 16070 && TYPE_BEING_DEFINED (inner_type))) 16071 { 16072 incomplete_var iv = {var, inner_type}; 16073 vec_safe_push (incomplete_vars, iv); 16074 } 16075 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var)) 16076 && decl_constant_var_p (var) 16077 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type))) 16078 { 16079 /* When the outermost open class is complete we can resolve any 16080 pointers-to-members. */ 16081 tree context = outermost_open_class (); 16082 incomplete_var iv = {var, context}; 16083 vec_safe_push (incomplete_vars, iv); 16084 } 16085 } 16086 } 16087 16088 /* Called when a class type (given by TYPE) is defined. If there are 16089 any existing VAR_DECLs whose type has been completed by this 16090 declaration, update them now. */ 16091 16092 void 16093 complete_vars (tree type) 16094 { 16095 unsigned ix; 16096 incomplete_var *iv; 16097 16098 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); ) 16099 { 16100 if (same_type_p (type, iv->incomplete_type)) 16101 { 16102 tree var = iv->decl; 16103 tree type = TREE_TYPE (var); 16104 16105 if (type != error_mark_node 16106 && (TYPE_MAIN_VARIANT (strip_array_types (type)) 16107 == iv->incomplete_type)) 16108 { 16109 /* Complete the type of the variable. The VAR_DECL itself 16110 will be laid out in expand_expr. */ 16111 complete_type (type); 16112 cp_apply_type_quals_to_decl (cp_type_quals (type), var); 16113 } 16114 16115 /* Remove this entry from the list. */ 16116 incomplete_vars->unordered_remove (ix); 16117 } 16118 else 16119 ix++; 16120 } 16121 16122 /* Check for pending declarations which may have abstract type. */ 16123 complete_type_check_abstract (type); 16124 } 16125 16126 /* If DECL is of a type which needs a cleanup, build and return an 16127 expression to perform that cleanup here. Return NULL_TREE if no 16128 cleanup need be done. DECL can also be a _REF when called from 16129 split_nonconstant_init_1. */ 16130 16131 tree 16132 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain) 16133 { 16134 tree type; 16135 tree attr; 16136 tree cleanup; 16137 16138 /* Assume no cleanup is required. */ 16139 cleanup = NULL_TREE; 16140 16141 if (error_operand_p (decl)) 16142 return cleanup; 16143 16144 /* Handle "__attribute__((cleanup))". We run the cleanup function 16145 before the destructor since the destructor is what actually 16146 terminates the lifetime of the object. */ 16147 if (DECL_P (decl)) 16148 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl)); 16149 else 16150 attr = NULL_TREE; 16151 if (attr) 16152 { 16153 tree id; 16154 tree fn; 16155 tree arg; 16156 16157 /* Get the name specified by the user for the cleanup function. */ 16158 id = TREE_VALUE (TREE_VALUE (attr)); 16159 /* Look up the name to find the cleanup function to call. It is 16160 important to use lookup_name here because that is what is 16161 used in c-common.c:handle_cleanup_attribute when performing 16162 initial checks on the attribute. Note that those checks 16163 include ensuring that the function found is not an overloaded 16164 function, or an object with an overloaded call operator, 16165 etc.; we can rely on the fact that the function found is an 16166 ordinary FUNCTION_DECL. */ 16167 fn = lookup_name (id); 16168 arg = build_address (decl); 16169 if (!mark_used (decl, complain) && !(complain & tf_error)) 16170 return error_mark_node; 16171 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE); 16172 if (cleanup == error_mark_node) 16173 return error_mark_node; 16174 } 16175 /* Handle ordinary C++ destructors. */ 16176 type = TREE_TYPE (decl); 16177 if (type_build_dtor_call (type)) 16178 { 16179 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR; 16180 tree addr; 16181 tree call; 16182 16183 if (TREE_CODE (type) == ARRAY_TYPE) 16184 addr = decl; 16185 else 16186 addr = build_address (decl); 16187 16188 call = build_delete (TREE_TYPE (addr), addr, 16189 sfk_complete_destructor, flags, 0, complain); 16190 if (call == error_mark_node) 16191 cleanup = error_mark_node; 16192 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type)) 16193 /* Discard the call. */; 16194 else if (cleanup) 16195 cleanup = cp_build_compound_expr (cleanup, call, complain); 16196 else 16197 cleanup = call; 16198 } 16199 16200 /* build_delete sets the location of the destructor call to the 16201 current location, even though the destructor is going to be 16202 called later, at the end of the current scope. This can lead to 16203 a "jumpy" behavior for users of debuggers when they step around 16204 the end of the block. So let's unset the location of the 16205 destructor call instead. */ 16206 protected_set_expr_location (cleanup, UNKNOWN_LOCATION); 16207 16208 if (cleanup 16209 && DECL_P (decl) 16210 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl))) 16211 /* Treat objects with destructors as used; the destructor may do 16212 something substantive. */ 16213 && !mark_used (decl, complain) && !(complain & tf_error)) 16214 return error_mark_node; 16215 16216 return cleanup; 16217 } 16218 16219 16220 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a 16221 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to 16222 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */ 16223 16224 tree 16225 static_fn_type (tree memfntype) 16226 { 16227 tree fntype; 16228 tree args; 16229 16230 if (TYPE_PTRMEMFUNC_P (memfntype)) 16231 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype); 16232 if (POINTER_TYPE_P (memfntype) 16233 || TREE_CODE (memfntype) == FUNCTION_DECL) 16234 memfntype = TREE_TYPE (memfntype); 16235 if (TREE_CODE (memfntype) == FUNCTION_TYPE) 16236 return memfntype; 16237 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE); 16238 args = TYPE_ARG_TYPES (memfntype); 16239 cp_ref_qualifier rqual = type_memfn_rqual (memfntype); 16240 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args)); 16241 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual); 16242 fntype = (cp_build_type_attribute_variant 16243 (fntype, TYPE_ATTRIBUTES (memfntype))); 16244 fntype = (build_exception_variant 16245 (fntype, TYPE_RAISES_EXCEPTIONS (memfntype))); 16246 if (TYPE_HAS_LATE_RETURN_TYPE (memfntype)) 16247 TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1; 16248 return fntype; 16249 } 16250 16251 /* DECL was originally constructed as a non-static member function, 16252 but turned out to be static. Update it accordingly. */ 16253 16254 void 16255 revert_static_member_fn (tree decl) 16256 { 16257 tree stype = static_fn_type (decl); 16258 cp_cv_quals quals = type_memfn_quals (stype); 16259 cp_ref_qualifier rqual = type_memfn_rqual (stype); 16260 16261 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE) 16262 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE); 16263 16264 TREE_TYPE (decl) = stype; 16265 16266 if (DECL_ARGUMENTS (decl)) 16267 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl)); 16268 DECL_STATIC_FUNCTION_P (decl) = 1; 16269 } 16270 16271 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is 16272 one of the language-independent trees. */ 16273 16274 enum cp_tree_node_structure_enum 16275 cp_tree_node_structure (union lang_tree_node * t) 16276 { 16277 switch (TREE_CODE (&t->generic)) 16278 { 16279 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG; 16280 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT; 16281 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER; 16282 case OVERLOAD: return TS_CP_OVERLOAD; 16283 case TEMPLATE_PARM_INDEX: return TS_CP_TPI; 16284 case PTRMEM_CST: return TS_CP_PTRMEM; 16285 case BASELINK: return TS_CP_BASELINK; 16286 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL; 16287 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT; 16288 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT; 16289 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR; 16290 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR; 16291 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO; 16292 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO; 16293 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL; 16294 default: return TS_CP_GENERIC; 16295 } 16296 } 16297 16298 /* Build the void_list_node (void_type_node having been created). */ 16299 tree 16300 build_void_list_node (void) 16301 { 16302 tree t = build_tree_list (NULL_TREE, void_type_node); 16303 return t; 16304 } 16305 16306 bool 16307 cp_missing_noreturn_ok_p (tree decl) 16308 { 16309 /* A missing noreturn is ok for the `main' function. */ 16310 return DECL_MAIN_P (decl); 16311 } 16312 16313 /* Return the decl used to identify the COMDAT group into which DECL should 16314 be placed. */ 16315 16316 tree 16317 cxx_comdat_group (tree decl) 16318 { 16319 /* Virtual tables, construction virtual tables, and virtual table 16320 tables all go in a single COMDAT group, named after the primary 16321 virtual table. */ 16322 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl)) 16323 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl)); 16324 /* For all other DECLs, the COMDAT group is the mangled name of the 16325 declaration itself. */ 16326 else 16327 { 16328 while (DECL_THUNK_P (decl)) 16329 { 16330 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk 16331 into the same section as the target function. In that case 16332 we must return target's name. */ 16333 tree target = THUNK_TARGET (decl); 16334 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target) 16335 && DECL_SECTION_NAME (target) != NULL 16336 && DECL_ONE_ONLY (target)) 16337 decl = target; 16338 else 16339 break; 16340 } 16341 } 16342 16343 return decl; 16344 } 16345 16346 /* Returns the return type for FN as written by the user, which may include 16347 a placeholder for a deduced return type. */ 16348 16349 tree 16350 fndecl_declared_return_type (tree fn) 16351 { 16352 fn = STRIP_TEMPLATE (fn); 16353 if (FNDECL_USED_AUTO (fn)) 16354 { 16355 struct language_function *f = NULL; 16356 if (DECL_STRUCT_FUNCTION (fn)) 16357 f = DECL_STRUCT_FUNCTION (fn)->language; 16358 if (f == NULL) 16359 f = DECL_SAVED_FUNCTION_DATA (fn); 16360 return f->x_auto_return_pattern; 16361 } 16362 return TREE_TYPE (TREE_TYPE (fn)); 16363 } 16364 16365 /* Returns true iff DECL is a variable or function declared with an auto type 16366 that has not yet been deduced to a real type. */ 16367 16368 bool 16369 undeduced_auto_decl (tree decl) 16370 { 16371 if (cxx_dialect < cxx11) 16372 return false; 16373 return ((VAR_OR_FUNCTION_DECL_P (decl) 16374 || TREE_CODE (decl) == TEMPLATE_DECL) 16375 && type_uses_auto (TREE_TYPE (decl))); 16376 } 16377 16378 /* Complain if DECL has an undeduced return type. */ 16379 16380 bool 16381 require_deduced_type (tree decl, tsubst_flags_t complain) 16382 { 16383 if (undeduced_auto_decl (decl)) 16384 { 16385 if (complain & tf_error) 16386 error ("use of %qD before deduction of %<auto%>", decl); 16387 return false; 16388 } 16389 return true; 16390 } 16391 16392 #include "gt-cp-decl.h" 16393