]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/cp/decl.c
2019-02-27 Bernd Edlinger <bernd.edlinger@hotmail.de>
[thirdparty/gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2019 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 #include "gcc-rich-location.h"
55 #include "langhooks.h"
56
57 /* Possible cases of bad specifiers type used by bad_specifiers. */
58 enum bad_spec_place {
59 BSP_VAR, /* variable */
60 BSP_PARM, /* parameter */
61 BSP_TYPE, /* type */
62 BSP_FIELD /* field */
63 };
64
65 static const char *redeclaration_error_message (tree, tree);
66
67 static int decl_jump_unsafe (tree);
68 static void require_complete_types_for_parms (tree);
69 static tree grok_reference_init (tree, tree, tree, int);
70 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
71 int, int, int, bool, int, tree, location_t);
72 static void check_static_variable_definition (tree, tree);
73 static void record_unknown_type (tree, const char *);
74 static tree builtin_function_1 (tree, tree, bool);
75 static int member_function_or_else (tree, tree, enum overload_flags);
76 static tree local_variable_p_walkfn (tree *, int *, void *);
77 static const char *tag_name (enum tag_types);
78 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
79 static void maybe_deduce_size_from_array_init (tree, tree);
80 static void layout_var_decl (tree);
81 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
82 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
83 static void save_function_data (tree);
84 static void copy_type_enum (tree , tree);
85 static void check_function_type (tree, tree);
86 static void finish_constructor_body (void);
87 static void begin_destructor_body (void);
88 static void finish_destructor_body (void);
89 static void record_key_method_defined (tree);
90 static tree create_array_type_for_decl (tree, tree, tree, location_t);
91 static tree get_atexit_node (void);
92 static tree get_dso_handle_node (void);
93 static tree start_cleanup_fn (void);
94 static void end_cleanup_fn (void);
95 static tree cp_make_fname_decl (location_t, tree, int);
96 static void initialize_predefined_identifiers (void);
97 static tree check_special_function_return_type
98 (special_function_kind, tree, tree, int, const location_t*);
99 static tree push_cp_library_fn (enum tree_code, tree, int);
100 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
101 static void store_parm_decls (tree);
102 static void initialize_local_var (tree, tree);
103 static void expand_static_init (tree, tree);
104
105 /* The following symbols are subsumed in the cp_global_trees array, and
106 listed here individually for documentation purposes.
107
108 C++ extensions
109 tree wchar_decl_node;
110
111 tree vtable_entry_type;
112 tree delta_type_node;
113 tree __t_desc_type_node;
114
115 tree class_type_node;
116 tree unknown_type_node;
117
118 Array type `vtable_entry_type[]'
119
120 tree vtbl_type_node;
121 tree vtbl_ptr_type_node;
122
123 Namespaces,
124
125 tree std_node;
126 tree abi_node;
127
128 A FUNCTION_DECL which can call `abort'. Not necessarily the
129 one that the user will declare, but sufficient to be called
130 by routines that want to abort the program.
131
132 tree abort_fndecl;
133
134 Used by RTTI
135 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
136 tree tinfo_var_id; */
137
138 tree cp_global_trees[CPTI_MAX];
139
140 /* A list of objects which have constructors or destructors
141 which reside in the global scope. The decl is stored in
142 the TREE_VALUE slot and the initializer is stored
143 in the TREE_PURPOSE slot. */
144 tree static_aggregates;
145
146 /* Like static_aggregates, but for thread_local variables. */
147 tree tls_aggregates;
148
149 /* -- end of C++ */
150
151 /* A node for the integer constant 2. */
152
153 tree integer_two_node;
154
155 /* vector of static decls. */
156 vec<tree, va_gc> *static_decls;
157
158 /* vector of keyed classes. */
159 vec<tree, va_gc> *keyed_classes;
160
161 /* Used only for jumps to as-yet undefined labels, since jumps to
162 defined labels can have their validity checked immediately. */
163
164 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
165 struct named_label_use_entry *next;
166 /* The binding level to which this entry is *currently* attached.
167 This is initially the binding level in which the goto appeared,
168 but is modified as scopes are closed. */
169 cp_binding_level *binding_level;
170 /* The head of the names list that was current when the goto appeared,
171 or the inner scope popped. These are the decls that will *not* be
172 skipped when jumping to the label. */
173 tree names_in_scope;
174 /* The location of the goto, for error reporting. */
175 location_t o_goto_locus;
176 /* True if an OpenMP structured block scope has been closed since
177 the goto appeared. This means that the branch from the label will
178 illegally exit an OpenMP scope. */
179 bool in_omp_scope;
180 };
181
182 /* A list of all LABEL_DECLs in the function that have names. Here so
183 we can clear out their names' definitions at the end of the
184 function, and so we can check the validity of jumps to these labels. */
185
186 struct GTY((for_user)) named_label_entry {
187
188 tree name; /* Name of decl. */
189
190 tree label_decl; /* LABEL_DECL, unless deleted local label. */
191
192 named_label_entry *outer; /* Outer shadowed chain. */
193
194 /* The binding level to which the label is *currently* attached.
195 This is initially set to the binding level in which the label
196 is defined, but is modified as scopes are closed. */
197 cp_binding_level *binding_level;
198
199 /* The head of the names list that was current when the label was
200 defined, or the inner scope popped. These are the decls that will
201 be skipped when jumping to the label. */
202 tree names_in_scope;
203
204 /* A vector of all decls from all binding levels that would be
205 crossed by a backward branch to the label. */
206 vec<tree, va_gc> *bad_decls;
207
208 /* A list of uses of the label, before the label is defined. */
209 named_label_use_entry *uses;
210
211 /* The following bits are set after the label is defined, and are
212 updated as scopes are popped. They indicate that a jump to the
213 label will illegally enter a scope of the given flavor. */
214 bool in_try_scope;
215 bool in_catch_scope;
216 bool in_omp_scope;
217 bool in_transaction_scope;
218 bool in_constexpr_if;
219 };
220
221 #define named_labels cp_function_chain->x_named_labels
222 \f
223 /* The number of function bodies which we are currently processing.
224 (Zero if we are at namespace scope, one inside the body of a
225 function, two inside the body of a function in a local class, etc.) */
226 int function_depth;
227
228 /* Whether the exception-specifier is part of a function type (i.e. C++17). */
229 bool flag_noexcept_type;
230
231 /* States indicating how grokdeclarator() should handle declspecs marked
232 with __attribute__((deprecated)). An object declared as
233 __attribute__((deprecated)) suppresses warnings of uses of other
234 deprecated items. */
235 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
236
237 \f
238 /* A list of VAR_DECLs whose type was incomplete at the time the
239 variable was declared. */
240
241 struct GTY(()) incomplete_var {
242 tree decl;
243 tree incomplete_type;
244 };
245
246
247 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
248 \f
249 /* Returns the kind of template specialization we are currently
250 processing, given that it's declaration contained N_CLASS_SCOPES
251 explicit scope qualifications. */
252
253 tmpl_spec_kind
254 current_tmpl_spec_kind (int n_class_scopes)
255 {
256 int n_template_parm_scopes = 0;
257 int seen_specialization_p = 0;
258 int innermost_specialization_p = 0;
259 cp_binding_level *b;
260
261 /* Scan through the template parameter scopes. */
262 for (b = current_binding_level;
263 b->kind == sk_template_parms;
264 b = b->level_chain)
265 {
266 /* If we see a specialization scope inside a parameter scope,
267 then something is wrong. That corresponds to a declaration
268 like:
269
270 template <class T> template <> ...
271
272 which is always invalid since [temp.expl.spec] forbids the
273 specialization of a class member template if the enclosing
274 class templates are not explicitly specialized as well. */
275 if (b->explicit_spec_p)
276 {
277 if (n_template_parm_scopes == 0)
278 innermost_specialization_p = 1;
279 else
280 seen_specialization_p = 1;
281 }
282 else if (seen_specialization_p == 1)
283 return tsk_invalid_member_spec;
284
285 ++n_template_parm_scopes;
286 }
287
288 /* Handle explicit instantiations. */
289 if (processing_explicit_instantiation)
290 {
291 if (n_template_parm_scopes != 0)
292 /* We've seen a template parameter list during an explicit
293 instantiation. For example:
294
295 template <class T> template void f(int);
296
297 This is erroneous. */
298 return tsk_invalid_expl_inst;
299 else
300 return tsk_expl_inst;
301 }
302
303 if (n_template_parm_scopes < n_class_scopes)
304 /* We've not seen enough template headers to match all the
305 specialized classes present. For example:
306
307 template <class T> void R<T>::S<T>::f(int);
308
309 This is invalid; there needs to be one set of template
310 parameters for each class. */
311 return tsk_insufficient_parms;
312 else if (n_template_parm_scopes == n_class_scopes)
313 /* We're processing a non-template declaration (even though it may
314 be a member of a template class.) For example:
315
316 template <class T> void S<T>::f(int);
317
318 The `class T' matches the `S<T>', leaving no template headers
319 corresponding to the `f'. */
320 return tsk_none;
321 else if (n_template_parm_scopes > n_class_scopes + 1)
322 /* We've got too many template headers. For example:
323
324 template <> template <class T> void f (T);
325
326 There need to be more enclosing classes. */
327 return tsk_excessive_parms;
328 else
329 /* This must be a template. It's of the form:
330
331 template <class T> template <class U> void S<T>::f(U);
332
333 This is a specialization if the innermost level was a
334 specialization; otherwise it's just a definition of the
335 template. */
336 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
337 }
338
339 /* Exit the current scope. */
340
341 void
342 finish_scope (void)
343 {
344 poplevel (0, 0, 0);
345 }
346
347 /* When a label goes out of scope, check to see if that label was used
348 in a valid manner, and issue any appropriate warnings or errors. */
349
350 static void
351 check_label_used (tree label)
352 {
353 if (!processing_template_decl)
354 {
355 if (DECL_INITIAL (label) == NULL_TREE)
356 {
357 location_t location;
358
359 error ("label %q+D used but not defined", label);
360 location = input_location;
361 /* FIXME want (LOCATION_FILE (input_location), (line)0) */
362 /* Avoid crashing later. */
363 define_label (location, DECL_NAME (label));
364 }
365 else
366 warn_for_unused_label (label);
367 }
368 }
369
370 /* Helper function to sort named label entries in a vector by DECL_UID. */
371
372 static int
373 sort_labels (const void *a, const void *b)
374 {
375 tree label1 = *(tree const *) a;
376 tree label2 = *(tree const *) b;
377
378 /* DECL_UIDs can never be equal. */
379 return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1;
380 }
381
382 /* At the end of a function, all labels declared within the function
383 go out of scope. BLOCK is the top-level block for the
384 function. */
385
386 static void
387 pop_labels (tree block)
388 {
389 if (!named_labels)
390 return;
391
392 /* We need to add the labels to the block chain, so debug
393 information is emitted. But, we want the order to be stable so
394 need to sort them first. Otherwise the debug output could be
395 randomly ordered. I guess it's mostly stable, unless the hash
396 table implementation changes. */
397 auto_vec<tree, 32> labels (named_labels->elements ());
398 hash_table<named_label_hash>::iterator end (named_labels->end ());
399 for (hash_table<named_label_hash>::iterator iter
400 (named_labels->begin ()); iter != end; ++iter)
401 {
402 named_label_entry *ent = *iter;
403
404 gcc_checking_assert (!ent->outer);
405 if (ent->label_decl)
406 labels.quick_push (ent->label_decl);
407 ggc_free (ent);
408 }
409 named_labels = NULL;
410 labels.qsort (sort_labels);
411
412 while (labels.length ())
413 {
414 tree label = labels.pop ();
415
416 DECL_CHAIN (label) = BLOCK_VARS (block);
417 BLOCK_VARS (block) = label;
418
419 check_label_used (label);
420 }
421 }
422
423 /* At the end of a block with local labels, restore the outer definition. */
424
425 static void
426 pop_local_label (tree id, tree label)
427 {
428 check_label_used (label);
429 named_label_entry **slot = named_labels->find_slot_with_hash
430 (id, IDENTIFIER_HASH_VALUE (id), NO_INSERT);
431 named_label_entry *ent = *slot;
432
433 if (ent->outer)
434 ent = ent->outer;
435 else
436 {
437 ent = ggc_cleared_alloc<named_label_entry> ();
438 ent->name = id;
439 }
440 *slot = ent;
441 }
442
443 /* The following two routines are used to interface to Objective-C++.
444 The binding level is purposely treated as an opaque type. */
445
446 void *
447 objc_get_current_scope (void)
448 {
449 return current_binding_level;
450 }
451
452 /* The following routine is used by the NeXT-style SJLJ exceptions;
453 variables get marked 'volatile' so as to not be clobbered by
454 _setjmp()/_longjmp() calls. All variables in the current scope,
455 as well as parent scopes up to (but not including) ENCLOSING_BLK
456 shall be thusly marked. */
457
458 void
459 objc_mark_locals_volatile (void *enclosing_blk)
460 {
461 cp_binding_level *scope;
462
463 for (scope = current_binding_level;
464 scope && scope != enclosing_blk;
465 scope = scope->level_chain)
466 {
467 tree decl;
468
469 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
470 objc_volatilize_decl (decl);
471
472 /* Do not climb up past the current function. */
473 if (scope->kind == sk_function_parms)
474 break;
475 }
476 }
477
478 /* True if B is the level for the condition of a constexpr if. */
479
480 static bool
481 level_for_constexpr_if (cp_binding_level *b)
482 {
483 return (b->kind == sk_cond && b->this_entity
484 && TREE_CODE (b->this_entity) == IF_STMT
485 && IF_STMT_CONSTEXPR_P (b->this_entity));
486 }
487
488 /* Update data for defined and undefined labels when leaving a scope. */
489
490 int
491 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
492 {
493 named_label_entry *ent = *slot;
494 cp_binding_level *obl = bl->level_chain;
495
496 if (ent->binding_level == bl)
497 {
498 tree decl;
499
500 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
501 TREE_LISTs representing OVERLOADs, so be careful. */
502 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
503 ? DECL_CHAIN (decl)
504 : TREE_CHAIN (decl)))
505 if (decl_jump_unsafe (decl))
506 vec_safe_push (ent->bad_decls, decl);
507
508 ent->binding_level = obl;
509 ent->names_in_scope = obl->names;
510 switch (bl->kind)
511 {
512 case sk_try:
513 ent->in_try_scope = true;
514 break;
515 case sk_catch:
516 ent->in_catch_scope = true;
517 break;
518 case sk_omp:
519 ent->in_omp_scope = true;
520 break;
521 case sk_transaction:
522 ent->in_transaction_scope = true;
523 break;
524 case sk_block:
525 if (level_for_constexpr_if (bl->level_chain))
526 ent->in_constexpr_if = true;
527 break;
528 default:
529 break;
530 }
531 }
532 else if (ent->uses)
533 {
534 struct named_label_use_entry *use;
535
536 for (use = ent->uses; use ; use = use->next)
537 if (use->binding_level == bl)
538 {
539 use->binding_level = obl;
540 use->names_in_scope = obl->names;
541 if (bl->kind == sk_omp)
542 use->in_omp_scope = true;
543 }
544 }
545
546 return 1;
547 }
548
549 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
550 when errors were reported, except for -Werror-unused-but-set-*. */
551 static int unused_but_set_errorcount;
552
553 /* Exit a binding level.
554 Pop the level off, and restore the state of the identifier-decl mappings
555 that were in effect when this level was entered.
556
557 If KEEP == 1, this level had explicit declarations, so
558 and create a "block" (a BLOCK node) for the level
559 to record its declarations and subblocks for symbol table output.
560
561 If FUNCTIONBODY is nonzero, this level is the body of a function,
562 so create a block as if KEEP were set and also clear out all
563 label names.
564
565 If REVERSE is nonzero, reverse the order of decls before putting
566 them into the BLOCK. */
567
568 tree
569 poplevel (int keep, int reverse, int functionbody)
570 {
571 tree link;
572 /* The chain of decls was accumulated in reverse order.
573 Put it into forward order, just for cleanliness. */
574 tree decls;
575 tree subblocks;
576 tree block;
577 tree decl;
578 scope_kind kind;
579
580 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
581 restart:
582
583 block = NULL_TREE;
584
585 gcc_assert (current_binding_level->kind != sk_class
586 && current_binding_level->kind != sk_namespace);
587
588 if (current_binding_level->kind == sk_cleanup)
589 functionbody = 0;
590 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
591
592 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
593
594 /* We used to use KEEP == 2 to indicate that the new block should go
595 at the beginning of the list of blocks at this binding level,
596 rather than the end. This hack is no longer used. */
597 gcc_assert (keep == 0 || keep == 1);
598
599 if (current_binding_level->keep)
600 keep = 1;
601
602 /* Any uses of undefined labels, and any defined labels, now operate
603 under constraints of next binding contour. */
604 if (cfun && !functionbody && named_labels)
605 named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
606 (current_binding_level);
607
608 /* Get the decls in the order they were written.
609 Usually current_binding_level->names is in reverse order.
610 But parameter decls were previously put in forward order. */
611
612 decls = current_binding_level->names;
613 if (reverse)
614 {
615 decls = nreverse (decls);
616 current_binding_level->names = decls;
617 }
618
619 /* If there were any declarations or structure tags in that level,
620 or if this level is a function body,
621 create a BLOCK to record them for the life of this function. */
622 block = NULL_TREE;
623 /* Avoid function body block if possible. */
624 if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
625 keep = 0;
626 else if (keep == 1 || functionbody)
627 block = make_node (BLOCK);
628 if (block != NULL_TREE)
629 {
630 BLOCK_VARS (block) = decls;
631 BLOCK_SUBBLOCKS (block) = subblocks;
632 }
633
634 /* In each subblock, record that this is its superior. */
635 if (keep >= 0)
636 for (link = subblocks; link; link = BLOCK_CHAIN (link))
637 BLOCK_SUPERCONTEXT (link) = block;
638
639 /* Before we remove the declarations first check for unused variables. */
640 if ((warn_unused_variable || warn_unused_but_set_variable)
641 && current_binding_level->kind != sk_template_parms
642 && !processing_template_decl)
643 for (tree d = get_local_decls (); d; d = TREE_CHAIN (d))
644 {
645 /* There are cases where D itself is a TREE_LIST. See in
646 push_local_binding where the list of decls returned by
647 getdecls is built. */
648 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
649
650 tree type = TREE_TYPE (decl);
651 if (VAR_P (decl)
652 && (! TREE_USED (decl) || !DECL_READ_P (decl))
653 && ! DECL_IN_SYSTEM_HEADER (decl)
654 /* For structured bindings, consider only real variables, not
655 subobjects. */
656 && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl)
657 : (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)))
658 && type != error_mark_node
659 && (!CLASS_TYPE_P (type)
660 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
661 || lookup_attribute ("warn_unused",
662 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
663 {
664 if (! TREE_USED (decl))
665 {
666 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
667 warning_at (DECL_SOURCE_LOCATION (decl),
668 OPT_Wunused_variable,
669 "unused structured binding declaration");
670 else
671 warning_at (DECL_SOURCE_LOCATION (decl),
672 OPT_Wunused_variable, "unused variable %qD", decl);
673 }
674 else if (DECL_CONTEXT (decl) == current_function_decl
675 // For -Wunused-but-set-variable leave references alone.
676 && !TYPE_REF_P (TREE_TYPE (decl))
677 && errorcount == unused_but_set_errorcount)
678 {
679 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
680 warning_at (DECL_SOURCE_LOCATION (decl),
681 OPT_Wunused_but_set_variable, "structured "
682 "binding declaration set but not used");
683 else
684 warning_at (DECL_SOURCE_LOCATION (decl),
685 OPT_Wunused_but_set_variable,
686 "variable %qD set but not used", decl);
687 unused_but_set_errorcount = errorcount;
688 }
689 }
690 }
691
692 /* Remove declarations for all the DECLs in this level. */
693 for (link = decls; link; link = TREE_CHAIN (link))
694 {
695 decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link;
696 tree name = OVL_NAME (decl);
697
698 /* Remove the binding. */
699 if (TREE_CODE (decl) == LABEL_DECL)
700 pop_local_label (name, decl);
701 else
702 pop_local_binding (name, decl);
703 }
704
705 /* Restore the IDENTIFIER_TYPE_VALUEs. */
706 for (link = current_binding_level->type_shadowed;
707 link; link = TREE_CHAIN (link))
708 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
709
710 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
711 list if a `using' declaration put them there. The debugging
712 back ends won't understand OVERLOAD, so we remove them here.
713 Because the BLOCK_VARS are (temporarily) shared with
714 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
715 popped all the bindings. Also remove undeduced 'auto' decls,
716 which LTO doesn't understand, and can't have been used by anything. */
717 if (block)
718 {
719 tree* d;
720
721 for (d = &BLOCK_VARS (block); *d; )
722 {
723 if (TREE_CODE (*d) == TREE_LIST
724 || (!processing_template_decl
725 && undeduced_auto_decl (*d)))
726 *d = TREE_CHAIN (*d);
727 else
728 d = &DECL_CHAIN (*d);
729 }
730 }
731
732 /* If the level being exited is the top level of a function,
733 check over all the labels. */
734 if (functionbody)
735 {
736 if (block)
737 {
738 /* Since this is the top level block of a function, the vars are
739 the function's parameters. Don't leave them in the BLOCK
740 because they are found in the FUNCTION_DECL instead. */
741 BLOCK_VARS (block) = 0;
742 pop_labels (block);
743 }
744 else
745 pop_labels (subblocks);
746 }
747
748 kind = current_binding_level->kind;
749 if (kind == sk_cleanup)
750 {
751 tree stmt;
752
753 /* If this is a temporary binding created for a cleanup, then we'll
754 have pushed a statement list level. Pop that, create a new
755 BIND_EXPR for the block, and insert it into the stream. */
756 stmt = pop_stmt_list (current_binding_level->statement_list);
757 stmt = c_build_bind_expr (input_location, block, stmt);
758 add_stmt (stmt);
759 }
760
761 leave_scope ();
762 if (functionbody)
763 {
764 /* The current function is being defined, so its DECL_INITIAL
765 should be error_mark_node. */
766 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
767 DECL_INITIAL (current_function_decl) = block ? block : subblocks;
768 if (subblocks)
769 {
770 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
771 {
772 if (BLOCK_SUBBLOCKS (subblocks))
773 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
774 }
775 else
776 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
777 }
778 }
779 else if (block)
780 current_binding_level->blocks
781 = block_chainon (current_binding_level->blocks, block);
782
783 /* If we did not make a block for the level just exited,
784 any blocks made for inner levels
785 (since they cannot be recorded as subblocks in that level)
786 must be carried forward so they will later become subblocks
787 of something else. */
788 else if (subblocks)
789 current_binding_level->blocks
790 = block_chainon (current_binding_level->blocks, subblocks);
791
792 /* Each and every BLOCK node created here in `poplevel' is important
793 (e.g. for proper debugging information) so if we created one
794 earlier, mark it as "used". */
795 if (block)
796 TREE_USED (block) = 1;
797
798 /* All temporary bindings created for cleanups are popped silently. */
799 if (kind == sk_cleanup)
800 goto restart;
801
802 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
803 return block;
804 }
805
806 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
807 /* Diagnose odr-used extern inline variables without definitions
808 in the current TU. */
809
810 int
811 wrapup_namespace_globals ()
812 {
813 if (vec<tree, va_gc> *statics = static_decls)
814 {
815 tree decl;
816 unsigned int i;
817 FOR_EACH_VEC_ELT (*statics, i, decl)
818 {
819 if (warn_unused_function
820 && TREE_CODE (decl) == FUNCTION_DECL
821 && DECL_INITIAL (decl) == 0
822 && DECL_EXTERNAL (decl)
823 && !TREE_PUBLIC (decl)
824 && !DECL_ARTIFICIAL (decl)
825 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
826 && !TREE_NO_WARNING (decl))
827 warning_at (DECL_SOURCE_LOCATION (decl),
828 OPT_Wunused_function,
829 "%qF declared %<static%> but never defined", decl);
830
831 if (VAR_P (decl)
832 && DECL_EXTERNAL (decl)
833 && DECL_INLINE_VAR_P (decl)
834 && DECL_ODR_USED (decl))
835 error_at (DECL_SOURCE_LOCATION (decl),
836 "odr-used inline variable %qD is not defined", decl);
837 }
838
839 /* Clear out the list, so we don't rescan next time. */
840 static_decls = NULL;
841
842 /* Write out any globals that need to be output. */
843 return wrapup_global_declarations (statics->address (),
844 statics->length ());
845 }
846 return 0;
847 }
848 \f
849 /* In C++, you don't have to write `struct S' to refer to `S'; you
850 can just use `S'. We accomplish this by creating a TYPE_DECL as
851 if the user had written `typedef struct S S'. Create and return
852 the TYPE_DECL for TYPE. */
853
854 tree
855 create_implicit_typedef (tree name, tree type)
856 {
857 tree decl;
858
859 decl = build_decl (input_location, TYPE_DECL, name, type);
860 DECL_ARTIFICIAL (decl) = 1;
861 /* There are other implicit type declarations, like the one *within*
862 a class that allows you to write `S::S'. We must distinguish
863 amongst these. */
864 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
865 TYPE_NAME (type) = decl;
866 TYPE_STUB_DECL (type) = decl;
867
868 return decl;
869 }
870
871 /* Function-scope local entities that need discriminators. Each entry
872 is a {decl,name} pair. VAR_DECLs for anon unions get their name
873 smashed, so we cannot rely on DECL_NAME. */
874
875 static GTY((deletable)) vec<tree, va_gc> *local_entities;
876
877 /* Determine the mangling discriminator of local DECL. There are
878 generally very few of these in any particular function. */
879
880 void
881 determine_local_discriminator (tree decl)
882 {
883 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
884 retrofit_lang_decl (decl);
885 tree ctx = DECL_CONTEXT (decl);
886 tree name = (TREE_CODE (decl) == TYPE_DECL
887 && TYPE_UNNAMED_P (TREE_TYPE (decl))
888 ? NULL_TREE : DECL_NAME (decl));
889 size_t nelts = vec_safe_length (local_entities);
890 for (size_t i = 0; i < nelts; i += 2)
891 {
892 tree *pair = &(*local_entities)[i];
893 tree d = pair[0];
894 tree n = pair[1];
895 gcc_checking_assert (d != decl);
896 if (name == n
897 && TREE_CODE (decl) == TREE_CODE (d)
898 && ctx == DECL_CONTEXT (d))
899 {
900 tree disc = integer_one_node;
901 if (DECL_DISCRIMINATOR (d))
902 disc = build_int_cst (TREE_TYPE (disc),
903 TREE_INT_CST_LOW (DECL_DISCRIMINATOR (d)) + 1);
904 DECL_DISCRIMINATOR (decl) = disc;
905 /* Replace the saved decl. */
906 pair[0] = decl;
907 decl = NULL_TREE;
908 break;
909 }
910 }
911
912 if (decl)
913 {
914 vec_safe_reserve (local_entities, 2);
915 local_entities->quick_push (decl);
916 local_entities->quick_push (name);
917 }
918
919 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
920 }
921
922 \f
923 /* Subroutine of duplicate_decls: return truthvalue of whether
924 or not types of these decls match.
925
926 For C++, we must compare the parameter list so that `int' can match
927 `int&' in a parameter position, but `int&' is not confused with
928 `const int&'. */
929
930 int
931 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
932 {
933 int types_match;
934
935 if (newdecl == olddecl)
936 return 1;
937
938 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
939 /* If the two DECLs are not even the same kind of thing, we're not
940 interested in their types. */
941 return 0;
942
943 gcc_assert (DECL_P (newdecl));
944
945 if (TREE_CODE (newdecl) == FUNCTION_DECL)
946 {
947 tree f1 = TREE_TYPE (newdecl);
948 tree f2 = TREE_TYPE (olddecl);
949 tree p1 = TYPE_ARG_TYPES (f1);
950 tree p2 = TYPE_ARG_TYPES (f2);
951 tree r2;
952
953 /* Specializations of different templates are different functions
954 even if they have the same type. */
955 tree t1 = (DECL_USE_TEMPLATE (newdecl)
956 ? DECL_TI_TEMPLATE (newdecl)
957 : NULL_TREE);
958 tree t2 = (DECL_USE_TEMPLATE (olddecl)
959 ? DECL_TI_TEMPLATE (olddecl)
960 : NULL_TREE);
961 if (t1 != t2)
962 return 0;
963
964 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
965 && ! (DECL_EXTERN_C_P (newdecl)
966 && DECL_EXTERN_C_P (olddecl)))
967 return 0;
968
969 /* A new declaration doesn't match a built-in one unless it
970 is also extern "C". */
971 if (DECL_IS_BUILTIN (olddecl)
972 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
973 return 0;
974
975 if (TREE_CODE (f1) != TREE_CODE (f2))
976 return 0;
977
978 /* A declaration with deduced return type should use its pre-deduction
979 type for declaration matching. */
980 r2 = fndecl_declared_return_type (olddecl);
981
982 if (same_type_p (TREE_TYPE (f1), r2))
983 {
984 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
985 && fndecl_built_in_p (olddecl))
986 {
987 types_match = self_promoting_args_p (p1);
988 if (p1 == void_list_node)
989 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
990 }
991 else
992 types_match =
993 compparms (p1, p2)
994 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
995 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
996 || comp_type_attributes (TREE_TYPE (newdecl),
997 TREE_TYPE (olddecl)) != 0);
998 }
999 else
1000 types_match = 0;
1001
1002 /* The decls dont match if they correspond to two different versions
1003 of the same function. Disallow extern "C" functions to be
1004 versions for now. */
1005 if (types_match
1006 && !DECL_EXTERN_C_P (newdecl)
1007 && !DECL_EXTERN_C_P (olddecl)
1008 && record_versions
1009 && maybe_version_functions (newdecl, olddecl,
1010 (!DECL_FUNCTION_VERSIONED (newdecl)
1011 || !DECL_FUNCTION_VERSIONED (olddecl))))
1012 return 0;
1013 }
1014 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1015 {
1016 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1017 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1018
1019 if (TREE_CODE (newres) != TREE_CODE (oldres))
1020 return 0;
1021
1022 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1023 DECL_TEMPLATE_PARMS (olddecl)))
1024 return 0;
1025
1026 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1027 types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres))
1028 && equivalently_constrained (olddecl, newdecl));
1029 else
1030 // We don't need to check equivalently_constrained for variable and
1031 // function templates because we check it on the results.
1032 types_match = decls_match (oldres, newres);
1033 }
1034 else
1035 {
1036 /* Need to check scope for variable declaration (VAR_DECL).
1037 For typedef (TYPE_DECL), scope is ignored. */
1038 if (VAR_P (newdecl)
1039 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1040 /* [dcl.link]
1041 Two declarations for an object with C language linkage
1042 with the same name (ignoring the namespace that qualify
1043 it) that appear in different namespace scopes refer to
1044 the same object. */
1045 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1046 return 0;
1047
1048 if (TREE_TYPE (newdecl) == error_mark_node)
1049 types_match = TREE_TYPE (olddecl) == error_mark_node;
1050 else if (TREE_TYPE (olddecl) == NULL_TREE)
1051 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1052 else if (TREE_TYPE (newdecl) == NULL_TREE)
1053 types_match = 0;
1054 else
1055 types_match = comptypes (TREE_TYPE (newdecl),
1056 TREE_TYPE (olddecl),
1057 COMPARE_REDECLARATION);
1058 }
1059
1060 // Normal functions can be constrained, as can variable partial
1061 // specializations.
1062 if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl))
1063 types_match = equivalently_constrained (newdecl, olddecl);
1064
1065 return types_match;
1066 }
1067
1068 /* NEWDECL and OLDDECL have identical signatures. If they are
1069 different versions adjust them and return true.
1070 If RECORD is set to true, record function versions. */
1071
1072 bool
1073 maybe_version_functions (tree newdecl, tree olddecl, bool record)
1074 {
1075 if (!targetm.target_option.function_versions (newdecl, olddecl))
1076 return false;
1077
1078 if (!DECL_FUNCTION_VERSIONED (olddecl))
1079 {
1080 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1081 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1082 mangle_decl (olddecl);
1083 }
1084
1085 if (!DECL_FUNCTION_VERSIONED (newdecl))
1086 {
1087 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1088 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1089 mangle_decl (newdecl);
1090 }
1091
1092 if (record)
1093 cgraph_node::record_function_versions (olddecl, newdecl);
1094
1095 return true;
1096 }
1097
1098 /* If NEWDECL is `static' and an `extern' was seen previously,
1099 warn about it. OLDDECL is the previous declaration.
1100
1101 Note that this does not apply to the C++ case of declaring
1102 a variable `extern const' and then later `const'.
1103
1104 Don't complain about built-in functions, since they are beyond
1105 the user's control. */
1106
1107 void
1108 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1109 {
1110 if (TREE_CODE (newdecl) == TYPE_DECL
1111 || TREE_CODE (newdecl) == TEMPLATE_DECL
1112 || TREE_CODE (newdecl) == CONST_DECL
1113 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1114 return;
1115
1116 /* Don't get confused by static member functions; that's a different
1117 use of `static'. */
1118 if (TREE_CODE (newdecl) == FUNCTION_DECL
1119 && DECL_STATIC_FUNCTION_P (newdecl))
1120 return;
1121
1122 /* If the old declaration was `static', or the new one isn't, then
1123 everything is OK. */
1124 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1125 return;
1126
1127 /* It's OK to declare a builtin function as `static'. */
1128 if (TREE_CODE (olddecl) == FUNCTION_DECL
1129 && DECL_ARTIFICIAL (olddecl))
1130 return;
1131
1132 auto_diagnostic_group d;
1133 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1134 "%qD was declared %<extern%> and later %<static%>", newdecl))
1135 inform (DECL_SOURCE_LOCATION (olddecl),
1136 "previous declaration of %qD", olddecl);
1137 }
1138
1139 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1140 function templates. If their exception specifications do not
1141 match, issue a diagnostic. */
1142
1143 static void
1144 check_redeclaration_exception_specification (tree new_decl,
1145 tree old_decl)
1146 {
1147 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1148 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1149
1150 /* Two default specs are equivalent, don't force evaluation. */
1151 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1152 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1153 return;
1154
1155 if (!type_dependent_expression_p (old_decl))
1156 {
1157 maybe_instantiate_noexcept (new_decl);
1158 maybe_instantiate_noexcept (old_decl);
1159 }
1160 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1161 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1162
1163 /* [except.spec]
1164
1165 If any declaration of a function has an exception-specification,
1166 all declarations, including the definition and an explicit
1167 specialization, of that function shall have an
1168 exception-specification with the same set of type-ids. */
1169 if (! DECL_IS_BUILTIN (old_decl)
1170 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1171 {
1172 const char *const msg
1173 = G_("declaration of %qF has a different exception specifier");
1174 bool complained = true;
1175 location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1176 auto_diagnostic_group d;
1177 if (DECL_IN_SYSTEM_HEADER (old_decl))
1178 complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl);
1179 else if (!flag_exceptions)
1180 /* We used to silently permit mismatched eh specs with
1181 -fno-exceptions, so make them a pedwarn now. */
1182 complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl);
1183 else
1184 error_at (new_loc, msg, new_decl);
1185 if (complained)
1186 inform (DECL_SOURCE_LOCATION (old_decl),
1187 "from previous declaration %qF", old_decl);
1188 }
1189 }
1190
1191 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1192 Otherwise issue diagnostics. */
1193
1194 static bool
1195 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1196 {
1197 old_decl = STRIP_TEMPLATE (old_decl);
1198 new_decl = STRIP_TEMPLATE (new_decl);
1199 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1200 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1201 return true;
1202 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1203 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1204 return true;
1205 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1206 {
1207 if (fndecl_built_in_p (old_decl))
1208 {
1209 /* Hide a built-in declaration. */
1210 DECL_DECLARED_CONSTEXPR_P (old_decl)
1211 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1212 return true;
1213 }
1214 /* 7.1.5 [dcl.constexpr]
1215 Note: An explicit specialization can differ from the template
1216 declaration with respect to the constexpr specifier. */
1217 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1218 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1219 return true;
1220
1221 error_at (DECL_SOURCE_LOCATION (new_decl),
1222 "redeclaration %qD differs in %<constexpr%> "
1223 "from previous declaration", new_decl);
1224 inform (DECL_SOURCE_LOCATION (old_decl),
1225 "previous declaration %qD", old_decl);
1226 return false;
1227 }
1228 return true;
1229 }
1230
1231 // If OLDDECL and NEWDECL are concept declarations with the same type
1232 // (i.e., and template parameters), but different requirements,
1233 // emit diagnostics and return true. Otherwise, return false.
1234 static inline bool
1235 check_concept_refinement (tree olddecl, tree newdecl)
1236 {
1237 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1238 return false;
1239
1240 tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1241 tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1242 if (TREE_CODE (d1) != TREE_CODE (d2))
1243 return false;
1244
1245 tree t1 = TREE_TYPE (d1);
1246 tree t2 = TREE_TYPE (d2);
1247 if (TREE_CODE (d1) == FUNCTION_DECL)
1248 {
1249 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1250 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1251 DECL_TEMPLATE_PARMS (newdecl))
1252 && !equivalently_constrained (olddecl, newdecl))
1253 {
1254 error ("cannot specialize concept %q#D", olddecl);
1255 return true;
1256 }
1257 }
1258 return false;
1259 }
1260
1261 /* DECL is a redeclaration of a function or function template. If
1262 it does have default arguments issue a diagnostic. Note: this
1263 function is used to enforce the requirements in C++11 8.3.6 about
1264 no default arguments in redeclarations. */
1265
1266 static void
1267 check_redeclaration_no_default_args (tree decl)
1268 {
1269 gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1270
1271 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1272 t && t != void_list_node; t = TREE_CHAIN (t))
1273 if (TREE_PURPOSE (t))
1274 {
1275 permerror (DECL_SOURCE_LOCATION (decl),
1276 "redeclaration of %q#D may not have default "
1277 "arguments", decl);
1278 return;
1279 }
1280 }
1281
1282 /* NEWDECL is a redeclaration of a function or function template OLDDECL,
1283 in any case represented as FUNCTION_DECLs (the DECL_TEMPLATE_RESULTs of
1284 the TEMPLATE_DECLs in case of function templates). This function is used
1285 to enforce the final part of C++17 11.3.6/4, about a single declaration:
1286 "If a friend declaration specifies a default argument expression, that
1287 declaration shall be a definition and shall be the only declaration of
1288 the function or function template in the translation unit." */
1289
1290 static void
1291 check_no_redeclaration_friend_default_args (tree olddecl, tree newdecl,
1292 bool olddecl_hidden_friend_p)
1293 {
1294 if (!olddecl_hidden_friend_p && !DECL_FRIEND_P (newdecl))
1295 return;
1296
1297 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1298 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1299
1300 for (; t1 && t1 != void_list_node;
1301 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1302 if ((olddecl_hidden_friend_p && TREE_PURPOSE (t1))
1303 || (DECL_FRIEND_P (newdecl) && TREE_PURPOSE (t2)))
1304 {
1305 auto_diagnostic_group d;
1306 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1307 "friend declaration of %q#D specifies default "
1308 "arguments and isn't the only declaration", newdecl))
1309 inform (DECL_SOURCE_LOCATION (olddecl),
1310 "previous declaration of %q#D", olddecl);
1311 return;
1312 }
1313 }
1314
1315 /* Merge tree bits that correspond to attributes noreturn, nothrow,
1316 const, malloc, and pure from NEWDECL with those of OLDDECL. */
1317
1318 static void
1319 merge_attribute_bits (tree newdecl, tree olddecl)
1320 {
1321 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1322 TREE_THIS_VOLATILE (olddecl) |= TREE_THIS_VOLATILE (newdecl);
1323 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1324 TREE_NOTHROW (olddecl) |= TREE_NOTHROW (newdecl);
1325 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1326 TREE_READONLY (olddecl) |= TREE_READONLY (newdecl);
1327 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1328 DECL_IS_MALLOC (olddecl) |= DECL_IS_MALLOC (newdecl);
1329 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1330 DECL_PURE_P (olddecl) |= DECL_PURE_P (newdecl);
1331 DECL_UNINLINABLE (newdecl) |= DECL_UNINLINABLE (olddecl);
1332 DECL_UNINLINABLE (olddecl) |= DECL_UNINLINABLE (newdecl);
1333 }
1334
1335 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1336 && lookup_attribute ("gnu_inline", \
1337 DECL_ATTRIBUTES (fn)))
1338
1339 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1340 If the redeclaration is invalid, a diagnostic is issued, and the
1341 error_mark_node is returned. Otherwise, OLDDECL is returned.
1342
1343 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1344 returned.
1345
1346 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1347
1348 tree
1349 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1350 {
1351 unsigned olddecl_uid = DECL_UID (olddecl);
1352 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1353 int olddecl_hidden_friend = 0;
1354 int new_defines_function = 0;
1355 tree new_template_info;
1356 location_t olddecl_loc = DECL_SOURCE_LOCATION (olddecl);
1357 location_t newdecl_loc = DECL_SOURCE_LOCATION (newdecl);
1358
1359 if (newdecl == olddecl)
1360 return olddecl;
1361
1362 types_match = decls_match (newdecl, olddecl);
1363
1364 /* If either the type of the new decl or the type of the old decl is an
1365 error_mark_node, then that implies that we have already issued an
1366 error (earlier) for some bogus type specification, and in that case,
1367 it is rather pointless to harass the user with yet more error message
1368 about the same declaration, so just pretend the types match here. */
1369 if (TREE_TYPE (newdecl) == error_mark_node
1370 || TREE_TYPE (olddecl) == error_mark_node)
1371 return error_mark_node;
1372
1373 /* Check for redeclaration and other discrepancies. */
1374 if (TREE_CODE (olddecl) == FUNCTION_DECL
1375 && DECL_ARTIFICIAL (olddecl))
1376 {
1377 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1378 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1379 {
1380 /* Avoid warnings redeclaring built-ins which have not been
1381 explicitly declared. */
1382 if (DECL_ANTICIPATED (olddecl))
1383 {
1384 if (TREE_PUBLIC (newdecl)
1385 && CP_DECL_CONTEXT (newdecl) == global_namespace)
1386 warning_at (newdecl_loc,
1387 OPT_Wbuiltin_declaration_mismatch,
1388 "built-in function %qD declared as non-function",
1389 newdecl);
1390 return NULL_TREE;
1391 }
1392
1393 /* If you declare a built-in or predefined function name as static,
1394 the old definition is overridden, but optionally warn this was a
1395 bad choice of name. */
1396 if (! TREE_PUBLIC (newdecl))
1397 {
1398 warning_at (newdecl_loc,
1399 OPT_Wshadow,
1400 fndecl_built_in_p (olddecl)
1401 ? G_("shadowing built-in function %q#D")
1402 : G_("shadowing library function %q#D"), olddecl);
1403 /* Discard the old built-in function. */
1404 return NULL_TREE;
1405 }
1406 /* If the built-in is not ansi, then programs can override
1407 it even globally without an error. */
1408 else if (! fndecl_built_in_p (olddecl))
1409 warning_at (newdecl_loc, 0,
1410 "library function %q#D redeclared as non-function %q#D",
1411 olddecl, newdecl);
1412 else
1413 error_at (newdecl_loc,
1414 "declaration of %q#D conflicts with built-in "
1415 "declaration %q#D", newdecl, olddecl);
1416 return NULL_TREE;
1417 }
1418 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1419 {
1420 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1421 error_at (newdecl_loc,
1422 "redeclaration of %<pragma omp declare reduction%>");
1423 inform (olddecl_loc,
1424 "previous %<pragma omp declare reduction%> declaration");
1425 return error_mark_node;
1426 }
1427 else if (!types_match)
1428 {
1429 /* Avoid warnings redeclaring built-ins which have not been
1430 explicitly declared. */
1431 if (DECL_ANTICIPATED (olddecl))
1432 {
1433 tree t1, t2;
1434
1435 /* A new declaration doesn't match a built-in one unless it
1436 is also extern "C". */
1437 gcc_assert (DECL_IS_BUILTIN (olddecl));
1438 gcc_assert (DECL_EXTERN_C_P (olddecl));
1439 if (!DECL_EXTERN_C_P (newdecl))
1440 return NULL_TREE;
1441
1442 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1443 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1444 t1 || t2;
1445 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1446 {
1447 if (!t1 || !t2)
1448 break;
1449 /* FILE, tm types are not known at the time
1450 we create the builtins. */
1451 for (unsigned i = 0;
1452 i < sizeof (builtin_structptr_types)
1453 / sizeof (builtin_structptr_type);
1454 ++i)
1455 if (TREE_VALUE (t2) == builtin_structptr_types[i].node)
1456 {
1457 tree t = TREE_VALUE (t1);
1458
1459 if (TYPE_PTR_P (t)
1460 && TYPE_IDENTIFIER (TREE_TYPE (t))
1461 == get_identifier (builtin_structptr_types[i].str)
1462 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1463 {
1464 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1465
1466 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1467 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1468 types_match = decls_match (newdecl, olddecl);
1469 if (types_match)
1470 return duplicate_decls (newdecl, olddecl,
1471 newdecl_is_friend);
1472 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1473 }
1474 goto next_arg;
1475 }
1476
1477 if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1478 break;
1479 next_arg:;
1480 }
1481
1482 warning_at (newdecl_loc,
1483 OPT_Wbuiltin_declaration_mismatch,
1484 "declaration of %q#D conflicts with built-in "
1485 "declaration %q#D", newdecl, olddecl);
1486 }
1487 else if ((DECL_EXTERN_C_P (newdecl)
1488 && DECL_EXTERN_C_P (olddecl))
1489 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1490 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1491 {
1492 /* Don't really override olddecl for __* prefixed builtins
1493 except for __[^b]*_chk, the compiler might be using those
1494 explicitly. */
1495 if (fndecl_built_in_p (olddecl))
1496 {
1497 tree id = DECL_NAME (olddecl);
1498 const char *name = IDENTIFIER_POINTER (id);
1499 size_t len;
1500
1501 if (name[0] == '_'
1502 && name[1] == '_'
1503 && (strncmp (name + 2, "builtin_",
1504 strlen ("builtin_")) == 0
1505 || (len = strlen (name)) <= strlen ("___chk")
1506 || memcmp (name + len - strlen ("_chk"),
1507 "_chk", strlen ("_chk") + 1) != 0))
1508 {
1509 if (DECL_INITIAL (newdecl))
1510 {
1511 error_at (newdecl_loc,
1512 "definition of %q#D ambiguates built-in "
1513 "declaration %q#D", newdecl, olddecl);
1514 return error_mark_node;
1515 }
1516 auto_diagnostic_group d;
1517 if (permerror (newdecl_loc,
1518 "new declaration %q#D ambiguates built-in"
1519 " declaration %q#D", newdecl, olddecl)
1520 && flag_permissive)
1521 inform (newdecl_loc,
1522 "ignoring the %q#D declaration", newdecl);
1523 return flag_permissive ? olddecl : error_mark_node;
1524 }
1525 }
1526
1527 /* A near match; override the builtin. */
1528
1529 if (TREE_PUBLIC (newdecl))
1530 warning_at (newdecl_loc,
1531 OPT_Wbuiltin_declaration_mismatch,
1532 "new declaration %q#D ambiguates built-in "
1533 "declaration %q#D", newdecl, olddecl);
1534 else
1535 warning (OPT_Wshadow,
1536 fndecl_built_in_p (olddecl)
1537 ? G_("shadowing built-in function %q#D")
1538 : G_("shadowing library function %q#D"), olddecl);
1539 }
1540 else
1541 /* Discard the old built-in function. */
1542 return NULL_TREE;
1543
1544 /* Replace the old RTL to avoid problems with inlining. */
1545 COPY_DECL_RTL (newdecl, olddecl);
1546 }
1547 /* Even if the types match, prefer the new declarations type for
1548 built-ins which have not been explicitly declared, for
1549 exception lists, etc... */
1550 else if (DECL_IS_BUILTIN (olddecl))
1551 {
1552 tree type = TREE_TYPE (newdecl);
1553 tree attribs = (*targetm.merge_type_attributes)
1554 (TREE_TYPE (olddecl), type);
1555
1556 type = cp_build_type_attribute_variant (type, attribs);
1557 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1558 }
1559
1560 /* If a function is explicitly declared "throw ()", propagate that to
1561 the corresponding builtin. */
1562 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1563 && DECL_ANTICIPATED (olddecl)
1564 && TREE_NOTHROW (newdecl)
1565 && !TREE_NOTHROW (olddecl))
1566 {
1567 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1568 tree tmpdecl = builtin_decl_explicit (fncode);
1569 if (tmpdecl && tmpdecl != olddecl && types_match)
1570 TREE_NOTHROW (tmpdecl) = 1;
1571 }
1572
1573 /* Whether or not the builtin can throw exceptions has no
1574 bearing on this declarator. */
1575 TREE_NOTHROW (olddecl) = 0;
1576
1577 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1578 {
1579 /* If a builtin function is redeclared as `static', merge
1580 the declarations, but make the original one static. */
1581 DECL_THIS_STATIC (olddecl) = 1;
1582 TREE_PUBLIC (olddecl) = 0;
1583
1584 /* Make the old declaration consistent with the new one so
1585 that all remnants of the builtin-ness of this function
1586 will be banished. */
1587 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1588 COPY_DECL_RTL (newdecl, olddecl);
1589 }
1590 }
1591 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1592 {
1593 /* C++ Standard, 3.3, clause 4:
1594 "[Note: a namespace name or a class template name must be unique
1595 in its declarative region (7.3.2, clause 14). ]" */
1596 if (TREE_CODE (olddecl) == NAMESPACE_DECL
1597 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1598 /* Namespace conflicts with not namespace. */;
1599 else if (DECL_TYPE_TEMPLATE_P (olddecl)
1600 || DECL_TYPE_TEMPLATE_P (newdecl))
1601 /* Class template conflicts. */;
1602 else if ((TREE_CODE (newdecl) == FUNCTION_DECL
1603 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1604 || (TREE_CODE (olddecl) == FUNCTION_DECL
1605 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1606 {
1607 /* One is a function and the other is a template
1608 function. */
1609 if (!UDLIT_OPER_P (DECL_NAME (newdecl)))
1610 return NULL_TREE;
1611
1612 /* There can only be one! */
1613 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1614 && check_raw_literal_operator (olddecl))
1615 error_at (newdecl_loc,
1616 "literal operator %q#D conflicts with"
1617 " raw literal operator", newdecl);
1618 else if (check_raw_literal_operator (newdecl))
1619 error_at (newdecl_loc,
1620 "raw literal operator %q#D conflicts with"
1621 " literal operator template", newdecl);
1622 else
1623 return NULL_TREE;
1624
1625 inform (olddecl_loc, "previous declaration %q#D", olddecl);
1626 return error_mark_node;
1627 }
1628 else if (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1629 || DECL_IMPLICIT_TYPEDEF_P (newdecl))
1630 /* One is an implicit typedef, that's ok. */
1631 return NULL_TREE;
1632
1633 error ("%q#D redeclared as different kind of entity", newdecl);
1634 inform (olddecl_loc, "previous declaration %q#D", olddecl);
1635
1636 return error_mark_node;
1637 }
1638 else if (!types_match)
1639 {
1640 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1641 /* These are certainly not duplicate declarations; they're
1642 from different scopes. */
1643 return NULL_TREE;
1644
1645 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1646 {
1647 /* The name of a class template may not be declared to refer to
1648 any other template, class, function, object, namespace, value,
1649 or type in the same scope. */
1650 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1651 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1652 {
1653 error_at (newdecl_loc,
1654 "conflicting declaration of template %q#D", newdecl);
1655 inform (olddecl_loc,
1656 "previous declaration %q#D", olddecl);
1657 return error_mark_node;
1658 }
1659 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1660 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1661 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1662 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1663 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1664 DECL_TEMPLATE_PARMS (olddecl))
1665 /* Template functions can be disambiguated by
1666 return type. */
1667 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1668 TREE_TYPE (TREE_TYPE (olddecl)))
1669 /* Template functions can also be disambiguated by
1670 constraints. */
1671 && equivalently_constrained (olddecl, newdecl))
1672 {
1673 error_at (newdecl_loc, "ambiguating new declaration %q#D",
1674 newdecl);
1675 inform (olddecl_loc,
1676 "old declaration %q#D", olddecl);
1677 }
1678 else if (check_concept_refinement (olddecl, newdecl))
1679 return error_mark_node;
1680 return NULL_TREE;
1681 }
1682 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1683 {
1684 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1685 {
1686 error_at (newdecl_loc,
1687 "conflicting declaration of C function %q#D",
1688 newdecl);
1689 inform (olddecl_loc,
1690 "previous declaration %q#D", olddecl);
1691 return NULL_TREE;
1692 }
1693 /* For function versions, params and types match, but they
1694 are not ambiguous. */
1695 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1696 && !DECL_FUNCTION_VERSIONED (olddecl))
1697 // The functions have the same parameter types.
1698 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1699 TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1700 // And the same constraints.
1701 && equivalently_constrained (newdecl, olddecl))
1702 {
1703 error_at (newdecl_loc,
1704 "ambiguating new declaration of %q#D", newdecl);
1705 inform (olddecl_loc,
1706 "old declaration %q#D", olddecl);
1707 return error_mark_node;
1708 }
1709 else
1710 return NULL_TREE;
1711 }
1712 else
1713 {
1714 error_at (newdecl_loc, "conflicting declaration %q#D", newdecl);
1715 inform (olddecl_loc,
1716 "previous declaration as %q#D", olddecl);
1717 return error_mark_node;
1718 }
1719 }
1720 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1721 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1722 && (!DECL_TEMPLATE_INFO (newdecl)
1723 || (DECL_TI_TEMPLATE (newdecl)
1724 != DECL_TI_TEMPLATE (olddecl))))
1725 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1726 && (!DECL_TEMPLATE_INFO (olddecl)
1727 || (DECL_TI_TEMPLATE (olddecl)
1728 != DECL_TI_TEMPLATE (newdecl))))))
1729 /* It's OK to have a template specialization and a non-template
1730 with the same type, or to have specializations of two
1731 different templates with the same type. Note that if one is a
1732 specialization, and the other is an instantiation of the same
1733 template, that we do not exit at this point. That situation
1734 can occur if we instantiate a template class, and then
1735 specialize one of its methods. This situation is valid, but
1736 the declarations must be merged in the usual way. */
1737 return NULL_TREE;
1738 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1739 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1740 && !DECL_USE_TEMPLATE (newdecl))
1741 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1742 && !DECL_USE_TEMPLATE (olddecl))))
1743 /* One of the declarations is a template instantiation, and the
1744 other is not a template at all. That's OK. */
1745 return NULL_TREE;
1746 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1747 {
1748 /* In [namespace.alias] we have:
1749
1750 In a declarative region, a namespace-alias-definition can be
1751 used to redefine a namespace-alias declared in that declarative
1752 region to refer only to the namespace to which it already
1753 refers.
1754
1755 Therefore, if we encounter a second alias directive for the same
1756 alias, we can just ignore the second directive. */
1757 if (DECL_NAMESPACE_ALIAS (newdecl)
1758 && (DECL_NAMESPACE_ALIAS (newdecl)
1759 == DECL_NAMESPACE_ALIAS (olddecl)))
1760 return olddecl;
1761
1762 /* Leave it to update_binding to merge or report error. */
1763 return NULL_TREE;
1764 }
1765 else
1766 {
1767 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1768 if (errmsg)
1769 {
1770 auto_diagnostic_group d;
1771 error_at (newdecl_loc, errmsg, newdecl);
1772 if (DECL_NAME (olddecl) != NULL_TREE)
1773 inform (olddecl_loc,
1774 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1775 ? G_("%q#D previously defined here")
1776 : G_("%q#D previously declared here"), olddecl);
1777 return error_mark_node;
1778 }
1779 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1780 && DECL_INITIAL (olddecl) != NULL_TREE
1781 && !prototype_p (TREE_TYPE (olddecl))
1782 && prototype_p (TREE_TYPE (newdecl)))
1783 {
1784 /* Prototype decl follows defn w/o prototype. */
1785 auto_diagnostic_group d;
1786 if (warning_at (newdecl_loc, 0,
1787 "prototype specified for %q#D", newdecl))
1788 inform (olddecl_loc,
1789 "previous non-prototype definition here");
1790 }
1791 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1792 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1793 {
1794 /* [dcl.link]
1795 If two declarations of the same function or object
1796 specify different linkage-specifications ..., the program
1797 is ill-formed.... Except for functions with C++ linkage,
1798 a function declaration without a linkage specification
1799 shall not precede the first linkage specification for
1800 that function. A function can be declared without a
1801 linkage specification after an explicit linkage
1802 specification has been seen; the linkage explicitly
1803 specified in the earlier declaration is not affected by
1804 such a function declaration.
1805
1806 DR 563 raises the question why the restrictions on
1807 functions should not also apply to objects. Older
1808 versions of G++ silently ignore the linkage-specification
1809 for this example:
1810
1811 namespace N {
1812 extern int i;
1813 extern "C" int i;
1814 }
1815
1816 which is clearly wrong. Therefore, we now treat objects
1817 like functions. */
1818 if (current_lang_depth () == 0)
1819 {
1820 /* There is no explicit linkage-specification, so we use
1821 the linkage from the previous declaration. */
1822 retrofit_lang_decl (newdecl);
1823 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1824 }
1825 else
1826 {
1827 auto_diagnostic_group d;
1828 error_at (newdecl_loc,
1829 "conflicting declaration of %q#D with %qL linkage",
1830 newdecl, DECL_LANGUAGE (newdecl));
1831 inform (olddecl_loc,
1832 "previous declaration with %qL linkage",
1833 DECL_LANGUAGE (olddecl));
1834 }
1835 }
1836
1837 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1838 ;
1839 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1840 {
1841 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */
1842 if (DECL_FUNCTION_MEMBER_P (olddecl)
1843 && (/* grokfndecl passes member function templates too
1844 as FUNCTION_DECLs. */
1845 DECL_TEMPLATE_INFO (olddecl)
1846 /* C++11 8.3.6/6.
1847 Default arguments for a member function of a class
1848 template shall be specified on the initial declaration
1849 of the member function within the class template. */
1850 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1851 check_redeclaration_no_default_args (newdecl);
1852 else
1853 {
1854 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1855 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1856 int i = 1;
1857
1858 for (; t1 && t1 != void_list_node;
1859 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1860 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1861 {
1862 if (simple_cst_equal (TREE_PURPOSE (t1),
1863 TREE_PURPOSE (t2)) == 1)
1864 {
1865 auto_diagnostic_group d;
1866 if (permerror (newdecl_loc,
1867 "default argument given for parameter "
1868 "%d of %q#D", i, newdecl))
1869 inform (olddecl_loc,
1870 "previous specification in %q#D here",
1871 olddecl);
1872 }
1873 else
1874 {
1875 auto_diagnostic_group d;
1876 error_at (newdecl_loc,
1877 "default argument given for parameter %d "
1878 "of %q#D", i, newdecl);
1879 inform (olddecl_loc,
1880 "previous specification in %q#D here",
1881 olddecl);
1882 }
1883 }
1884
1885 /* C++17 11.3.6/4: "If a friend declaration specifies a default
1886 argument expression, that declaration... shall be the only
1887 declaration of the function or function template in the
1888 translation unit." */
1889 check_no_redeclaration_friend_default_args
1890 (olddecl, newdecl, DECL_HIDDEN_FRIEND_P (olddecl));
1891 }
1892 }
1893 }
1894
1895 /* Do not merge an implicit typedef with an explicit one. In:
1896
1897 class A;
1898 ...
1899 typedef class A A __attribute__ ((foo));
1900
1901 the attribute should apply only to the typedef. */
1902 if (TREE_CODE (olddecl) == TYPE_DECL
1903 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1904 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1905 return NULL_TREE;
1906
1907 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1908 return error_mark_node;
1909
1910 /* We have committed to returning OLDDECL at this point. */
1911
1912 /* If new decl is `static' and an `extern' was seen previously,
1913 warn about it. */
1914 warn_extern_redeclared_static (newdecl, olddecl);
1915
1916 /* True to merge attributes between the declarations, false to
1917 set OLDDECL's attributes to those of NEWDECL (for template
1918 explicit specializations that specify their own attributes
1919 independent of those specified for the primary template). */
1920 const bool merge_attr = (TREE_CODE (newdecl) != FUNCTION_DECL
1921 || !DECL_TEMPLATE_SPECIALIZATION (newdecl)
1922 || DECL_TEMPLATE_SPECIALIZATION (olddecl));
1923
1924 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1925 {
1926 if (merge_attr && diagnose_mismatched_attributes (olddecl, newdecl))
1927 inform (olddecl_loc, DECL_INITIAL (olddecl)
1928 ? G_("previous definition of %qD here")
1929 : G_("previous declaration of %qD here"), olddecl);
1930
1931 /* Now that functions must hold information normally held
1932 by field decls, there is extra work to do so that
1933 declaration information does not get destroyed during
1934 definition. */
1935 if (DECL_VINDEX (olddecl))
1936 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1937 if (DECL_CONTEXT (olddecl))
1938 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1939 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1940 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1941 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1942 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1943 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1944 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1945 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1946 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1947 if (DECL_OVERLOADED_OPERATOR_P (olddecl))
1948 DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
1949 = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
1950 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1951
1952 /* Optionally warn about more than one declaration for the same
1953 name, but don't warn about a function declaration followed by a
1954 definition. */
1955 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1956 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1957 /* Don't warn about extern decl followed by definition. */
1958 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1959 /* Don't warn about friends, let add_friend take care of it. */
1960 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1961 /* Don't warn about declaration followed by specialization. */
1962 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1963 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1964 {
1965 auto_diagnostic_group d;
1966 if (warning_at (newdecl_loc,
1967 OPT_Wredundant_decls,
1968 "redundant redeclaration of %qD in same scope",
1969 newdecl))
1970 inform (olddecl_loc,
1971 "previous declaration of %qD", olddecl);
1972 }
1973
1974 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1975 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1976 {
1977 if (DECL_DELETED_FN (newdecl))
1978 {
1979 auto_diagnostic_group d;
1980 error_at (newdecl_loc, "deleted definition of %qD", newdecl);
1981 inform (olddecl_loc,
1982 "previous declaration of %qD", olddecl);
1983 }
1984 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1985 }
1986 }
1987
1988 /* Deal with C++: must preserve virtual function table size. */
1989 if (TREE_CODE (olddecl) == TYPE_DECL)
1990 {
1991 tree newtype = TREE_TYPE (newdecl);
1992 tree oldtype = TREE_TYPE (olddecl);
1993
1994 if (newtype != error_mark_node && oldtype != error_mark_node
1995 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1996 CLASSTYPE_FRIEND_CLASSES (newtype)
1997 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1998
1999 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
2000 }
2001
2002 /* Copy all the DECL_... slots specified in the new decl except for
2003 any that we copy here from the old type. */
2004 if (merge_attr)
2005 DECL_ATTRIBUTES (newdecl)
2006 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
2007 else
2008 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2009
2010 if (DECL_DECLARES_FUNCTION_P (olddecl))
2011 {
2012 olddecl_friend = DECL_FRIEND_P (olddecl);
2013 olddecl_hidden_friend = DECL_HIDDEN_FRIEND_P (olddecl);
2014 hidden_friend = (DECL_ANTICIPATED (olddecl)
2015 && DECL_HIDDEN_FRIEND_P (olddecl)
2016 && newdecl_is_friend);
2017 if (!hidden_friend)
2018 {
2019 DECL_ANTICIPATED (olddecl) = 0;
2020 DECL_HIDDEN_FRIEND_P (olddecl) = 0;
2021 }
2022 }
2023
2024 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2025 {
2026 tree old_result = DECL_TEMPLATE_RESULT (olddecl);
2027 tree new_result = DECL_TEMPLATE_RESULT (newdecl);
2028 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2029 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
2030 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
2031 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2032
2033 DECL_ATTRIBUTES (old_result)
2034 = (*targetm.merge_decl_attributes) (old_result, new_result);
2035
2036 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2037 {
2038 if (DECL_SOURCE_LOCATION (newdecl)
2039 != DECL_SOURCE_LOCATION (olddecl))
2040 {
2041 /* Per C++11 8.3.6/4, default arguments cannot be added in
2042 later declarations of a function template. */
2043 check_redeclaration_no_default_args (newdecl);
2044 /* C++17 11.3.6/4: "If a friend declaration specifies a default
2045 argument expression, that declaration... shall be the only
2046 declaration of the function or function template in the
2047 translation unit." */
2048 check_no_redeclaration_friend_default_args
2049 (old_result, new_result, olddecl_hidden_friend);
2050 }
2051
2052 check_default_args (newdecl);
2053
2054 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2055 && DECL_INITIAL (new_result))
2056 {
2057 if (DECL_INITIAL (old_result))
2058 DECL_UNINLINABLE (old_result) = 1;
2059 else
2060 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2061 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2062 DECL_NOT_REALLY_EXTERN (old_result)
2063 = DECL_NOT_REALLY_EXTERN (new_result);
2064 DECL_INTERFACE_KNOWN (old_result)
2065 = DECL_INTERFACE_KNOWN (new_result);
2066 DECL_DECLARED_INLINE_P (old_result)
2067 = DECL_DECLARED_INLINE_P (new_result);
2068 DECL_DISREGARD_INLINE_LIMITS (old_result)
2069 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2070
2071 }
2072 else
2073 {
2074 DECL_DECLARED_INLINE_P (old_result)
2075 |= DECL_DECLARED_INLINE_P (new_result);
2076 DECL_DISREGARD_INLINE_LIMITS (old_result)
2077 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2078 check_redeclaration_exception_specification (newdecl, olddecl);
2079
2080 merge_attribute_bits (new_result, old_result);
2081 }
2082 }
2083
2084 /* If the new declaration is a definition, update the file and
2085 line information on the declaration, and also make
2086 the old declaration the same definition. */
2087 if (DECL_INITIAL (new_result) != NULL_TREE)
2088 {
2089 DECL_SOURCE_LOCATION (olddecl)
2090 = DECL_SOURCE_LOCATION (old_result)
2091 = DECL_SOURCE_LOCATION (newdecl);
2092 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2093 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2094 {
2095 tree parm;
2096 DECL_ARGUMENTS (old_result)
2097 = DECL_ARGUMENTS (new_result);
2098 for (parm = DECL_ARGUMENTS (old_result); parm;
2099 parm = DECL_CHAIN (parm))
2100 DECL_CONTEXT (parm) = old_result;
2101 }
2102 }
2103
2104 return olddecl;
2105 }
2106
2107 if (types_match)
2108 {
2109 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2110 check_redeclaration_exception_specification (newdecl, olddecl);
2111
2112 /* Automatically handles default parameters. */
2113 tree oldtype = TREE_TYPE (olddecl);
2114 tree newtype;
2115
2116 /* For typedefs use the old type, as the new type's DECL_NAME points
2117 at newdecl, which will be ggc_freed. */
2118 if (TREE_CODE (newdecl) == TYPE_DECL)
2119 {
2120 /* But NEWTYPE might have an attribute, honor that. */
2121 tree tem = TREE_TYPE (newdecl);
2122 newtype = oldtype;
2123
2124 if (TYPE_USER_ALIGN (tem))
2125 {
2126 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2127 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2128 TYPE_USER_ALIGN (newtype) = true;
2129 }
2130
2131 /* And remove the new type from the variants list. */
2132 if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2133 {
2134 tree remove = TREE_TYPE (newdecl);
2135 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2136 t = TYPE_NEXT_VARIANT (t))
2137 if (TYPE_NEXT_VARIANT (t) == remove)
2138 {
2139 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2140 break;
2141 }
2142 }
2143 }
2144 else if (merge_attr)
2145 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2146 else
2147 newtype = TREE_TYPE (newdecl);
2148
2149 if (VAR_P (newdecl))
2150 {
2151 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2152 /* For already initialized vars, TREE_READONLY could have been
2153 cleared in cp_finish_decl, because the var needs runtime
2154 initialization or destruction. Make sure not to set
2155 TREE_READONLY on it again. */
2156 if (DECL_INITIALIZED_P (olddecl)
2157 && !DECL_EXTERNAL (olddecl)
2158 && !TREE_READONLY (olddecl))
2159 TREE_READONLY (newdecl) = 0;
2160 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2161 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2162 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2163 if (DECL_DEPENDENT_INIT_P (olddecl))
2164 SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2165 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2166 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2167 if (DECL_CLASS_SCOPE_P (olddecl))
2168 DECL_DECLARED_CONSTEXPR_P (newdecl)
2169 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2170
2171 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2172 if (DECL_LANG_SPECIFIC (olddecl)
2173 && CP_DECL_THREADPRIVATE_P (olddecl))
2174 {
2175 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2176 retrofit_lang_decl (newdecl);
2177 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2178 }
2179 }
2180
2181 /* An explicit specialization of a function template or of a member
2182 function of a class template can be declared transaction_safe
2183 independently of whether the corresponding template entity is declared
2184 transaction_safe. */
2185 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2186 && DECL_TEMPLATE_INSTANTIATION (olddecl)
2187 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2188 && tx_safe_fn_type_p (newtype)
2189 && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2190 newtype = tx_unsafe_fn_variant (newtype);
2191
2192 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2193
2194 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2195 check_default_args (newdecl);
2196
2197 /* Lay the type out, unless already done. */
2198 if (! same_type_p (newtype, oldtype)
2199 && TREE_TYPE (newdecl) != error_mark_node
2200 && !(processing_template_decl && uses_template_parms (newdecl)))
2201 layout_type (TREE_TYPE (newdecl));
2202
2203 if ((VAR_P (newdecl)
2204 || TREE_CODE (newdecl) == PARM_DECL
2205 || TREE_CODE (newdecl) == RESULT_DECL
2206 || TREE_CODE (newdecl) == FIELD_DECL
2207 || TREE_CODE (newdecl) == TYPE_DECL)
2208 && !(processing_template_decl && uses_template_parms (newdecl)))
2209 layout_decl (newdecl, 0);
2210
2211 /* Merge deprecatedness. */
2212 if (TREE_DEPRECATED (newdecl))
2213 TREE_DEPRECATED (olddecl) = 1;
2214
2215 /* Preserve function specific target and optimization options */
2216 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2217 {
2218 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2219 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2220 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2221 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2222
2223 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2224 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2225 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2226 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2227 }
2228 else
2229 {
2230 /* Merge the const type qualifier. */
2231 if (TREE_READONLY (newdecl))
2232 TREE_READONLY (olddecl) = 1;
2233 /* Merge the volatile type qualifier. */
2234 if (TREE_THIS_VOLATILE (newdecl))
2235 TREE_THIS_VOLATILE (olddecl) = 1;
2236 }
2237
2238 /* Merge the initialization information. */
2239 if (DECL_INITIAL (newdecl) == NULL_TREE
2240 && DECL_INITIAL (olddecl) != NULL_TREE)
2241 {
2242 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2243 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2244 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2245 {
2246 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2247 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2248 }
2249 }
2250
2251 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2252 {
2253 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2254 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2255 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2256 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2257 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2258 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2259
2260 if (merge_attr)
2261 merge_attribute_bits (newdecl, olddecl);
2262 else
2263 {
2264 /* Merge the noreturn bit. */
2265 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2266 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2267 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2268 DECL_IS_MALLOC (olddecl) = DECL_IS_MALLOC (newdecl);
2269 DECL_PURE_P (olddecl) = DECL_PURE_P (newdecl);
2270 }
2271 /* Keep the old RTL. */
2272 COPY_DECL_RTL (olddecl, newdecl);
2273 }
2274 else if (VAR_P (newdecl)
2275 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2276 {
2277 /* Keep the old RTL. We cannot keep the old RTL if the old
2278 declaration was for an incomplete object and the new
2279 declaration is not since many attributes of the RTL will
2280 change. */
2281 COPY_DECL_RTL (olddecl, newdecl);
2282 }
2283 }
2284 /* If cannot merge, then use the new type and qualifiers,
2285 and don't preserve the old rtl. */
2286 else
2287 {
2288 /* Clean out any memory we had of the old declaration. */
2289 tree oldstatic = value_member (olddecl, static_aggregates);
2290 if (oldstatic)
2291 TREE_VALUE (oldstatic) = error_mark_node;
2292
2293 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2294 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2295 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2296 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2297 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2298 }
2299
2300 /* Merge the storage class information. */
2301 merge_weak (newdecl, olddecl);
2302
2303 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2304 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2305 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2306 if (! DECL_EXTERNAL (olddecl))
2307 DECL_EXTERNAL (newdecl) = 0;
2308 if (! DECL_COMDAT (olddecl))
2309 DECL_COMDAT (newdecl) = 0;
2310
2311 new_template_info = NULL_TREE;
2312 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2313 {
2314 bool new_redefines_gnu_inline = false;
2315
2316 if (new_defines_function
2317 && ((DECL_INTERFACE_KNOWN (olddecl)
2318 && TREE_CODE (olddecl) == FUNCTION_DECL)
2319 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2320 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2321 == FUNCTION_DECL))))
2322 {
2323 tree fn = olddecl;
2324
2325 if (TREE_CODE (fn) == TEMPLATE_DECL)
2326 fn = DECL_TEMPLATE_RESULT (olddecl);
2327
2328 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2329 }
2330
2331 if (!new_redefines_gnu_inline)
2332 {
2333 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2334 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2335 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2336 }
2337 DECL_TEMPLATE_INSTANTIATED (newdecl)
2338 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2339 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2340
2341 /* If the OLDDECL is an instantiation and/or specialization,
2342 then the NEWDECL must be too. But, it may not yet be marked
2343 as such if the caller has created NEWDECL, but has not yet
2344 figured out that it is a redeclaration. */
2345 if (!DECL_USE_TEMPLATE (newdecl))
2346 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2347
2348 /* Don't really know how much of the language-specific
2349 values we should copy from old to new. */
2350 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2351 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2352 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2353 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2354
2355 if (LANG_DECL_HAS_MIN (newdecl))
2356 {
2357 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
2358 if (DECL_TEMPLATE_INFO (newdecl))
2359 {
2360 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2361 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2362 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2363 /* Remember the presence of explicit specialization args. */
2364 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2365 = TINFO_USED_TEMPLATE_ID (new_template_info);
2366 }
2367 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2368 }
2369 /* Only functions have these fields. */
2370 if (DECL_DECLARES_FUNCTION_P (newdecl))
2371 {
2372 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2373 DECL_BEFRIENDING_CLASSES (newdecl)
2374 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2375 DECL_BEFRIENDING_CLASSES (olddecl));
2376 /* DECL_THUNKS is only valid for virtual functions,
2377 otherwise it is a DECL_FRIEND_CONTEXT. */
2378 if (DECL_VIRTUAL_P (newdecl))
2379 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2380 }
2381 /* Only variables have this field. */
2382 else if (VAR_P (newdecl)
2383 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2384 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2385 }
2386
2387 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2388 {
2389 tree parm;
2390
2391 /* Merge parameter attributes. */
2392 tree oldarg, newarg;
2393 for (oldarg = DECL_ARGUMENTS(olddecl), newarg = DECL_ARGUMENTS(newdecl);
2394 oldarg && newarg;
2395 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg))
2396 {
2397 DECL_ATTRIBUTES (newarg)
2398 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2399 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2400 }
2401
2402 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2403 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2404 {
2405 /* If newdecl is not a specialization, then it is not a
2406 template-related function at all. And that means that we
2407 should have exited above, returning 0. */
2408 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2409
2410 if (DECL_ODR_USED (olddecl))
2411 /* From [temp.expl.spec]:
2412
2413 If a template, a member template or the member of a class
2414 template is explicitly specialized then that
2415 specialization shall be declared before the first use of
2416 that specialization that would cause an implicit
2417 instantiation to take place, in every translation unit in
2418 which such a use occurs. */
2419 error ("explicit specialization of %qD after first use",
2420 olddecl);
2421
2422 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2423 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2424 && DECL_DECLARED_INLINE_P (newdecl));
2425
2426 /* Don't propagate visibility from the template to the
2427 specialization here. We'll do that in determine_visibility if
2428 appropriate. */
2429 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2430
2431 /* [temp.expl.spec/14] We don't inline explicit specialization
2432 just because the primary template says so. */
2433 gcc_assert (!merge_attr);
2434
2435 DECL_DECLARED_INLINE_P (olddecl)
2436 = DECL_DECLARED_INLINE_P (newdecl);
2437
2438 DECL_DISREGARD_INLINE_LIMITS (olddecl)
2439 = DECL_DISREGARD_INLINE_LIMITS (newdecl);
2440
2441 DECL_UNINLINABLE (olddecl) = DECL_UNINLINABLE (newdecl);
2442 }
2443 else if (new_defines_function && DECL_INITIAL (olddecl))
2444 {
2445 /* Never inline re-defined extern inline functions.
2446 FIXME: this could be better handled by keeping both
2447 function as separate declarations. */
2448 DECL_UNINLINABLE (newdecl) = 1;
2449 }
2450 else
2451 {
2452 if (DECL_PENDING_INLINE_P (olddecl))
2453 {
2454 DECL_PENDING_INLINE_P (newdecl) = 1;
2455 DECL_PENDING_INLINE_INFO (newdecl)
2456 = DECL_PENDING_INLINE_INFO (olddecl);
2457 }
2458 else if (DECL_PENDING_INLINE_P (newdecl))
2459 ;
2460 else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
2461 DECL_SAVED_FUNCTION_DATA (newdecl)
2462 = DECL_SAVED_FUNCTION_DATA (olddecl);
2463
2464 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2465
2466 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2467 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2468
2469 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2470 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2471 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2472 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2473 }
2474
2475 /* Preserve abstractness on cloned [cd]tors. */
2476 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2477
2478 /* Update newdecl's parms to point at olddecl. */
2479 for (parm = DECL_ARGUMENTS (newdecl); parm;
2480 parm = DECL_CHAIN (parm))
2481 DECL_CONTEXT (parm) = olddecl;
2482
2483 if (! types_match)
2484 {
2485 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2486 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2487 COPY_DECL_RTL (newdecl, olddecl);
2488 }
2489 if (! types_match || new_defines_function)
2490 {
2491 /* These need to be copied so that the names are available.
2492 Note that if the types do match, we'll preserve inline
2493 info and other bits, but if not, we won't. */
2494 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2495 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2496 }
2497 /* If redeclaring a builtin function, it stays built in
2498 if newdecl is a gnu_inline definition, or if newdecl is just
2499 a declaration. */
2500 if (fndecl_built_in_p (olddecl)
2501 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2502 {
2503 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2504 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2505 /* If we're keeping the built-in definition, keep the rtl,
2506 regardless of declaration matches. */
2507 COPY_DECL_RTL (olddecl, newdecl);
2508 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2509 {
2510 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2511 switch (fncode)
2512 {
2513 /* If a compatible prototype of these builtin functions
2514 is seen, assume the runtime implements it with the
2515 expected semantics. */
2516 case BUILT_IN_STPCPY:
2517 if (builtin_decl_explicit_p (fncode))
2518 set_builtin_decl_implicit_p (fncode, true);
2519 break;
2520 default:
2521 if (builtin_decl_explicit_p (fncode))
2522 set_builtin_decl_declared_p (fncode, true);
2523 break;
2524 }
2525 }
2526
2527 copy_attributes_to_builtin (newdecl);
2528 }
2529 if (new_defines_function)
2530 /* If defining a function declared with other language
2531 linkage, use the previously declared language linkage. */
2532 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2533 else if (types_match)
2534 {
2535 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2536 /* Don't clear out the arguments if we're just redeclaring a
2537 function. */
2538 if (DECL_ARGUMENTS (olddecl))
2539 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2540 }
2541 }
2542 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2543 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2544
2545 /* Now preserve various other info from the definition. */
2546 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2547 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2548 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2549 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2550
2551 /* Warn about conflicting visibility specifications. */
2552 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2553 && DECL_VISIBILITY_SPECIFIED (newdecl)
2554 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2555 {
2556 auto_diagnostic_group d;
2557 if (warning_at (newdecl_loc, OPT_Wattributes,
2558 "%qD: visibility attribute ignored because it "
2559 "conflicts with previous declaration", newdecl))
2560 inform (olddecl_loc,
2561 "previous declaration of %qD", olddecl);
2562 }
2563 /* Choose the declaration which specified visibility. */
2564 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2565 {
2566 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2567 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2568 }
2569 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2570 so keep this behavior. */
2571 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2572 {
2573 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2574 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2575 }
2576 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2577 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2578 {
2579 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2580 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2581 }
2582 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2583 if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2584 > DECL_WARN_IF_NOT_ALIGN (newdecl))
2585 SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2586 DECL_WARN_IF_NOT_ALIGN (olddecl));
2587 if (TREE_CODE (newdecl) == FIELD_DECL)
2588 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2589
2590 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2591 with that from NEWDECL below. */
2592 if (DECL_LANG_SPECIFIC (olddecl))
2593 {
2594 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2595 != DECL_LANG_SPECIFIC (newdecl));
2596 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2597 }
2598
2599 /* Merge the USED information. */
2600 if (TREE_USED (olddecl))
2601 TREE_USED (newdecl) = 1;
2602 else if (TREE_USED (newdecl))
2603 TREE_USED (olddecl) = 1;
2604 if (VAR_P (newdecl))
2605 {
2606 if (DECL_READ_P (olddecl))
2607 DECL_READ_P (newdecl) = 1;
2608 else if (DECL_READ_P (newdecl))
2609 DECL_READ_P (olddecl) = 1;
2610 }
2611 if (DECL_PRESERVE_P (olddecl))
2612 DECL_PRESERVE_P (newdecl) = 1;
2613 else if (DECL_PRESERVE_P (newdecl))
2614 DECL_PRESERVE_P (olddecl) = 1;
2615
2616 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2617 to olddecl and deleted. */
2618 if (TREE_CODE (newdecl) == FUNCTION_DECL
2619 && DECL_FUNCTION_VERSIONED (olddecl))
2620 {
2621 /* Set the flag for newdecl so that it gets copied to olddecl. */
2622 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2623 /* newdecl will be purged after copying to olddecl and is no longer
2624 a version. */
2625 cgraph_node::delete_function_version_by_decl (newdecl);
2626 }
2627
2628 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2629 {
2630 int function_size;
2631 struct symtab_node *snode = symtab_node::get (olddecl);
2632
2633 function_size = sizeof (struct tree_decl_common);
2634
2635 memcpy ((char *) olddecl + sizeof (struct tree_common),
2636 (char *) newdecl + sizeof (struct tree_common),
2637 function_size - sizeof (struct tree_common));
2638
2639 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2640 (char *) newdecl + sizeof (struct tree_decl_common),
2641 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2642
2643 /* Preserve symtab node mapping. */
2644 olddecl->decl_with_vis.symtab_node = snode;
2645
2646 if (new_template_info)
2647 /* If newdecl is a template instantiation, it is possible that
2648 the following sequence of events has occurred:
2649
2650 o A friend function was declared in a class template. The
2651 class template was instantiated.
2652
2653 o The instantiation of the friend declaration was
2654 recorded on the instantiation list, and is newdecl.
2655
2656 o Later, however, instantiate_class_template called pushdecl
2657 on the newdecl to perform name injection. But, pushdecl in
2658 turn called duplicate_decls when it discovered that another
2659 declaration of a global function with the same name already
2660 existed.
2661
2662 o Here, in duplicate_decls, we decided to clobber newdecl.
2663
2664 If we're going to do that, we'd better make sure that
2665 olddecl, and not newdecl, is on the list of
2666 instantiations so that if we try to do the instantiation
2667 again we won't get the clobbered declaration. */
2668 reregister_specialization (newdecl,
2669 new_template_info,
2670 olddecl);
2671 }
2672 else
2673 {
2674 size_t size = tree_code_size (TREE_CODE (newdecl));
2675
2676 memcpy ((char *) olddecl + sizeof (struct tree_common),
2677 (char *) newdecl + sizeof (struct tree_common),
2678 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2679 switch (TREE_CODE (newdecl))
2680 {
2681 case LABEL_DECL:
2682 case VAR_DECL:
2683 case RESULT_DECL:
2684 case PARM_DECL:
2685 case FIELD_DECL:
2686 case TYPE_DECL:
2687 case CONST_DECL:
2688 {
2689 struct symtab_node *snode = NULL;
2690
2691 if (VAR_P (newdecl)
2692 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2693 || DECL_EXTERNAL (olddecl)))
2694 snode = symtab_node::get (olddecl);
2695 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2696 (char *) newdecl + sizeof (struct tree_decl_common),
2697 size - sizeof (struct tree_decl_common)
2698 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2699 if (VAR_P (newdecl))
2700 olddecl->decl_with_vis.symtab_node = snode;
2701 }
2702 break;
2703 default:
2704 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2705 (char *) newdecl + sizeof (struct tree_decl_common),
2706 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2707 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2708 break;
2709 }
2710 }
2711
2712 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2713 {
2714 if (DECL_EXTERNAL (olddecl)
2715 || TREE_PUBLIC (olddecl)
2716 || TREE_STATIC (olddecl))
2717 {
2718 /* Merge the section attribute.
2719 We want to issue an error if the sections conflict but that must be
2720 done later in decl_attributes since we are called before attributes
2721 are assigned. */
2722 if (DECL_SECTION_NAME (newdecl) != NULL)
2723 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2724
2725 if (DECL_ONE_ONLY (newdecl))
2726 {
2727 struct symtab_node *oldsym, *newsym;
2728 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2729 oldsym = cgraph_node::get_create (olddecl);
2730 else
2731 oldsym = varpool_node::get_create (olddecl);
2732 newsym = symtab_node::get (newdecl);
2733 oldsym->set_comdat_group (newsym->get_comdat_group ());
2734 }
2735 }
2736
2737 if (VAR_P (newdecl)
2738 && CP_DECL_THREAD_LOCAL_P (newdecl))
2739 {
2740 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2741 if (!processing_template_decl)
2742 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2743 }
2744 }
2745
2746 DECL_UID (olddecl) = olddecl_uid;
2747 if (olddecl_friend)
2748 DECL_FRIEND_P (olddecl) = 1;
2749 if (hidden_friend)
2750 {
2751 DECL_ANTICIPATED (olddecl) = 1;
2752 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2753 }
2754
2755 /* NEWDECL contains the merged attribute lists.
2756 Update OLDDECL to be the same. */
2757 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2758
2759 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2760 so that encode_section_info has a chance to look at the new decl
2761 flags and attributes. */
2762 if (DECL_RTL_SET_P (olddecl)
2763 && (TREE_CODE (olddecl) == FUNCTION_DECL
2764 || (VAR_P (olddecl)
2765 && TREE_STATIC (olddecl))))
2766 make_decl_rtl (olddecl);
2767
2768 /* The NEWDECL will no longer be needed. Because every out-of-class
2769 declaration of a member results in a call to duplicate_decls,
2770 freeing these nodes represents in a significant savings.
2771
2772 Before releasing the node, be sore to remove function from symbol
2773 table that might have been inserted there to record comdat group.
2774 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2775 structure is shared in between newdecl and oldecl. */
2776 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2777 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2778 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2779 {
2780 struct symtab_node *snode = symtab_node::get (newdecl);
2781 if (snode)
2782 snode->remove ();
2783 }
2784
2785 /* Remove the associated constraints for newdecl, if any, before
2786 reclaiming memory. */
2787 if (flag_concepts)
2788 remove_constraints (newdecl);
2789
2790 ggc_free (newdecl);
2791
2792 return olddecl;
2793 }
2794 \f
2795 /* Return zero if the declaration NEWDECL is valid
2796 when the declaration OLDDECL (assumed to be for the same name)
2797 has already been seen.
2798 Otherwise return an error message format string with a %s
2799 where the identifier should go. */
2800
2801 static const char *
2802 redeclaration_error_message (tree newdecl, tree olddecl)
2803 {
2804 if (TREE_CODE (newdecl) == TYPE_DECL)
2805 {
2806 /* Because C++ can put things into name space for free,
2807 constructs like "typedef struct foo { ... } foo"
2808 would look like an erroneous redeclaration. */
2809 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2810 return NULL;
2811 else
2812 return G_("redefinition of %q#D");
2813 }
2814 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2815 {
2816 /* If this is a pure function, its olddecl will actually be
2817 the original initialization to `0' (which we force to call
2818 abort()). Don't complain about redefinition in this case. */
2819 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2820 && DECL_INITIAL (olddecl) == NULL_TREE)
2821 return NULL;
2822
2823 /* If both functions come from different namespaces, this is not
2824 a redeclaration - this is a conflict with a used function. */
2825 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2826 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2827 && ! decls_match (olddecl, newdecl))
2828 return G_("%qD conflicts with used function");
2829
2830 /* We'll complain about linkage mismatches in
2831 warn_extern_redeclared_static. */
2832
2833 /* Defining the same name twice is no good. */
2834 if (decl_defined_p (olddecl)
2835 && decl_defined_p (newdecl))
2836 {
2837 if (DECL_NAME (olddecl) == NULL_TREE)
2838 return G_("%q#D not declared in class");
2839 else if (!GNU_INLINE_P (olddecl)
2840 || GNU_INLINE_P (newdecl))
2841 return G_("redefinition of %q#D");
2842 }
2843
2844 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2845 {
2846 bool olda = GNU_INLINE_P (olddecl);
2847 bool newa = GNU_INLINE_P (newdecl);
2848
2849 if (olda != newa)
2850 {
2851 if (newa)
2852 return G_("%q+D redeclared inline with "
2853 "%<gnu_inline%> attribute");
2854 else
2855 return G_("%q+D redeclared inline without "
2856 "%<gnu_inline%> attribute");
2857 }
2858 }
2859
2860 check_abi_tag_redeclaration
2861 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2862 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2863
2864 return NULL;
2865 }
2866 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2867 {
2868 tree nt, ot;
2869
2870 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2871 {
2872 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2873 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2874 return G_("redefinition of %q#D");
2875 return NULL;
2876 }
2877
2878 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2879 || (DECL_TEMPLATE_RESULT (newdecl)
2880 == DECL_TEMPLATE_RESULT (olddecl)))
2881 return NULL;
2882
2883 nt = DECL_TEMPLATE_RESULT (newdecl);
2884 if (DECL_TEMPLATE_INFO (nt))
2885 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2886 ot = DECL_TEMPLATE_RESULT (olddecl);
2887 if (DECL_TEMPLATE_INFO (ot))
2888 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2889 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2890 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2891 return G_("redefinition of %q#D");
2892
2893 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2894 {
2895 bool olda = GNU_INLINE_P (ot);
2896 bool newa = GNU_INLINE_P (nt);
2897
2898 if (olda != newa)
2899 {
2900 if (newa)
2901 return G_("%q+D redeclared inline with "
2902 "%<gnu_inline%> attribute");
2903 else
2904 return G_("%q+D redeclared inline without "
2905 "%<gnu_inline%> attribute");
2906 }
2907 }
2908
2909 /* Core issue #226 (C++0x):
2910
2911 If a friend function template declaration specifies a
2912 default template-argument, that declaration shall be a
2913 definition and shall be the only declaration of the
2914 function template in the translation unit. */
2915 if ((cxx_dialect != cxx98)
2916 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2917 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2918 /*is_primary=*/true,
2919 /*is_partial=*/false,
2920 /*is_friend_decl=*/2))
2921 return G_("redeclaration of friend %q#D "
2922 "may not have default template arguments");
2923
2924 return NULL;
2925 }
2926 else if (VAR_P (newdecl)
2927 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2928 && (! DECL_LANG_SPECIFIC (olddecl)
2929 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2930 || CP_DECL_THREAD_LOCAL_P (newdecl)))
2931 {
2932 /* Only variables can be thread-local, and all declarations must
2933 agree on this property. */
2934 if (CP_DECL_THREAD_LOCAL_P (newdecl))
2935 return G_("thread-local declaration of %q#D follows "
2936 "non-thread-local declaration");
2937 else
2938 return G_("non-thread-local declaration of %q#D follows "
2939 "thread-local declaration");
2940 }
2941 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2942 {
2943 /* The objects have been declared at namespace scope. If either
2944 is a member of an anonymous union, then this is an invalid
2945 redeclaration. For example:
2946
2947 int i;
2948 union { int i; };
2949
2950 is invalid. */
2951 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2952 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2953 return G_("redeclaration of %q#D");
2954 /* If at least one declaration is a reference, there is no
2955 conflict. For example:
2956
2957 int i = 3;
2958 extern int i;
2959
2960 is valid. */
2961 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2962 return NULL;
2963
2964 /* Static data member declared outside a class definition
2965 if the variable is defined within the class with constexpr
2966 specifier is declaration rather than definition (and
2967 deprecated). */
2968 if (cxx_dialect >= cxx17
2969 && VAR_P (olddecl)
2970 && DECL_CLASS_SCOPE_P (olddecl)
2971 && DECL_DECLARED_CONSTEXPR_P (olddecl)
2972 && !DECL_INITIAL (newdecl))
2973 {
2974 DECL_EXTERNAL (newdecl) = 1;
2975 /* For now, only warn with explicit -Wdeprecated. */
2976 if (global_options_set.x_warn_deprecated)
2977 {
2978 auto_diagnostic_group d;
2979 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
2980 "redundant redeclaration of %<constexpr%> "
2981 "static data member %qD", newdecl))
2982 inform (DECL_SOURCE_LOCATION (olddecl),
2983 "previous declaration of %qD", olddecl);
2984 }
2985 return NULL;
2986 }
2987
2988 /* Reject two definitions. */
2989 return G_("redefinition of %q#D");
2990 }
2991 else
2992 {
2993 /* Objects declared with block scope: */
2994 /* Reject two definitions, and reject a definition
2995 together with an external reference. */
2996 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
2997 return G_("redeclaration of %q#D");
2998 return NULL;
2999 }
3000 }
3001 \f
3002
3003 /* Hash and equality functions for the named_label table. */
3004
3005 hashval_t
3006 named_label_hash::hash (const value_type entry)
3007 {
3008 return IDENTIFIER_HASH_VALUE (entry->name);
3009 }
3010
3011 bool
3012 named_label_hash::equal (const value_type entry, compare_type name)
3013 {
3014 return name == entry->name;
3015 }
3016
3017 /* Look for a label named ID in the current function. If one cannot
3018 be found, create one. Return the named_label_entry, or NULL on
3019 failure. */
3020
3021 static named_label_entry *
3022 lookup_label_1 (tree id, bool making_local_p)
3023 {
3024 /* You can't use labels at global scope. */
3025 if (current_function_decl == NULL_TREE)
3026 {
3027 error ("label %qE referenced outside of any function", id);
3028 return NULL;
3029 }
3030
3031 if (!named_labels)
3032 named_labels = hash_table<named_label_hash>::create_ggc (13);
3033
3034 hashval_t hash = IDENTIFIER_HASH_VALUE (id);
3035 named_label_entry **slot
3036 = named_labels->find_slot_with_hash (id, hash, INSERT);
3037 named_label_entry *old = *slot;
3038
3039 if (old && old->label_decl)
3040 {
3041 if (!making_local_p)
3042 return old;
3043
3044 if (old->binding_level == current_binding_level)
3045 {
3046 error ("local label %qE conflicts with existing label", id);
3047 inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
3048 return NULL;
3049 }
3050 }
3051
3052 /* We are making a new decl, create or reuse the named_label_entry */
3053 named_label_entry *ent = NULL;
3054 if (old && !old->label_decl)
3055 ent = old;
3056 else
3057 {
3058 ent = ggc_cleared_alloc<named_label_entry> ();
3059 ent->name = id;
3060 ent->outer = old;
3061 *slot = ent;
3062 }
3063
3064 /* Now create the LABEL_DECL. */
3065 tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3066
3067 DECL_CONTEXT (decl) = current_function_decl;
3068 SET_DECL_MODE (decl, VOIDmode);
3069 if (making_local_p)
3070 {
3071 C_DECLARED_LABEL_FLAG (decl) = true;
3072 DECL_CHAIN (decl) = current_binding_level->names;
3073 current_binding_level->names = decl;
3074 }
3075
3076 ent->label_decl = decl;
3077
3078 return ent;
3079 }
3080
3081 /* Wrapper for lookup_label_1. */
3082
3083 tree
3084 lookup_label (tree id)
3085 {
3086 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3087 named_label_entry *ent = lookup_label_1 (id, false);
3088 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3089 return ent ? ent->label_decl : NULL_TREE;
3090 }
3091
3092 tree
3093 declare_local_label (tree id)
3094 {
3095 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3096 named_label_entry *ent = lookup_label_1 (id, true);
3097 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3098 return ent ? ent->label_decl : NULL_TREE;
3099 }
3100
3101 /* Returns nonzero if it is ill-formed to jump past the declaration of
3102 DECL. Returns 2 if it's also a real problem. */
3103
3104 static int
3105 decl_jump_unsafe (tree decl)
3106 {
3107 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3108 with automatic storage duration is not in scope to a point where it is
3109 in scope is ill-formed unless the variable has scalar type, class type
3110 with a trivial default constructor and a trivial destructor, a
3111 cv-qualified version of one of these types, or an array of one of the
3112 preceding types and is declared without an initializer (8.5). */
3113 tree type = TREE_TYPE (decl);
3114
3115 if (!VAR_P (decl) || TREE_STATIC (decl)
3116 || type == error_mark_node)
3117 return 0;
3118
3119 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3120 || variably_modified_type_p (type, NULL_TREE))
3121 return 2;
3122
3123 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3124 return 1;
3125
3126 return 0;
3127 }
3128
3129 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3130 to the user. */
3131
3132 static bool
3133 identify_goto (tree decl, location_t loc, const location_t *locus,
3134 diagnostic_t diag_kind)
3135 {
3136 bool complained
3137 = emit_diagnostic (diag_kind, loc, 0,
3138 decl ? N_("jump to label %qD")
3139 : N_("jump to case label"), decl);
3140 if (complained && locus)
3141 inform (*locus, " from here");
3142 return complained;
3143 }
3144
3145 /* Check that a single previously seen jump to a newly defined label
3146 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3147 the jump context; NAMES are the names in scope in LEVEL at the jump
3148 context; LOCUS is the source position of the jump or 0. Returns
3149 true if all is well. */
3150
3151 static bool
3152 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3153 bool exited_omp, const location_t *locus)
3154 {
3155 cp_binding_level *b;
3156 bool complained = false;
3157 int identified = 0;
3158 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3159
3160 if (exited_omp)
3161 {
3162 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3163 if (complained)
3164 inform (input_location, " exits OpenMP structured block");
3165 saw_omp = true;
3166 identified = 2;
3167 }
3168
3169 for (b = current_binding_level; b ; b = b->level_chain)
3170 {
3171 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3172
3173 for (new_decls = b->names; new_decls != old_decls;
3174 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3175 : TREE_CHAIN (new_decls)))
3176 {
3177 int problem = decl_jump_unsafe (new_decls);
3178 if (! problem)
3179 continue;
3180
3181 if (!identified)
3182 {
3183 complained = identify_goto (decl, input_location, locus,
3184 problem > 1
3185 ? DK_ERROR : DK_PERMERROR);
3186 identified = 1;
3187 }
3188 if (complained)
3189 {
3190 if (problem > 1)
3191 inform (DECL_SOURCE_LOCATION (new_decls),
3192 " crosses initialization of %q#D", new_decls);
3193 else
3194 inform (DECL_SOURCE_LOCATION (new_decls),
3195 " enters scope of %q#D, which has "
3196 "non-trivial destructor", new_decls);
3197 }
3198 }
3199
3200 if (b == level)
3201 break;
3202
3203 const char *inf = NULL;
3204 location_t loc = input_location;
3205 switch (b->kind)
3206 {
3207 case sk_try:
3208 if (!saw_eh)
3209 inf = N_("enters try block");
3210 saw_eh = true;
3211 break;
3212
3213 case sk_catch:
3214 if (!saw_eh)
3215 inf = N_("enters catch block");
3216 saw_eh = true;
3217 break;
3218
3219 case sk_omp:
3220 if (!saw_omp)
3221 inf = N_("enters OpenMP structured block");
3222 saw_omp = true;
3223 break;
3224
3225 case sk_transaction:
3226 if (!saw_tm)
3227 inf = N_("enters synchronized or atomic statement");
3228 saw_tm = true;
3229 break;
3230
3231 case sk_block:
3232 if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3233 {
3234 inf = N_("enters constexpr if statement");
3235 loc = EXPR_LOCATION (b->level_chain->this_entity);
3236 saw_cxif = true;
3237 }
3238 break;
3239
3240 default:
3241 break;
3242 }
3243
3244 if (inf)
3245 {
3246 if (identified < 2)
3247 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3248 identified = 2;
3249 if (complained)
3250 inform (loc, " %s", inf);
3251 }
3252 }
3253
3254 return !identified;
3255 }
3256
3257 static void
3258 check_previous_goto (tree decl, struct named_label_use_entry *use)
3259 {
3260 check_previous_goto_1 (decl, use->binding_level,
3261 use->names_in_scope, use->in_omp_scope,
3262 &use->o_goto_locus);
3263 }
3264
3265 static bool
3266 check_switch_goto (cp_binding_level* level)
3267 {
3268 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3269 }
3270
3271 /* Check that a new jump to a label DECL is OK. Called by
3272 finish_goto_stmt. */
3273
3274 void
3275 check_goto (tree decl)
3276 {
3277 /* We can't know where a computed goto is jumping.
3278 So we assume that it's OK. */
3279 if (TREE_CODE (decl) != LABEL_DECL)
3280 return;
3281
3282 /* We didn't record any information about this label when we created it,
3283 and there's not much point since it's trivial to analyze as a return. */
3284 if (decl == cdtor_label)
3285 return;
3286
3287 hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3288 named_label_entry **slot
3289 = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3290 named_label_entry *ent = *slot;
3291
3292 /* If the label hasn't been defined yet, defer checking. */
3293 if (! DECL_INITIAL (decl))
3294 {
3295 /* Don't bother creating another use if the last goto had the
3296 same data, and will therefore create the same set of errors. */
3297 if (ent->uses
3298 && ent->uses->names_in_scope == current_binding_level->names)
3299 return;
3300
3301 named_label_use_entry *new_use
3302 = ggc_alloc<named_label_use_entry> ();
3303 new_use->binding_level = current_binding_level;
3304 new_use->names_in_scope = current_binding_level->names;
3305 new_use->o_goto_locus = input_location;
3306 new_use->in_omp_scope = false;
3307
3308 new_use->next = ent->uses;
3309 ent->uses = new_use;
3310 return;
3311 }
3312
3313 bool saw_catch = false, complained = false;
3314 int identified = 0;
3315 tree bad;
3316 unsigned ix;
3317
3318 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3319 || ent->in_constexpr_if
3320 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3321 {
3322 diagnostic_t diag_kind = DK_PERMERROR;
3323 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3324 || ent->in_transaction_scope || ent->in_omp_scope)
3325 diag_kind = DK_ERROR;
3326 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3327 &input_location, diag_kind);
3328 identified = 1 + (diag_kind == DK_ERROR);
3329 }
3330
3331 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3332 {
3333 int u = decl_jump_unsafe (bad);
3334
3335 if (u > 1 && DECL_ARTIFICIAL (bad))
3336 {
3337 /* Can't skip init of __exception_info. */
3338 if (identified == 1)
3339 {
3340 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3341 &input_location, DK_ERROR);
3342 identified = 2;
3343 }
3344 if (complained)
3345 inform (DECL_SOURCE_LOCATION (bad), " enters catch block");
3346 saw_catch = true;
3347 }
3348 else if (complained)
3349 {
3350 if (u > 1)
3351 inform (DECL_SOURCE_LOCATION (bad),
3352 " skips initialization of %q#D", bad);
3353 else
3354 inform (DECL_SOURCE_LOCATION (bad),
3355 " enters scope of %q#D which has "
3356 "non-trivial destructor", bad);
3357 }
3358 }
3359
3360 if (complained)
3361 {
3362 if (ent->in_try_scope)
3363 inform (input_location, " enters try block");
3364 else if (ent->in_catch_scope && !saw_catch)
3365 inform (input_location, " enters catch block");
3366 else if (ent->in_transaction_scope)
3367 inform (input_location, " enters synchronized or atomic statement");
3368 else if (ent->in_constexpr_if)
3369 inform (input_location, " enters %<constexpr%> if statement");
3370 }
3371
3372 if (ent->in_omp_scope)
3373 {
3374 if (complained)
3375 inform (input_location, " enters OpenMP structured block");
3376 }
3377 else if (flag_openmp)
3378 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3379 {
3380 if (b == ent->binding_level)
3381 break;
3382 if (b->kind == sk_omp)
3383 {
3384 if (identified < 2)
3385 {
3386 complained = identify_goto (decl,
3387 DECL_SOURCE_LOCATION (decl),
3388 &input_location, DK_ERROR);
3389 identified = 2;
3390 }
3391 if (complained)
3392 inform (input_location, " exits OpenMP structured block");
3393 break;
3394 }
3395 }
3396 }
3397
3398 /* Check that a return is ok wrt OpenMP structured blocks.
3399 Called by finish_return_stmt. Returns true if all is well. */
3400
3401 bool
3402 check_omp_return (void)
3403 {
3404 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3405 if (b->kind == sk_omp)
3406 {
3407 error ("invalid exit from OpenMP structured block");
3408 return false;
3409 }
3410 else if (b->kind == sk_function_parms)
3411 break;
3412 return true;
3413 }
3414
3415 /* Define a label, specifying the location in the source file.
3416 Return the LABEL_DECL node for the label. */
3417
3418 static tree
3419 define_label_1 (location_t location, tree name)
3420 {
3421 /* After labels, make any new cleanups in the function go into their
3422 own new (temporary) binding contour. */
3423 for (cp_binding_level *p = current_binding_level;
3424 p->kind != sk_function_parms;
3425 p = p->level_chain)
3426 p->more_cleanups_ok = 0;
3427
3428 named_label_entry *ent = lookup_label_1 (name, false);
3429 tree decl = ent->label_decl;
3430
3431 if (DECL_INITIAL (decl) != NULL_TREE)
3432 {
3433 error ("duplicate label %qD", decl);
3434 return error_mark_node;
3435 }
3436 else
3437 {
3438 /* Mark label as having been defined. */
3439 DECL_INITIAL (decl) = error_mark_node;
3440 /* Say where in the source. */
3441 DECL_SOURCE_LOCATION (decl) = location;
3442
3443 ent->binding_level = current_binding_level;
3444 ent->names_in_scope = current_binding_level->names;
3445
3446 for (named_label_use_entry *use = ent->uses; use; use = use->next)
3447 check_previous_goto (decl, use);
3448 ent->uses = NULL;
3449 }
3450
3451 return decl;
3452 }
3453
3454 /* Wrapper for define_label_1. */
3455
3456 tree
3457 define_label (location_t location, tree name)
3458 {
3459 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3460 tree ret = define_label_1 (location, name);
3461 timevar_cond_stop (TV_NAME_LOOKUP, running);
3462 return ret;
3463 }
3464
3465
3466 struct cp_switch
3467 {
3468 cp_binding_level *level;
3469 struct cp_switch *next;
3470 /* The SWITCH_STMT being built. */
3471 tree switch_stmt;
3472 /* A splay-tree mapping the low element of a case range to the high
3473 element, or NULL_TREE if there is no high element. Used to
3474 determine whether or not a new case label duplicates an old case
3475 label. We need a tree, rather than simply a hash table, because
3476 of the GNU case range extension. */
3477 splay_tree cases;
3478 /* Remember whether there was a case value that is outside the
3479 range of the original type of the controlling expression. */
3480 bool outside_range_p;
3481 /* Remember whether a default: case label has been seen. */
3482 bool has_default_p;
3483 /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT. */
3484 bool break_stmt_seen_p;
3485 /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3486 where BREAK_STMT doesn't belong to the SWITCH_STMT. */
3487 bool in_loop_body_p;
3488 };
3489
3490 /* A stack of the currently active switch statements. The innermost
3491 switch statement is on the top of the stack. There is no need to
3492 mark the stack for garbage collection because it is only active
3493 during the processing of the body of a function, and we never
3494 collect at that point. */
3495
3496 static struct cp_switch *switch_stack;
3497
3498 /* Called right after a switch-statement condition is parsed.
3499 SWITCH_STMT is the switch statement being parsed. */
3500
3501 void
3502 push_switch (tree switch_stmt)
3503 {
3504 struct cp_switch *p = XNEW (struct cp_switch);
3505 p->level = current_binding_level;
3506 p->next = switch_stack;
3507 p->switch_stmt = switch_stmt;
3508 p->cases = splay_tree_new (case_compare, NULL, NULL);
3509 p->outside_range_p = false;
3510 p->has_default_p = false;
3511 p->break_stmt_seen_p = false;
3512 p->in_loop_body_p = false;
3513 switch_stack = p;
3514 }
3515
3516 void
3517 pop_switch (void)
3518 {
3519 struct cp_switch *cs = switch_stack;
3520 location_t switch_location;
3521
3522 /* Emit warnings as needed. */
3523 switch_location = cp_expr_loc_or_loc (cs->switch_stmt, input_location);
3524 const bool bool_cond_p
3525 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3526 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3527 if (!processing_template_decl)
3528 c_do_switch_warnings (cs->cases, switch_location,
3529 SWITCH_STMT_TYPE (cs->switch_stmt),
3530 SWITCH_STMT_COND (cs->switch_stmt),
3531 bool_cond_p, cs->outside_range_p);
3532
3533 /* For the benefit of block_may_fallthru remember if the switch body
3534 case labels cover all possible values and if there are break; stmts. */
3535 if (cs->has_default_p
3536 || (!processing_template_decl
3537 && c_switch_covers_all_cases_p (cs->cases,
3538 SWITCH_STMT_TYPE (cs->switch_stmt))))
3539 SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3540 if (!cs->break_stmt_seen_p)
3541 SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3542 gcc_assert (!cs->in_loop_body_p);
3543 splay_tree_delete (cs->cases);
3544 switch_stack = switch_stack->next;
3545 free (cs);
3546 }
3547
3548 /* Note that a BREAK_STMT is about to be added. If it is inside of
3549 a SWITCH_STMT and not inside of a loop body inside of it, note
3550 in switch_stack we've seen a BREAK_STMT. */
3551
3552 void
3553 note_break_stmt (void)
3554 {
3555 if (switch_stack && !switch_stack->in_loop_body_p)
3556 switch_stack->break_stmt_seen_p = true;
3557 }
3558
3559 /* Note the start of processing of an iteration statement's body.
3560 The note_break_stmt function will do nothing while processing it.
3561 Return a flag that should be passed to note_iteration_stmt_body_end. */
3562
3563 bool
3564 note_iteration_stmt_body_start (void)
3565 {
3566 if (!switch_stack)
3567 return false;
3568 bool ret = switch_stack->in_loop_body_p;
3569 switch_stack->in_loop_body_p = true;
3570 return ret;
3571 }
3572
3573 /* Note the end of processing of an iteration statement's body. */
3574
3575 void
3576 note_iteration_stmt_body_end (bool prev)
3577 {
3578 if (switch_stack)
3579 switch_stack->in_loop_body_p = prev;
3580 }
3581
3582 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3583 condition. Note that if TYPE and VALUE are already integral we don't
3584 really do the conversion because the language-independent
3585 warning/optimization code will work better that way. */
3586
3587 static tree
3588 case_conversion (tree type, tree value)
3589 {
3590 if (value == NULL_TREE)
3591 return value;
3592
3593 value = mark_rvalue_use (value);
3594
3595 if (cxx_dialect >= cxx11
3596 && (SCOPED_ENUM_P (type)
3597 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3598 {
3599 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3600 type = type_promotes_to (type);
3601 value = (perform_implicit_conversion_flags
3602 (type, value, tf_warning_or_error,
3603 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3604 }
3605 return cxx_constant_value (value);
3606 }
3607
3608 /* Note that we've seen a definition of a case label, and complain if this
3609 is a bad place for one. */
3610
3611 tree
3612 finish_case_label (location_t loc, tree low_value, tree high_value)
3613 {
3614 tree cond, r;
3615 cp_binding_level *p;
3616 tree type;
3617
3618 if (low_value == NULL_TREE && high_value == NULL_TREE)
3619 switch_stack->has_default_p = true;
3620
3621 if (processing_template_decl)
3622 {
3623 tree label;
3624
3625 /* For templates, just add the case label; we'll do semantic
3626 analysis at instantiation-time. */
3627 label = build_decl (loc, LABEL_DECL, NULL_TREE, void_type_node);
3628 return add_stmt (build_case_label (low_value, high_value, label));
3629 }
3630
3631 /* Find the condition on which this switch statement depends. */
3632 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3633 if (cond && TREE_CODE (cond) == TREE_LIST)
3634 cond = TREE_VALUE (cond);
3635
3636 if (!check_switch_goto (switch_stack->level))
3637 return error_mark_node;
3638
3639 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3640 if (type == error_mark_node)
3641 return error_mark_node;
3642
3643 low_value = case_conversion (type, low_value);
3644 high_value = case_conversion (type, high_value);
3645
3646 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3647 low_value, high_value,
3648 &switch_stack->outside_range_p);
3649
3650 /* After labels, make any new cleanups in the function go into their
3651 own new (temporary) binding contour. */
3652 for (p = current_binding_level;
3653 p->kind != sk_function_parms;
3654 p = p->level_chain)
3655 p->more_cleanups_ok = 0;
3656
3657 return r;
3658 }
3659 \f
3660 struct typename_info {
3661 tree scope;
3662 tree name;
3663 tree template_id;
3664 bool enum_p;
3665 bool class_p;
3666 };
3667
3668 struct typename_hasher : ggc_ptr_hash<tree_node>
3669 {
3670 typedef typename_info *compare_type;
3671
3672 /* Hash a TYPENAME_TYPE. */
3673
3674 static hashval_t
3675 hash (tree t)
3676 {
3677 hashval_t hash;
3678
3679 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3680 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3681
3682 return hash;
3683 }
3684
3685 /* Compare two TYPENAME_TYPEs. */
3686
3687 static bool
3688 equal (tree t1, const typename_info *t2)
3689 {
3690 return (TYPE_IDENTIFIER (t1) == t2->name
3691 && TYPE_CONTEXT (t1) == t2->scope
3692 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3693 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3694 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3695 }
3696 };
3697
3698 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3699 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3700
3701 Returns the new TYPENAME_TYPE. */
3702
3703 static GTY (()) hash_table<typename_hasher> *typename_htab;
3704
3705 tree
3706 build_typename_type (tree context, tree name, tree fullname,
3707 enum tag_types tag_type)
3708 {
3709 tree t;
3710 tree d;
3711 typename_info ti;
3712 tree *e;
3713 hashval_t hash;
3714
3715 if (typename_htab == NULL)
3716 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3717
3718 ti.scope = FROB_CONTEXT (context);
3719 ti.name = name;
3720 ti.template_id = fullname;
3721 ti.enum_p = tag_type == enum_type;
3722 ti.class_p = (tag_type == class_type
3723 || tag_type == record_type
3724 || tag_type == union_type);
3725 hash = (htab_hash_pointer (ti.scope)
3726 ^ htab_hash_pointer (ti.name));
3727
3728 /* See if we already have this type. */
3729 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3730 if (*e)
3731 t = *e;
3732 else
3733 {
3734 /* Build the TYPENAME_TYPE. */
3735 t = cxx_make_type (TYPENAME_TYPE);
3736 TYPE_CONTEXT (t) = ti.scope;
3737 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3738 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3739 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3740
3741 /* Build the corresponding TYPE_DECL. */
3742 d = build_decl (input_location, TYPE_DECL, name, t);
3743 TYPE_NAME (TREE_TYPE (d)) = d;
3744 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3745 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3746 DECL_ARTIFICIAL (d) = 1;
3747
3748 /* Store it in the hash table. */
3749 *e = t;
3750
3751 /* TYPENAME_TYPEs must always be compared structurally, because
3752 they may or may not resolve down to another type depending on
3753 the currently open classes. */
3754 SET_TYPE_STRUCTURAL_EQUALITY (t);
3755 }
3756
3757 return t;
3758 }
3759
3760 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3761 provided to name the type. Returns an appropriate type, unless an
3762 error occurs, in which case error_mark_node is returned. If we
3763 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3764 return that, rather than the _TYPE it corresponds to, in other
3765 cases we look through the type decl. If TF_ERROR is set, complain
3766 about errors, otherwise be quiet. */
3767
3768 tree
3769 make_typename_type (tree context, tree name, enum tag_types tag_type,
3770 tsubst_flags_t complain)
3771 {
3772 tree fullname;
3773 tree t;
3774 bool want_template;
3775
3776 if (name == error_mark_node
3777 || context == NULL_TREE
3778 || context == error_mark_node)
3779 return error_mark_node;
3780
3781 if (TYPE_P (name))
3782 {
3783 if (!(TYPE_LANG_SPECIFIC (name)
3784 && (CLASSTYPE_IS_TEMPLATE (name)
3785 || CLASSTYPE_USE_TEMPLATE (name))))
3786 name = TYPE_IDENTIFIER (name);
3787 else
3788 /* Create a TEMPLATE_ID_EXPR for the type. */
3789 name = build_nt (TEMPLATE_ID_EXPR,
3790 CLASSTYPE_TI_TEMPLATE (name),
3791 CLASSTYPE_TI_ARGS (name));
3792 }
3793 else if (TREE_CODE (name) == TYPE_DECL)
3794 name = DECL_NAME (name);
3795
3796 fullname = name;
3797
3798 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3799 {
3800 name = TREE_OPERAND (name, 0);
3801 if (DECL_TYPE_TEMPLATE_P (name))
3802 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3803 if (TREE_CODE (name) != IDENTIFIER_NODE)
3804 {
3805 if (complain & tf_error)
3806 error ("%qD is not a type", name);
3807 return error_mark_node;
3808 }
3809 }
3810 if (TREE_CODE (name) == TEMPLATE_DECL)
3811 {
3812 if (complain & tf_error)
3813 error ("%qD used without template arguments", name);
3814 return error_mark_node;
3815 }
3816 gcc_assert (identifier_p (name));
3817 gcc_assert (TYPE_P (context));
3818
3819 if (TREE_CODE (context) == TYPE_PACK_EXPANSION)
3820 /* This can happen for C++17 variadic using (c++/88986). */;
3821 else if (!MAYBE_CLASS_TYPE_P (context))
3822 {
3823 if (complain & tf_error)
3824 error ("%q#T is not a class", context);
3825 return error_mark_node;
3826 }
3827
3828 /* When the CONTEXT is a dependent type, NAME could refer to a
3829 dependent base class of CONTEXT. But look inside it anyway
3830 if CONTEXT is a currently open scope, in case it refers to a
3831 member of the current instantiation or a non-dependent base;
3832 lookup will stop when we hit a dependent base. */
3833 if (!dependent_scope_p (context))
3834 /* We should only set WANT_TYPE when we're a nested typename type.
3835 Then we can give better diagnostics if we find a non-type. */
3836 t = lookup_field (context, name, 2, /*want_type=*/true);
3837 else
3838 t = NULL_TREE;
3839
3840 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3841 return build_typename_type (context, name, fullname, tag_type);
3842
3843 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3844
3845 if (!t)
3846 {
3847 if (complain & tf_error)
3848 {
3849 if (!COMPLETE_TYPE_P (context))
3850 cxx_incomplete_type_error (NULL_TREE, context);
3851 else
3852 error (want_template ? G_("no class template named %q#T in %q#T")
3853 : G_("no type named %q#T in %q#T"), name, context);
3854 }
3855 return error_mark_node;
3856 }
3857
3858 /* Pull out the template from an injected-class-name (or multiple). */
3859 if (want_template)
3860 t = maybe_get_template_decl_from_type_decl (t);
3861
3862 if (TREE_CODE (t) == TREE_LIST)
3863 {
3864 if (complain & tf_error)
3865 {
3866 error ("lookup of %qT in %qT is ambiguous", name, context);
3867 print_candidates (t);
3868 }
3869 return error_mark_node;
3870 }
3871
3872 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3873 {
3874 if (complain & tf_error)
3875 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3876 context, name, t);
3877 return error_mark_node;
3878 }
3879 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3880 {
3881 if (complain & tf_error)
3882 error ("%<typename %T::%D%> names %q#T, which is not a type",
3883 context, name, t);
3884 return error_mark_node;
3885 }
3886
3887 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3888 return error_mark_node;
3889
3890 /* If we are currently parsing a template and if T is a typedef accessed
3891 through CONTEXT then we need to remember and check access of T at
3892 template instantiation time. */
3893 add_typedef_to_current_template_for_access_check (t, context, input_location);
3894
3895 if (want_template)
3896 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3897 NULL_TREE, context,
3898 /*entering_scope=*/0,
3899 complain | tf_user);
3900
3901 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3902 t = TREE_TYPE (t);
3903
3904 maybe_record_typedef_use (t);
3905
3906 return t;
3907 }
3908
3909 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3910 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3911 in which case error_mark_node is returned.
3912
3913 If PARM_LIST is non-NULL, also make sure that the template parameter
3914 list of TEMPLATE_DECL matches.
3915
3916 If COMPLAIN zero, don't complain about any errors that occur. */
3917
3918 tree
3919 make_unbound_class_template (tree context, tree name, tree parm_list,
3920 tsubst_flags_t complain)
3921 {
3922 tree t;
3923 tree d;
3924
3925 if (TYPE_P (name))
3926 name = TYPE_IDENTIFIER (name);
3927 else if (DECL_P (name))
3928 name = DECL_NAME (name);
3929 gcc_assert (identifier_p (name));
3930
3931 if (!dependent_type_p (context)
3932 || currently_open_class (context))
3933 {
3934 tree tmpl = NULL_TREE;
3935
3936 if (MAYBE_CLASS_TYPE_P (context))
3937 tmpl = lookup_field (context, name, 0, false);
3938
3939 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3940 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3941
3942 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3943 {
3944 if (complain & tf_error)
3945 error ("no class template named %q#T in %q#T", name, context);
3946 return error_mark_node;
3947 }
3948
3949 if (parm_list
3950 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3951 {
3952 if (complain & tf_error)
3953 {
3954 error ("template parameters do not match template %qD", tmpl);
3955 inform (DECL_SOURCE_LOCATION (tmpl),
3956 "%qD declared here", tmpl);
3957 }
3958 return error_mark_node;
3959 }
3960
3961 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3962 complain))
3963 return error_mark_node;
3964
3965 return tmpl;
3966 }
3967
3968 /* Build the UNBOUND_CLASS_TEMPLATE. */
3969 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3970 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3971 TREE_TYPE (t) = NULL_TREE;
3972 SET_TYPE_STRUCTURAL_EQUALITY (t);
3973
3974 /* Build the corresponding TEMPLATE_DECL. */
3975 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3976 TYPE_NAME (TREE_TYPE (d)) = d;
3977 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3978 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3979 DECL_ARTIFICIAL (d) = 1;
3980 DECL_TEMPLATE_PARMS (d) = parm_list;
3981
3982 return t;
3983 }
3984
3985 \f
3986
3987 /* Push the declarations of builtin types into the global namespace.
3988 RID_INDEX is the index of the builtin type in the array
3989 RID_POINTERS. NAME is the name used when looking up the builtin
3990 type. TYPE is the _TYPE node for the builtin type.
3991
3992 The calls to set_global_binding below should be
3993 eliminated. Built-in types should not be looked up name; their
3994 names are keywords that the parser can recognize. However, there
3995 is code in c-common.c that uses identifier_global_value to look up
3996 built-in types by name. */
3997
3998 void
3999 record_builtin_type (enum rid rid_index,
4000 const char* name,
4001 tree type)
4002 {
4003 tree decl = NULL_TREE;
4004
4005 if (name)
4006 {
4007 tree tname = get_identifier (name);
4008 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
4009 DECL_ARTIFICIAL (tdecl) = 1;
4010 set_global_binding (tdecl);
4011 decl = tdecl;
4012 }
4013
4014 if ((int) rid_index < (int) RID_MAX)
4015 if (tree rname = ridpointers[(int) rid_index])
4016 if (!decl || DECL_NAME (decl) != rname)
4017 {
4018 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
4019 DECL_ARTIFICIAL (rdecl) = 1;
4020 set_global_binding (rdecl);
4021 if (!decl)
4022 decl = rdecl;
4023 }
4024
4025 if (decl)
4026 {
4027 if (!TYPE_NAME (type))
4028 TYPE_NAME (type) = decl;
4029 debug_hooks->type_decl (decl, 0);
4030 }
4031 }
4032
4033 /* Push a type into the namespace so that the back ends ignore it. */
4034
4035 static void
4036 record_unknown_type (tree type, const char* name)
4037 {
4038 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
4039 TYPE_DECL, get_identifier (name), type));
4040 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
4041 DECL_IGNORED_P (decl) = 1;
4042 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4043 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
4044 SET_TYPE_ALIGN (type, 1);
4045 TYPE_USER_ALIGN (type) = 0;
4046 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
4047 }
4048
4049 /* Create all the predefined identifiers. */
4050
4051 static void
4052 initialize_predefined_identifiers (void)
4053 {
4054 struct predefined_identifier
4055 {
4056 const char *name; /* Name. */
4057 tree *node; /* Node to store it in. */
4058 cp_identifier_kind kind; /* Kind of identifier. */
4059 };
4060
4061 /* A table of identifiers to create at startup. */
4062 static const predefined_identifier predefined_identifiers[] = {
4063 {"C++", &lang_name_cplusplus, cik_normal},
4064 {"C", &lang_name_c, cik_normal},
4065 /* Some of these names have a trailing space so that it is
4066 impossible for them to conflict with names written by users. */
4067 {"__ct ", &ctor_identifier, cik_ctor},
4068 {"__ct_base ", &base_ctor_identifier, cik_ctor},
4069 {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4070 {"__dt ", &dtor_identifier, cik_dtor},
4071 {"__dt_base ", &base_dtor_identifier, cik_dtor},
4072 {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4073 {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4074 {"__conv_op ", &conv_op_identifier, cik_conv_op},
4075 {"__in_chrg", &in_charge_identifier, cik_normal},
4076 {"this", &this_identifier, cik_normal},
4077 {"__delta", &delta_identifier, cik_normal},
4078 {"__pfn", &pfn_identifier, cik_normal},
4079 {"_vptr", &vptr_identifier, cik_normal},
4080 {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4081 {"::", &global_identifier, cik_normal},
4082 {"std", &std_identifier, cik_normal},
4083 /* The demangler expects anonymous namespaces to be called
4084 something starting with '_GLOBAL__N_'. It no longer needs
4085 to be unique to the TU. */
4086 {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4087 {"auto", &auto_identifier, cik_normal},
4088 {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4089 {"initializer_list", &init_list_identifier, cik_normal},
4090 {"__for_range ", &for_range__identifier, cik_normal},
4091 {"__for_begin ", &for_begin__identifier, cik_normal},
4092 {"__for_end ", &for_end__identifier, cik_normal},
4093 {"__for_range", &for_range_identifier, cik_normal},
4094 {"__for_begin", &for_begin_identifier, cik_normal},
4095 {"__for_end", &for_end_identifier, cik_normal},
4096 {"abi_tag", &abi_tag_identifier, cik_normal},
4097 {"aligned", &aligned_identifier, cik_normal},
4098 {"begin", &begin_identifier, cik_normal},
4099 {"end", &end_identifier, cik_normal},
4100 {"get", &get__identifier, cik_normal},
4101 {"gnu", &gnu_identifier, cik_normal},
4102 {"tuple_element", &tuple_element_identifier, cik_normal},
4103 {"tuple_size", &tuple_size_identifier, cik_normal},
4104 {"type", &type_identifier, cik_normal},
4105 {"value", &value_identifier, cik_normal},
4106 {"_FUN", &fun_identifier, cik_normal},
4107 {"__closure", &closure_identifier, cik_normal},
4108 {NULL, NULL, cik_normal}
4109 };
4110
4111 for (const predefined_identifier *pid = predefined_identifiers;
4112 pid->name; ++pid)
4113 {
4114 *pid->node = get_identifier (pid->name);
4115 /* Some of these identifiers already have a special kind. */
4116 if (pid->kind != cik_normal)
4117 set_identifier_kind (*pid->node, pid->kind);
4118 }
4119 }
4120
4121 /* Create the predefined scalar types of C,
4122 and some nodes representing standard constants (0, 1, (void *)0).
4123 Initialize the global binding level.
4124 Make definitions for built-in primitive functions. */
4125
4126 void
4127 cxx_init_decl_processing (void)
4128 {
4129 tree void_ftype;
4130 tree void_ftype_ptr;
4131
4132 /* Create all the identifiers we need. */
4133 initialize_predefined_identifiers ();
4134
4135 /* Create the global variables. */
4136 push_to_top_level ();
4137
4138 current_function_decl = NULL_TREE;
4139 current_binding_level = NULL;
4140 /* Enter the global namespace. */
4141 gcc_assert (global_namespace == NULL_TREE);
4142 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4143 void_type_node);
4144 TREE_PUBLIC (global_namespace) = 1;
4145 DECL_CONTEXT (global_namespace)
4146 = build_translation_unit_decl (get_identifier (main_input_filename));
4147 /* Remember whether we want the empty class passing ABI change warning
4148 in this TU. */
4149 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4150 = warn_abi && abi_version_crosses (12);
4151 debug_hooks->register_main_translation_unit
4152 (DECL_CONTEXT (global_namespace));
4153 begin_scope (sk_namespace, global_namespace);
4154 current_namespace = global_namespace;
4155
4156 if (flag_visibility_ms_compat)
4157 default_visibility = VISIBILITY_HIDDEN;
4158
4159 /* Initially, C. */
4160 current_lang_name = lang_name_c;
4161
4162 /* Create the `std' namespace. */
4163 push_namespace (std_identifier);
4164 std_node = current_namespace;
4165 pop_namespace ();
4166
4167 flag_noexcept_type = (cxx_dialect >= cxx17);
4168
4169 c_common_nodes_and_builtins ();
4170
4171 tree bool_ftype = build_function_type_list (boolean_type_node, NULL_TREE);
4172 tree decl
4173 = add_builtin_function ("__builtin_is_constant_evaluated",
4174 bool_ftype, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
4175 BUILT_IN_FRONTEND, NULL, NULL_TREE);
4176 set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4177
4178 integer_two_node = build_int_cst (NULL_TREE, 2);
4179
4180 /* Guess at the initial static decls size. */
4181 vec_alloc (static_decls, 500);
4182
4183 /* ... and keyed classes. */
4184 vec_alloc (keyed_classes, 100);
4185
4186 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4187 truthvalue_type_node = boolean_type_node;
4188 truthvalue_false_node = boolean_false_node;
4189 truthvalue_true_node = boolean_true_node;
4190
4191 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4192 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4193 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4194 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4195 NULL_TREE);
4196
4197 #if 0
4198 record_builtin_type (RID_MAX, NULL, string_type_node);
4199 #endif
4200
4201 delta_type_node = ptrdiff_type_node;
4202 vtable_index_type = ptrdiff_type_node;
4203
4204 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4205 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4206 void_ftype_ptr = build_function_type_list (void_type_node,
4207 ptr_type_node, NULL_TREE);
4208 void_ftype_ptr
4209 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4210
4211 /* Create the conversion operator marker. This operator's DECL_NAME
4212 is in the identifier table, so we can use identifier equality to
4213 find it. */
4214 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4215 void_ftype);
4216
4217 /* C++ extensions */
4218
4219 unknown_type_node = make_node (LANG_TYPE);
4220 record_unknown_type (unknown_type_node, "unknown type");
4221
4222 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4223 TREE_TYPE (unknown_type_node) = unknown_type_node;
4224
4225 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4226 result. */
4227 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4228 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4229
4230 init_list_type_node = make_node (LANG_TYPE);
4231 record_unknown_type (init_list_type_node, "init list");
4232
4233 {
4234 /* Make sure we get a unique function type, so we can give
4235 its pointer type a name. (This wins for gdb.) */
4236 tree vfunc_type = make_node (FUNCTION_TYPE);
4237 TREE_TYPE (vfunc_type) = integer_type_node;
4238 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4239 layout_type (vfunc_type);
4240
4241 vtable_entry_type = build_pointer_type (vfunc_type);
4242 }
4243 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4244
4245 vtbl_type_node
4246 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4247 layout_type (vtbl_type_node);
4248 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4249 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4250 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4251 layout_type (vtbl_ptr_type_node);
4252 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4253
4254 push_namespace (get_identifier ("__cxxabiv1"));
4255 abi_node = current_namespace;
4256 pop_namespace ();
4257
4258 global_type_node = make_node (LANG_TYPE);
4259 record_unknown_type (global_type_node, "global type");
4260
4261 any_targ_node = make_node (LANG_TYPE);
4262 record_unknown_type (any_targ_node, "any type");
4263
4264 /* Now, C++. */
4265 current_lang_name = lang_name_cplusplus;
4266
4267 if (aligned_new_threshold > 1
4268 && !pow2p_hwi (aligned_new_threshold))
4269 {
4270 error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4271 aligned_new_threshold = 1;
4272 }
4273 if (aligned_new_threshold == -1)
4274 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4275 if (aligned_new_threshold == 1)
4276 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4277
4278 {
4279 tree newattrs, extvisattr;
4280 tree newtype, deltype;
4281 tree ptr_ftype_sizetype;
4282 tree new_eh_spec;
4283
4284 ptr_ftype_sizetype
4285 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4286 if (cxx_dialect == cxx98)
4287 {
4288 tree bad_alloc_id;
4289 tree bad_alloc_type_node;
4290 tree bad_alloc_decl;
4291
4292 push_namespace (std_identifier);
4293 bad_alloc_id = get_identifier ("bad_alloc");
4294 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4295 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4296 bad_alloc_decl
4297 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4298 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4299 pop_namespace ();
4300
4301 new_eh_spec
4302 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4303 }
4304 else
4305 new_eh_spec = noexcept_false_spec;
4306
4307 /* Ensure attribs.c is initialized. */
4308 init_attributes ();
4309
4310 /* Ensure constraint.cc is initialized. */
4311 init_constraint_processing ();
4312
4313 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4314 NULL_TREE);
4315 newattrs = tree_cons (get_identifier ("alloc_size"),
4316 build_tree_list (NULL_TREE, integer_one_node),
4317 extvisattr);
4318 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4319 newtype = build_exception_variant (newtype, new_eh_spec);
4320 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4321 deltype = build_exception_variant (deltype, empty_except_spec);
4322 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4323 DECL_IS_MALLOC (opnew) = 1;
4324 DECL_IS_OPERATOR_NEW (opnew) = 1;
4325 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4326 DECL_IS_MALLOC (opnew) = 1;
4327 DECL_IS_OPERATOR_NEW (opnew) = 1;
4328 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4329 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4330 if (flag_sized_deallocation)
4331 {
4332 /* Also push the sized deallocation variants:
4333 void operator delete(void*, std::size_t) throw();
4334 void operator delete[](void*, std::size_t) throw(); */
4335 tree void_ftype_ptr_size
4336 = build_function_type_list (void_type_node, ptr_type_node,
4337 size_type_node, NULL_TREE);
4338 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4339 extvisattr);
4340 deltype = build_exception_variant (deltype, empty_except_spec);
4341 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4342 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4343 }
4344
4345 if (aligned_new_threshold)
4346 {
4347 push_namespace (std_identifier);
4348 tree align_id = get_identifier ("align_val_t");
4349 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4350 NULL_TREE, /*scoped*/true, NULL);
4351 pop_namespace ();
4352
4353 /* operator new (size_t, align_val_t); */
4354 newtype = build_function_type_list (ptr_type_node, size_type_node,
4355 align_type_node, NULL_TREE);
4356 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4357 newtype = build_exception_variant (newtype, new_eh_spec);
4358 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4359 DECL_IS_MALLOC (opnew) = 1;
4360 DECL_IS_OPERATOR_NEW (opnew) = 1;
4361 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4362 DECL_IS_MALLOC (opnew) = 1;
4363 DECL_IS_OPERATOR_NEW (opnew) = 1;
4364
4365 /* operator delete (void *, align_val_t); */
4366 deltype = build_function_type_list (void_type_node, ptr_type_node,
4367 align_type_node, NULL_TREE);
4368 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4369 deltype = build_exception_variant (deltype, empty_except_spec);
4370 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4371 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4372
4373 if (flag_sized_deallocation)
4374 {
4375 /* operator delete (void *, size_t, align_val_t); */
4376 deltype = build_function_type_list (void_type_node, ptr_type_node,
4377 size_type_node, align_type_node,
4378 NULL_TREE);
4379 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4380 deltype = build_exception_variant (deltype, empty_except_spec);
4381 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4382 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4383 }
4384 }
4385
4386 nullptr_type_node = make_node (NULLPTR_TYPE);
4387 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4388 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4389 TYPE_UNSIGNED (nullptr_type_node) = 1;
4390 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4391 if (abi_version_at_least (9))
4392 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4393 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4394 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4395 nullptr_node = build_int_cst (nullptr_type_node, 0);
4396 }
4397
4398 abort_fndecl
4399 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4400 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4401
4402 /* Perform other language dependent initializations. */
4403 init_class_processing ();
4404 init_rtti_processing ();
4405 init_template_processing ();
4406
4407 if (flag_exceptions)
4408 init_exception_processing ();
4409
4410 if (! supports_one_only ())
4411 flag_weak = 0;
4412
4413 make_fname_decl = cp_make_fname_decl;
4414 start_fname_decls ();
4415
4416 /* Show we use EH for cleanups. */
4417 if (flag_exceptions)
4418 using_eh_for_cleanups ();
4419 }
4420
4421 /* Generate an initializer for a function naming variable from
4422 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4423 filled in with the type of the init. */
4424
4425 tree
4426 cp_fname_init (const char* name, tree *type_p)
4427 {
4428 tree domain = NULL_TREE;
4429 tree type;
4430 tree init = NULL_TREE;
4431 size_t length = 0;
4432
4433 if (name)
4434 {
4435 length = strlen (name);
4436 domain = build_index_type (size_int (length));
4437 init = build_string (length + 1, name);
4438 }
4439
4440 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4441 type = build_cplus_array_type (type, domain);
4442
4443 *type_p = type;
4444
4445 if (init)
4446 TREE_TYPE (init) = type;
4447 else
4448 init = error_mark_node;
4449
4450 return init;
4451 }
4452
4453 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4454 the decl, LOC is the location to give the decl, NAME is the
4455 initialization string and TYPE_DEP indicates whether NAME depended
4456 on the type of the function. We make use of that to detect
4457 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4458 at the point of first use, so we mustn't push the decl now. */
4459
4460 static tree
4461 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4462 {
4463 const char *const name = (type_dep && in_template_function ()
4464 ? NULL : fname_as_string (type_dep));
4465 tree type;
4466 tree init = cp_fname_init (name, &type);
4467 tree decl = build_decl (loc, VAR_DECL, id, type);
4468
4469 if (name)
4470 free (CONST_CAST (char *, name));
4471
4472 /* As we're using pushdecl_with_scope, we must set the context. */
4473 DECL_CONTEXT (decl) = current_function_decl;
4474
4475 TREE_READONLY (decl) = 1;
4476 DECL_ARTIFICIAL (decl) = 1;
4477 DECL_DECLARED_CONSTEXPR_P (decl) = 1;
4478 TREE_STATIC (decl) = 1;
4479
4480 TREE_USED (decl) = 1;
4481
4482 if (init)
4483 {
4484 SET_DECL_VALUE_EXPR (decl, init);
4485 DECL_HAS_VALUE_EXPR_P (decl) = 1;
4486 /* For decl_constant_var_p. */
4487 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
4488 }
4489
4490 if (current_function_decl)
4491 {
4492 DECL_CONTEXT (decl) = current_function_decl;
4493 decl = pushdecl_outermost_localscope (decl);
4494 if (decl != error_mark_node)
4495 add_decl_expr (decl);
4496 }
4497 else
4498 {
4499 DECL_THIS_STATIC (decl) = true;
4500 pushdecl_top_level_and_finish (decl, NULL_TREE);
4501 }
4502
4503 return decl;
4504 }
4505
4506 static tree
4507 builtin_function_1 (tree decl, tree context, bool is_global)
4508 {
4509 tree id = DECL_NAME (decl);
4510 const char *name = IDENTIFIER_POINTER (id);
4511
4512 retrofit_lang_decl (decl);
4513
4514 DECL_ARTIFICIAL (decl) = 1;
4515 SET_DECL_LANGUAGE (decl, lang_c);
4516 /* Runtime library routines are, by definition, available in an
4517 external shared object. */
4518 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4519 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4520
4521 DECL_CONTEXT (decl) = context;
4522
4523 /* A function in the user's namespace should have an explicit
4524 declaration before it is used. Mark the built-in function as
4525 anticipated but not actually declared. */
4526 if (name[0] != '_' || name[1] != '_')
4527 DECL_ANTICIPATED (decl) = 1;
4528 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4529 {
4530 size_t len = strlen (name);
4531
4532 /* Treat __*_chk fortification functions as anticipated as well,
4533 unless they are __builtin_*. */
4534 if (len > strlen ("___chk")
4535 && memcmp (name + len - strlen ("_chk"),
4536 "_chk", strlen ("_chk") + 1) == 0)
4537 DECL_ANTICIPATED (decl) = 1;
4538 }
4539
4540 if (is_global)
4541 return pushdecl_top_level (decl);
4542 else
4543 return pushdecl (decl);
4544 }
4545
4546 tree
4547 cxx_builtin_function (tree decl)
4548 {
4549 tree id = DECL_NAME (decl);
4550 const char *name = IDENTIFIER_POINTER (id);
4551 /* All builtins that don't begin with an '_' should additionally
4552 go in the 'std' namespace. */
4553 if (name[0] != '_')
4554 {
4555 tree decl2 = copy_node(decl);
4556 push_namespace (std_identifier);
4557 builtin_function_1 (decl2, std_node, false);
4558 pop_namespace ();
4559 }
4560
4561 return builtin_function_1 (decl, NULL_TREE, false);
4562 }
4563
4564 /* Like cxx_builtin_function, but guarantee the function is added to the global
4565 scope. This is to allow function specific options to add new machine
4566 dependent builtins when the target ISA changes via attribute((target(...)))
4567 which saves space on program startup if the program does not use non-generic
4568 ISAs. */
4569
4570 tree
4571 cxx_builtin_function_ext_scope (tree decl)
4572 {
4573
4574 tree id = DECL_NAME (decl);
4575 const char *name = IDENTIFIER_POINTER (id);
4576 /* All builtins that don't begin with an '_' should additionally
4577 go in the 'std' namespace. */
4578 if (name[0] != '_')
4579 {
4580 tree decl2 = copy_node(decl);
4581 push_namespace (std_identifier);
4582 builtin_function_1 (decl2, std_node, true);
4583 pop_namespace ();
4584 }
4585
4586 return builtin_function_1 (decl, NULL_TREE, true);
4587 }
4588
4589 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4590 function. Not called directly. */
4591
4592 static tree
4593 build_library_fn (tree name, enum tree_code operator_code, tree type,
4594 int ecf_flags)
4595 {
4596 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4597 DECL_EXTERNAL (fn) = 1;
4598 TREE_PUBLIC (fn) = 1;
4599 DECL_ARTIFICIAL (fn) = 1;
4600 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4601 = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4602 SET_DECL_LANGUAGE (fn, lang_c);
4603 /* Runtime library routines are, by definition, available in an
4604 external shared object. */
4605 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4606 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4607 set_call_expr_flags (fn, ecf_flags);
4608 return fn;
4609 }
4610
4611 /* Returns the _DECL for a library function with C++ linkage. */
4612
4613 static tree
4614 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4615 int ecf_flags)
4616 {
4617 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4618 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4619 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4620 return fn;
4621 }
4622
4623 /* Like build_library_fn, but takes a C string instead of an
4624 IDENTIFIER_NODE. */
4625
4626 tree
4627 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4628 {
4629 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4630 }
4631
4632 /* Like build_cp_library_fn, but takes a C string instead of an
4633 IDENTIFIER_NODE. */
4634
4635 tree
4636 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4637 {
4638 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4639 ecf_flags);
4640 }
4641
4642 /* Like build_library_fn, but also pushes the function so that we will
4643 be able to find it via get_global_binding. Also, the function
4644 may throw exceptions listed in RAISES. */
4645
4646 tree
4647 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4648 {
4649 tree fn;
4650
4651 if (raises)
4652 type = build_exception_variant (type, raises);
4653
4654 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4655 pushdecl_top_level (fn);
4656 return fn;
4657 }
4658
4659 /* Like build_cp_library_fn, but also pushes the function so that it
4660 will be found by normal lookup. */
4661
4662 static tree
4663 push_cp_library_fn (enum tree_code operator_code, tree type,
4664 int ecf_flags)
4665 {
4666 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4667 operator_code, type, ecf_flags);
4668 pushdecl (fn);
4669 if (flag_tm)
4670 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4671 return fn;
4672 }
4673
4674 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4675 a FUNCTION_TYPE. */
4676
4677 tree
4678 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4679 {
4680 tree type = build_function_type (void_type_node, parmtypes);
4681 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4682 }
4683
4684 /* Like push_library_fn, but also note that this function throws
4685 and does not return. Used for __throw_foo and the like. */
4686
4687 tree
4688 push_throw_library_fn (tree name, tree type)
4689 {
4690 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4691 return fn;
4692 }
4693 \f
4694 /* When we call finish_struct for an anonymous union, we create
4695 default copy constructors and such. But, an anonymous union
4696 shouldn't have such things; this function undoes the damage to the
4697 anonymous union type T.
4698
4699 (The reason that we create the synthesized methods is that we don't
4700 distinguish `union { int i; }' from `typedef union { int i; } U'.
4701 The first is an anonymous union; the second is just an ordinary
4702 union type.) */
4703
4704 void
4705 fixup_anonymous_aggr (tree t)
4706 {
4707 /* Wipe out memory of synthesized methods. */
4708 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4709 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4710 TYPE_HAS_COPY_CTOR (t) = 0;
4711 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4712 TYPE_HAS_COPY_ASSIGN (t) = 0;
4713 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4714
4715 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4716 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4717 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4718 *prev_p = DECL_CHAIN (probe);
4719 else
4720 prev_p = &DECL_CHAIN (probe);
4721
4722 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4723 assignment operators (because they cannot have these methods themselves).
4724 For anonymous unions this is already checked because they are not allowed
4725 in any union, otherwise we have to check it. */
4726 if (TREE_CODE (t) != UNION_TYPE)
4727 {
4728 tree field, type;
4729
4730 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4731 if (TREE_CODE (field) == FIELD_DECL)
4732 {
4733 type = TREE_TYPE (field);
4734 if (CLASS_TYPE_P (type))
4735 {
4736 if (TYPE_NEEDS_CONSTRUCTING (type))
4737 error ("member %q+#D with constructor not allowed "
4738 "in anonymous aggregate", field);
4739 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4740 error ("member %q+#D with destructor not allowed "
4741 "in anonymous aggregate", field);
4742 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4743 error ("member %q+#D with copy assignment operator "
4744 "not allowed in anonymous aggregate", field);
4745 }
4746 }
4747 }
4748 }
4749
4750 /* Warn for an attribute located at LOCATION that appertains to the
4751 class type CLASS_TYPE that has not been properly placed after its
4752 class-key, in it class-specifier. */
4753
4754 void
4755 warn_misplaced_attr_for_class_type (location_t location,
4756 tree class_type)
4757 {
4758 gcc_assert (OVERLOAD_TYPE_P (class_type));
4759
4760 auto_diagnostic_group d;
4761 if (warning_at (location, OPT_Wattributes,
4762 "attribute ignored in declaration "
4763 "of %q#T", class_type))
4764 inform (location,
4765 "attribute for %q#T must follow the %qs keyword",
4766 class_type, class_key_or_enum_as_string (class_type));
4767 }
4768
4769 /* Make sure that a declaration with no declarator is well-formed, i.e.
4770 just declares a tagged type or anonymous union.
4771
4772 Returns the type declared; or NULL_TREE if none. */
4773
4774 tree
4775 check_tag_decl (cp_decl_specifier_seq *declspecs,
4776 bool explicit_type_instantiation_p)
4777 {
4778 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4779 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4780 /* If a class, struct, or enum type is declared by the DECLSPECS
4781 (i.e, if a class-specifier, enum-specifier, or non-typename
4782 elaborated-type-specifier appears in the DECLSPECS),
4783 DECLARED_TYPE is set to the corresponding type. */
4784 tree declared_type = NULL_TREE;
4785 bool error_p = false;
4786
4787 if (declspecs->multiple_types_p)
4788 error ("multiple types in one declaration");
4789 else if (declspecs->redefined_builtin_type)
4790 {
4791 if (!in_system_header_at (input_location))
4792 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4793 "redeclaration of C++ built-in type %qT",
4794 declspecs->redefined_builtin_type);
4795 return NULL_TREE;
4796 }
4797
4798 if (declspecs->type
4799 && TYPE_P (declspecs->type)
4800 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4801 && MAYBE_CLASS_TYPE_P (declspecs->type))
4802 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4803 declared_type = declspecs->type;
4804 else if (declspecs->type == error_mark_node)
4805 error_p = true;
4806
4807 if (type_uses_auto (declared_type))
4808 {
4809 error_at (declspecs->locations[ds_type_spec],
4810 "%<auto%> can only be specified for variables "
4811 "or function declarations");
4812 return error_mark_node;
4813 }
4814
4815 if (declared_type && !OVERLOAD_TYPE_P (declared_type))
4816 declared_type = NULL_TREE;
4817
4818 if (!declared_type && !saw_friend && !error_p)
4819 permerror (input_location, "declaration does not declare anything");
4820 /* Check for an anonymous union. */
4821 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4822 && TYPE_UNNAMED_P (declared_type))
4823 {
4824 /* 7/3 In a simple-declaration, the optional init-declarator-list
4825 can be omitted only when declaring a class (clause 9) or
4826 enumeration (7.2), that is, when the decl-specifier-seq contains
4827 either a class-specifier, an elaborated-type-specifier with
4828 a class-key (9.1), or an enum-specifier. In these cases and
4829 whenever a class-specifier or enum-specifier is present in the
4830 decl-specifier-seq, the identifiers in these specifiers are among
4831 the names being declared by the declaration (as class-name,
4832 enum-names, or enumerators, depending on the syntax). In such
4833 cases, and except for the declaration of an unnamed bit-field (9.6),
4834 the decl-specifier-seq shall introduce one or more names into the
4835 program, or shall redeclare a name introduced by a previous
4836 declaration. [Example:
4837 enum { }; // ill-formed
4838 typedef class { }; // ill-formed
4839 --end example] */
4840 if (saw_typedef)
4841 {
4842 error ("missing type-name in typedef-declaration");
4843 return NULL_TREE;
4844 }
4845 /* Anonymous unions are objects, so they can have specifiers. */;
4846 SET_ANON_AGGR_TYPE_P (declared_type);
4847
4848 if (TREE_CODE (declared_type) != UNION_TYPE
4849 && !in_system_header_at (input_location))
4850 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4851 }
4852
4853 else
4854 {
4855 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4856 error_at (declspecs->locations[ds_inline],
4857 "%<inline%> can only be specified for functions");
4858 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4859 error_at (declspecs->locations[ds_virtual],
4860 "%<virtual%> can only be specified for functions");
4861 else if (saw_friend
4862 && (!current_class_type
4863 || current_scope () != current_class_type))
4864 error_at (declspecs->locations[ds_friend],
4865 "%<friend%> can only be specified inside a class");
4866 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4867 error_at (declspecs->locations[ds_explicit],
4868 "%<explicit%> can only be specified for constructors");
4869 else if (declspecs->storage_class)
4870 error_at (declspecs->locations[ds_storage_class],
4871 "a storage class can only be specified for objects "
4872 "and functions");
4873 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4874 error_at (declspecs->locations[ds_const],
4875 "%<const%> can only be specified for objects and "
4876 "functions");
4877 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4878 error_at (declspecs->locations[ds_volatile],
4879 "%<volatile%> can only be specified for objects and "
4880 "functions");
4881 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4882 error_at (declspecs->locations[ds_restrict],
4883 "%<__restrict%> can only be specified for objects and "
4884 "functions");
4885 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4886 error_at (declspecs->locations[ds_thread],
4887 "%<__thread%> can only be specified for objects "
4888 "and functions");
4889 else if (saw_typedef)
4890 warning_at (declspecs->locations[ds_typedef], 0,
4891 "%<typedef%> was ignored in this declaration");
4892 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4893 error_at (declspecs->locations[ds_constexpr],
4894 "%<constexpr%> cannot be used for type declarations");
4895 }
4896
4897 if (declspecs->attributes && warn_attributes && declared_type)
4898 {
4899 location_t loc;
4900 if (!CLASS_TYPE_P (declared_type)
4901 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4902 /* For a non-template class, use the name location. */
4903 loc = location_of (declared_type);
4904 else
4905 /* For a template class (an explicit instantiation), use the
4906 current location. */
4907 loc = input_location;
4908
4909 if (explicit_type_instantiation_p)
4910 /* [dcl.attr.grammar]/4:
4911
4912 No attribute-specifier-seq shall appertain to an explicit
4913 instantiation. */
4914 {
4915 if (warning_at (loc, OPT_Wattributes,
4916 "attribute ignored in explicit instantiation %q#T",
4917 declared_type))
4918 inform (loc,
4919 "no attribute can be applied to "
4920 "an explicit instantiation");
4921 }
4922 else
4923 warn_misplaced_attr_for_class_type (loc, declared_type);
4924 }
4925
4926 return declared_type;
4927 }
4928
4929 /* Called when a declaration is seen that contains no names to declare.
4930 If its type is a reference to a structure, union or enum inherited
4931 from a containing scope, shadow that tag name for the current scope
4932 with a forward reference.
4933 If its type defines a new named structure or union
4934 or defines an enum, it is valid but we need not do anything here.
4935 Otherwise, it is an error.
4936
4937 C++: may have to grok the declspecs to learn about static,
4938 complain for anonymous unions.
4939
4940 Returns the TYPE declared -- or NULL_TREE if none. */
4941
4942 tree
4943 shadow_tag (cp_decl_specifier_seq *declspecs)
4944 {
4945 tree t = check_tag_decl (declspecs,
4946 /*explicit_type_instantiation_p=*/false);
4947
4948 if (!t)
4949 return NULL_TREE;
4950
4951 if (maybe_process_partial_specialization (t) == error_mark_node)
4952 return NULL_TREE;
4953
4954 /* This is where the variables in an anonymous union are
4955 declared. An anonymous union declaration looks like:
4956 union { ... } ;
4957 because there is no declarator after the union, the parser
4958 sends that declaration here. */
4959 if (ANON_AGGR_TYPE_P (t))
4960 {
4961 fixup_anonymous_aggr (t);
4962
4963 if (TYPE_FIELDS (t))
4964 {
4965 tree decl = grokdeclarator (/*declarator=*/NULL,
4966 declspecs, NORMAL, 0, NULL);
4967 finish_anon_union (decl);
4968 }
4969 }
4970
4971 return t;
4972 }
4973 \f
4974 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4975
4976 tree
4977 groktypename (cp_decl_specifier_seq *type_specifiers,
4978 const cp_declarator *declarator,
4979 bool is_template_arg)
4980 {
4981 tree attrs;
4982 tree type;
4983 enum decl_context context
4984 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4985 attrs = type_specifiers->attributes;
4986 type_specifiers->attributes = NULL_TREE;
4987 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4988 if (attrs && type != error_mark_node)
4989 {
4990 if (CLASS_TYPE_P (type))
4991 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4992 "outside of definition", type);
4993 else if (MAYBE_CLASS_TYPE_P (type))
4994 /* A template type parameter or other dependent type. */
4995 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4996 "type %qT without an associated declaration", type);
4997 else
4998 cplus_decl_attributes (&type, attrs, 0);
4999 }
5000 return type;
5001 }
5002
5003 /* Process a DECLARATOR for a function-scope variable declaration,
5004 namespace-scope variable declaration, or function declaration.
5005 (Function definitions go through start_function; class member
5006 declarations appearing in the body of the class go through
5007 grokfield.) The DECL corresponding to the DECLARATOR is returned.
5008 If an error occurs, the error_mark_node is returned instead.
5009
5010 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
5011 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
5012 for an explicitly defaulted function, or SD_DELETED for an explicitly
5013 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
5014 implicitly initialized via a default constructor. ATTRIBUTES and
5015 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
5016
5017 The scope represented by the context of the returned DECL is pushed
5018 (if it is not the global namespace) and is assigned to
5019 *PUSHED_SCOPE_P. The caller is then responsible for calling
5020 pop_scope on *PUSHED_SCOPE_P if it is set. */
5021
5022 tree
5023 start_decl (const cp_declarator *declarator,
5024 cp_decl_specifier_seq *declspecs,
5025 int initialized,
5026 tree attributes,
5027 tree prefix_attributes,
5028 tree *pushed_scope_p)
5029 {
5030 tree decl;
5031 tree context;
5032 bool was_public;
5033 int flags;
5034 bool alias;
5035
5036 *pushed_scope_p = NULL_TREE;
5037
5038 /* An object declared as __attribute__((deprecated)) suppresses
5039 warnings of uses of other deprecated items. */
5040 if (lookup_attribute ("deprecated", attributes))
5041 deprecated_state = DEPRECATED_SUPPRESS;
5042
5043 attributes = chainon (attributes, prefix_attributes);
5044
5045 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5046 &attributes);
5047
5048 deprecated_state = DEPRECATED_NORMAL;
5049
5050 if (decl == NULL_TREE || VOID_TYPE_P (decl)
5051 || decl == error_mark_node)
5052 return error_mark_node;
5053
5054 context = CP_DECL_CONTEXT (decl);
5055 if (context != global_namespace)
5056 *pushed_scope_p = push_scope (context);
5057
5058 /* Is it valid for this decl to have an initializer at all?
5059 If not, set INITIALIZED to zero, which will indirectly
5060 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
5061 if (initialized
5062 && TREE_CODE (decl) == TYPE_DECL)
5063 {
5064 error_at (DECL_SOURCE_LOCATION (decl),
5065 "typedef %qD is initialized (use decltype instead)", decl);
5066 return error_mark_node;
5067 }
5068
5069 if (initialized)
5070 {
5071 if (! toplevel_bindings_p ()
5072 && DECL_EXTERNAL (decl))
5073 warning (0, "declaration of %q#D has %<extern%> and is initialized",
5074 decl);
5075 DECL_EXTERNAL (decl) = 0;
5076 if (toplevel_bindings_p ())
5077 TREE_STATIC (decl) = 1;
5078 }
5079 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
5080
5081 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
5082 record_key_method_defined (decl);
5083
5084 /* If this is a typedef that names the class for linkage purposes
5085 (7.1.3p8), apply any attributes directly to the type. */
5086 if (TREE_CODE (decl) == TYPE_DECL
5087 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
5088 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
5089 flags = ATTR_FLAG_TYPE_IN_PLACE;
5090 else
5091 flags = 0;
5092
5093 /* Set attributes here so if duplicate decl, will have proper attributes. */
5094 cplus_decl_attributes (&decl, attributes, flags);
5095
5096 /* Dllimported symbols cannot be defined. Static data members (which
5097 can be initialized in-class and dllimported) go through grokfield,
5098 not here, so we don't need to exclude those decls when checking for
5099 a definition. */
5100 if (initialized && DECL_DLLIMPORT_P (decl))
5101 {
5102 error_at (DECL_SOURCE_LOCATION (decl),
5103 "definition of %q#D is marked %<dllimport%>", decl);
5104 DECL_DLLIMPORT_P (decl) = 0;
5105 }
5106
5107 /* If #pragma weak was used, mark the decl weak now. */
5108 if (!processing_template_decl && !DECL_DECOMPOSITION_P (decl))
5109 maybe_apply_pragma_weak (decl);
5110
5111 if (TREE_CODE (decl) == FUNCTION_DECL
5112 && DECL_DECLARED_INLINE_P (decl)
5113 && DECL_UNINLINABLE (decl)
5114 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5115 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5116 "inline function %qD given attribute noinline", decl);
5117
5118 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5119 {
5120 bool this_tmpl = (processing_template_decl
5121 > template_class_depth (context));
5122 if (VAR_P (decl))
5123 {
5124 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5125 if (field == NULL_TREE
5126 || !(VAR_P (field) || variable_template_p (field)))
5127 error ("%q+#D is not a static data member of %q#T", decl, context);
5128 else if (variable_template_p (field)
5129 && (DECL_LANG_SPECIFIC (decl)
5130 && DECL_TEMPLATE_SPECIALIZATION (decl)))
5131 /* OK, specialization was already checked. */;
5132 else if (variable_template_p (field) && !this_tmpl)
5133 {
5134 error_at (DECL_SOURCE_LOCATION (decl),
5135 "non-member-template declaration of %qD", decl);
5136 inform (DECL_SOURCE_LOCATION (field), "does not match "
5137 "member template declaration here");
5138 return error_mark_node;
5139 }
5140 else
5141 {
5142 if (variable_template_p (field))
5143 field = DECL_TEMPLATE_RESULT (field);
5144
5145 if (DECL_CONTEXT (field) != context)
5146 {
5147 if (!same_type_p (DECL_CONTEXT (field), context))
5148 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5149 "to be defined as %<%T::%D%>",
5150 DECL_CONTEXT (field), DECL_NAME (decl),
5151 context, DECL_NAME (decl));
5152 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5153 }
5154 /* Static data member are tricky; an in-class initialization
5155 still doesn't provide a definition, so the in-class
5156 declaration will have DECL_EXTERNAL set, but will have an
5157 initialization. Thus, duplicate_decls won't warn
5158 about this situation, and so we check here. */
5159 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5160 error ("duplicate initialization of %qD", decl);
5161 field = duplicate_decls (decl, field,
5162 /*newdecl_is_friend=*/false);
5163 if (field == error_mark_node)
5164 return error_mark_node;
5165 else if (field)
5166 decl = field;
5167 }
5168 }
5169 else
5170 {
5171 tree field = check_classfn (context, decl,
5172 this_tmpl
5173 ? current_template_parms
5174 : NULL_TREE);
5175 if (field && field != error_mark_node
5176 && duplicate_decls (decl, field,
5177 /*newdecl_is_friend=*/false))
5178 decl = field;
5179 }
5180
5181 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5182 DECL_IN_AGGR_P (decl) = 0;
5183 /* Do not mark DECL as an explicit specialization if it was not
5184 already marked as an instantiation; a declaration should
5185 never be marked as a specialization unless we know what
5186 template is being specialized. */
5187 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5188 {
5189 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5190 if (TREE_CODE (decl) == FUNCTION_DECL)
5191 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5192 && DECL_DECLARED_INLINE_P (decl));
5193 else
5194 DECL_COMDAT (decl) = false;
5195
5196 /* [temp.expl.spec] An explicit specialization of a static data
5197 member of a template is a definition if the declaration
5198 includes an initializer; otherwise, it is a declaration.
5199
5200 We check for processing_specialization so this only applies
5201 to the new specialization syntax. */
5202 if (!initialized && processing_specialization)
5203 DECL_EXTERNAL (decl) = 1;
5204 }
5205
5206 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5207 /* Aliases are definitions. */
5208 && !alias)
5209 permerror (declarator->id_loc,
5210 "declaration of %q#D outside of class is not definition",
5211 decl);
5212 }
5213
5214 was_public = TREE_PUBLIC (decl);
5215
5216 /* Enter this declaration into the symbol table. Don't push the plain
5217 VAR_DECL for a variable template. */
5218 if (!template_parm_scope_p ()
5219 || !VAR_P (decl))
5220 decl = maybe_push_decl (decl);
5221
5222 if (processing_template_decl)
5223 decl = push_template_decl (decl);
5224 if (decl == error_mark_node)
5225 return error_mark_node;
5226
5227 if (VAR_P (decl)
5228 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5229 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5230 {
5231 /* This is a const variable with implicit 'static'. Set
5232 DECL_THIS_STATIC so we can tell it from variables that are
5233 !TREE_PUBLIC because of the anonymous namespace. */
5234 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5235 DECL_THIS_STATIC (decl) = 1;
5236 }
5237
5238 if (current_function_decl && VAR_P (decl)
5239 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5240 {
5241 bool ok = false;
5242 if (CP_DECL_THREAD_LOCAL_P (decl))
5243 error_at (DECL_SOURCE_LOCATION (decl),
5244 "%qD declared %<thread_local%> in %<constexpr%> function",
5245 decl);
5246 else if (TREE_STATIC (decl))
5247 error_at (DECL_SOURCE_LOCATION (decl),
5248 "%qD declared %<static%> in %<constexpr%> function", decl);
5249 else
5250 ok = true;
5251 if (!ok)
5252 cp_function_chain->invalid_constexpr = true;
5253 }
5254
5255 if (!processing_template_decl && VAR_P (decl))
5256 start_decl_1 (decl, initialized);
5257
5258 return decl;
5259 }
5260
5261 /* Process the declaration of a variable DECL. INITIALIZED is true
5262 iff DECL is explicitly initialized. (INITIALIZED is false if the
5263 variable is initialized via an implicitly-called constructor.)
5264 This function must be called for ordinary variables (including, for
5265 example, implicit instantiations of templates), but must not be
5266 called for template declarations. */
5267
5268 void
5269 start_decl_1 (tree decl, bool initialized)
5270 {
5271 tree type;
5272 bool complete_p;
5273 bool aggregate_definition_p;
5274
5275 gcc_assert (!processing_template_decl);
5276
5277 if (error_operand_p (decl))
5278 return;
5279
5280 gcc_assert (VAR_P (decl));
5281
5282 type = TREE_TYPE (decl);
5283 complete_p = COMPLETE_TYPE_P (type);
5284 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5285
5286 /* If an explicit initializer is present, or if this is a definition
5287 of an aggregate, then we need a complete type at this point.
5288 (Scalars are always complete types, so there is nothing to
5289 check.) This code just sets COMPLETE_P; errors (if necessary)
5290 are issued below. */
5291 if ((initialized || aggregate_definition_p)
5292 && !complete_p
5293 && COMPLETE_TYPE_P (complete_type (type)))
5294 {
5295 complete_p = true;
5296 /* We will not yet have set TREE_READONLY on DECL if the type
5297 was "const", but incomplete, before this point. But, now, we
5298 have a complete type, so we can try again. */
5299 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5300 }
5301
5302 if (initialized)
5303 /* Is it valid for this decl to have an initializer at all? */
5304 {
5305 /* Don't allow initializations for incomplete types except for
5306 arrays which might be completed by the initialization. */
5307 if (complete_p)
5308 ; /* A complete type is ok. */
5309 else if (type_uses_auto (type))
5310 ; /* An auto type is ok. */
5311 else if (TREE_CODE (type) != ARRAY_TYPE)
5312 {
5313 error ("variable %q#D has initializer but incomplete type", decl);
5314 type = TREE_TYPE (decl) = error_mark_node;
5315 }
5316 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5317 {
5318 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5319 error ("elements of array %q#D have incomplete type", decl);
5320 /* else we already gave an error in start_decl. */
5321 }
5322 }
5323 else if (aggregate_definition_p && !complete_p)
5324 {
5325 if (type_uses_auto (type))
5326 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5327 else
5328 {
5329 error ("aggregate %q#D has incomplete type and cannot be defined",
5330 decl);
5331 /* Change the type so that assemble_variable will give
5332 DECL an rtl we can live with: (mem (const_int 0)). */
5333 type = TREE_TYPE (decl) = error_mark_node;
5334 }
5335 }
5336
5337 /* Create a new scope to hold this declaration if necessary.
5338 Whether or not a new scope is necessary cannot be determined
5339 until after the type has been completed; if the type is a
5340 specialization of a class template it is not until after
5341 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5342 will be set correctly. */
5343 maybe_push_cleanup_level (type);
5344 }
5345
5346 /* Handle initialization of references. DECL, TYPE, and INIT have the
5347 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5348 but will be set to a new CLEANUP_STMT if a temporary is created
5349 that must be destroyed subsequently.
5350
5351 Returns an initializer expression to use to initialize DECL, or
5352 NULL if the initialization can be performed statically.
5353
5354 Quotes on semantics can be found in ARM 8.4.3. */
5355
5356 static tree
5357 grok_reference_init (tree decl, tree type, tree init, int flags)
5358 {
5359 if (init == NULL_TREE)
5360 {
5361 if ((DECL_LANG_SPECIFIC (decl) == 0
5362 || DECL_IN_AGGR_P (decl) == 0)
5363 && ! DECL_THIS_EXTERN (decl))
5364 error_at (DECL_SOURCE_LOCATION (decl),
5365 "%qD declared as reference but not initialized", decl);
5366 return NULL_TREE;
5367 }
5368
5369 if (TREE_CODE (init) == TREE_LIST)
5370 init = build_x_compound_expr_from_list (init, ELK_INIT,
5371 tf_warning_or_error);
5372
5373 tree ttype = TREE_TYPE (type);
5374 if (TREE_CODE (ttype) != ARRAY_TYPE
5375 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5376 /* Note: default conversion is only called in very special cases. */
5377 init = decay_conversion (init, tf_warning_or_error);
5378
5379 /* check_initializer handles this for non-reference variables, but for
5380 references we need to do it here or the initializer will get the
5381 incomplete array type and confuse later calls to
5382 cp_complete_array_type. */
5383 if (TREE_CODE (ttype) == ARRAY_TYPE
5384 && TYPE_DOMAIN (ttype) == NULL_TREE
5385 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5386 || TREE_CODE (init) == STRING_CST))
5387 {
5388 cp_complete_array_type (&ttype, init, false);
5389 if (ttype != TREE_TYPE (type))
5390 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5391 }
5392
5393 /* Convert INIT to the reference type TYPE. This may involve the
5394 creation of a temporary, whose lifetime must be the same as that
5395 of the reference. If so, a DECL_EXPR for the temporary will be
5396 added just after the DECL_EXPR for DECL. That's why we don't set
5397 DECL_INITIAL for local references (instead assigning to them
5398 explicitly); we need to allow the temporary to be initialized
5399 first. */
5400 return initialize_reference (type, init, flags,
5401 tf_warning_or_error);
5402 }
5403
5404 /* Designated initializers in arrays are not supported in GNU C++.
5405 The parser cannot detect this error since it does not know whether
5406 a given brace-enclosed initializer is for a class type or for an
5407 array. This function checks that CE does not use a designated
5408 initializer. If it does, an error is issued. Returns true if CE
5409 is valid, i.e., does not have a designated initializer. */
5410
5411 bool
5412 check_array_designated_initializer (constructor_elt *ce,
5413 unsigned HOST_WIDE_INT index)
5414 {
5415 /* Designated initializers for array elements are not supported. */
5416 if (ce->index)
5417 {
5418 /* The parser only allows identifiers as designated
5419 initializers. */
5420 if (ce->index == error_mark_node)
5421 {
5422 error ("name used in a GNU-style designated "
5423 "initializer for an array");
5424 return false;
5425 }
5426 else if (identifier_p (ce->index))
5427 {
5428 error ("name %qD used in a GNU-style designated "
5429 "initializer for an array", ce->index);
5430 return false;
5431 }
5432
5433 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5434 ce->index, true);
5435 if (ce_index
5436 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5437 && (TREE_CODE (ce_index = fold_non_dependent_expr (ce_index))
5438 == INTEGER_CST))
5439 {
5440 /* A C99 designator is OK if it matches the current index. */
5441 if (wi::to_wide (ce_index) == index)
5442 {
5443 ce->index = ce_index;
5444 return true;
5445 }
5446 else
5447 sorry ("non-trivial designated initializers not supported");
5448 }
5449 else
5450 error ("C99 designator %qE is not an integral constant-expression",
5451 ce->index);
5452
5453 return false;
5454 }
5455
5456 return true;
5457 }
5458
5459 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5460 array until we finish parsing the initializer. If that's the
5461 situation we're in, update DECL accordingly. */
5462
5463 static void
5464 maybe_deduce_size_from_array_init (tree decl, tree init)
5465 {
5466 tree type = TREE_TYPE (decl);
5467
5468 if (TREE_CODE (type) == ARRAY_TYPE
5469 && TYPE_DOMAIN (type) == NULL_TREE
5470 && TREE_CODE (decl) != TYPE_DECL)
5471 {
5472 /* do_default is really a C-ism to deal with tentative definitions.
5473 But let's leave it here to ease the eventual merge. */
5474 int do_default = !DECL_EXTERNAL (decl);
5475 tree initializer = init ? init : DECL_INITIAL (decl);
5476 int failure = 0;
5477
5478 /* Check that there are no designated initializers in INIT, as
5479 those are not supported in GNU C++, and as the middle-end
5480 will crash if presented with a non-numeric designated
5481 initializer. */
5482 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5483 {
5484 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5485 constructor_elt *ce;
5486 HOST_WIDE_INT i;
5487 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5488 {
5489 if (instantiation_dependent_expression_p (ce->index))
5490 return;
5491 if (!check_array_designated_initializer (ce, i))
5492 failure = 1;
5493 }
5494 }
5495
5496 if (failure)
5497 TREE_TYPE (decl) = error_mark_node;
5498 else
5499 {
5500 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5501 do_default);
5502 if (failure == 1)
5503 {
5504 error_at (cp_expr_loc_or_loc (initializer,
5505 DECL_SOURCE_LOCATION (decl)),
5506 "initializer fails to determine size of %qD", decl);
5507 }
5508 else if (failure == 2)
5509 {
5510 if (do_default)
5511 {
5512 error_at (DECL_SOURCE_LOCATION (decl),
5513 "array size missing in %qD", decl);
5514 }
5515 /* If a `static' var's size isn't known, make it extern as
5516 well as static, so it does not get allocated. If it's not
5517 `static', then don't mark it extern; finish_incomplete_decl
5518 will give it a default size and it will get allocated. */
5519 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5520 DECL_EXTERNAL (decl) = 1;
5521 }
5522 else if (failure == 3)
5523 {
5524 error_at (DECL_SOURCE_LOCATION (decl),
5525 "zero-size array %qD", decl);
5526 }
5527 }
5528
5529 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5530
5531 relayout_decl (decl);
5532 }
5533 }
5534
5535 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5536 any appropriate error messages regarding the layout. */
5537
5538 static void
5539 layout_var_decl (tree decl)
5540 {
5541 tree type;
5542
5543 type = TREE_TYPE (decl);
5544 if (type == error_mark_node)
5545 return;
5546
5547 /* If we haven't already laid out this declaration, do so now.
5548 Note that we must not call complete type for an external object
5549 because it's type might involve templates that we are not
5550 supposed to instantiate yet. (And it's perfectly valid to say
5551 `extern X x' for some incomplete type `X'.) */
5552 if (!DECL_EXTERNAL (decl))
5553 complete_type (type);
5554 if (!DECL_SIZE (decl)
5555 && TREE_TYPE (decl) != error_mark_node
5556 && complete_or_array_type_p (type))
5557 layout_decl (decl, 0);
5558
5559 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5560 {
5561 /* An automatic variable with an incomplete type: that is an error.
5562 Don't talk about array types here, since we took care of that
5563 message in grokdeclarator. */
5564 error_at (DECL_SOURCE_LOCATION (decl),
5565 "storage size of %qD isn%'t known", decl);
5566 TREE_TYPE (decl) = error_mark_node;
5567 }
5568 #if 0
5569 /* Keep this code around in case we later want to control debug info
5570 based on whether a type is "used". (jason 1999-11-11) */
5571
5572 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5573 /* Let debugger know it should output info for this type. */
5574 note_debug_info_needed (ttype);
5575
5576 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5577 note_debug_info_needed (DECL_CONTEXT (decl));
5578 #endif
5579
5580 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5581 && DECL_SIZE (decl) != NULL_TREE
5582 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5583 {
5584 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5585 constant_expression_warning (DECL_SIZE (decl));
5586 else
5587 {
5588 error_at (DECL_SOURCE_LOCATION (decl),
5589 "storage size of %qD isn%'t constant", decl);
5590 TREE_TYPE (decl) = error_mark_node;
5591 }
5592 }
5593 }
5594
5595 /* If a local static variable is declared in an inline function, or if
5596 we have a weak definition, we must endeavor to create only one
5597 instance of the variable at link-time. */
5598
5599 void
5600 maybe_commonize_var (tree decl)
5601 {
5602 /* Don't mess with __FUNCTION__ and similar. */
5603 if (DECL_ARTIFICIAL (decl))
5604 return;
5605
5606 /* Static data in a function with comdat linkage also has comdat
5607 linkage. */
5608 if ((TREE_STATIC (decl)
5609 && DECL_FUNCTION_SCOPE_P (decl)
5610 && vague_linkage_p (DECL_CONTEXT (decl)))
5611 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5612 {
5613 if (flag_weak)
5614 {
5615 /* With weak symbols, we simply make the variable COMDAT;
5616 that will cause copies in multiple translations units to
5617 be merged. */
5618 comdat_linkage (decl);
5619 }
5620 else
5621 {
5622 if (DECL_INITIAL (decl) == NULL_TREE
5623 || DECL_INITIAL (decl) == error_mark_node)
5624 {
5625 /* Without weak symbols, we can use COMMON to merge
5626 uninitialized variables. */
5627 TREE_PUBLIC (decl) = 1;
5628 DECL_COMMON (decl) = 1;
5629 }
5630 else
5631 {
5632 /* While for initialized variables, we must use internal
5633 linkage -- which means that multiple copies will not
5634 be merged. */
5635 TREE_PUBLIC (decl) = 0;
5636 DECL_COMMON (decl) = 0;
5637 DECL_INTERFACE_KNOWN (decl) = 1;
5638 const char *msg;
5639 if (DECL_INLINE_VAR_P (decl))
5640 msg = G_("sorry: semantics of inline variable "
5641 "%q#D are wrong (you%'ll wind up with "
5642 "multiple copies)");
5643 else
5644 msg = G_("sorry: semantics of inline function "
5645 "static data %q#D are wrong (you%'ll wind "
5646 "up with multiple copies)");
5647 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5648 msg, decl))
5649 inform (DECL_SOURCE_LOCATION (decl),
5650 "you can work around this by removing the initializer");
5651 }
5652 }
5653 }
5654 }
5655
5656 /* Issue an error message if DECL is an uninitialized const variable.
5657 CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr
5658 context from potential_constant_expression. Returns true if all is well,
5659 false otherwise. */
5660
5661 bool
5662 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p,
5663 tsubst_flags_t complain)
5664 {
5665 tree type = strip_array_types (TREE_TYPE (decl));
5666
5667 /* ``Unless explicitly declared extern, a const object does not have
5668 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5669 7.1.6 */
5670 if (VAR_P (decl)
5671 && !TYPE_REF_P (type)
5672 && (constexpr_context_p
5673 || CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5674 && !DECL_NONTRIVIALLY_INITIALIZED_P (decl))
5675 {
5676 tree field = default_init_uninitialized_part (type);
5677 if (!field)
5678 return true;
5679
5680 if (!constexpr_context_p)
5681 {
5682 if (CP_TYPE_CONST_P (type))
5683 {
5684 if (complain & tf_error)
5685 permerror (DECL_SOURCE_LOCATION (decl),
5686 "uninitialized const %qD", decl);
5687 }
5688 else
5689 {
5690 if (!is_instantiation_of_constexpr (current_function_decl)
5691 && (complain & tf_error))
5692 error_at (DECL_SOURCE_LOCATION (decl),
5693 "uninitialized variable %qD in %<constexpr%> "
5694 "function", decl);
5695 cp_function_chain->invalid_constexpr = true;
5696 }
5697 }
5698 else if (complain & tf_error)
5699 error_at (DECL_SOURCE_LOCATION (decl),
5700 "uninitialized variable %qD in %<constexpr%> context",
5701 decl);
5702
5703 if (CLASS_TYPE_P (type) && (complain & tf_error))
5704 {
5705 tree defaulted_ctor;
5706
5707 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5708 "%q#T has no user-provided default constructor", type);
5709 defaulted_ctor = in_class_defaulted_default_constructor (type);
5710 if (defaulted_ctor)
5711 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5712 "constructor is not user-provided because it is "
5713 "explicitly defaulted in the class body");
5714 inform (DECL_SOURCE_LOCATION (field),
5715 "and the implicitly-defined constructor does not "
5716 "initialize %q#D", field);
5717 }
5718
5719 return false;
5720 }
5721
5722 return true;
5723 }
5724 \f
5725 /* Structure holding the current initializer being processed by reshape_init.
5726 CUR is a pointer to the current element being processed, END is a pointer
5727 after the last element present in the initializer. */
5728 struct reshape_iter
5729 {
5730 constructor_elt *cur;
5731 constructor_elt *end;
5732 };
5733
5734 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5735
5736 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5737 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5738 initialized. If there are no more such fields, the return value
5739 will be NULL. */
5740
5741 tree
5742 next_initializable_field (tree field)
5743 {
5744 while (field
5745 && (TREE_CODE (field) != FIELD_DECL
5746 || DECL_UNNAMED_BIT_FIELD (field)
5747 || (DECL_ARTIFICIAL (field)
5748 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5749 field = DECL_CHAIN (field);
5750
5751 return field;
5752 }
5753
5754 /* Return true for [dcl.init.list] direct-list-initialization from
5755 single element of enumeration with a fixed underlying type. */
5756
5757 bool
5758 is_direct_enum_init (tree type, tree init)
5759 {
5760 if (cxx_dialect >= cxx17
5761 && TREE_CODE (type) == ENUMERAL_TYPE
5762 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5763 && TREE_CODE (init) == CONSTRUCTOR
5764 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5765 && CONSTRUCTOR_NELTS (init) == 1)
5766 return true;
5767 return false;
5768 }
5769
5770 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5771 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5772 INTEGER_CST representing the size of the array minus one (the maximum index),
5773 or NULL_TREE if the array was declared without specifying the size. D is
5774 the iterator within the constructor. */
5775
5776 static tree
5777 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5778 tsubst_flags_t complain)
5779 {
5780 tree new_init;
5781 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5782 unsigned HOST_WIDE_INT max_index_cst = 0;
5783 unsigned HOST_WIDE_INT index;
5784
5785 /* The initializer for an array is always a CONSTRUCTOR. */
5786 new_init = build_constructor (init_list_type_node, NULL);
5787
5788 if (sized_array_p)
5789 {
5790 /* Minus 1 is used for zero sized arrays. */
5791 if (integer_all_onesp (max_index))
5792 return new_init;
5793
5794 if (tree_fits_uhwi_p (max_index))
5795 max_index_cst = tree_to_uhwi (max_index);
5796 /* sizetype is sign extended, not zero extended. */
5797 else
5798 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5799 }
5800
5801 /* Loop until there are no more initializers. */
5802 for (index = 0;
5803 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5804 ++index)
5805 {
5806 tree elt_init;
5807 constructor_elt *old_cur = d->cur;
5808
5809 check_array_designated_initializer (d->cur, index);
5810 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5811 complain);
5812 if (elt_init == error_mark_node)
5813 return error_mark_node;
5814 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5815 size_int (index), elt_init);
5816 if (!TREE_CONSTANT (elt_init))
5817 TREE_CONSTANT (new_init) = false;
5818
5819 /* This can happen with an invalid initializer (c++/54501). */
5820 if (d->cur == old_cur && !sized_array_p)
5821 break;
5822 }
5823
5824 return new_init;
5825 }
5826
5827 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5828 Parameters are the same of reshape_init_r. */
5829
5830 static tree
5831 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5832 {
5833 tree max_index = NULL_TREE;
5834
5835 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5836
5837 if (TYPE_DOMAIN (type))
5838 max_index = array_type_nelts (type);
5839
5840 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5841 }
5842
5843 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5844 Parameters are the same of reshape_init_r. */
5845
5846 static tree
5847 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5848 {
5849 tree max_index = NULL_TREE;
5850
5851 gcc_assert (VECTOR_TYPE_P (type));
5852
5853 if (COMPOUND_LITERAL_P (d->cur->value))
5854 {
5855 tree value = d->cur->value;
5856 if (!same_type_p (TREE_TYPE (value), type))
5857 {
5858 if (complain & tf_error)
5859 error ("invalid type %qT as initializer for a vector of type %qT",
5860 TREE_TYPE (d->cur->value), type);
5861 value = error_mark_node;
5862 }
5863 ++d->cur;
5864 return value;
5865 }
5866
5867 /* For a vector, we initialize it as an array of the appropriate size. */
5868 if (VECTOR_TYPE_P (type))
5869 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5870
5871 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5872 }
5873
5874 /* Subroutine of reshape_init_r, processes the initializers for classes
5875 or union. Parameters are the same of reshape_init_r. */
5876
5877 static tree
5878 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5879 tsubst_flags_t complain)
5880 {
5881 tree field;
5882 tree new_init;
5883
5884 gcc_assert (CLASS_TYPE_P (type));
5885
5886 /* The initializer for a class is always a CONSTRUCTOR. */
5887 new_init = build_constructor (init_list_type_node, NULL);
5888 field = next_initializable_field (TYPE_FIELDS (type));
5889
5890 if (!field)
5891 {
5892 /* [dcl.init.aggr]
5893
5894 An initializer for an aggregate member that is an
5895 empty class shall have the form of an empty
5896 initializer-list {}. */
5897 if (!first_initializer_p)
5898 {
5899 if (complain & tf_error)
5900 error ("initializer for %qT must be brace-enclosed", type);
5901 return error_mark_node;
5902 }
5903 return new_init;
5904 }
5905
5906 /* Loop through the initializable fields, gathering initializers. */
5907 while (d->cur != d->end)
5908 {
5909 tree field_init;
5910 constructor_elt *old_cur = d->cur;
5911
5912 /* Handle designated initializers, as an extension. */
5913 if (d->cur->index)
5914 {
5915 if (d->cur->index == error_mark_node)
5916 return error_mark_node;
5917
5918 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5919 {
5920 /* We already reshaped this. */
5921 if (field != d->cur->index)
5922 {
5923 tree id = DECL_NAME (d->cur->index);
5924 gcc_assert (id);
5925 gcc_checking_assert (d->cur->index
5926 == get_class_binding (type, id, false));
5927 field = d->cur->index;
5928 }
5929 }
5930 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5931 field = get_class_binding (type, d->cur->index, false);
5932 else
5933 {
5934 if (complain & tf_error)
5935 error ("%<[%E] =%> used in a GNU-style designated initializer"
5936 " for class %qT", d->cur->index, type);
5937 return error_mark_node;
5938 }
5939
5940 if (!field || TREE_CODE (field) != FIELD_DECL)
5941 {
5942 if (complain & tf_error)
5943 error ("%qT has no non-static data member named %qD", type,
5944 d->cur->index);
5945 return error_mark_node;
5946 }
5947 }
5948
5949 /* If we processed all the member of the class, we are done. */
5950 if (!field)
5951 break;
5952
5953 field_init = reshape_init_r (TREE_TYPE (field), d,
5954 /*first_initializer_p=*/false, complain);
5955 if (field_init == error_mark_node)
5956 return error_mark_node;
5957
5958 if (d->cur == old_cur && d->cur->index)
5959 {
5960 /* This can happen with an invalid initializer for a flexible
5961 array member (c++/54441). */
5962 if (complain & tf_error)
5963 error ("invalid initializer for %q#D", field);
5964 return error_mark_node;
5965 }
5966
5967 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5968
5969 /* [dcl.init.aggr]
5970
5971 When a union is initialized with a brace-enclosed
5972 initializer, the braces shall only contain an
5973 initializer for the first member of the union. */
5974 if (TREE_CODE (type) == UNION_TYPE)
5975 break;
5976
5977 field = next_initializable_field (DECL_CHAIN (field));
5978 }
5979
5980 return new_init;
5981 }
5982
5983 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5984 designators are not valid; either complain or return true to indicate
5985 that reshape_init_r should return error_mark_node. */
5986
5987 static bool
5988 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5989 {
5990 if (d->cur->index)
5991 {
5992 if (complain & tf_error)
5993 error ("C99 designator %qE outside aggregate initializer",
5994 d->cur->index);
5995 else
5996 return true;
5997 }
5998 return false;
5999 }
6000
6001 /* Subroutine of reshape_init, which processes a single initializer (part of
6002 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
6003 iterator within the CONSTRUCTOR which points to the initializer to process.
6004 FIRST_INITIALIZER_P is true if this is the first initializer of the
6005 outermost CONSTRUCTOR node. */
6006
6007 static tree
6008 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
6009 tsubst_flags_t complain)
6010 {
6011 tree init = d->cur->value;
6012
6013 if (error_operand_p (init))
6014 return error_mark_node;
6015
6016 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
6017 && has_designator_problem (d, complain))
6018 return error_mark_node;
6019
6020 tree stripped_init = tree_strip_any_location_wrapper (init);
6021
6022 if (TREE_CODE (type) == COMPLEX_TYPE)
6023 {
6024 /* A complex type can be initialized from one or two initializers,
6025 but braces are not elided. */
6026 d->cur++;
6027 if (BRACE_ENCLOSED_INITIALIZER_P (stripped_init))
6028 {
6029 if (CONSTRUCTOR_NELTS (stripped_init) > 2)
6030 {
6031 if (complain & tf_error)
6032 error ("too many initializers for %qT", type);
6033 else
6034 return error_mark_node;
6035 }
6036 }
6037 else if (first_initializer_p && d->cur != d->end)
6038 {
6039 vec<constructor_elt, va_gc> *v = 0;
6040 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
6041 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
6042 if (has_designator_problem (d, complain))
6043 return error_mark_node;
6044 d->cur++;
6045 init = build_constructor (init_list_type_node, v);
6046 }
6047 return init;
6048 }
6049
6050 /* A non-aggregate type is always initialized with a single
6051 initializer. */
6052 if (!CP_AGGREGATE_TYPE_P (type))
6053 {
6054 /* It is invalid to initialize a non-aggregate type with a
6055 brace-enclosed initializer before C++0x.
6056 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
6057 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
6058 a CONSTRUCTOR (with a record type). */
6059 if (TREE_CODE (stripped_init) == CONSTRUCTOR
6060 /* Don't complain about a capture-init. */
6061 && !CONSTRUCTOR_IS_DIRECT_INIT (stripped_init)
6062 && BRACE_ENCLOSED_INITIALIZER_P (stripped_init)) /* p7626.C */
6063 {
6064 if (SCALAR_TYPE_P (type))
6065 {
6066 if (cxx_dialect < cxx11)
6067 {
6068 if (complain & tf_error)
6069 error ("braces around scalar initializer for type %qT",
6070 type);
6071 init = error_mark_node;
6072 }
6073 else if (first_initializer_p
6074 || (CONSTRUCTOR_NELTS (stripped_init) > 0
6075 && (BRACE_ENCLOSED_INITIALIZER_P
6076 (CONSTRUCTOR_ELT (stripped_init,0)->value))))
6077 {
6078 if (complain & tf_error)
6079 error ("too many braces around scalar initializer"
6080 "for type %qT", type);
6081 init = error_mark_node;
6082 }
6083 }
6084 else
6085 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6086 }
6087
6088 d->cur++;
6089 return init;
6090 }
6091
6092 /* "If T is a class type and the initializer list has a single element of
6093 type cv U, where U is T or a class derived from T, the object is
6094 initialized from that element." Even if T is an aggregate. */
6095 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
6096 && first_initializer_p
6097 && d->end - d->cur == 1
6098 && reference_related_p (type, TREE_TYPE (init)))
6099 {
6100 d->cur++;
6101 return init;
6102 }
6103
6104 /* [dcl.init.aggr]
6105
6106 All implicit type conversions (clause _conv_) are considered when
6107 initializing the aggregate member with an initializer from an
6108 initializer-list. If the initializer can initialize a member,
6109 the member is initialized. Otherwise, if the member is itself a
6110 non-empty subaggregate, brace elision is assumed and the
6111 initializer is considered for the initialization of the first
6112 member of the subaggregate. */
6113 if (TREE_CODE (init) != CONSTRUCTOR
6114 /* But don't try this for the first initializer, since that would be
6115 looking through the outermost braces; A a2 = { a1 }; is not a
6116 valid aggregate initialization. */
6117 && !first_initializer_p
6118 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
6119 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
6120 complain)))
6121 {
6122 d->cur++;
6123 return init;
6124 }
6125
6126 /* [dcl.init.string]
6127
6128 A char array (whether plain char, signed char, or unsigned char)
6129 can be initialized by a string-literal (optionally enclosed in
6130 braces); a wchar_t array can be initialized by a wide
6131 string-literal (optionally enclosed in braces). */
6132 if (TREE_CODE (type) == ARRAY_TYPE
6133 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
6134 {
6135 tree str_init = init;
6136 tree stripped_str_init = stripped_init;
6137
6138 /* Strip one level of braces if and only if they enclose a single
6139 element (as allowed by [dcl.init.string]). */
6140 if (!first_initializer_p
6141 && TREE_CODE (stripped_str_init) == CONSTRUCTOR
6142 && CONSTRUCTOR_NELTS (stripped_str_init) == 1)
6143 {
6144 str_init = (*CONSTRUCTOR_ELTS (stripped_str_init))[0].value;
6145 stripped_str_init = tree_strip_any_location_wrapper (str_init);
6146 }
6147
6148 /* If it's a string literal, then it's the initializer for the array
6149 as a whole. Otherwise, continue with normal initialization for
6150 array types (one value per array element). */
6151 if (TREE_CODE (stripped_str_init) == STRING_CST)
6152 {
6153 if (has_designator_problem (d, complain))
6154 return error_mark_node;
6155 d->cur++;
6156 return str_init;
6157 }
6158 }
6159
6160 /* The following cases are about aggregates. If we are not within a full
6161 initializer already, and there is not a CONSTRUCTOR, it means that there
6162 is a missing set of braces (that is, we are processing the case for
6163 which reshape_init exists). */
6164 if (!first_initializer_p)
6165 {
6166 if (TREE_CODE (stripped_init) == CONSTRUCTOR)
6167 {
6168 tree init_type = TREE_TYPE (init);
6169 if (init_type && TYPE_PTRMEMFUNC_P (init_type))
6170 /* There is no need to call reshape_init for pointer-to-member
6171 function initializers, as they are always constructed correctly
6172 by the front end. Here we have e.g. {.__pfn=0B, .__delta=0},
6173 which is missing outermost braces. We should warn below, and
6174 one of the routines below will wrap it in additional { }. */;
6175 /* For a nested compound literal, there is no need to reshape since
6176 we called reshape_init in finish_compound_literal, before calling
6177 digest_init. */
6178 else if (COMPOUND_LITERAL_P (stripped_init)
6179 /* Similarly, a CONSTRUCTOR of the target's type is a
6180 previously digested initializer. */
6181 || same_type_ignoring_top_level_qualifiers_p (type,
6182 init_type))
6183 {
6184 ++d->cur;
6185 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (stripped_init));
6186 return init;
6187 }
6188 else
6189 {
6190 /* Something that hasn't been reshaped yet. */
6191 ++d->cur;
6192 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (stripped_init));
6193 return reshape_init (type, init, complain);
6194 }
6195 }
6196
6197 if (complain & tf_warning)
6198 warning (OPT_Wmissing_braces,
6199 "missing braces around initializer for %qT",
6200 type);
6201 }
6202
6203 /* Dispatch to specialized routines. */
6204 if (CLASS_TYPE_P (type))
6205 return reshape_init_class (type, d, first_initializer_p, complain);
6206 else if (TREE_CODE (type) == ARRAY_TYPE)
6207 return reshape_init_array (type, d, complain);
6208 else if (VECTOR_TYPE_P (type))
6209 return reshape_init_vector (type, d, complain);
6210 else
6211 gcc_unreachable();
6212 }
6213
6214 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6215 brace-enclosed aggregate initializer.
6216
6217 INIT is the CONSTRUCTOR containing the list of initializers describing
6218 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6219 It may not presently match the shape of the TYPE; for example:
6220
6221 struct S { int a; int b; };
6222 struct S a[] = { 1, 2, 3, 4 };
6223
6224 Here INIT will hold a vector of four elements, rather than a
6225 vector of two elements, each itself a vector of two elements. This
6226 routine transforms INIT from the former form into the latter. The
6227 revised CONSTRUCTOR node is returned. */
6228
6229 tree
6230 reshape_init (tree type, tree init, tsubst_flags_t complain)
6231 {
6232 vec<constructor_elt, va_gc> *v;
6233 reshape_iter d;
6234 tree new_init;
6235
6236 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6237
6238 v = CONSTRUCTOR_ELTS (init);
6239
6240 /* An empty constructor does not need reshaping, and it is always a valid
6241 initializer. */
6242 if (vec_safe_is_empty (v))
6243 return init;
6244
6245 /* Handle [dcl.init.list] direct-list-initialization from
6246 single element of enumeration with a fixed underlying type. */
6247 if (is_direct_enum_init (type, init))
6248 {
6249 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6250 type = cv_unqualified (type);
6251 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6252 {
6253 warning_sentinel w (warn_useless_cast);
6254 warning_sentinel w2 (warn_ignored_qualifiers);
6255 return cp_build_c_cast (type, elt, tf_warning_or_error);
6256 }
6257 else
6258 return error_mark_node;
6259 }
6260
6261 /* Recurse on this CONSTRUCTOR. */
6262 d.cur = &(*v)[0];
6263 d.end = d.cur + v->length ();
6264
6265 new_init = reshape_init_r (type, &d, true, complain);
6266 if (new_init == error_mark_node)
6267 return error_mark_node;
6268
6269 /* Make sure all the element of the constructor were used. Otherwise,
6270 issue an error about exceeding initializers. */
6271 if (d.cur != d.end)
6272 {
6273 if (complain & tf_error)
6274 error ("too many initializers for %qT", type);
6275 return error_mark_node;
6276 }
6277
6278 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6279 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6280 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6281
6282 return new_init;
6283 }
6284
6285 /* Verify array initializer. Returns true if errors have been reported. */
6286
6287 bool
6288 check_array_initializer (tree decl, tree type, tree init)
6289 {
6290 tree element_type = TREE_TYPE (type);
6291
6292 /* The array type itself need not be complete, because the
6293 initializer may tell us how many elements are in the array.
6294 But, the elements of the array must be complete. */
6295 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6296 {
6297 if (decl)
6298 error_at (DECL_SOURCE_LOCATION (decl),
6299 "elements of array %q#D have incomplete type", decl);
6300 else
6301 error ("elements of array %q#T have incomplete type", type);
6302 return true;
6303 }
6304 /* A compound literal can't have variable size. */
6305 if (init && !decl
6306 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6307 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6308 {
6309 error ("variable-sized compound literal");
6310 return true;
6311 }
6312 return false;
6313 }
6314
6315 /* Subroutine of check_initializer; args are passed down from that function.
6316 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6317
6318 static tree
6319 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6320
6321 {
6322 gcc_assert (stmts_are_full_exprs_p ());
6323 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6324 }
6325
6326 /* Verify INIT (the initializer for DECL), and record the
6327 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6328 grok_reference_init.
6329
6330 If the return value is non-NULL, it is an expression that must be
6331 evaluated dynamically to initialize DECL. */
6332
6333 static tree
6334 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6335 {
6336 tree type = TREE_TYPE (decl);
6337 tree init_code = NULL;
6338 tree core_type;
6339
6340 /* Things that are going to be initialized need to have complete
6341 type. */
6342 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6343
6344 if (DECL_HAS_VALUE_EXPR_P (decl))
6345 {
6346 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6347 it doesn't have storage to be initialized. */
6348 gcc_assert (init == NULL_TREE);
6349 return NULL_TREE;
6350 }
6351
6352 if (type == error_mark_node)
6353 /* We will have already complained. */
6354 return NULL_TREE;
6355
6356 if (TREE_CODE (type) == ARRAY_TYPE)
6357 {
6358 if (check_array_initializer (decl, type, init))
6359 return NULL_TREE;
6360 }
6361 else if (!COMPLETE_TYPE_P (type))
6362 {
6363 error_at (DECL_SOURCE_LOCATION (decl),
6364 "%q#D has incomplete type", decl);
6365 TREE_TYPE (decl) = error_mark_node;
6366 return NULL_TREE;
6367 }
6368 else
6369 /* There is no way to make a variable-sized class type in GNU C++. */
6370 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6371
6372 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6373 {
6374 int init_len = CONSTRUCTOR_NELTS (init);
6375 if (SCALAR_TYPE_P (type))
6376 {
6377 if (init_len == 0)
6378 {
6379 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6380 init = build_zero_init (type, NULL_TREE, false);
6381 }
6382 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6383 {
6384 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6385 "scalar object %qD requires one element in "
6386 "initializer", decl);
6387 TREE_TYPE (decl) = error_mark_node;
6388 return NULL_TREE;
6389 }
6390 }
6391 }
6392
6393 if (TREE_CODE (decl) == CONST_DECL)
6394 {
6395 gcc_assert (!TYPE_REF_P (type));
6396
6397 DECL_INITIAL (decl) = init;
6398
6399 gcc_assert (init != NULL_TREE);
6400 init = NULL_TREE;
6401 }
6402 else if (!init && DECL_REALLY_EXTERN (decl))
6403 ;
6404 else if (init || type_build_ctor_call (type)
6405 || TYPE_REF_P (type))
6406 {
6407 if (TYPE_REF_P (type))
6408 {
6409 init = grok_reference_init (decl, type, init, flags);
6410 flags |= LOOKUP_ALREADY_DIGESTED;
6411 }
6412 else if (!init)
6413 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6414 tf_warning_or_error);
6415 /* Do not reshape constructors of vectors (they don't need to be
6416 reshaped. */
6417 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6418 {
6419 if (is_std_init_list (type))
6420 {
6421 init = perform_implicit_conversion (type, init,
6422 tf_warning_or_error);
6423 flags |= LOOKUP_ALREADY_DIGESTED;
6424 }
6425 else if (TYPE_NON_AGGREGATE_CLASS (type))
6426 {
6427 /* Don't reshape if the class has constructors. */
6428 if (cxx_dialect == cxx98)
6429 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6430 "in C++98 %qD must be initialized by "
6431 "constructor, not by %<{...}%>",
6432 decl);
6433 }
6434 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6435 {
6436 error ("opaque vector types cannot be initialized");
6437 init = error_mark_node;
6438 }
6439 else
6440 {
6441 init = reshape_init (type, init, tf_warning_or_error);
6442 flags |= LOOKUP_NO_NARROWING;
6443 }
6444 }
6445 else if (TREE_CODE (init) == TREE_LIST
6446 && TREE_TYPE (init) != unknown_type_node
6447 && !MAYBE_CLASS_TYPE_P (type))
6448 {
6449 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6450
6451 /* We get here with code like `int a (2);' */
6452 init = build_x_compound_expr_from_list (init, ELK_INIT,
6453 tf_warning_or_error);
6454 }
6455
6456 /* If DECL has an array type without a specific bound, deduce the
6457 array size from the initializer. */
6458 maybe_deduce_size_from_array_init (decl, init);
6459 type = TREE_TYPE (decl);
6460 if (type == error_mark_node)
6461 return NULL_TREE;
6462
6463 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6464 && !(flags & LOOKUP_ALREADY_DIGESTED)
6465 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6466 && CP_AGGREGATE_TYPE_P (type)
6467 && (CLASS_TYPE_P (type)
6468 || !TYPE_NEEDS_CONSTRUCTING (type)
6469 || type_has_extended_temps (type))))
6470 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6471 {
6472 init_code = build_aggr_init_full_exprs (decl, init, flags);
6473
6474 /* A constructor call is a non-trivial initializer even if
6475 it isn't explicitly written. */
6476 if (TREE_SIDE_EFFECTS (init_code))
6477 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6478
6479 /* If this is a constexpr initializer, expand_default_init will
6480 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6481 case, pull the initializer back out and pass it down into
6482 store_init_value. */
6483 while (TREE_CODE (init_code) == EXPR_STMT
6484 || TREE_CODE (init_code) == CONVERT_EXPR)
6485 init_code = TREE_OPERAND (init_code, 0);
6486 if (TREE_CODE (init_code) == INIT_EXPR)
6487 {
6488 init = TREE_OPERAND (init_code, 1);
6489 init_code = NULL_TREE;
6490 /* Don't call digest_init; it's unnecessary and will complain
6491 about aggregate initialization of non-aggregate classes. */
6492 flags |= LOOKUP_ALREADY_DIGESTED;
6493 }
6494 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6495 {
6496 /* Declared constexpr, but no suitable initializer; massage
6497 init appropriately so we can pass it into store_init_value
6498 for the error. */
6499 if (CLASS_TYPE_P (type)
6500 && (!init || TREE_CODE (init) == TREE_LIST))
6501 {
6502 init = build_functional_cast (type, init, tf_none);
6503 if (TREE_CODE (init) == TARGET_EXPR)
6504 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6505 }
6506 init_code = NULL_TREE;
6507 }
6508 else
6509 init = NULL_TREE;
6510 }
6511
6512 if (init && TREE_CODE (init) != TREE_VEC)
6513 {
6514 /* In aggregate initialization of a variable, each element
6515 initialization is a full-expression because there is no
6516 enclosing expression. */
6517 gcc_assert (stmts_are_full_exprs_p ());
6518
6519 init_code = store_init_value (decl, init, cleanups, flags);
6520
6521 if (DECL_INITIAL (decl)
6522 && TREE_CODE (DECL_INITIAL (decl)) == CONSTRUCTOR
6523 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (DECL_INITIAL (decl))))
6524 {
6525 tree elt = CONSTRUCTOR_ELTS (DECL_INITIAL (decl))->last ().value;
6526 if (TREE_CODE (TREE_TYPE (elt)) == ARRAY_TYPE
6527 && TYPE_SIZE (TREE_TYPE (elt)) == NULL_TREE)
6528 cp_complete_array_type (&TREE_TYPE (elt), elt, false);
6529 }
6530
6531 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6532 && DECL_INITIAL (decl)
6533 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6534 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6535 warning_at (cp_expr_loc_or_loc (DECL_INITIAL (decl),
6536 DECL_SOURCE_LOCATION (decl)),
6537 0, "array %qD initialized by parenthesized "
6538 "string literal %qE",
6539 decl, DECL_INITIAL (decl));
6540 init = NULL;
6541 }
6542 }
6543 else
6544 {
6545 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6546 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6547 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6548 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6549 /*complain=*/true);
6550
6551 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6552 tf_warning_or_error);
6553 }
6554
6555 if (init && init != error_mark_node)
6556 init_code = build2 (INIT_EXPR, type, decl, init);
6557
6558 if (init_code)
6559 {
6560 /* We might have set these in cp_finish_decl. */
6561 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6562 TREE_CONSTANT (decl) = false;
6563 }
6564
6565 if (init_code
6566 && DECL_IN_AGGR_P (decl)
6567 && DECL_INITIALIZED_IN_CLASS_P (decl))
6568 {
6569 static int explained = 0;
6570
6571 if (cxx_dialect < cxx11)
6572 error ("initializer invalid for static member with constructor");
6573 else if (cxx_dialect < cxx17)
6574 error ("non-constant in-class initialization invalid for static "
6575 "member %qD", decl);
6576 else
6577 error ("non-constant in-class initialization invalid for non-inline "
6578 "static member %qD", decl);
6579 if (!explained)
6580 {
6581 inform (input_location,
6582 "(an out of class initialization is required)");
6583 explained = 1;
6584 }
6585 return NULL_TREE;
6586 }
6587
6588 return init_code;
6589 }
6590
6591 /* If DECL is not a local variable, give it RTL. */
6592
6593 static void
6594 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6595 {
6596 int toplev = toplevel_bindings_p ();
6597 int defer_p;
6598
6599 /* Set the DECL_ASSEMBLER_NAME for the object. */
6600 if (asmspec)
6601 {
6602 /* The `register' keyword, when used together with an
6603 asm-specification, indicates that the variable should be
6604 placed in a particular register. */
6605 if (VAR_P (decl) && DECL_REGISTER (decl))
6606 {
6607 set_user_assembler_name (decl, asmspec);
6608 DECL_HARD_REGISTER (decl) = 1;
6609 }
6610 else
6611 {
6612 if (TREE_CODE (decl) == FUNCTION_DECL
6613 && fndecl_built_in_p (decl, BUILT_IN_NORMAL))
6614 set_builtin_user_assembler_name (decl, asmspec);
6615 set_user_assembler_name (decl, asmspec);
6616 }
6617 }
6618
6619 /* Handle non-variables up front. */
6620 if (!VAR_P (decl))
6621 {
6622 rest_of_decl_compilation (decl, toplev, at_eof);
6623 return;
6624 }
6625
6626 /* If we see a class member here, it should be a static data
6627 member. */
6628 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6629 {
6630 gcc_assert (TREE_STATIC (decl));
6631 /* An in-class declaration of a static data member should be
6632 external; it is only a declaration, and not a definition. */
6633 if (init == NULL_TREE)
6634 gcc_assert (DECL_EXTERNAL (decl)
6635 || !TREE_PUBLIC (decl));
6636 }
6637
6638 /* We don't create any RTL for local variables. */
6639 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6640 return;
6641
6642 /* We defer emission of local statics until the corresponding
6643 DECL_EXPR is expanded. But with constexpr its function might never
6644 be expanded, so go ahead and tell cgraph about the variable now. */
6645 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6646 && !var_in_maybe_constexpr_fn (decl))
6647 || DECL_VIRTUAL_P (decl));
6648
6649 /* Defer template instantiations. */
6650 if (DECL_LANG_SPECIFIC (decl)
6651 && DECL_IMPLICIT_INSTANTIATION (decl))
6652 defer_p = 1;
6653
6654 /* If we're not deferring, go ahead and assemble the variable. */
6655 if (!defer_p)
6656 rest_of_decl_compilation (decl, toplev, at_eof);
6657 }
6658
6659 /* walk_tree helper for wrap_temporary_cleanups, below. */
6660
6661 static tree
6662 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6663 {
6664 /* Stop at types or full-expression boundaries. */
6665 if (TYPE_P (*stmt_p)
6666 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6667 {
6668 *walk_subtrees = 0;
6669 return NULL_TREE;
6670 }
6671
6672 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6673 {
6674 tree guard = (tree)data;
6675 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6676
6677 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6678 /* Tell honor_protect_cleanup_actions to handle this as a separate
6679 cleanup. */
6680 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6681
6682 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6683 }
6684
6685 return NULL_TREE;
6686 }
6687
6688 /* We're initializing a local variable which has a cleanup GUARD. If there
6689 are any temporaries used in the initializer INIT of this variable, we
6690 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6691 variable will be cleaned up properly if one of them throws.
6692
6693 Unfortunately, there's no way to express this properly in terms of
6694 nesting, as the regions for the temporaries overlap the region for the
6695 variable itself; if there are two temporaries, the variable needs to be
6696 the first thing destroyed if either of them throws. However, we only
6697 want to run the variable's cleanup if it actually got constructed. So
6698 we need to guard the temporary cleanups with the variable's cleanup if
6699 they are run on the normal path, but not if they are run on the
6700 exceptional path. We implement this by telling
6701 honor_protect_cleanup_actions to strip the variable cleanup from the
6702 exceptional path. */
6703
6704 static void
6705 wrap_temporary_cleanups (tree init, tree guard)
6706 {
6707 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6708 }
6709
6710 /* Generate code to initialize DECL (a local variable). */
6711
6712 static void
6713 initialize_local_var (tree decl, tree init)
6714 {
6715 tree type = TREE_TYPE (decl);
6716 tree cleanup;
6717 int already_used;
6718
6719 gcc_assert (VAR_P (decl)
6720 || TREE_CODE (decl) == RESULT_DECL);
6721 gcc_assert (!TREE_STATIC (decl));
6722
6723 if (DECL_SIZE (decl) == NULL_TREE)
6724 {
6725 /* If we used it already as memory, it must stay in memory. */
6726 DECL_INITIAL (decl) = NULL_TREE;
6727 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6728 return;
6729 }
6730
6731 if (type == error_mark_node)
6732 return;
6733
6734 /* Compute and store the initial value. */
6735 already_used = TREE_USED (decl) || TREE_USED (type);
6736 if (TREE_USED (type))
6737 DECL_READ_P (decl) = 1;
6738
6739 /* Generate a cleanup, if necessary. */
6740 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6741
6742 /* Perform the initialization. */
6743 if (init)
6744 {
6745 tree rinit = (TREE_CODE (init) == INIT_EXPR
6746 ? TREE_OPERAND (init, 1) : NULL_TREE);
6747 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6748 {
6749 /* Stick simple initializers in DECL_INITIAL so that
6750 -Wno-init-self works (c++/34772). */
6751 gcc_assert (TREE_OPERAND (init, 0) == decl);
6752 DECL_INITIAL (decl) = rinit;
6753
6754 if (warn_init_self && TYPE_REF_P (type))
6755 {
6756 STRIP_NOPS (rinit);
6757 if (rinit == decl)
6758 warning_at (DECL_SOURCE_LOCATION (decl),
6759 OPT_Winit_self,
6760 "reference %qD is initialized with itself", decl);
6761 }
6762 }
6763 else
6764 {
6765 int saved_stmts_are_full_exprs_p;
6766
6767 /* If we're only initializing a single object, guard the
6768 destructors of any temporaries used in its initializer with
6769 its destructor. This isn't right for arrays because each
6770 element initialization is a full-expression. */
6771 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6772 wrap_temporary_cleanups (init, cleanup);
6773
6774 gcc_assert (building_stmt_list_p ());
6775 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6776 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6777 finish_expr_stmt (init);
6778 current_stmt_tree ()->stmts_are_full_exprs_p =
6779 saved_stmts_are_full_exprs_p;
6780 }
6781 }
6782
6783 /* Set this to 0 so we can tell whether an aggregate which was
6784 initialized was ever used. Don't do this if it has a
6785 destructor, so we don't complain about the 'resource
6786 allocation is initialization' idiom. Now set
6787 attribute((unused)) on types so decls of that type will be
6788 marked used. (see TREE_USED, above.) */
6789 if (TYPE_NEEDS_CONSTRUCTING (type)
6790 && ! already_used
6791 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6792 && DECL_NAME (decl))
6793 TREE_USED (decl) = 0;
6794 else if (already_used)
6795 TREE_USED (decl) = 1;
6796
6797 if (cleanup)
6798 finish_decl_cleanup (decl, cleanup);
6799 }
6800
6801 /* DECL is a VAR_DECL for a compiler-generated variable with static
6802 storage duration (like a virtual table) whose initializer is a
6803 compile-time constant. Initialize the variable and provide it to the
6804 back end. */
6805
6806 void
6807 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6808 {
6809 tree init;
6810 gcc_assert (DECL_ARTIFICIAL (decl));
6811 init = build_constructor (TREE_TYPE (decl), v);
6812 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6813 DECL_INITIAL (decl) = init;
6814 DECL_INITIALIZED_P (decl) = 1;
6815 /* Mark the decl as constexpr so that we can access its content
6816 at compile time. */
6817 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
6818 DECL_DECLARED_CONSTEXPR_P (decl) = true;
6819 determine_visibility (decl);
6820 layout_var_decl (decl);
6821 maybe_commonize_var (decl);
6822 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6823 }
6824
6825 /* INIT is the initializer for a variable, as represented by the
6826 parser. Returns true iff INIT is value-dependent. */
6827
6828 static bool
6829 value_dependent_init_p (tree init)
6830 {
6831 if (TREE_CODE (init) == TREE_LIST)
6832 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6833 return any_value_dependent_elements_p (init);
6834 else if (TREE_CODE (init) == CONSTRUCTOR)
6835 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6836 {
6837 if (dependent_type_p (TREE_TYPE (init)))
6838 return true;
6839
6840 vec<constructor_elt, va_gc> *elts;
6841 size_t nelts;
6842 size_t i;
6843
6844 elts = CONSTRUCTOR_ELTS (init);
6845 nelts = vec_safe_length (elts);
6846 for (i = 0; i < nelts; ++i)
6847 if (value_dependent_init_p ((*elts)[i].value))
6848 return true;
6849 }
6850 else
6851 /* It must be a simple expression, e.g., int i = 3; */
6852 return value_dependent_expression_p (init);
6853
6854 return false;
6855 }
6856
6857 // Returns true if a DECL is VAR_DECL with the concept specifier.
6858 static inline bool
6859 is_concept_var (tree decl)
6860 {
6861 return (VAR_P (decl)
6862 // Not all variables have DECL_LANG_SPECIFIC.
6863 && DECL_LANG_SPECIFIC (decl)
6864 && DECL_DECLARED_CONCEPT_P (decl));
6865 }
6866
6867 /* A helper function to be called via walk_tree. If any label exists
6868 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6869
6870 static tree
6871 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6872 {
6873 if (TYPE_P (*tp))
6874 *walk_subtrees = 0;
6875 if (TREE_CODE (*tp) == LABEL_DECL)
6876 cfun->has_forced_label_in_static = 1;
6877 return NULL_TREE;
6878 }
6879
6880 /* Finish processing of a declaration;
6881 install its line number and initial value.
6882 If the length of an array type is not known before,
6883 it must be determined now, from the initial value, or it is an error.
6884
6885 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6886 true, then INIT is an integral constant expression.
6887
6888 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6889 if the (init) syntax was used. */
6890
6891 void
6892 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6893 tree asmspec_tree, int flags)
6894 {
6895 tree type;
6896 vec<tree, va_gc> *cleanups = NULL;
6897 const char *asmspec = NULL;
6898 int was_readonly = 0;
6899 bool var_definition_p = false;
6900 tree auto_node;
6901
6902 if (decl == error_mark_node)
6903 return;
6904 else if (! decl)
6905 {
6906 if (init)
6907 error ("assignment (not initialization) in declaration");
6908 return;
6909 }
6910
6911 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6912 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6913 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6914
6915 type = TREE_TYPE (decl);
6916 if (type == error_mark_node)
6917 return;
6918
6919 /* Warn about register storage specifiers except when in GNU global
6920 or local register variable extension. */
6921 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6922 {
6923 if (cxx_dialect >= cxx17)
6924 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6925 "ISO C++17 does not allow %<register%> storage "
6926 "class specifier");
6927 else
6928 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6929 "%<register%> storage class specifier used");
6930 }
6931
6932 /* If a name was specified, get the string. */
6933 if (at_namespace_scope_p ())
6934 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6935 if (asmspec_tree && asmspec_tree != error_mark_node)
6936 asmspec = TREE_STRING_POINTER (asmspec_tree);
6937
6938 if (current_class_type
6939 && CP_DECL_CONTEXT (decl) == current_class_type
6940 && TYPE_BEING_DEFINED (current_class_type)
6941 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6942 && (DECL_INITIAL (decl) || init))
6943 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6944
6945 /* Do auto deduction unless decl is a function or an uninstantiated
6946 template specialization. */
6947 if (TREE_CODE (decl) != FUNCTION_DECL
6948 && !(init == NULL_TREE
6949 && DECL_LANG_SPECIFIC (decl)
6950 && DECL_TEMPLATE_INSTANTIATION (decl)
6951 && !DECL_TEMPLATE_INSTANTIATED (decl))
6952 && (auto_node = type_uses_auto (type)))
6953 {
6954 tree d_init;
6955 if (init == NULL_TREE)
6956 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6957 d_init = init;
6958 if (d_init)
6959 {
6960 if (TREE_CODE (d_init) == TREE_LIST
6961 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6962 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6963 tf_warning_or_error);
6964 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6965 }
6966 enum auto_deduction_context adc = adc_variable_type;
6967 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6968 adc = adc_decomp_type;
6969 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6970 tf_warning_or_error, adc,
6971 NULL_TREE, flags);
6972 if (type == error_mark_node)
6973 return;
6974 if (TREE_CODE (type) == FUNCTION_TYPE)
6975 {
6976 error ("initializer for %<decltype(auto) %D%> has function type "
6977 "(did you forget the %<()%> ?)", decl);
6978 TREE_TYPE (decl) = error_mark_node;
6979 return;
6980 }
6981 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6982 }
6983
6984 if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node)
6985 {
6986 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6987 if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl))
6988 {
6989 init = NULL_TREE;
6990 DECL_EXTERNAL (decl) = 1;
6991 }
6992 }
6993
6994 if (VAR_P (decl)
6995 && DECL_CLASS_SCOPE_P (decl)
6996 && DECL_INITIALIZED_IN_CLASS_P (decl))
6997 check_static_variable_definition (decl, type);
6998
6999 if (init && TREE_CODE (decl) == FUNCTION_DECL)
7000 {
7001 tree clone;
7002 if (init == ridpointers[(int)RID_DELETE])
7003 {
7004 /* FIXME check this is 1st decl. */
7005 DECL_DELETED_FN (decl) = 1;
7006 DECL_DECLARED_INLINE_P (decl) = 1;
7007 DECL_INITIAL (decl) = error_mark_node;
7008 FOR_EACH_CLONE (clone, decl)
7009 {
7010 DECL_DELETED_FN (clone) = 1;
7011 DECL_DECLARED_INLINE_P (clone) = 1;
7012 DECL_INITIAL (clone) = error_mark_node;
7013 }
7014 init = NULL_TREE;
7015 }
7016 else if (init == ridpointers[(int)RID_DEFAULT])
7017 {
7018 if (defaultable_fn_check (decl))
7019 DECL_DEFAULTED_FN (decl) = 1;
7020 else
7021 DECL_INITIAL (decl) = NULL_TREE;
7022 }
7023 }
7024
7025 if (init && VAR_P (decl))
7026 {
7027 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
7028 /* If DECL is a reference, then we want to know whether init is a
7029 reference constant; init_const_expr_p as passed tells us whether
7030 it's an rvalue constant. */
7031 if (TYPE_REF_P (type))
7032 init_const_expr_p = potential_constant_expression (init);
7033 if (init_const_expr_p)
7034 {
7035 /* Set these flags now for templates. We'll update the flags in
7036 store_init_value for instantiations. */
7037 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
7038 if (decl_maybe_constant_var_p (decl)
7039 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
7040 && !TYPE_REF_P (type))
7041 TREE_CONSTANT (decl) = 1;
7042 }
7043 }
7044
7045 if (processing_template_decl)
7046 {
7047 bool type_dependent_p;
7048
7049 /* Add this declaration to the statement-tree. */
7050 if (at_function_scope_p ())
7051 add_decl_expr (decl);
7052
7053 type_dependent_p = dependent_type_p (type);
7054
7055 if (check_for_bare_parameter_packs (init))
7056 {
7057 init = NULL_TREE;
7058 DECL_INITIAL (decl) = NULL_TREE;
7059 }
7060
7061 /* Generally, initializers in templates are expanded when the
7062 template is instantiated. But, if DECL is a variable constant
7063 then it can be used in future constant expressions, so its value
7064 must be available. */
7065
7066 bool dep_init = false;
7067
7068 if (!VAR_P (decl) || type_dependent_p)
7069 /* We can't do anything if the decl has dependent type. */;
7070 else if (!init && is_concept_var (decl))
7071 {
7072 error ("variable concept has no initializer");
7073 init = boolean_true_node;
7074 }
7075 else if (init
7076 && init_const_expr_p
7077 && !TYPE_REF_P (type)
7078 && decl_maybe_constant_var_p (decl)
7079 && !(dep_init = value_dependent_init_p (init)))
7080 {
7081 /* This variable seems to be a non-dependent constant, so process
7082 its initializer. If check_initializer returns non-null the
7083 initialization wasn't constant after all. */
7084 tree init_code;
7085 cleanups = make_tree_vector ();
7086 init_code = check_initializer (decl, init, flags, &cleanups);
7087 if (init_code == NULL_TREE)
7088 init = NULL_TREE;
7089 release_tree_vector (cleanups);
7090 }
7091 else
7092 {
7093 gcc_assert (!DECL_PRETTY_FUNCTION_P (decl));
7094 /* Deduce array size even if the initializer is dependent. */
7095 maybe_deduce_size_from_array_init (decl, init);
7096 /* And complain about multiple initializers. */
7097 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
7098 && !MAYBE_CLASS_TYPE_P (type))
7099 init = build_x_compound_expr_from_list (init, ELK_INIT,
7100 tf_warning_or_error);
7101 }
7102
7103 if (init)
7104 DECL_INITIAL (decl) = init;
7105
7106 if (dep_init)
7107 {
7108 retrofit_lang_decl (decl);
7109 SET_DECL_DEPENDENT_INIT_P (decl, true);
7110 }
7111 return;
7112 }
7113
7114 /* Just store non-static data member initializers for later. */
7115 if (init && TREE_CODE (decl) == FIELD_DECL)
7116 DECL_INITIAL (decl) = init;
7117
7118 /* Take care of TYPE_DECLs up front. */
7119 if (TREE_CODE (decl) == TYPE_DECL)
7120 {
7121 if (type != error_mark_node
7122 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
7123 {
7124 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7125 warning (0, "shadowing previous type declaration of %q#D", decl);
7126 set_identifier_type_value (DECL_NAME (decl), decl);
7127 }
7128
7129 /* If we have installed this as the canonical typedef for this
7130 type, and that type has not been defined yet, delay emitting
7131 the debug information for it, as we will emit it later. */
7132 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7133 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7134 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7135
7136 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
7137 at_eof);
7138 return;
7139 }
7140
7141 /* A reference will be modified here, as it is initialized. */
7142 if (! DECL_EXTERNAL (decl)
7143 && TREE_READONLY (decl)
7144 && TYPE_REF_P (type))
7145 {
7146 was_readonly = 1;
7147 TREE_READONLY (decl) = 0;
7148 }
7149
7150 if (VAR_P (decl))
7151 {
7152 /* If this is a local variable that will need a mangled name,
7153 register it now. We must do this before processing the
7154 initializer for the variable, since the initialization might
7155 require a guard variable, and since the mangled name of the
7156 guard variable will depend on the mangled name of this
7157 variable. */
7158 if (DECL_FUNCTION_SCOPE_P (decl)
7159 && TREE_STATIC (decl)
7160 && !DECL_ARTIFICIAL (decl))
7161 {
7162 /* The variable holding an anonymous union will have had its
7163 discriminator set in finish_anon_union, after which it's
7164 NAME will have been cleared. */
7165 if (DECL_NAME (decl))
7166 determine_local_discriminator (decl);
7167 /* Normally has_forced_label_in_static is set during GIMPLE
7168 lowering, but [cd]tors are never actually compiled directly.
7169 We need to set this early so we can deal with the label
7170 address extension. */
7171 if ((DECL_CONSTRUCTOR_P (current_function_decl)
7172 || DECL_DESTRUCTOR_P (current_function_decl))
7173 && init)
7174 {
7175 walk_tree (&init, notice_forced_label_r, NULL, NULL);
7176 add_local_decl (cfun, decl);
7177 }
7178 /* And make sure it's in the symbol table for
7179 c_parse_final_cleanups to find. */
7180 varpool_node::get_create (decl);
7181 }
7182
7183 /* Convert the initializer to the type of DECL, if we have not
7184 already initialized DECL. */
7185 if (!DECL_INITIALIZED_P (decl)
7186 /* If !DECL_EXTERNAL then DECL is being defined. In the
7187 case of a static data member initialized inside the
7188 class-specifier, there can be an initializer even if DECL
7189 is *not* defined. */
7190 && (!DECL_EXTERNAL (decl) || init))
7191 {
7192 cleanups = make_tree_vector ();
7193 init = check_initializer (decl, init, flags, &cleanups);
7194
7195 /* Handle:
7196
7197 [dcl.init]
7198
7199 The memory occupied by any object of static storage
7200 duration is zero-initialized at program startup before
7201 any other initialization takes place.
7202
7203 We cannot create an appropriate initializer until after
7204 the type of DECL is finalized. If DECL_INITIAL is set,
7205 then the DECL is statically initialized, and any
7206 necessary zero-initialization has already been performed. */
7207 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7208 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7209 /*nelts=*/NULL_TREE,
7210 /*static_storage_p=*/true);
7211 /* Remember that the initialization for this variable has
7212 taken place. */
7213 DECL_INITIALIZED_P (decl) = 1;
7214 /* This declaration is the definition of this variable,
7215 unless we are initializing a static data member within
7216 the class specifier. */
7217 if (!DECL_EXTERNAL (decl))
7218 var_definition_p = true;
7219 }
7220 /* If the variable has an array type, lay out the type, even if
7221 there is no initializer. It is valid to index through the
7222 array, and we must get TYPE_ALIGN set correctly on the array
7223 type. */
7224 else if (TREE_CODE (type) == ARRAY_TYPE)
7225 layout_type (type);
7226
7227 if (TREE_STATIC (decl)
7228 && !at_function_scope_p ()
7229 && current_function_decl == NULL)
7230 /* So decl is a global variable or a static member of a
7231 non local class. Record the types it uses
7232 so that we can decide later to emit debug info for them. */
7233 record_types_used_by_current_var_decl (decl);
7234 }
7235
7236 /* Add this declaration to the statement-tree. This needs to happen
7237 after the call to check_initializer so that the DECL_EXPR for a
7238 reference temp is added before the DECL_EXPR for the reference itself. */
7239 if (DECL_FUNCTION_SCOPE_P (decl))
7240 {
7241 /* If we're building a variable sized type, and we might be
7242 reachable other than via the top of the current binding
7243 level, then create a new BIND_EXPR so that we deallocate
7244 the object at the right time. */
7245 if (VAR_P (decl)
7246 && DECL_SIZE (decl)
7247 && !TREE_CONSTANT (DECL_SIZE (decl))
7248 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7249 {
7250 tree bind;
7251 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7252 TREE_SIDE_EFFECTS (bind) = 1;
7253 add_stmt (bind);
7254 BIND_EXPR_BODY (bind) = push_stmt_list ();
7255 }
7256 add_decl_expr (decl);
7257 }
7258
7259 /* Let the middle end know about variables and functions -- but not
7260 static data members in uninstantiated class templates. */
7261 if (VAR_OR_FUNCTION_DECL_P (decl))
7262 {
7263 if (VAR_P (decl))
7264 {
7265 layout_var_decl (decl);
7266 maybe_commonize_var (decl);
7267 }
7268
7269 /* This needs to happen after the linkage is set. */
7270 determine_visibility (decl);
7271
7272 if (var_definition_p && TREE_STATIC (decl))
7273 {
7274 /* If a TREE_READONLY variable needs initialization
7275 at runtime, it is no longer readonly and we need to
7276 avoid MEM_READONLY_P being set on RTL created for it. */
7277 if (init)
7278 {
7279 if (TREE_READONLY (decl))
7280 TREE_READONLY (decl) = 0;
7281 was_readonly = 0;
7282 }
7283 else if (was_readonly)
7284 TREE_READONLY (decl) = 1;
7285
7286 /* Likewise if it needs destruction. */
7287 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7288 TREE_READONLY (decl) = 0;
7289 }
7290
7291 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7292
7293 /* Check for abstractness of the type. Notice that there is no
7294 need to strip array types here since the check for those types
7295 is already done within create_array_type_for_decl. */
7296 abstract_virtuals_error (decl, type);
7297
7298 if (TREE_TYPE (decl) == error_mark_node)
7299 /* No initialization required. */
7300 ;
7301 else if (TREE_CODE (decl) == FUNCTION_DECL)
7302 {
7303 if (init)
7304 {
7305 if (init == ridpointers[(int)RID_DEFAULT])
7306 {
7307 /* An out-of-class default definition is defined at
7308 the point where it is explicitly defaulted. */
7309 if (DECL_DELETED_FN (decl))
7310 maybe_explain_implicit_delete (decl);
7311 else if (DECL_INITIAL (decl) == error_mark_node)
7312 synthesize_method (decl);
7313 }
7314 else
7315 error_at (cp_expr_loc_or_loc (init,
7316 DECL_SOURCE_LOCATION (decl)),
7317 "function %q#D is initialized like a variable",
7318 decl);
7319 }
7320 /* else no initialization required. */
7321 }
7322 else if (DECL_EXTERNAL (decl)
7323 && ! (DECL_LANG_SPECIFIC (decl)
7324 && DECL_NOT_REALLY_EXTERN (decl)))
7325 {
7326 if (init)
7327 DECL_INITIAL (decl) = init;
7328 }
7329 /* A variable definition. */
7330 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7331 /* Initialize the local variable. */
7332 initialize_local_var (decl, init);
7333
7334 /* If a variable is defined, and then a subsequent
7335 definition with external linkage is encountered, we will
7336 get here twice for the same variable. We want to avoid
7337 calling expand_static_init more than once. For variables
7338 that are not static data members, we can call
7339 expand_static_init only when we actually process the
7340 initializer. It is not legal to redeclare a static data
7341 member, so this issue does not arise in that case. */
7342 else if (var_definition_p && TREE_STATIC (decl))
7343 expand_static_init (decl, init);
7344 }
7345
7346 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7347 reference, insert it in the statement-tree now. */
7348 if (cleanups)
7349 {
7350 unsigned i; tree t;
7351 FOR_EACH_VEC_ELT (*cleanups, i, t)
7352 push_cleanup (decl, t, false);
7353 release_tree_vector (cleanups);
7354 }
7355
7356 if (was_readonly)
7357 TREE_READONLY (decl) = 1;
7358
7359 if (flag_openmp
7360 && VAR_P (decl)
7361 && lookup_attribute ("omp declare target implicit",
7362 DECL_ATTRIBUTES (decl)))
7363 {
7364 DECL_ATTRIBUTES (decl)
7365 = remove_attribute ("omp declare target implicit",
7366 DECL_ATTRIBUTES (decl));
7367 complete_type (TREE_TYPE (decl));
7368 if (!cp_omp_mappable_type (TREE_TYPE (decl)))
7369 error ("%q+D in declare target directive does not have mappable type",
7370 decl);
7371 else if (!lookup_attribute ("omp declare target",
7372 DECL_ATTRIBUTES (decl))
7373 && !lookup_attribute ("omp declare target link",
7374 DECL_ATTRIBUTES (decl)))
7375 DECL_ATTRIBUTES (decl)
7376 = tree_cons (get_identifier ("omp declare target"),
7377 NULL_TREE, DECL_ATTRIBUTES (decl));
7378 }
7379
7380 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7381 }
7382
7383 /* For class TYPE return itself or some its bases that contain
7384 any direct non-static data members. Return error_mark_node if an
7385 error has been diagnosed. */
7386
7387 static tree
7388 find_decomp_class_base (location_t loc, tree type, tree ret)
7389 {
7390 bool member_seen = false;
7391 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7392 if (TREE_CODE (field) != FIELD_DECL
7393 || DECL_ARTIFICIAL (field)
7394 || DECL_UNNAMED_BIT_FIELD (field))
7395 continue;
7396 else if (ret)
7397 return type;
7398 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7399 {
7400 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7401 error_at (loc, "cannot decompose class type %qT because it has an "
7402 "anonymous struct member", type);
7403 else
7404 error_at (loc, "cannot decompose class type %qT because it has an "
7405 "anonymous union member", type);
7406 inform (DECL_SOURCE_LOCATION (field), "declared here");
7407 return error_mark_node;
7408 }
7409 else if (!accessible_p (type, field, true))
7410 {
7411 error_at (loc, "cannot decompose inaccessible member %qD of %qT",
7412 field, type);
7413 inform (DECL_SOURCE_LOCATION (field),
7414 TREE_PRIVATE (field)
7415 ? G_("declared private here")
7416 : G_("declared protected here"));
7417 return error_mark_node;
7418 }
7419 else
7420 member_seen = true;
7421
7422 tree base_binfo, binfo;
7423 tree orig_ret = ret;
7424 int i;
7425 if (member_seen)
7426 ret = type;
7427 for (binfo = TYPE_BINFO (type), i = 0;
7428 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7429 {
7430 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7431 if (t == error_mark_node)
7432 return error_mark_node;
7433 if (t != NULL_TREE && t != ret)
7434 {
7435 if (ret == type)
7436 {
7437 error_at (loc, "cannot decompose class type %qT: both it and "
7438 "its base class %qT have non-static data members",
7439 type, t);
7440 return error_mark_node;
7441 }
7442 else if (orig_ret != NULL_TREE)
7443 return t;
7444 else if (ret != NULL_TREE)
7445 {
7446 error_at (loc, "cannot decompose class type %qT: its base "
7447 "classes %qT and %qT have non-static data "
7448 "members", type, ret, t);
7449 return error_mark_node;
7450 }
7451 else
7452 ret = t;
7453 }
7454 }
7455 return ret;
7456 }
7457
7458 /* Return std::tuple_size<TYPE>::value. */
7459
7460 static tree
7461 get_tuple_size (tree type)
7462 {
7463 tree args = make_tree_vec (1);
7464 TREE_VEC_ELT (args, 0) = type;
7465 tree inst = lookup_template_class (tuple_size_identifier, args,
7466 /*in_decl*/NULL_TREE,
7467 /*context*/std_node,
7468 /*entering_scope*/false, tf_none);
7469 inst = complete_type (inst);
7470 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7471 return NULL_TREE;
7472 tree val = lookup_qualified_name (inst, value_identifier,
7473 /*type*/false, /*complain*/false);
7474 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7475 val = maybe_constant_value (val);
7476 if (TREE_CODE (val) == INTEGER_CST)
7477 return val;
7478 else
7479 return error_mark_node;
7480 }
7481
7482 /* Return std::tuple_element<I,TYPE>::type. */
7483
7484 static tree
7485 get_tuple_element_type (tree type, unsigned i)
7486 {
7487 tree args = make_tree_vec (2);
7488 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7489 TREE_VEC_ELT (args, 1) = type;
7490 tree inst = lookup_template_class (tuple_element_identifier, args,
7491 /*in_decl*/NULL_TREE,
7492 /*context*/std_node,
7493 /*entering_scope*/false,
7494 tf_warning_or_error);
7495 return make_typename_type (inst, type_identifier,
7496 none_type, tf_warning_or_error);
7497 }
7498
7499 /* Return e.get<i>() or get<i>(e). */
7500
7501 static tree
7502 get_tuple_decomp_init (tree decl, unsigned i)
7503 {
7504 tree targs = make_tree_vec (1);
7505 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7506
7507 tree etype = TREE_TYPE (decl);
7508 tree e = convert_from_reference (decl);
7509
7510 /* [The id-expression] e is an lvalue if the type of the entity e is an
7511 lvalue reference and an xvalue otherwise. */
7512 if (!TYPE_REF_P (etype)
7513 || TYPE_REF_IS_RVALUE (etype))
7514 e = move (e);
7515
7516 tree fns = lookup_qualified_name (TREE_TYPE (e), get__identifier,
7517 /*type*/false, /*complain*/false);
7518 bool use_member_get = false;
7519
7520 /* To use a member get, member lookup must find at least one
7521 declaration that is a function template
7522 whose first template parameter is a non-type parameter. */
7523 for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
7524 {
7525 tree fn = *iter;
7526 if (TREE_CODE (fn) == TEMPLATE_DECL)
7527 {
7528 tree tparms = DECL_TEMPLATE_PARMS (fn);
7529 tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
7530 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
7531 {
7532 use_member_get = true;
7533 break;
7534 }
7535 }
7536 }
7537
7538 if (use_member_get)
7539 {
7540 fns = lookup_template_function (fns, targs);
7541 return build_new_method_call (e, fns, /*args*/NULL,
7542 /*path*/NULL_TREE, LOOKUP_NORMAL,
7543 /*fn_p*/NULL, tf_warning_or_error);
7544 }
7545 else
7546 {
7547 vec<tree,va_gc> *args = make_tree_vector_single (e);
7548 fns = lookup_template_function (get__identifier, targs);
7549 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7550 return finish_call_expr (fns, &args, /*novirt*/false,
7551 /*koenig*/true, tf_warning_or_error);
7552 }
7553 }
7554
7555 /* It's impossible to recover the decltype of a tuple decomposition variable
7556 based on the actual type of the variable, so store it in a hash table. */
7557
7558 static GTY((cache)) tree_cache_map *decomp_type_table;
7559 static void
7560 store_decomp_type (tree v, tree t)
7561 {
7562 if (!decomp_type_table)
7563 decomp_type_table = tree_cache_map::create_ggc (13);
7564 decomp_type_table->put (v, t);
7565 }
7566
7567 tree
7568 lookup_decomp_type (tree v)
7569 {
7570 return *decomp_type_table->get (v);
7571 }
7572
7573 /* Mangle a decomposition declaration if needed. Arguments like
7574 in cp_finish_decomp. */
7575
7576 void
7577 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7578 {
7579 if (!processing_template_decl
7580 && !error_operand_p (decl)
7581 && DECL_NAMESPACE_SCOPE_P (decl))
7582 {
7583 auto_vec<tree, 16> v;
7584 v.safe_grow (count);
7585 tree d = first;
7586 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7587 v[count - i - 1] = d;
7588 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7589 maybe_apply_pragma_weak (decl);
7590 }
7591 }
7592
7593 /* Finish a decomposition declaration. DECL is the underlying declaration
7594 "e", FIRST is the head of a chain of decls for the individual identifiers
7595 chained through DECL_CHAIN in reverse order and COUNT is the number of
7596 those decls. */
7597
7598 void
7599 cp_finish_decomp (tree decl, tree first, unsigned int count)
7600 {
7601 if (error_operand_p (decl))
7602 {
7603 error_out:
7604 while (count--)
7605 {
7606 TREE_TYPE (first) = error_mark_node;
7607 if (DECL_HAS_VALUE_EXPR_P (first))
7608 {
7609 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7610 DECL_HAS_VALUE_EXPR_P (first) = 0;
7611 }
7612 first = DECL_CHAIN (first);
7613 }
7614 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7615 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7616 return;
7617 }
7618
7619 location_t loc = DECL_SOURCE_LOCATION (decl);
7620 if (type_dependent_expression_p (decl)
7621 /* This happens for range for when not in templates.
7622 Still add the DECL_VALUE_EXPRs for later processing. */
7623 || (!processing_template_decl
7624 && type_uses_auto (TREE_TYPE (decl))))
7625 {
7626 for (unsigned int i = 0; i < count; i++)
7627 {
7628 if (!DECL_HAS_VALUE_EXPR_P (first))
7629 {
7630 tree v = build_nt (ARRAY_REF, decl,
7631 size_int (count - i - 1),
7632 NULL_TREE, NULL_TREE);
7633 SET_DECL_VALUE_EXPR (first, v);
7634 DECL_HAS_VALUE_EXPR_P (first) = 1;
7635 }
7636 if (processing_template_decl)
7637 fit_decomposition_lang_decl (first, decl);
7638 first = DECL_CHAIN (first);
7639 }
7640 return;
7641 }
7642
7643 auto_vec<tree, 16> v;
7644 v.safe_grow (count);
7645 tree d = first;
7646 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7647 {
7648 v[count - i - 1] = d;
7649 fit_decomposition_lang_decl (d, decl);
7650 }
7651
7652 tree type = TREE_TYPE (decl);
7653 tree dexp = decl;
7654
7655 if (TYPE_REF_P (type))
7656 {
7657 dexp = convert_from_reference (dexp);
7658 type = complete_type (TREE_TYPE (type));
7659 if (type == error_mark_node)
7660 goto error_out;
7661 if (!COMPLETE_TYPE_P (type))
7662 {
7663 error_at (loc, "structured binding refers to incomplete type %qT",
7664 type);
7665 goto error_out;
7666 }
7667 }
7668
7669 tree eltype = NULL_TREE;
7670 unsigned HOST_WIDE_INT eltscnt = 0;
7671 if (TREE_CODE (type) == ARRAY_TYPE)
7672 {
7673 tree nelts;
7674 nelts = array_type_nelts_top (type);
7675 if (nelts == error_mark_node)
7676 goto error_out;
7677 if (!tree_fits_uhwi_p (nelts))
7678 {
7679 error_at (loc, "cannot decompose variable length array %qT", type);
7680 goto error_out;
7681 }
7682 eltscnt = tree_to_uhwi (nelts);
7683 if (count != eltscnt)
7684 {
7685 cnt_mismatch:
7686 if (count > eltscnt)
7687 error_n (loc, count,
7688 "%u name provided for structured binding",
7689 "%u names provided for structured binding", count);
7690 else
7691 error_n (loc, count,
7692 "only %u name provided for structured binding",
7693 "only %u names provided for structured binding", count);
7694 inform_n (loc, eltscnt,
7695 "while %qT decomposes into %wu element",
7696 "while %qT decomposes into %wu elements",
7697 type, eltscnt);
7698 goto error_out;
7699 }
7700 eltype = TREE_TYPE (type);
7701 for (unsigned int i = 0; i < count; i++)
7702 {
7703 TREE_TYPE (v[i]) = eltype;
7704 layout_decl (v[i], 0);
7705 if (processing_template_decl)
7706 continue;
7707 tree t = unshare_expr (dexp);
7708 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7709 eltype, t, size_int (i), NULL_TREE,
7710 NULL_TREE);
7711 SET_DECL_VALUE_EXPR (v[i], t);
7712 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7713 }
7714 }
7715 /* 2 GNU extensions. */
7716 else if (TREE_CODE (type) == COMPLEX_TYPE)
7717 {
7718 eltscnt = 2;
7719 if (count != eltscnt)
7720 goto cnt_mismatch;
7721 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7722 for (unsigned int i = 0; i < count; i++)
7723 {
7724 TREE_TYPE (v[i]) = eltype;
7725 layout_decl (v[i], 0);
7726 if (processing_template_decl)
7727 continue;
7728 tree t = unshare_expr (dexp);
7729 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7730 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7731 t);
7732 SET_DECL_VALUE_EXPR (v[i], t);
7733 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7734 }
7735 }
7736 else if (TREE_CODE (type) == VECTOR_TYPE)
7737 {
7738 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7739 {
7740 error_at (loc, "cannot decompose variable length vector %qT", type);
7741 goto error_out;
7742 }
7743 if (count != eltscnt)
7744 goto cnt_mismatch;
7745 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7746 for (unsigned int i = 0; i < count; i++)
7747 {
7748 TREE_TYPE (v[i]) = eltype;
7749 layout_decl (v[i], 0);
7750 if (processing_template_decl)
7751 continue;
7752 tree t = unshare_expr (dexp);
7753 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7754 &t, size_int (i));
7755 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7756 eltype, t, size_int (i), NULL_TREE,
7757 NULL_TREE);
7758 SET_DECL_VALUE_EXPR (v[i], t);
7759 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7760 }
7761 }
7762 else if (tree tsize = get_tuple_size (type))
7763 {
7764 if (tsize == error_mark_node)
7765 {
7766 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7767 "constant expression", type);
7768 goto error_out;
7769 }
7770 if (!tree_fits_uhwi_p (tsize))
7771 {
7772 error_n (loc, count,
7773 "%u name provided for structured binding",
7774 "%u names provided for structured binding", count);
7775 inform (loc, "while %qT decomposes into %E elements",
7776 type, tsize);
7777 goto error_out;
7778 }
7779 eltscnt = tree_to_uhwi (tsize);
7780 if (count != eltscnt)
7781 goto cnt_mismatch;
7782 int save_read = DECL_READ_P (decl);
7783 for (unsigned i = 0; i < count; ++i)
7784 {
7785 location_t sloc = input_location;
7786 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7787
7788 input_location = dloc;
7789 tree init = get_tuple_decomp_init (decl, i);
7790 tree eltype = (init == error_mark_node ? error_mark_node
7791 : get_tuple_element_type (type, i));
7792 input_location = sloc;
7793
7794 if (init == error_mark_node || eltype == error_mark_node)
7795 {
7796 inform (dloc, "in initialization of structured binding "
7797 "variable %qD", v[i]);
7798 goto error_out;
7799 }
7800 /* Save the decltype away before reference collapse. */
7801 store_decomp_type (v[i], eltype);
7802 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7803 TREE_TYPE (v[i]) = eltype;
7804 layout_decl (v[i], 0);
7805 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7806 {
7807 /* In this case the names are variables, not just proxies. */
7808 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7809 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7810 }
7811 if (!processing_template_decl)
7812 cp_finish_decl (v[i], init, /*constexpr*/false,
7813 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7814 }
7815 /* Ignore reads from the underlying decl performed during initialization
7816 of the individual variables. If those will be read, we'll mark
7817 the underlying decl as read at that point. */
7818 DECL_READ_P (decl) = save_read;
7819 }
7820 else if (TREE_CODE (type) == UNION_TYPE)
7821 {
7822 error_at (loc, "cannot decompose union type %qT", type);
7823 goto error_out;
7824 }
7825 else if (!CLASS_TYPE_P (type))
7826 {
7827 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7828 goto error_out;
7829 }
7830 else if (LAMBDA_TYPE_P (type))
7831 {
7832 error_at (loc, "cannot decompose lambda closure type %qT", type);
7833 goto error_out;
7834 }
7835 else if (processing_template_decl && !COMPLETE_TYPE_P (type))
7836 pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
7837 type);
7838 else
7839 {
7840 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7841 if (btype == error_mark_node)
7842 goto error_out;
7843 else if (btype == NULL_TREE)
7844 {
7845 error_at (loc, "cannot decompose class type %qT without non-static "
7846 "data members", type);
7847 goto error_out;
7848 }
7849 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7850 if (TREE_CODE (field) != FIELD_DECL
7851 || DECL_ARTIFICIAL (field)
7852 || DECL_UNNAMED_BIT_FIELD (field))
7853 continue;
7854 else
7855 eltscnt++;
7856 if (count != eltscnt)
7857 goto cnt_mismatch;
7858 tree t = dexp;
7859 if (type != btype)
7860 {
7861 t = convert_to_base (t, btype, /*check_access*/true,
7862 /*nonnull*/false, tf_warning_or_error);
7863 type = btype;
7864 }
7865 unsigned int i = 0;
7866 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7867 if (TREE_CODE (field) != FIELD_DECL
7868 || DECL_ARTIFICIAL (field)
7869 || DECL_UNNAMED_BIT_FIELD (field))
7870 continue;
7871 else
7872 {
7873 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7874 NULL_TREE);
7875 if (REFERENCE_REF_P (tt))
7876 tt = TREE_OPERAND (tt, 0);
7877 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7878 layout_decl (v[i], 0);
7879 if (!processing_template_decl)
7880 {
7881 SET_DECL_VALUE_EXPR (v[i], tt);
7882 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7883 }
7884 i++;
7885 }
7886 }
7887 if (processing_template_decl)
7888 {
7889 for (unsigned int i = 0; i < count; i++)
7890 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7891 {
7892 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7893 NULL_TREE, NULL_TREE);
7894 SET_DECL_VALUE_EXPR (v[i], a);
7895 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7896 }
7897 }
7898 }
7899
7900 /* Returns a declaration for a VAR_DECL as if:
7901
7902 extern "C" TYPE NAME;
7903
7904 had been seen. Used to create compiler-generated global
7905 variables. */
7906
7907 static tree
7908 declare_global_var (tree name, tree type)
7909 {
7910 tree decl;
7911
7912 push_to_top_level ();
7913 decl = build_decl (input_location, VAR_DECL, name, type);
7914 TREE_PUBLIC (decl) = 1;
7915 DECL_EXTERNAL (decl) = 1;
7916 DECL_ARTIFICIAL (decl) = 1;
7917 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7918 /* If the user has explicitly declared this variable (perhaps
7919 because the code we are compiling is part of a low-level runtime
7920 library), then it is possible that our declaration will be merged
7921 with theirs by pushdecl. */
7922 decl = pushdecl (decl);
7923 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7924 pop_from_top_level ();
7925
7926 return decl;
7927 }
7928
7929 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7930 if "__cxa_atexit" is not being used) corresponding to the function
7931 to be called when the program exits. */
7932
7933 static tree
7934 get_atexit_fn_ptr_type (void)
7935 {
7936 tree fn_type;
7937
7938 if (!atexit_fn_ptr_type_node)
7939 {
7940 tree arg_type;
7941 if (flag_use_cxa_atexit
7942 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7943 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7944 arg_type = ptr_type_node;
7945 else
7946 /* The parameter to "atexit" is "void (*)(void)". */
7947 arg_type = NULL_TREE;
7948
7949 fn_type = build_function_type_list (void_type_node,
7950 arg_type, NULL_TREE);
7951 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7952 }
7953
7954 return atexit_fn_ptr_type_node;
7955 }
7956
7957 /* Returns a pointer to the `atexit' function. Note that if
7958 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7959 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7960
7961 static tree
7962 get_atexit_node (void)
7963 {
7964 tree atexit_fndecl;
7965 tree fn_type;
7966 tree fn_ptr_type;
7967 const char *name;
7968 bool use_aeabi_atexit;
7969
7970 if (atexit_node)
7971 return atexit_node;
7972
7973 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7974 {
7975 /* The declaration for `__cxa_atexit' is:
7976
7977 int __cxa_atexit (void (*)(void *), void *, void *)
7978
7979 We build up the argument types and then the function type
7980 itself. */
7981 tree argtype0, argtype1, argtype2;
7982
7983 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7984 /* First, build the pointer-to-function type for the first
7985 argument. */
7986 fn_ptr_type = get_atexit_fn_ptr_type ();
7987 /* Then, build the rest of the argument types. */
7988 argtype2 = ptr_type_node;
7989 if (use_aeabi_atexit)
7990 {
7991 argtype1 = fn_ptr_type;
7992 argtype0 = ptr_type_node;
7993 }
7994 else
7995 {
7996 argtype1 = ptr_type_node;
7997 argtype0 = fn_ptr_type;
7998 }
7999 /* And the final __cxa_atexit type. */
8000 fn_type = build_function_type_list (integer_type_node,
8001 argtype0, argtype1, argtype2,
8002 NULL_TREE);
8003 if (use_aeabi_atexit)
8004 name = "__aeabi_atexit";
8005 else
8006 name = "__cxa_atexit";
8007 }
8008 else
8009 {
8010 /* The declaration for `atexit' is:
8011
8012 int atexit (void (*)());
8013
8014 We build up the argument types and then the function type
8015 itself. */
8016 fn_ptr_type = get_atexit_fn_ptr_type ();
8017 /* Build the final atexit type. */
8018 fn_type = build_function_type_list (integer_type_node,
8019 fn_ptr_type, NULL_TREE);
8020 name = "atexit";
8021 }
8022
8023 /* Now, build the function declaration. */
8024 push_lang_context (lang_name_c);
8025 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
8026 mark_used (atexit_fndecl);
8027 pop_lang_context ();
8028 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
8029
8030 return atexit_node;
8031 }
8032
8033 /* Like get_atexit_node, but for thread-local cleanups. */
8034
8035 static tree
8036 get_thread_atexit_node (void)
8037 {
8038 /* The declaration for `__cxa_thread_atexit' is:
8039
8040 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
8041 tree fn_type = build_function_type_list (integer_type_node,
8042 get_atexit_fn_ptr_type (),
8043 ptr_type_node, ptr_type_node,
8044 NULL_TREE);
8045
8046 /* Now, build the function declaration. */
8047 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
8048 ECF_LEAF | ECF_NOTHROW);
8049 return decay_conversion (atexit_fndecl, tf_warning_or_error);
8050 }
8051
8052 /* Returns the __dso_handle VAR_DECL. */
8053
8054 static tree
8055 get_dso_handle_node (void)
8056 {
8057 if (dso_handle_node)
8058 return dso_handle_node;
8059
8060 /* Declare the variable. */
8061 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8062 ptr_type_node);
8063
8064 #ifdef HAVE_GAS_HIDDEN
8065 if (dso_handle_node != error_mark_node)
8066 {
8067 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
8068 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
8069 }
8070 #endif
8071
8072 return dso_handle_node;
8073 }
8074
8075 /* Begin a new function with internal linkage whose job will be simply
8076 to destroy some particular variable. */
8077
8078 static GTY(()) int start_cleanup_cnt;
8079
8080 static tree
8081 start_cleanup_fn (void)
8082 {
8083 char name[32];
8084 tree fntype;
8085 tree fndecl;
8086 bool use_cxa_atexit = flag_use_cxa_atexit
8087 && !targetm.cxx.use_atexit_for_cxa_atexit ();
8088
8089 push_to_top_level ();
8090
8091 /* No need to mangle this. */
8092 push_lang_context (lang_name_c);
8093
8094 /* Build the name of the function. */
8095 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
8096 /* Build the function declaration. */
8097 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
8098 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8099 /* It's a function with internal linkage, generated by the
8100 compiler. */
8101 TREE_PUBLIC (fndecl) = 0;
8102 DECL_ARTIFICIAL (fndecl) = 1;
8103 /* Make the function `inline' so that it is only emitted if it is
8104 actually needed. It is unlikely that it will be inlined, since
8105 it is only called via a function pointer, but we avoid unnecessary
8106 emissions this way. */
8107 DECL_DECLARED_INLINE_P (fndecl) = 1;
8108 DECL_INTERFACE_KNOWN (fndecl) = 1;
8109 /* Build the parameter. */
8110 if (use_cxa_atexit)
8111 {
8112 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
8113 TREE_USED (parmdecl) = 1;
8114 DECL_READ_P (parmdecl) = 1;
8115 DECL_ARGUMENTS (fndecl) = parmdecl;
8116 }
8117
8118 pushdecl (fndecl);
8119 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
8120
8121 pop_lang_context ();
8122
8123 return current_function_decl;
8124 }
8125
8126 /* Finish the cleanup function begun by start_cleanup_fn. */
8127
8128 static void
8129 end_cleanup_fn (void)
8130 {
8131 expand_or_defer_fn (finish_function (/*inline_p=*/false));
8132
8133 pop_from_top_level ();
8134 }
8135
8136 /* Generate code to handle the destruction of DECL, an object with
8137 static storage duration. */
8138
8139 tree
8140 register_dtor_fn (tree decl)
8141 {
8142 tree cleanup;
8143 tree addr;
8144 tree compound_stmt;
8145 tree fcall;
8146 tree type;
8147 bool ob_parm, dso_parm, use_dtor;
8148 tree arg0, arg1, arg2;
8149 tree atex_node;
8150
8151 type = TREE_TYPE (decl);
8152 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8153 return void_node;
8154
8155 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
8156 "__aeabi_atexit"), and DECL is a class object, we can just pass the
8157 destructor to "__cxa_atexit"; we don't have to build a temporary
8158 function to do the cleanup. */
8159 dso_parm = (flag_use_cxa_atexit
8160 && !targetm.cxx.use_atexit_for_cxa_atexit ());
8161 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
8162 use_dtor = ob_parm && CLASS_TYPE_P (type);
8163 if (use_dtor)
8164 {
8165 cleanup = get_class_binding (type, complete_dtor_identifier);
8166
8167 /* Make sure it is accessible. */
8168 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
8169 tf_warning_or_error);
8170 }
8171 else
8172 {
8173 /* Call build_cleanup before we enter the anonymous function so
8174 that any access checks will be done relative to the current
8175 scope, rather than the scope of the anonymous function. */
8176 build_cleanup (decl);
8177
8178 /* Now start the function. */
8179 cleanup = start_cleanup_fn ();
8180
8181 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8182 to the original function, rather than the anonymous one. That
8183 will make the back end think that nested functions are in use,
8184 which causes confusion. */
8185 push_deferring_access_checks (dk_no_check);
8186 fcall = build_cleanup (decl);
8187 pop_deferring_access_checks ();
8188
8189 /* Create the body of the anonymous function. */
8190 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
8191 finish_expr_stmt (fcall);
8192 finish_compound_stmt (compound_stmt);
8193 end_cleanup_fn ();
8194 }
8195
8196 /* Call atexit with the cleanup function. */
8197 mark_used (cleanup);
8198 cleanup = build_address (cleanup);
8199
8200 if (CP_DECL_THREAD_LOCAL_P (decl))
8201 atex_node = get_thread_atexit_node ();
8202 else
8203 atex_node = get_atexit_node ();
8204
8205 if (use_dtor)
8206 {
8207 /* We must convert CLEANUP to the type that "__cxa_atexit"
8208 expects. */
8209 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
8210 /* "__cxa_atexit" will pass the address of DECL to the
8211 cleanup function. */
8212 mark_used (decl);
8213 addr = build_address (decl);
8214 /* The declared type of the parameter to "__cxa_atexit" is
8215 "void *". For plain "T*", we could just let the
8216 machinery in cp_build_function_call convert it -- but if the
8217 type is "cv-qualified T *", then we need to convert it
8218 before passing it in, to avoid spurious errors. */
8219 addr = build_nop (ptr_type_node, addr);
8220 }
8221 else
8222 /* Since the cleanup functions we build ignore the address
8223 they're given, there's no reason to pass the actual address
8224 in, and, in general, it's cheaper to pass NULL than any
8225 other value. */
8226 addr = null_pointer_node;
8227
8228 if (dso_parm)
8229 arg2 = cp_build_addr_expr (get_dso_handle_node (),
8230 tf_warning_or_error);
8231 else if (ob_parm)
8232 /* Just pass NULL to the dso handle parm if we don't actually
8233 have a DSO handle on this target. */
8234 arg2 = null_pointer_node;
8235 else
8236 arg2 = NULL_TREE;
8237
8238 if (ob_parm)
8239 {
8240 if (!CP_DECL_THREAD_LOCAL_P (decl)
8241 && targetm.cxx.use_aeabi_atexit ())
8242 {
8243 arg1 = cleanup;
8244 arg0 = addr;
8245 }
8246 else
8247 {
8248 arg1 = addr;
8249 arg0 = cleanup;
8250 }
8251 }
8252 else
8253 {
8254 arg0 = cleanup;
8255 arg1 = NULL_TREE;
8256 }
8257 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8258 arg0, arg1, arg2, NULL_TREE);
8259 }
8260
8261 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8262 is its initializer. Generate code to handle the construction
8263 and destruction of DECL. */
8264
8265 static void
8266 expand_static_init (tree decl, tree init)
8267 {
8268 gcc_assert (VAR_P (decl));
8269 gcc_assert (TREE_STATIC (decl));
8270
8271 /* Some variables require no dynamic initialization. */
8272 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8273 {
8274 /* Make sure the destructor is callable. */
8275 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8276 if (!init)
8277 return;
8278 }
8279
8280 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8281 && !DECL_FUNCTION_SCOPE_P (decl))
8282 {
8283 location_t dloc = DECL_SOURCE_LOCATION (decl);
8284 if (init)
8285 error_at (dloc, "non-local variable %qD declared %<__thread%> "
8286 "needs dynamic initialization", decl);
8287 else
8288 error_at (dloc, "non-local variable %qD declared %<__thread%> "
8289 "has a non-trivial destructor", decl);
8290 static bool informed;
8291 if (!informed)
8292 {
8293 inform (dloc, "C++11 %<thread_local%> allows dynamic "
8294 "initialization and destruction");
8295 informed = true;
8296 }
8297 return;
8298 }
8299
8300 if (DECL_FUNCTION_SCOPE_P (decl))
8301 {
8302 /* Emit code to perform this initialization but once. */
8303 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8304 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8305 tree guard, guard_addr;
8306 tree flag, begin;
8307 /* We don't need thread-safety code for thread-local vars. */
8308 bool thread_guard = (flag_threadsafe_statics
8309 && !CP_DECL_THREAD_LOCAL_P (decl));
8310
8311 /* Emit code to perform this initialization but once. This code
8312 looks like:
8313
8314 static <type> guard;
8315 if (!__atomic_load (guard.first_byte)) {
8316 if (__cxa_guard_acquire (&guard)) {
8317 bool flag = false;
8318 try {
8319 // Do initialization.
8320 flag = true; __cxa_guard_release (&guard);
8321 // Register variable for destruction at end of program.
8322 } catch {
8323 if (!flag) __cxa_guard_abort (&guard);
8324 }
8325 }
8326 }
8327
8328 Note that the `flag' variable is only set to 1 *after* the
8329 initialization is complete. This ensures that an exception,
8330 thrown during the construction, will cause the variable to
8331 reinitialized when we pass through this code again, as per:
8332
8333 [stmt.dcl]
8334
8335 If the initialization exits by throwing an exception, the
8336 initialization is not complete, so it will be tried again
8337 the next time control enters the declaration.
8338
8339 This process should be thread-safe, too; multiple threads
8340 should not be able to initialize the variable more than
8341 once. */
8342
8343 /* Create the guard variable. */
8344 guard = get_guard (decl);
8345
8346 /* Begin the conditional initialization. */
8347 if_stmt = begin_if_stmt ();
8348
8349 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8350 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8351
8352 if (thread_guard)
8353 {
8354 tree vfntype = NULL_TREE;
8355 tree acquire_name, release_name, abort_name;
8356 tree acquire_fn, release_fn, abort_fn;
8357 guard_addr = build_address (guard);
8358
8359 acquire_name = get_identifier ("__cxa_guard_acquire");
8360 release_name = get_identifier ("__cxa_guard_release");
8361 abort_name = get_identifier ("__cxa_guard_abort");
8362 acquire_fn = get_global_binding (acquire_name);
8363 release_fn = get_global_binding (release_name);
8364 abort_fn = get_global_binding (abort_name);
8365 if (!acquire_fn)
8366 acquire_fn = push_library_fn
8367 (acquire_name, build_function_type_list (integer_type_node,
8368 TREE_TYPE (guard_addr),
8369 NULL_TREE),
8370 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8371 if (!release_fn || !abort_fn)
8372 vfntype = build_function_type_list (void_type_node,
8373 TREE_TYPE (guard_addr),
8374 NULL_TREE);
8375 if (!release_fn)
8376 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8377 ECF_NOTHROW | ECF_LEAF);
8378 if (!abort_fn)
8379 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8380 ECF_NOTHROW | ECF_LEAF);
8381
8382 inner_if_stmt = begin_if_stmt ();
8383 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8384 inner_if_stmt);
8385
8386 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8387 begin = get_target_expr (boolean_false_node);
8388 flag = TARGET_EXPR_SLOT (begin);
8389
8390 TARGET_EXPR_CLEANUP (begin)
8391 = build3 (COND_EXPR, void_type_node, flag,
8392 void_node,
8393 build_call_n (abort_fn, 1, guard_addr));
8394 CLEANUP_EH_ONLY (begin) = 1;
8395
8396 /* Do the initialization itself. */
8397 init = add_stmt_to_compound (begin, init);
8398 init = add_stmt_to_compound
8399 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8400 init = add_stmt_to_compound
8401 (init, build_call_n (release_fn, 1, guard_addr));
8402 }
8403 else
8404 init = add_stmt_to_compound (init, set_guard (guard));
8405
8406 /* Use atexit to register a function for destroying this static
8407 variable. */
8408 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8409
8410 finish_expr_stmt (init);
8411
8412 if (thread_guard)
8413 {
8414 finish_compound_stmt (inner_then_clause);
8415 finish_then_clause (inner_if_stmt);
8416 finish_if_stmt (inner_if_stmt);
8417 }
8418
8419 finish_compound_stmt (then_clause);
8420 finish_then_clause (if_stmt);
8421 finish_if_stmt (if_stmt);
8422 }
8423 else if (CP_DECL_THREAD_LOCAL_P (decl))
8424 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8425 else
8426 static_aggregates = tree_cons (init, decl, static_aggregates);
8427 }
8428
8429 \f
8430 /* Make TYPE a complete type based on INITIAL_VALUE.
8431 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8432 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8433 3 if the initializer list is empty (in pedantic mode). */
8434
8435 int
8436 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8437 {
8438 int failure;
8439 tree type, elt_type;
8440
8441 /* Don't get confused by a CONSTRUCTOR for some other type. */
8442 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8443 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8444 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8445 return 1;
8446
8447 if (initial_value)
8448 {
8449 unsigned HOST_WIDE_INT i;
8450 tree value;
8451
8452 /* An array of character type can be initialized from a
8453 brace-enclosed string constant.
8454
8455 FIXME: this code is duplicated from reshape_init. Probably
8456 we should just call reshape_init here? */
8457 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8458 && TREE_CODE (initial_value) == CONSTRUCTOR
8459 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8460 {
8461 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8462 tree value = (*v)[0].value;
8463 STRIP_ANY_LOCATION_WRAPPER (value);
8464
8465 if (TREE_CODE (value) == STRING_CST
8466 && v->length () == 1)
8467 initial_value = value;
8468 }
8469
8470 /* If any of the elements are parameter packs, we can't actually
8471 complete this type now because the array size is dependent. */
8472 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8473 {
8474 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8475 i, value)
8476 {
8477 if (PACK_EXPANSION_P (value))
8478 return 0;
8479 }
8480 }
8481 }
8482
8483 failure = complete_array_type (ptype, initial_value, do_default);
8484
8485 /* We can create the array before the element type is complete, which
8486 means that we didn't have these two bits set in the original type
8487 either. In completing the type, we are expected to propagate these
8488 bits. See also complete_type which does the same thing for arrays
8489 of fixed size. */
8490 type = *ptype;
8491 if (type != error_mark_node && TYPE_DOMAIN (type))
8492 {
8493 elt_type = TREE_TYPE (type);
8494 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8495 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8496 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8497 }
8498
8499 return failure;
8500 }
8501
8502 /* As above, but either give an error or reject zero-size arrays, depending
8503 on COMPLAIN. */
8504
8505 int
8506 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8507 bool do_default, tsubst_flags_t complain)
8508 {
8509 int failure;
8510 bool sfinae = !(complain & tf_error);
8511 /* In SFINAE context we can't be lenient about zero-size arrays. */
8512 if (sfinae)
8513 ++pedantic;
8514 failure = cp_complete_array_type (ptype, initial_value, do_default);
8515 if (sfinae)
8516 --pedantic;
8517 if (failure)
8518 {
8519 if (sfinae)
8520 /* Not an error. */;
8521 else if (failure == 1)
8522 error ("initializer fails to determine size of %qT", *ptype);
8523 else if (failure == 2)
8524 {
8525 if (do_default)
8526 error ("array size missing in %qT", *ptype);
8527 }
8528 else if (failure == 3)
8529 error ("zero-size array %qT", *ptype);
8530 *ptype = error_mark_node;
8531 }
8532 return failure;
8533 }
8534 \f
8535 /* Return zero if something is declared to be a member of type
8536 CTYPE when in the context of CUR_TYPE. STRING is the error
8537 message to print in that case. Otherwise, quietly return 1. */
8538
8539 static int
8540 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8541 {
8542 if (ctype && ctype != cur_type)
8543 {
8544 if (flags == DTOR_FLAG)
8545 error ("destructor for alien class %qT cannot be a member", ctype);
8546 else
8547 error ("constructor for alien class %qT cannot be a member", ctype);
8548 return 0;
8549 }
8550 return 1;
8551 }
8552 \f
8553 /* Subroutine of `grokdeclarator'. */
8554
8555 /* Generate errors possibly applicable for a given set of specifiers.
8556 This is for ARM $7.1.2. */
8557
8558 static void
8559 bad_specifiers (tree object,
8560 enum bad_spec_place type,
8561 int virtualp,
8562 int quals,
8563 int inlinep,
8564 int friendp,
8565 int raises,
8566 const location_t* locations)
8567 {
8568 switch (type)
8569 {
8570 case BSP_VAR:
8571 if (virtualp)
8572 error_at (locations[ds_virtual],
8573 "%qD declared as a %<virtual%> variable", object);
8574 if (quals)
8575 error ("%<const%> and %<volatile%> function specifiers on "
8576 "%qD invalid in variable declaration", object);
8577 break;
8578 case BSP_PARM:
8579 if (virtualp)
8580 error_at (locations[ds_virtual],
8581 "%qD declared as a %<virtual%> parameter", object);
8582 if (inlinep)
8583 error_at (locations[ds_inline],
8584 "%qD declared as an %<inline%> parameter", object);
8585 if (quals)
8586 error ("%<const%> and %<volatile%> function specifiers on "
8587 "%qD invalid in parameter declaration", object);
8588 break;
8589 case BSP_TYPE:
8590 if (virtualp)
8591 error_at (locations[ds_virtual],
8592 "%qD declared as a %<virtual%> type", object);
8593 if (inlinep)
8594 error_at (locations[ds_inline],
8595 "%qD declared as an %<inline%> type", object);
8596 if (quals)
8597 error ("%<const%> and %<volatile%> function specifiers on "
8598 "%qD invalid in type declaration", object);
8599 break;
8600 case BSP_FIELD:
8601 if (virtualp)
8602 error_at (locations[ds_virtual],
8603 "%qD declared as a %<virtual%> field", object);
8604 if (inlinep)
8605 error_at (locations[ds_inline],
8606 "%qD declared as an %<inline%> field", object);
8607 if (quals)
8608 error ("%<const%> and %<volatile%> function specifiers on "
8609 "%qD invalid in field declaration", object);
8610 break;
8611 default:
8612 gcc_unreachable();
8613 }
8614 if (friendp)
8615 error ("%q+D declared as a friend", object);
8616 if (raises
8617 && !flag_noexcept_type
8618 && (TREE_CODE (object) == TYPE_DECL
8619 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8620 && !TYPE_REFFN_P (TREE_TYPE (object))
8621 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8622 error ("%q+D declared with an exception specification", object);
8623 }
8624
8625 /* DECL is a member function or static data member and is presently
8626 being defined. Check that the definition is taking place in a
8627 valid namespace. */
8628
8629 static void
8630 check_class_member_definition_namespace (tree decl)
8631 {
8632 /* These checks only apply to member functions and static data
8633 members. */
8634 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8635 /* We check for problems with specializations in pt.c in
8636 check_specialization_namespace, where we can issue better
8637 diagnostics. */
8638 if (processing_specialization)
8639 return;
8640 /* We check this in check_explicit_instantiation_namespace. */
8641 if (processing_explicit_instantiation)
8642 return;
8643 /* [class.mfct]
8644
8645 A member function definition that appears outside of the
8646 class definition shall appear in a namespace scope enclosing
8647 the class definition.
8648
8649 [class.static.data]
8650
8651 The definition for a static data member shall appear in a
8652 namespace scope enclosing the member's class definition. */
8653 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8654 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8655 decl, DECL_CONTEXT (decl));
8656 }
8657
8658 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8659 METHOD_TYPE for a non-static member function; QUALS are the
8660 cv-qualifiers that apply to the function. */
8661
8662 tree
8663 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8664 {
8665 tree this_type;
8666 tree qual_type;
8667 tree parm;
8668 cp_cv_quals this_quals;
8669
8670 if (CLASS_TYPE_P (type))
8671 {
8672 this_type
8673 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8674 this_type = build_pointer_type (this_type);
8675 }
8676 else
8677 this_type = type_of_this_parm (type);
8678 /* The `this' parameter is implicitly `const'; it cannot be
8679 assigned to. */
8680 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8681 qual_type = cp_build_qualified_type (this_type, this_quals);
8682 parm = build_artificial_parm (fn, this_identifier, qual_type);
8683 cp_apply_type_quals_to_decl (this_quals, parm);
8684 return parm;
8685 }
8686
8687 /* DECL is a static member function. Complain if it was declared
8688 with function-cv-quals. */
8689
8690 static void
8691 check_static_quals (tree decl, cp_cv_quals quals)
8692 {
8693 if (quals != TYPE_UNQUALIFIED)
8694 error ("static member function %q#D declared with type qualifiers",
8695 decl);
8696 }
8697
8698 // Check that FN takes no arguments and returns bool.
8699 static void
8700 check_concept_fn (tree fn)
8701 {
8702 // A constraint is nullary.
8703 if (DECL_ARGUMENTS (fn))
8704 error_at (DECL_SOURCE_LOCATION (fn),
8705 "concept %q#D declared with function parameters", fn);
8706
8707 // The declared return type of the concept shall be bool, and
8708 // it shall not be deduced from it definition.
8709 tree type = TREE_TYPE (TREE_TYPE (fn));
8710 if (is_auto (type))
8711 error_at (DECL_SOURCE_LOCATION (fn),
8712 "concept %q#D declared with a deduced return type", fn);
8713 else if (type != boolean_type_node)
8714 error_at (DECL_SOURCE_LOCATION (fn),
8715 "concept %q#D with non-%<bool%> return type %qT", fn, type);
8716 }
8717
8718 /* Helper function. Replace the temporary this parameter injected
8719 during cp_finish_omp_declare_simd with the real this parameter. */
8720
8721 static tree
8722 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8723 {
8724 tree this_parm = (tree) data;
8725 if (TREE_CODE (*tp) == PARM_DECL
8726 && DECL_NAME (*tp) == this_identifier
8727 && *tp != this_parm)
8728 *tp = this_parm;
8729 else if (TYPE_P (*tp))
8730 *walk_subtrees = 0;
8731 return NULL_TREE;
8732 }
8733
8734 /* CTYPE is class type, or null if non-class.
8735 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8736 or METHOD_TYPE.
8737 DECLARATOR is the function's name.
8738 PARMS is a chain of PARM_DECLs for the function.
8739 VIRTUALP is truthvalue of whether the function is virtual or not.
8740 FLAGS are to be passed through to `grokclassfn'.
8741 QUALS are qualifiers indicating whether the function is `const'
8742 or `volatile'.
8743 RAISES is a list of exceptions that this function can raise.
8744 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8745 not look, and -1 if we should not call `grokclassfn' at all.
8746
8747 SFK is the kind of special function (if any) for the new function.
8748
8749 Returns `NULL_TREE' if something goes wrong, after issuing
8750 applicable error messages. */
8751
8752 static tree
8753 grokfndecl (tree ctype,
8754 tree type,
8755 tree declarator,
8756 tree parms,
8757 tree orig_declarator,
8758 const cp_decl_specifier_seq *declspecs,
8759 tree decl_reqs,
8760 int virtualp,
8761 enum overload_flags flags,
8762 cp_cv_quals quals,
8763 cp_ref_qualifier rqual,
8764 tree raises,
8765 int check,
8766 int friendp,
8767 int publicp,
8768 int inlinep,
8769 bool deletedp,
8770 special_function_kind sfk,
8771 bool funcdef_flag,
8772 bool late_return_type_p,
8773 int template_count,
8774 tree in_namespace,
8775 tree* attrlist,
8776 location_t location)
8777 {
8778 tree decl;
8779 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8780 tree t;
8781
8782 if (location == UNKNOWN_LOCATION)
8783 location = input_location;
8784
8785 // Was the concept specifier present?
8786 bool concept_p = inlinep & 4;
8787
8788 // Concept declarations must have a corresponding definition.
8789 if (concept_p && !funcdef_flag)
8790 {
8791 error_at (location, "concept %qD has no definition", declarator);
8792 return NULL_TREE;
8793 }
8794
8795 type = build_cp_fntype_variant (type, rqual, raises, late_return_type_p);
8796
8797 decl = build_lang_decl_loc (location, FUNCTION_DECL, declarator, type);
8798
8799 /* Set the constraints on the declaration. */
8800 if (flag_concepts)
8801 {
8802 tree tmpl_reqs = NULL_TREE;
8803 if (processing_template_decl > template_class_depth (ctype))
8804 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8805
8806 /* Adjust the required expression into a constraint. */
8807 if (decl_reqs)
8808 decl_reqs = normalize_expression (decl_reqs);
8809
8810 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8811 set_constraints (decl, ci);
8812 }
8813
8814 if (TREE_CODE (type) == METHOD_TYPE)
8815 {
8816 tree parm = build_this_parm (decl, type, quals);
8817 DECL_CHAIN (parm) = parms;
8818 parms = parm;
8819
8820 /* Allocate space to hold the vptr bit if needed. */
8821 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8822 }
8823
8824 DECL_ARGUMENTS (decl) = parms;
8825 for (t = parms; t; t = DECL_CHAIN (t))
8826 DECL_CONTEXT (t) = decl;
8827
8828 /* Propagate volatile out from type to decl. */
8829 if (TYPE_VOLATILE (type))
8830 TREE_THIS_VOLATILE (decl) = 1;
8831
8832 /* Setup decl according to sfk. */
8833 switch (sfk)
8834 {
8835 case sfk_constructor:
8836 case sfk_copy_constructor:
8837 case sfk_move_constructor:
8838 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8839 DECL_NAME (decl) = ctor_identifier;
8840 break;
8841 case sfk_destructor:
8842 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8843 DECL_NAME (decl) = dtor_identifier;
8844 break;
8845 default:
8846 break;
8847 }
8848
8849 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8850 {
8851 if (funcdef_flag)
8852 error_at (location,
8853 "defining explicit specialization %qD in friend declaration",
8854 orig_declarator);
8855 else
8856 {
8857 tree fns = TREE_OPERAND (orig_declarator, 0);
8858 tree args = TREE_OPERAND (orig_declarator, 1);
8859
8860 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8861 {
8862 /* Something like `template <class T> friend void f<T>()'. */
8863 error_at (location,
8864 "invalid use of template-id %qD in declaration "
8865 "of primary template",
8866 orig_declarator);
8867 return NULL_TREE;
8868 }
8869
8870
8871 /* A friend declaration of the form friend void f<>(). Record
8872 the information in the TEMPLATE_ID_EXPR. */
8873 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8874
8875 gcc_assert (identifier_p (fns)
8876 || TREE_CODE (fns) == OVERLOAD
8877 || TREE_CODE (fns) == FUNCTION_DECL);
8878 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8879
8880 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8881 if (TREE_PURPOSE (t)
8882 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8883 {
8884 error_at (defarg_location (TREE_PURPOSE (t)),
8885 "default arguments are not allowed in declaration "
8886 "of friend template specialization %qD",
8887 decl);
8888 return NULL_TREE;
8889 }
8890
8891 if (inlinep & 1)
8892 {
8893 error_at (declspecs->locations[ds_inline],
8894 "%<inline%> is not allowed in declaration of friend "
8895 "template specialization %qD",
8896 decl);
8897 return NULL_TREE;
8898 }
8899 }
8900 }
8901
8902 /* C++17 11.3.6/4: "If a friend declaration specifies a default argument
8903 expression, that declaration shall be a definition..." */
8904 if (friendp && !funcdef_flag)
8905 {
8906 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
8907 t && t != void_list_node; t = TREE_CHAIN (t))
8908 if (TREE_PURPOSE (t))
8909 {
8910 permerror (DECL_SOURCE_LOCATION (decl),
8911 "friend declaration of %qD specifies default "
8912 "arguments and isn't a definition", decl);
8913 break;
8914 }
8915 }
8916
8917 /* If this decl has namespace scope, set that up. */
8918 if (in_namespace)
8919 set_decl_namespace (decl, in_namespace, friendp);
8920 else if (!ctype)
8921 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8922
8923 /* `main' and builtins have implicit 'C' linkage. */
8924 if (ctype == NULL_TREE
8925 && DECL_FILE_SCOPE_P (decl)
8926 && current_lang_name == lang_name_cplusplus
8927 && (MAIN_NAME_P (declarator)
8928 || (IDENTIFIER_LENGTH (declarator) > 10
8929 && IDENTIFIER_POINTER (declarator)[0] == '_'
8930 && IDENTIFIER_POINTER (declarator)[1] == '_'
8931 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8932 "builtin_", 8) == 0)
8933 || (targetcm.cxx_implicit_extern_c
8934 && (targetcm.cxx_implicit_extern_c
8935 (IDENTIFIER_POINTER (declarator))))))
8936 SET_DECL_LANGUAGE (decl, lang_c);
8937
8938 /* Should probably propagate const out from type to decl I bet (mrs). */
8939 if (staticp)
8940 {
8941 DECL_STATIC_FUNCTION_P (decl) = 1;
8942 DECL_CONTEXT (decl) = ctype;
8943 }
8944
8945 if (deletedp)
8946 DECL_DELETED_FN (decl) = 1;
8947
8948 if (ctype)
8949 {
8950 DECL_CONTEXT (decl) = ctype;
8951 if (funcdef_flag)
8952 check_class_member_definition_namespace (decl);
8953 }
8954
8955 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8956 {
8957 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8958 error_at (location, "cannot declare %<::main%> to be a template");
8959 if (inlinep & 1)
8960 error_at (declspecs->locations[ds_inline],
8961 "cannot declare %<::main%> to be inline");
8962 if (inlinep & 2)
8963 error_at (declspecs->locations[ds_constexpr],
8964 "cannot declare %<::main%> to be %<constexpr%>");
8965 if (!publicp)
8966 error_at (location, "cannot declare %<::main%> to be static");
8967 inlinep = 0;
8968 publicp = 1;
8969 }
8970
8971 /* Members of anonymous types and local classes have no linkage; make
8972 them internal. If a typedef is made later, this will be changed. */
8973 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8974 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8975 publicp = 0;
8976
8977 if (publicp && cxx_dialect == cxx98)
8978 {
8979 /* [basic.link]: A name with no linkage (notably, the name of a class
8980 or enumeration declared in a local scope) shall not be used to
8981 declare an entity with linkage.
8982
8983 DR 757 relaxes this restriction for C++0x. */
8984 no_linkage_error (decl);
8985 }
8986
8987 TREE_PUBLIC (decl) = publicp;
8988 if (! publicp)
8989 {
8990 DECL_INTERFACE_KNOWN (decl) = 1;
8991 DECL_NOT_REALLY_EXTERN (decl) = 1;
8992 }
8993
8994 /* If the declaration was declared inline, mark it as such. */
8995 if (inlinep)
8996 {
8997 DECL_DECLARED_INLINE_P (decl) = 1;
8998 if (publicp)
8999 DECL_COMDAT (decl) = 1;
9000 }
9001 if (inlinep & 2)
9002 DECL_DECLARED_CONSTEXPR_P (decl) = true;
9003
9004 // If the concept declaration specifier was found, check
9005 // that the declaration satisfies the necessary requirements.
9006 if (concept_p)
9007 {
9008 DECL_DECLARED_CONCEPT_P (decl) = true;
9009 check_concept_fn (decl);
9010 }
9011
9012 DECL_EXTERNAL (decl) = 1;
9013 if (TREE_CODE (type) == FUNCTION_TYPE)
9014 {
9015 if (quals || rqual)
9016 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
9017 TYPE_UNQUALIFIED,
9018 REF_QUAL_NONE);
9019
9020 if (quals)
9021 {
9022 error (ctype
9023 ? G_("static member function %qD cannot have cv-qualifier")
9024 : G_("non-member function %qD cannot have cv-qualifier"),
9025 decl);
9026 quals = TYPE_UNQUALIFIED;
9027 }
9028
9029 if (rqual)
9030 {
9031 error (ctype
9032 ? G_("static member function %qD cannot have ref-qualifier")
9033 : G_("non-member function %qD cannot have ref-qualifier"),
9034 decl);
9035 rqual = REF_QUAL_NONE;
9036 }
9037 }
9038
9039 if (deduction_guide_p (decl))
9040 {
9041 if (!DECL_NAMESPACE_SCOPE_P (decl))
9042 {
9043 error_at (location, "deduction guide %qD must be declared at "
9044 "namespace scope", decl);
9045 return NULL_TREE;
9046 }
9047 if (funcdef_flag)
9048 error_at (location,
9049 "deduction guide %qD must not have a function body", decl);
9050 }
9051 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
9052 && !grok_op_properties (decl, /*complain=*/true))
9053 return NULL_TREE;
9054 else if (UDLIT_OPER_P (DECL_NAME (decl)))
9055 {
9056 bool long_long_unsigned_p;
9057 bool long_double_p;
9058 const char *suffix = NULL;
9059 /* [over.literal]/6: Literal operators shall not have C linkage. */
9060 if (DECL_LANGUAGE (decl) == lang_c)
9061 {
9062 error_at (location, "literal operator with C linkage");
9063 maybe_show_extern_c_location ();
9064 return NULL_TREE;
9065 }
9066
9067 if (DECL_NAMESPACE_SCOPE_P (decl))
9068 {
9069 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
9070 &long_double_p))
9071 {
9072 error_at (location, "%qD has invalid argument list", decl);
9073 return NULL_TREE;
9074 }
9075
9076 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
9077 if (long_long_unsigned_p)
9078 {
9079 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
9080 warning_at (location, 0, "integer suffix %qs"
9081 " shadowed by implementation", suffix);
9082 }
9083 else if (long_double_p)
9084 {
9085 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
9086 warning_at (location, 0, "floating point suffix %qs"
9087 " shadowed by implementation", suffix);
9088 }
9089 /* 17.6.3.3.5 */
9090 if (suffix[0] != '_'
9091 && !in_system_header_at (location)
9092 && !current_function_decl && !(friendp && !funcdef_flag))
9093 warning_at (location, OPT_Wliteral_suffix,
9094 "literal operator suffixes not preceded by %<_%>"
9095 " are reserved for future standardization");
9096 }
9097 else
9098 {
9099 error_at (location, "%qD must be a non-member function", decl);
9100 return NULL_TREE;
9101 }
9102 }
9103
9104 if (funcdef_flag)
9105 /* Make the init_value nonzero so pushdecl knows this is not
9106 tentative. error_mark_node is replaced later with the BLOCK. */
9107 DECL_INITIAL (decl) = error_mark_node;
9108
9109 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
9110 TREE_NOTHROW (decl) = 1;
9111
9112 if (flag_openmp || flag_openmp_simd)
9113 {
9114 /* Adjust "omp declare simd" attributes. */
9115 tree ods = lookup_attribute ("omp declare simd", *attrlist);
9116 if (ods)
9117 {
9118 tree attr;
9119 for (attr = ods; attr;
9120 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
9121 {
9122 if (TREE_CODE (type) == METHOD_TYPE)
9123 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
9124 DECL_ARGUMENTS (decl), NULL);
9125 if (TREE_VALUE (attr) != NULL_TREE)
9126 {
9127 tree cl = TREE_VALUE (TREE_VALUE (attr));
9128 cl = c_omp_declare_simd_clauses_to_numbers
9129 (DECL_ARGUMENTS (decl), cl);
9130 if (cl)
9131 TREE_VALUE (TREE_VALUE (attr)) = cl;
9132 else
9133 TREE_VALUE (attr) = NULL_TREE;
9134 }
9135 }
9136 }
9137 }
9138
9139 /* Caller will do the rest of this. */
9140 if (check < 0)
9141 return decl;
9142
9143 if (ctype != NULL_TREE)
9144 grokclassfn (ctype, decl, flags);
9145
9146 /* 12.4/3 */
9147 if (cxx_dialect >= cxx11
9148 && DECL_DESTRUCTOR_P (decl)
9149 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
9150 && !processing_template_decl)
9151 deduce_noexcept_on_destructor (decl);
9152
9153 decl = check_explicit_specialization (orig_declarator, decl,
9154 template_count,
9155 2 * funcdef_flag +
9156 4 * (friendp != 0) +
9157 8 * concept_p,
9158 *attrlist);
9159 if (decl == error_mark_node)
9160 return NULL_TREE;
9161
9162 if (DECL_STATIC_FUNCTION_P (decl))
9163 check_static_quals (decl, quals);
9164
9165 if (attrlist)
9166 {
9167 cplus_decl_attributes (&decl, *attrlist, 0);
9168 *attrlist = NULL_TREE;
9169 }
9170
9171 /* Check main's type after attributes have been applied. */
9172 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9173 {
9174 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9175 integer_type_node))
9176 {
9177 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
9178 tree newtype;
9179 error_at (declspecs->locations[ds_type_spec],
9180 "%<::main%> must return %<int%>");
9181 newtype = build_function_type (integer_type_node, oldtypeargs);
9182 TREE_TYPE (decl) = newtype;
9183 }
9184 if (warn_main)
9185 check_main_parameter_types (decl);
9186 }
9187
9188 if (ctype != NULL_TREE && check)
9189 {
9190 tree old_decl = check_classfn (ctype, decl,
9191 (processing_template_decl
9192 > template_class_depth (ctype))
9193 ? current_template_parms
9194 : NULL_TREE);
9195
9196 if (old_decl == error_mark_node)
9197 return NULL_TREE;
9198
9199 if (old_decl)
9200 {
9201 tree ok;
9202 tree pushed_scope;
9203
9204 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
9205 /* Because grokfndecl is always supposed to return a
9206 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9207 here. We depend on our callers to figure out that its
9208 really a template that's being returned. */
9209 old_decl = DECL_TEMPLATE_RESULT (old_decl);
9210
9211 if (DECL_STATIC_FUNCTION_P (old_decl)
9212 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9213 {
9214 /* Remove the `this' parm added by grokclassfn. */
9215 revert_static_member_fn (decl);
9216 check_static_quals (decl, quals);
9217 }
9218 if (DECL_ARTIFICIAL (old_decl))
9219 {
9220 error ("definition of implicitly-declared %qD", old_decl);
9221 return NULL_TREE;
9222 }
9223 else if (DECL_DEFAULTED_FN (old_decl))
9224 {
9225 error ("definition of explicitly-defaulted %q+D", decl);
9226 inform (DECL_SOURCE_LOCATION (old_decl),
9227 "%q#D explicitly defaulted here", old_decl);
9228 return NULL_TREE;
9229 }
9230
9231 /* Since we've smashed OLD_DECL to its
9232 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9233 if (TREE_CODE (decl) == TEMPLATE_DECL)
9234 decl = DECL_TEMPLATE_RESULT (decl);
9235
9236 /* Attempt to merge the declarations. This can fail, in
9237 the case of some invalid specialization declarations. */
9238 pushed_scope = push_scope (ctype);
9239 ok = duplicate_decls (decl, old_decl, friendp);
9240 if (pushed_scope)
9241 pop_scope (pushed_scope);
9242 if (!ok)
9243 {
9244 error ("no %q#D member function declared in class %qT",
9245 decl, ctype);
9246 return NULL_TREE;
9247 }
9248 if (ok == error_mark_node)
9249 return NULL_TREE;
9250 return old_decl;
9251 }
9252 }
9253
9254 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9255 return NULL_TREE;
9256
9257 if (ctype == NULL_TREE || check)
9258 return decl;
9259
9260 if (virtualp)
9261 DECL_VIRTUAL_P (decl) = 1;
9262
9263 return decl;
9264 }
9265
9266 /* decl is a FUNCTION_DECL.
9267 specifiers are the parsed virt-specifiers.
9268
9269 Set flags to reflect the virt-specifiers.
9270
9271 Returns decl. */
9272
9273 static tree
9274 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
9275 {
9276 if (decl == NULL_TREE)
9277 return decl;
9278 if (specifiers & VIRT_SPEC_OVERRIDE)
9279 DECL_OVERRIDE_P (decl) = 1;
9280 if (specifiers & VIRT_SPEC_FINAL)
9281 DECL_FINAL_P (decl) = 1;
9282 return decl;
9283 }
9284
9285 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
9286 the linkage that DECL will receive in the object file. */
9287
9288 static void
9289 set_linkage_for_static_data_member (tree decl)
9290 {
9291 /* A static data member always has static storage duration and
9292 external linkage. Note that static data members are forbidden in
9293 local classes -- the only situation in which a class has
9294 non-external linkage. */
9295 TREE_PUBLIC (decl) = 1;
9296 TREE_STATIC (decl) = 1;
9297 /* For non-template classes, static data members are always put
9298 out in exactly those files where they are defined, just as
9299 with ordinary namespace-scope variables. */
9300 if (!processing_template_decl)
9301 DECL_INTERFACE_KNOWN (decl) = 1;
9302 }
9303
9304 /* Create a VAR_DECL named NAME with the indicated TYPE.
9305
9306 If SCOPE is non-NULL, it is the class type or namespace containing
9307 the variable. If SCOPE is NULL, the variable should is created in
9308 the innermost enclosing scope. */
9309
9310 static tree
9311 grokvardecl (tree type,
9312 tree name,
9313 tree orig_declarator,
9314 const cp_decl_specifier_seq *declspecs,
9315 int initialized,
9316 int type_quals,
9317 int inlinep,
9318 bool conceptp,
9319 int template_count,
9320 tree scope,
9321 location_t location)
9322 {
9323 tree decl;
9324 tree explicit_scope;
9325
9326 gcc_assert (!name || identifier_p (name));
9327
9328 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9329 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9330
9331 /* Compute the scope in which to place the variable, but remember
9332 whether or not that scope was explicitly specified by the user. */
9333 explicit_scope = scope;
9334 if (!scope)
9335 {
9336 /* An explicit "extern" specifier indicates a namespace-scope
9337 variable. */
9338 if (declspecs->storage_class == sc_extern)
9339 scope = current_decl_namespace ();
9340 else if (!at_function_scope_p ())
9341 scope = current_scope ();
9342 }
9343
9344 if (scope
9345 && (/* If the variable is a namespace-scope variable declared in a
9346 template, we need DECL_LANG_SPECIFIC. */
9347 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9348 /* Similarly for namespace-scope variables with language linkage
9349 other than C++. */
9350 || (TREE_CODE (scope) == NAMESPACE_DECL
9351 && current_lang_name != lang_name_cplusplus)
9352 /* Similarly for static data members. */
9353 || TYPE_P (scope)
9354 /* Similarly for explicit specializations. */
9355 || (orig_declarator
9356 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9357 decl = build_lang_decl_loc (location, VAR_DECL, name, type);
9358 else
9359 decl = build_decl (location, VAR_DECL, name, type);
9360
9361 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9362 set_decl_namespace (decl, explicit_scope, 0);
9363 else
9364 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9365
9366 if (declspecs->storage_class == sc_extern)
9367 {
9368 DECL_THIS_EXTERN (decl) = 1;
9369 DECL_EXTERNAL (decl) = !initialized;
9370 }
9371
9372 if (DECL_CLASS_SCOPE_P (decl))
9373 {
9374 set_linkage_for_static_data_member (decl);
9375 /* This function is only called with out-of-class definitions. */
9376 DECL_EXTERNAL (decl) = 0;
9377 check_class_member_definition_namespace (decl);
9378 }
9379 /* At top level, either `static' or no s.c. makes a definition
9380 (perhaps tentative), and absence of `static' makes it public. */
9381 else if (toplevel_bindings_p ())
9382 {
9383 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9384 && (DECL_THIS_EXTERN (decl)
9385 || ! constp
9386 || volatilep
9387 || inlinep));
9388 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9389 }
9390 /* Not at top level, only `static' makes a static definition. */
9391 else
9392 {
9393 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9394 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9395 }
9396
9397 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9398 {
9399 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9400 {
9401 CP_DECL_THREAD_LOCAL_P (decl) = true;
9402 if (!processing_template_decl)
9403 set_decl_tls_model (decl, decl_default_tls_model (decl));
9404 }
9405 if (declspecs->gnu_thread_keyword_p)
9406 SET_DECL_GNU_TLS_P (decl);
9407 }
9408
9409 /* If the type of the decl has no linkage, make sure that we'll
9410 notice that in mark_used. */
9411 if (cxx_dialect > cxx98
9412 && decl_linkage (decl) != lk_none
9413 && DECL_LANG_SPECIFIC (decl) == NULL
9414 && !DECL_EXTERN_C_P (decl)
9415 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9416 retrofit_lang_decl (decl);
9417
9418 if (TREE_PUBLIC (decl))
9419 {
9420 /* [basic.link]: A name with no linkage (notably, the name of a class
9421 or enumeration declared in a local scope) shall not be used to
9422 declare an entity with linkage.
9423
9424 DR 757 relaxes this restriction for C++0x. */
9425 if (cxx_dialect < cxx11)
9426 no_linkage_error (decl);
9427 }
9428 else
9429 DECL_INTERFACE_KNOWN (decl) = 1;
9430
9431 if (DECL_NAME (decl)
9432 && MAIN_NAME_P (DECL_NAME (decl))
9433 && scope == global_namespace)
9434 error ("cannot declare %<::main%> to be a global variable");
9435
9436 /* Check that the variable can be safely declared as a concept.
9437 Note that this also forbids explicit specializations. */
9438 if (conceptp)
9439 {
9440 if (!processing_template_decl)
9441 {
9442 error_at (declspecs->locations[ds_concept],
9443 "a non-template variable cannot be %<concept%>");
9444 return NULL_TREE;
9445 }
9446 else
9447 DECL_DECLARED_CONCEPT_P (decl) = true;
9448 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9449 error_at (declspecs->locations[ds_type_spec],
9450 "concept must have type %<bool%>");
9451 }
9452 else if (flag_concepts
9453 && processing_template_decl > template_class_depth (scope))
9454 {
9455 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9456 tree ci = build_constraints (reqs, NULL_TREE);
9457 set_constraints (decl, ci);
9458 }
9459
9460 // Handle explicit specializations and instantiations of variable templates.
9461 if (orig_declarator)
9462 decl = check_explicit_specialization (orig_declarator, decl,
9463 template_count, conceptp * 8);
9464
9465 return decl != error_mark_node ? decl : NULL_TREE;
9466 }
9467
9468 /* Create and return a canonical pointer to member function type, for
9469 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9470
9471 tree
9472 build_ptrmemfunc_type (tree type)
9473 {
9474 tree field, fields;
9475 tree t;
9476
9477 if (type == error_mark_node)
9478 return type;
9479
9480 /* Make sure that we always have the unqualified pointer-to-member
9481 type first. */
9482 if (cp_cv_quals quals = cp_type_quals (type))
9483 {
9484 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9485 return cp_build_qualified_type (unqual, quals);
9486 }
9487
9488 /* If a canonical type already exists for this type, use it. We use
9489 this method instead of type_hash_canon, because it only does a
9490 simple equality check on the list of field members. */
9491
9492 t = TYPE_PTRMEMFUNC_TYPE (type);
9493 if (t)
9494 return t;
9495
9496 t = make_node (RECORD_TYPE);
9497
9498 /* Let the front end know this is a pointer to member function. */
9499 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9500
9501 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9502 fields = field;
9503
9504 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9505 delta_type_node);
9506 DECL_CHAIN (field) = fields;
9507 fields = field;
9508
9509 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9510
9511 /* Zap out the name so that the back end will give us the debugging
9512 information for this anonymous RECORD_TYPE. */
9513 TYPE_NAME (t) = NULL_TREE;
9514
9515 /* Cache this pointer-to-member type so that we can find it again
9516 later. */
9517 TYPE_PTRMEMFUNC_TYPE (type) = t;
9518
9519 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9520 SET_TYPE_STRUCTURAL_EQUALITY (t);
9521 else if (TYPE_CANONICAL (type) != type)
9522 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9523
9524 return t;
9525 }
9526
9527 /* Create and return a pointer to data member type. */
9528
9529 tree
9530 build_ptrmem_type (tree class_type, tree member_type)
9531 {
9532 if (TREE_CODE (member_type) == METHOD_TYPE)
9533 {
9534 cp_cv_quals quals = type_memfn_quals (member_type);
9535 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9536 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9537 return build_ptrmemfunc_type (build_pointer_type (member_type));
9538 }
9539 else
9540 {
9541 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9542 return build_offset_type (class_type, member_type);
9543 }
9544 }
9545
9546 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9547 Check to see that the definition is valid. Issue appropriate error
9548 messages. */
9549
9550 static void
9551 check_static_variable_definition (tree decl, tree type)
9552 {
9553 /* Avoid redundant diagnostics on out-of-class definitions. */
9554 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9555 ;
9556 /* Can't check yet if we don't know the type. */
9557 else if (dependent_type_p (type))
9558 ;
9559 /* If DECL is declared constexpr, we'll do the appropriate checks
9560 in check_initializer. Similarly for inline static data members. */
9561 else if (DECL_P (decl)
9562 && (DECL_DECLARED_CONSTEXPR_P (decl)
9563 || undeduced_auto_decl (decl)
9564 || DECL_VAR_DECLARED_INLINE_P (decl)))
9565 ;
9566 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9567 {
9568 if (!COMPLETE_TYPE_P (type))
9569 error_at (DECL_SOURCE_LOCATION (decl),
9570 "in-class initialization of static data member %q#D of "
9571 "incomplete type", decl);
9572 else if (literal_type_p (type))
9573 permerror (DECL_SOURCE_LOCATION (decl),
9574 "%<constexpr%> needed for in-class initialization of "
9575 "static data member %q#D of non-integral type", decl);
9576 else
9577 error_at (DECL_SOURCE_LOCATION (decl),
9578 "in-class initialization of static data member %q#D of "
9579 "non-literal type", decl);
9580 }
9581 /* Motion 10 at San Diego: If a static const integral data member is
9582 initialized with an integral constant expression, the initializer
9583 may appear either in the declaration (within the class), or in
9584 the definition, but not both. If it appears in the class, the
9585 member is a member constant. The file-scope definition is always
9586 required. */
9587 else if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9588 error_at (DECL_SOURCE_LOCATION (decl),
9589 "invalid in-class initialization of static data member "
9590 "of non-integral type %qT",
9591 type);
9592 else if (!CP_TYPE_CONST_P (type))
9593 error_at (DECL_SOURCE_LOCATION (decl),
9594 "ISO C++ forbids in-class initialization of non-const "
9595 "static member %qD",
9596 decl);
9597 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9598 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9599 "ISO C++ forbids initialization of member constant "
9600 "%qD of non-integral type %qT", decl, type);
9601 }
9602
9603 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9604 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9605 expressions out into temporary variables so that walk_tree doesn't
9606 step into them (c++/15764). */
9607
9608 static tree
9609 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9610 {
9611 hash_set<tree> *pset = (hash_set<tree> *)data;
9612 tree expr = *expr_p;
9613 if (TREE_CODE (expr) == SAVE_EXPR)
9614 {
9615 tree op = TREE_OPERAND (expr, 0);
9616 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9617 if (TREE_SIDE_EFFECTS (op))
9618 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9619 *walk_subtrees = 0;
9620 }
9621 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9622 *walk_subtrees = 0;
9623 return NULL;
9624 }
9625
9626 /* Entry point for the above. */
9627
9628 static void
9629 stabilize_vla_size (tree size)
9630 {
9631 hash_set<tree> pset;
9632 /* Break out any function calls into temporary variables. */
9633 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9634 }
9635
9636 /* Reduce a SIZEOF_EXPR to its value. */
9637
9638 tree
9639 fold_sizeof_expr (tree t)
9640 {
9641 tree r;
9642 if (SIZEOF_EXPR_TYPE_P (t))
9643 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9644 SIZEOF_EXPR, false, false);
9645 else if (TYPE_P (TREE_OPERAND (t, 0)))
9646 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9647 false, false);
9648 else
9649 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9650 false);
9651 if (r == error_mark_node)
9652 r = size_one_node;
9653 return r;
9654 }
9655
9656 /* Given the SIZE (i.e., number of elements) in an array, compute
9657 an appropriate index type for the array. If non-NULL, NAME is
9658 the name of the entity being declared. */
9659
9660 static tree
9661 compute_array_index_type_loc (location_t name_loc, tree name, tree size,
9662 tsubst_flags_t complain)
9663 {
9664 if (error_operand_p (size))
9665 return error_mark_node;
9666
9667 /* The type of the index being computed. */
9668 tree itype;
9669
9670 /* The original numeric size as seen in the source code before
9671 conversion to size_t. */
9672 tree origsize = size;
9673
9674 location_t loc = cp_expr_loc_or_loc (size, name ? name_loc : input_location);
9675
9676 if (!type_dependent_expression_p (size))
9677 {
9678 origsize = size = mark_rvalue_use (size);
9679
9680 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9681 && TREE_SIDE_EFFECTS (size))
9682 /* In C++98, we mark a non-constant array bound with a magic
9683 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9684 else
9685 {
9686 size = instantiate_non_dependent_expr_sfinae (size, complain);
9687 size = build_converted_constant_expr (size_type_node, size, complain);
9688 /* Pedantically a constant expression is required here and so
9689 __builtin_is_constant_evaluated () should fold to true if it
9690 is successfully folded into a constant. */
9691 size = maybe_constant_value (size, NULL_TREE,
9692 /*manifestly_const_eval=*/true);
9693
9694 if (!TREE_CONSTANT (size))
9695 size = origsize;
9696 }
9697
9698 if (error_operand_p (size))
9699 return error_mark_node;
9700
9701 /* The array bound must be an integer type. */
9702 tree type = TREE_TYPE (size);
9703 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9704 {
9705 if (!(complain & tf_error))
9706 return error_mark_node;
9707 if (name)
9708 error_at (loc, "size of array %qD has non-integral type %qT",
9709 name, type);
9710 else
9711 error_at (loc, "size of array has non-integral type %qT", type);
9712 size = integer_one_node;
9713 }
9714 }
9715
9716 /* A type is dependent if it is...an array type constructed from any
9717 dependent type or whose size is specified by a constant expression
9718 that is value-dependent. */
9719 /* We can only call value_dependent_expression_p on integral constant
9720 expressions; treat non-constant expressions as dependent, too. */
9721 if (processing_template_decl
9722 && (type_dependent_expression_p (size)
9723 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9724 {
9725 /* We cannot do any checking for a SIZE that isn't known to be
9726 constant. Just build the index type and mark that it requires
9727 structural equality checks. */
9728 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9729 size, size_one_node));
9730 TYPE_DEPENDENT_P (itype) = 1;
9731 TYPE_DEPENDENT_P_VALID (itype) = 1;
9732 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9733 return itype;
9734 }
9735
9736 if (TREE_CODE (size) != INTEGER_CST)
9737 {
9738 tree folded = cp_fully_fold (size);
9739 if (TREE_CODE (folded) == INTEGER_CST)
9740 {
9741 if (name)
9742 pedwarn (loc, OPT_Wpedantic, "size of array %qD is not an "
9743 "integral constant-expression", name);
9744 else
9745 pedwarn (loc, OPT_Wpedantic,
9746 "size of array is not an integral constant-expression");
9747 }
9748 /* Use the folded result for VLAs, too; it will have resolved
9749 SIZEOF_EXPR. */
9750 size = folded;
9751 }
9752
9753 /* Normally, the array-bound will be a constant. */
9754 if (TREE_CODE (size) == INTEGER_CST)
9755 {
9756 /* The size to use in diagnostics that reflects the constant
9757 size used in the source, rather than SIZE massaged above. */
9758 tree diagsize = size;
9759
9760 /* If the original size before conversion to size_t was signed
9761 and negative, convert it to ssizetype to restore the sign. */
9762 if (!TYPE_UNSIGNED (TREE_TYPE (origsize))
9763 && TREE_CODE (size) == INTEGER_CST
9764 && tree_int_cst_sign_bit (size))
9765 {
9766 diagsize = fold_convert (ssizetype, size);
9767
9768 /* Clear the overflow bit that may have been set as a result
9769 of the conversion from the sizetype of the new size to
9770 ssizetype. */
9771 TREE_OVERFLOW (diagsize) = false;
9772 }
9773
9774 /* Verify that the array has a positive number of elements
9775 and issue the appropriate diagnostic if it doesn't. */
9776 if (!valid_array_size_p (loc, diagsize, name, (complain & tf_error)))
9777 {
9778 if (!(complain & tf_error))
9779 return error_mark_node;
9780 size = integer_one_node;
9781 }
9782 /* As an extension we allow zero-sized arrays. */
9783 else if (integer_zerop (size))
9784 {
9785 if (!(complain & tf_error))
9786 /* We must fail if performing argument deduction (as
9787 indicated by the state of complain), so that
9788 another substitution can be found. */
9789 return error_mark_node;
9790 else if (in_system_header_at (input_location))
9791 /* Allow them in system headers because glibc uses them. */;
9792 else if (name)
9793 pedwarn (loc, OPT_Wpedantic,
9794 "ISO C++ forbids zero-size array %qD", name);
9795 else
9796 pedwarn (loc, OPT_Wpedantic,
9797 "ISO C++ forbids zero-size array");
9798 }
9799 }
9800 else if (TREE_CONSTANT (size)
9801 /* We don't allow VLAs at non-function scopes, or during
9802 tentative template substitution. */
9803 || !at_function_scope_p ()
9804 || !(complain & tf_error))
9805 {
9806 if (!(complain & tf_error))
9807 return error_mark_node;
9808 /* `(int) &fn' is not a valid array bound. */
9809 if (name)
9810 error_at (loc,
9811 "size of array %qD is not an integral constant-expression",
9812 name);
9813 else
9814 error_at (loc, "size of array is not an integral constant-expression");
9815 size = integer_one_node;
9816 }
9817 else if (pedantic && warn_vla != 0)
9818 {
9819 if (name)
9820 pedwarn (name_loc, OPT_Wvla,
9821 "ISO C++ forbids variable length array %qD", name);
9822 else
9823 pedwarn (input_location, OPT_Wvla,
9824 "ISO C++ forbids variable length array");
9825 }
9826 else if (warn_vla > 0)
9827 {
9828 if (name)
9829 warning_at (name_loc, OPT_Wvla,
9830 "variable length array %qD is used", name);
9831 else
9832 warning (OPT_Wvla,
9833 "variable length array is used");
9834 }
9835
9836 if (processing_template_decl && !TREE_CONSTANT (size))
9837 /* A variable sized array. */
9838 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9839 else
9840 {
9841 /* Compute the index of the largest element in the array. It is
9842 one less than the number of elements in the array. We save
9843 and restore PROCESSING_TEMPLATE_DECL so that computations in
9844 cp_build_binary_op will be appropriately folded. */
9845 {
9846 processing_template_decl_sentinel s;
9847 itype = cp_build_binary_op (input_location,
9848 MINUS_EXPR,
9849 cp_convert (ssizetype, size, complain),
9850 cp_convert (ssizetype, integer_one_node,
9851 complain),
9852 complain);
9853 itype = maybe_constant_value (itype);
9854 }
9855
9856 if (!TREE_CONSTANT (itype))
9857 {
9858 /* A variable sized array. */
9859 itype = variable_size (itype);
9860
9861 stabilize_vla_size (itype);
9862
9863 if (sanitize_flags_p (SANITIZE_VLA)
9864 && current_function_decl != NULL_TREE)
9865 {
9866 /* We have to add 1 -- in the ubsan routine we generate
9867 LE_EXPR rather than LT_EXPR. */
9868 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9869 build_one_cst (TREE_TYPE (itype)));
9870 t = ubsan_instrument_vla (input_location, t);
9871 finish_expr_stmt (t);
9872 }
9873 }
9874 /* Make sure that there was no overflow when creating to a signed
9875 index type. (For example, on a 32-bit machine, an array with
9876 size 2^32 - 1 is too big.) */
9877 else if (TREE_CODE (itype) == INTEGER_CST
9878 && TREE_OVERFLOW (itype))
9879 {
9880 if (!(complain & tf_error))
9881 return error_mark_node;
9882 error ("overflow in array dimension");
9883 TREE_OVERFLOW (itype) = 0;
9884 }
9885 }
9886
9887 /* Create and return the appropriate index type. */
9888 itype = build_index_type (itype);
9889
9890 /* If the index type were dependent, we would have returned early, so
9891 remember that it isn't. */
9892 TYPE_DEPENDENT_P (itype) = 0;
9893 TYPE_DEPENDENT_P_VALID (itype) = 1;
9894 return itype;
9895 }
9896
9897 tree
9898 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9899 {
9900 return compute_array_index_type_loc (input_location, name, size, complain);
9901 }
9902
9903 /* Returns the scope (if any) in which the entity declared by
9904 DECLARATOR will be located. If the entity was declared with an
9905 unqualified name, NULL_TREE is returned. */
9906
9907 tree
9908 get_scope_of_declarator (const cp_declarator *declarator)
9909 {
9910 while (declarator && declarator->kind != cdk_id)
9911 declarator = declarator->declarator;
9912
9913 /* If the declarator-id is a SCOPE_REF, the scope in which the
9914 declaration occurs is the first operand. */
9915 if (declarator
9916 && declarator->u.id.qualifying_scope)
9917 return declarator->u.id.qualifying_scope;
9918
9919 /* Otherwise, the declarator is not a qualified name; the entity will
9920 be declared in the current scope. */
9921 return NULL_TREE;
9922 }
9923
9924 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9925 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9926 with this type. */
9927
9928 static tree
9929 create_array_type_for_decl (tree name, tree type, tree size, location_t loc)
9930 {
9931 tree itype = NULL_TREE;
9932
9933 /* If things have already gone awry, bail now. */
9934 if (type == error_mark_node || size == error_mark_node)
9935 return error_mark_node;
9936
9937 /* 8.3.4/1: If the type of the identifier of D contains the auto
9938 type-specifier, the program is ill-formed. */
9939 if (type_uses_auto (type))
9940 {
9941 if (name)
9942 error_at (loc, "%qD declared as array of %qT", name, type);
9943 else
9944 error ("creating array of %qT", type);
9945 return error_mark_node;
9946 }
9947
9948 /* If there are some types which cannot be array elements,
9949 issue an error-message and return. */
9950 switch (TREE_CODE (type))
9951 {
9952 case VOID_TYPE:
9953 if (name)
9954 error_at (loc, "declaration of %qD as array of void", name);
9955 else
9956 error ("creating array of void");
9957 return error_mark_node;
9958
9959 case FUNCTION_TYPE:
9960 if (name)
9961 error_at (loc, "declaration of %qD as array of functions", name);
9962 else
9963 error ("creating array of functions");
9964 return error_mark_node;
9965
9966 case REFERENCE_TYPE:
9967 if (name)
9968 error_at (loc, "declaration of %qD as array of references", name);
9969 else
9970 error ("creating array of references");
9971 return error_mark_node;
9972
9973 case METHOD_TYPE:
9974 if (name)
9975 error_at (loc, "declaration of %qD as array of function members",
9976 name);
9977 else
9978 error ("creating array of function members");
9979 return error_mark_node;
9980
9981 default:
9982 break;
9983 }
9984
9985 /* [dcl.array]
9986
9987 The constant expressions that specify the bounds of the arrays
9988 can be omitted only for the first member of the sequence. */
9989 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9990 {
9991 if (name)
9992 error_at (loc, "declaration of %qD as multidimensional array must "
9993 "have bounds for all dimensions except the first",
9994 name);
9995 else
9996 error ("multidimensional array must have bounds for all "
9997 "dimensions except the first");
9998
9999 return error_mark_node;
10000 }
10001
10002 /* Figure out the index type for the array. */
10003 if (size)
10004 itype = compute_array_index_type_loc (loc, name, size,
10005 tf_warning_or_error);
10006
10007 /* [dcl.array]
10008 T is called the array element type; this type shall not be [...] an
10009 abstract class type. */
10010 abstract_virtuals_error (name, type);
10011
10012 return build_cplus_array_type (type, itype);
10013 }
10014
10015 /* Returns the smallest location that is not UNKNOWN_LOCATION. */
10016
10017 static location_t
10018 min_location (location_t loca, location_t locb)
10019 {
10020 if (loca == UNKNOWN_LOCATION
10021 || (locb != UNKNOWN_LOCATION
10022 && linemap_location_before_p (line_table, locb, loca)))
10023 return locb;
10024 return loca;
10025 }
10026
10027 /* Returns the smallest location != UNKNOWN_LOCATION among the
10028 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
10029 and LOCATIONS[ds_restrict]. */
10030
10031 static location_t
10032 smallest_type_quals_location (int type_quals, const location_t* locations)
10033 {
10034 location_t loc = UNKNOWN_LOCATION;
10035
10036 if (type_quals & TYPE_QUAL_CONST)
10037 loc = locations[ds_const];
10038
10039 if (type_quals & TYPE_QUAL_VOLATILE)
10040 loc = min_location (loc, locations[ds_volatile]);
10041
10042 if (type_quals & TYPE_QUAL_RESTRICT)
10043 loc = min_location (loc, locations[ds_restrict]);
10044
10045 return loc;
10046 }
10047
10048 /* Check that it's OK to declare a function with the indicated TYPE
10049 and TYPE_QUALS. SFK indicates the kind of special function (if any)
10050 that this function is. OPTYPE is the type given in a conversion
10051 operator declaration, or the class type for a constructor/destructor.
10052 Returns the actual return type of the function; that may be different
10053 than TYPE if an error occurs, or for certain special functions. */
10054
10055 static tree
10056 check_special_function_return_type (special_function_kind sfk,
10057 tree type,
10058 tree optype,
10059 int type_quals,
10060 const location_t* locations)
10061 {
10062 switch (sfk)
10063 {
10064 case sfk_constructor:
10065 if (type)
10066 error ("return type specification for constructor invalid");
10067 else if (type_quals != TYPE_UNQUALIFIED)
10068 error_at (smallest_type_quals_location (type_quals, locations),
10069 "qualifiers are not allowed on constructor declaration");
10070
10071 if (targetm.cxx.cdtor_returns_this ())
10072 type = build_pointer_type (optype);
10073 else
10074 type = void_type_node;
10075 break;
10076
10077 case sfk_destructor:
10078 if (type)
10079 error ("return type specification for destructor invalid");
10080 else if (type_quals != TYPE_UNQUALIFIED)
10081 error_at (smallest_type_quals_location (type_quals, locations),
10082 "qualifiers are not allowed on destructor declaration");
10083
10084 /* We can't use the proper return type here because we run into
10085 problems with ambiguous bases and covariant returns. */
10086 if (targetm.cxx.cdtor_returns_this ())
10087 type = build_pointer_type (void_type_node);
10088 else
10089 type = void_type_node;
10090 break;
10091
10092 case sfk_conversion:
10093 if (type)
10094 error ("return type specified for %<operator %T%>", optype);
10095 else if (type_quals != TYPE_UNQUALIFIED)
10096 error_at (smallest_type_quals_location (type_quals, locations),
10097 "qualifiers are not allowed on declaration of "
10098 "%<operator %T%>", optype);
10099
10100 type = optype;
10101 break;
10102
10103 case sfk_deduction_guide:
10104 if (type)
10105 error ("return type specified for deduction guide");
10106 else if (type_quals != TYPE_UNQUALIFIED)
10107 error_at (smallest_type_quals_location (type_quals, locations),
10108 "qualifiers are not allowed on declaration of "
10109 "deduction guide");
10110 if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
10111 {
10112 error ("template template parameter %qT in declaration of "
10113 "deduction guide", optype);
10114 type = error_mark_node;
10115 }
10116 else
10117 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
10118 for (int i = 0; i < ds_last; ++i)
10119 if (i != ds_explicit && locations[i])
10120 error_at (locations[i],
10121 "decl-specifier in declaration of deduction guide");
10122 break;
10123
10124 default:
10125 gcc_unreachable ();
10126 }
10127
10128 return type;
10129 }
10130
10131 /* A variable or data member (whose unqualified name is IDENTIFIER)
10132 has been declared with the indicated TYPE. If the TYPE is not
10133 acceptable, issue an error message and return a type to use for
10134 error-recovery purposes. */
10135
10136 tree
10137 check_var_type (tree identifier, tree type)
10138 {
10139 if (VOID_TYPE_P (type))
10140 {
10141 if (!identifier)
10142 error ("unnamed variable or field declared void");
10143 else if (identifier_p (identifier))
10144 {
10145 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
10146 error ("variable or field %qE declared void", identifier);
10147 }
10148 else
10149 error ("variable or field declared void");
10150 type = error_mark_node;
10151 }
10152
10153 return type;
10154 }
10155
10156 /* Handle declaring DECL as an inline variable. */
10157
10158 static void
10159 mark_inline_variable (tree decl, location_t loc)
10160 {
10161 bool inlinep = true;
10162 if (! toplevel_bindings_p ())
10163 {
10164 error_at (loc, "%<inline%> specifier invalid for variable "
10165 "%qD declared at block scope", decl);
10166 inlinep = false;
10167 }
10168 else if (cxx_dialect < cxx17)
10169 pedwarn (loc, 0, "inline variables are only available "
10170 "with -std=c++17 or -std=gnu++17");
10171 if (inlinep)
10172 {
10173 retrofit_lang_decl (decl);
10174 SET_DECL_VAR_DECLARED_INLINE_P (decl);
10175 }
10176 }
10177
10178
10179 /* Assign a typedef-given name to a class or enumeration type declared
10180 as anonymous at first. This was split out of grokdeclarator
10181 because it is also used in libcc1. */
10182
10183 void
10184 name_unnamed_type (tree type, tree decl)
10185 {
10186 gcc_assert (TYPE_UNNAMED_P (type));
10187
10188 /* Replace the anonymous name with the real name everywhere. */
10189 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10190 {
10191 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
10192 /* We do not rename the debug info representing the
10193 unnamed tagged type because the standard says in
10194 [dcl.typedef] that the naming applies only for
10195 linkage purposes. */
10196 /*debug_hooks->set_name (t, decl);*/
10197 TYPE_NAME (t) = decl;
10198 }
10199
10200 if (TYPE_LANG_SPECIFIC (type))
10201 TYPE_WAS_UNNAMED (type) = 1;
10202
10203 /* If this is a typedef within a template class, the nested
10204 type is a (non-primary) template. The name for the
10205 template needs updating as well. */
10206 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10207 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10208 = TYPE_IDENTIFIER (type);
10209
10210 /* Adjust linkage now that we aren't unnamed anymore. */
10211 reset_type_linkage (type);
10212
10213 /* FIXME remangle member functions; member functions of a
10214 type with external linkage have external linkage. */
10215
10216 /* Check that our job is done, and that it would fail if we
10217 attempted to do it again. */
10218 gcc_assert (!TYPE_UNNAMED_P (type));
10219 }
10220
10221 /* Given declspecs and a declarator (abstract or otherwise), determine
10222 the name and type of the object declared and construct a DECL node
10223 for it.
10224
10225 DECLSPECS points to the representation of declaration-specifier
10226 sequence that precedes declarator.
10227
10228 DECL_CONTEXT says which syntactic context this declaration is in:
10229 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
10230 FUNCDEF for a function definition. Like NORMAL but a few different
10231 error messages in each case. Return value may be zero meaning
10232 this definition is too screwy to try to parse.
10233 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
10234 handle member functions (which have FIELD context).
10235 Return value may be zero meaning this definition is too screwy to
10236 try to parse.
10237 PARM for a parameter declaration (either within a function prototype
10238 or before a function body). Make a PARM_DECL, or return void_type_node.
10239 TPARM for a template parameter declaration.
10240 CATCHPARM for a parameter declaration before a catch clause.
10241 TYPENAME if for a typename (in a cast or sizeof).
10242 Don't make a DECL node; just return the ..._TYPE node.
10243 FIELD for a struct or union field; make a FIELD_DECL.
10244 BITFIELD for a field with specified width.
10245
10246 INITIALIZED is as for start_decl.
10247
10248 ATTRLIST is a pointer to the list of attributes, which may be NULL
10249 if there are none; *ATTRLIST may be modified if attributes from inside
10250 the declarator should be applied to the declaration.
10251
10252 When this function is called, scoping variables (such as
10253 CURRENT_CLASS_TYPE) should reflect the scope in which the
10254 declaration occurs, not the scope in which the new declaration will
10255 be placed. For example, on:
10256
10257 void S::f() { ... }
10258
10259 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
10260 should not be `S'.
10261
10262 Returns a DECL (if a declarator is present), a TYPE (if there is no
10263 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
10264 error occurs. */
10265
10266 tree
10267 grokdeclarator (const cp_declarator *declarator,
10268 cp_decl_specifier_seq *declspecs,
10269 enum decl_context decl_context,
10270 int initialized,
10271 tree* attrlist)
10272 {
10273 tree type = NULL_TREE;
10274 int longlong = 0;
10275 int explicit_intN = 0;
10276 int virtualp, explicitp, friendp, inlinep, staticp;
10277 int explicit_int = 0;
10278 int explicit_char = 0;
10279 int defaulted_int = 0;
10280
10281 tree typedef_decl = NULL_TREE;
10282 const char *name = NULL;
10283 tree typedef_type = NULL_TREE;
10284 /* True if this declarator is a function definition. */
10285 bool funcdef_flag = false;
10286 cp_declarator_kind innermost_code = cdk_error;
10287 int bitfield = 0;
10288 #if 0
10289 /* See the code below that used this. */
10290 tree decl_attr = NULL_TREE;
10291 #endif
10292
10293 /* Keep track of what sort of function is being processed
10294 so that we can warn about default return values, or explicit
10295 return values which do not match prescribed defaults. */
10296 special_function_kind sfk = sfk_none;
10297
10298 tree dname = NULL_TREE;
10299 tree ctor_return_type = NULL_TREE;
10300 enum overload_flags flags = NO_SPECIAL;
10301 /* cv-qualifiers that apply to the declarator, for a declaration of
10302 a member function. */
10303 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
10304 /* virt-specifiers that apply to the declarator, for a declaration of
10305 a member function. */
10306 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
10307 /* ref-qualifier that applies to the declarator, for a declaration of
10308 a member function. */
10309 cp_ref_qualifier rqual = REF_QUAL_NONE;
10310 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
10311 int type_quals = TYPE_UNQUALIFIED;
10312 tree raises = NULL_TREE;
10313 int template_count = 0;
10314 tree returned_attrs = NULL_TREE;
10315 tree parms = NULL_TREE;
10316 const cp_declarator *id_declarator;
10317 /* The unqualified name of the declarator; either an
10318 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
10319 tree unqualified_id;
10320 /* The class type, if any, in which this entity is located,
10321 or NULL_TREE if none. Note that this value may be different from
10322 the current class type; for example if an attempt is made to declare
10323 "A::f" inside "B", this value will be "A". */
10324 tree ctype = current_class_type;
10325 /* The NAMESPACE_DECL for the namespace in which this entity is
10326 located. If an unqualified name is used to declare the entity,
10327 this value will be NULL_TREE, even if the entity is located at
10328 namespace scope. */
10329 tree in_namespace = NULL_TREE;
10330 cp_storage_class storage_class;
10331 bool unsigned_p, signed_p, short_p, long_p, thread_p;
10332 bool type_was_error_mark_node = false;
10333 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10334 bool template_type_arg = false;
10335 bool template_parm_flag = false;
10336 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10337 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10338 bool late_return_type_p = false;
10339 bool array_parameter_p = false;
10340 location_t saved_loc = input_location;
10341 tree reqs = NULL_TREE;
10342
10343 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10344 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10345 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10346 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10347 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10348 explicit_intN = declspecs->explicit_intN_p;
10349 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10350
10351 // Was concept_p specified? Note that ds_concept
10352 // implies ds_constexpr!
10353 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10354 if (concept_p)
10355 constexpr_p = true;
10356
10357 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10358 type_quals |= TYPE_QUAL_CONST;
10359 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10360 type_quals |= TYPE_QUAL_VOLATILE;
10361 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10362 type_quals |= TYPE_QUAL_RESTRICT;
10363
10364 if (decl_context == FUNCDEF)
10365 funcdef_flag = true, decl_context = NORMAL;
10366 else if (decl_context == MEMFUNCDEF)
10367 funcdef_flag = true, decl_context = FIELD;
10368 else if (decl_context == BITFIELD)
10369 bitfield = 1, decl_context = FIELD;
10370 else if (decl_context == TEMPLATE_TYPE_ARG)
10371 template_type_arg = true, decl_context = TYPENAME;
10372 else if (decl_context == TPARM)
10373 template_parm_flag = true, decl_context = PARM;
10374
10375 if (initialized > 1)
10376 funcdef_flag = true;
10377
10378 location_t typespec_loc = smallest_type_quals_location (type_quals,
10379 declspecs->locations);
10380 if (typespec_loc == UNKNOWN_LOCATION)
10381 typespec_loc = declspecs->locations[ds_type_spec];
10382 if (typespec_loc == UNKNOWN_LOCATION)
10383 typespec_loc = input_location;
10384
10385 /* Look inside a declarator for the name being declared
10386 and get it as a string, for an error message. */
10387 for (id_declarator = declarator;
10388 id_declarator;
10389 id_declarator = id_declarator->declarator)
10390 {
10391 if (id_declarator->kind != cdk_id)
10392 innermost_code = id_declarator->kind;
10393
10394 switch (id_declarator->kind)
10395 {
10396 case cdk_function:
10397 if (id_declarator->declarator
10398 && id_declarator->declarator->kind == cdk_id)
10399 {
10400 sfk = id_declarator->declarator->u.id.sfk;
10401 if (sfk == sfk_destructor)
10402 flags = DTOR_FLAG;
10403 }
10404 break;
10405
10406 case cdk_id:
10407 {
10408 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10409 tree decl = id_declarator->u.id.unqualified_name;
10410 if (!decl)
10411 break;
10412 if (qualifying_scope)
10413 {
10414 if (check_for_bare_parameter_packs (qualifying_scope,
10415 id_declarator->id_loc))
10416 return error_mark_node;
10417 if (at_function_scope_p ())
10418 {
10419 /* [dcl.meaning]
10420
10421 A declarator-id shall not be qualified except
10422 for ...
10423
10424 None of the cases are permitted in block
10425 scope. */
10426 if (qualifying_scope == global_namespace)
10427 error ("invalid use of qualified-name %<::%D%>",
10428 decl);
10429 else if (TYPE_P (qualifying_scope))
10430 error ("invalid use of qualified-name %<%T::%D%>",
10431 qualifying_scope, decl);
10432 else
10433 error ("invalid use of qualified-name %<%D::%D%>",
10434 qualifying_scope, decl);
10435 return error_mark_node;
10436 }
10437 else if (TYPE_P (qualifying_scope))
10438 {
10439 ctype = qualifying_scope;
10440 if (!MAYBE_CLASS_TYPE_P (ctype))
10441 {
10442 error ("%q#T is not a class or a namespace", ctype);
10443 ctype = NULL_TREE;
10444 }
10445 else if (innermost_code != cdk_function
10446 && current_class_type
10447 && !uniquely_derived_from_p (ctype,
10448 current_class_type))
10449 {
10450 error ("invalid use of qualified-name %<%T::%D%>",
10451 qualifying_scope, decl);
10452 return error_mark_node;
10453 }
10454 }
10455 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10456 in_namespace = qualifying_scope;
10457 }
10458 switch (TREE_CODE (decl))
10459 {
10460 case BIT_NOT_EXPR:
10461 {
10462 if (innermost_code != cdk_function)
10463 {
10464 error ("declaration of %qD as non-function", decl);
10465 return error_mark_node;
10466 }
10467 else if (!qualifying_scope
10468 && !(current_class_type && at_class_scope_p ()))
10469 {
10470 error ("declaration of %qD as non-member", decl);
10471 return error_mark_node;
10472 }
10473
10474 tree type = TREE_OPERAND (decl, 0);
10475 if (TYPE_P (type))
10476 type = constructor_name (type);
10477 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10478 dname = decl;
10479 }
10480 break;
10481
10482 case TEMPLATE_ID_EXPR:
10483 {
10484 tree fns = TREE_OPERAND (decl, 0);
10485
10486 dname = fns;
10487 if (!identifier_p (dname))
10488 dname = OVL_NAME (dname);
10489 }
10490 /* Fall through. */
10491
10492 case IDENTIFIER_NODE:
10493 if (identifier_p (decl))
10494 dname = decl;
10495
10496 if (IDENTIFIER_KEYWORD_P (dname))
10497 {
10498 error ("declarator-id missing; using reserved word %qD",
10499 dname);
10500 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10501 }
10502 else if (!IDENTIFIER_CONV_OP_P (dname))
10503 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10504 else
10505 {
10506 gcc_assert (flags == NO_SPECIAL);
10507 flags = TYPENAME_FLAG;
10508 sfk = sfk_conversion;
10509 tree glob = get_global_binding (dname);
10510 if (glob && TREE_CODE (glob) == TYPE_DECL)
10511 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10512 else
10513 name = "<invalid operator>";
10514 }
10515 break;
10516
10517 default:
10518 gcc_unreachable ();
10519 }
10520 break;
10521 }
10522
10523 case cdk_array:
10524 case cdk_pointer:
10525 case cdk_reference:
10526 case cdk_ptrmem:
10527 break;
10528
10529 case cdk_decomp:
10530 name = "structured binding";
10531 break;
10532
10533 case cdk_error:
10534 return error_mark_node;
10535
10536 default:
10537 gcc_unreachable ();
10538 }
10539 if (id_declarator->kind == cdk_id)
10540 break;
10541 }
10542
10543 /* [dcl.fct.edf]
10544
10545 The declarator in a function-definition shall have the form
10546 D1 ( parameter-declaration-clause) ... */
10547 if (funcdef_flag && innermost_code != cdk_function)
10548 {
10549 error ("function definition does not declare parameters");
10550 return error_mark_node;
10551 }
10552
10553 if (flags == TYPENAME_FLAG
10554 && innermost_code != cdk_function
10555 && ! (ctype && !declspecs->any_specifiers_p))
10556 {
10557 error ("declaration of %qD as non-function", dname);
10558 return error_mark_node;
10559 }
10560
10561 if (dname && identifier_p (dname))
10562 {
10563 if (UDLIT_OPER_P (dname)
10564 && innermost_code != cdk_function)
10565 {
10566 error ("declaration of %qD as non-function", dname);
10567 return error_mark_node;
10568 }
10569
10570 if (IDENTIFIER_ANY_OP_P (dname))
10571 {
10572 if (typedef_p)
10573 {
10574 error ("declaration of %qD as %<typedef%>", dname);
10575 return error_mark_node;
10576 }
10577 else if (decl_context == PARM || decl_context == CATCHPARM)
10578 {
10579 error ("declaration of %qD as parameter", dname);
10580 return error_mark_node;
10581 }
10582 }
10583 }
10584
10585 /* Anything declared one level down from the top level
10586 must be one of the parameters of a function
10587 (because the body is at least two levels down). */
10588
10589 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10590 by not allowing C++ class definitions to specify their parameters
10591 with xdecls (must be spec.d in the parmlist).
10592
10593 Since we now wait to push a class scope until we are sure that
10594 we are in a legitimate method context, we must set oldcname
10595 explicitly (since current_class_name is not yet alive).
10596
10597 We also want to avoid calling this a PARM if it is in a namespace. */
10598
10599 if (decl_context == NORMAL && !toplevel_bindings_p ())
10600 {
10601 cp_binding_level *b = current_binding_level;
10602 current_binding_level = b->level_chain;
10603 if (current_binding_level != 0 && toplevel_bindings_p ())
10604 decl_context = PARM;
10605 current_binding_level = b;
10606 }
10607
10608 if (name == NULL)
10609 name = decl_context == PARM ? "parameter" : "type name";
10610
10611 if (concept_p && typedef_p)
10612 {
10613 error_at (declspecs->locations[ds_concept],
10614 "%<concept%> cannot appear in a typedef declaration");
10615 return error_mark_node;
10616 }
10617
10618 if (constexpr_p && typedef_p)
10619 {
10620 error_at (declspecs->locations[ds_constexpr],
10621 "%<constexpr%> cannot appear in a typedef declaration");
10622 return error_mark_node;
10623 }
10624
10625 /* If there were multiple types specified in the decl-specifier-seq,
10626 issue an error message. */
10627 if (declspecs->multiple_types_p)
10628 {
10629 error ("two or more data types in declaration of %qs", name);
10630 return error_mark_node;
10631 }
10632
10633 if (declspecs->conflicting_specifiers_p)
10634 {
10635 error ("conflicting specifiers in declaration of %qs", name);
10636 return error_mark_node;
10637 }
10638
10639 /* Extract the basic type from the decl-specifier-seq. */
10640 type = declspecs->type;
10641 if (type == error_mark_node)
10642 {
10643 type = NULL_TREE;
10644 type_was_error_mark_node = true;
10645 }
10646 cp_warn_deprecated_use (type);
10647 if (type && TREE_CODE (type) == TYPE_DECL)
10648 {
10649 typedef_decl = type;
10650 type = TREE_TYPE (typedef_decl);
10651 if (DECL_ARTIFICIAL (typedef_decl))
10652 cp_warn_deprecated_use (type);
10653 }
10654 /* No type at all: default to `int', and set DEFAULTED_INT
10655 because it was not a user-defined typedef. */
10656 if (type == NULL_TREE)
10657 {
10658 if (signed_p || unsigned_p || long_p || short_p)
10659 {
10660 /* These imply 'int'. */
10661 type = integer_type_node;
10662 defaulted_int = 1;
10663 }
10664 /* If we just have "complex", it is equivalent to "complex double". */
10665 else if (!longlong && !explicit_intN
10666 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10667 {
10668 type = double_type_node;
10669 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10670 "ISO C++ does not support plain %<complex%> meaning "
10671 "%<double complex%>");
10672 }
10673 }
10674 /* Gather flags. */
10675 explicit_int = declspecs->explicit_int_p;
10676 explicit_char = declspecs->explicit_char_p;
10677
10678 #if 0
10679 /* See the code below that used this. */
10680 if (typedef_decl)
10681 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10682 #endif
10683 typedef_type = type;
10684
10685 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10686 ctor_return_type = TREE_TYPE (dname);
10687 else
10688 ctor_return_type = ctype;
10689
10690 if (sfk != sfk_none)
10691 {
10692 type = check_special_function_return_type (sfk, type,
10693 ctor_return_type,
10694 type_quals,
10695 declspecs->locations);
10696 type_quals = TYPE_UNQUALIFIED;
10697 }
10698 else if (type == NULL_TREE)
10699 {
10700 int is_main;
10701
10702 explicit_int = -1;
10703
10704 /* We handle `main' specially here, because 'main () { }' is so
10705 common. With no options, it is allowed. With -Wreturn-type,
10706 it is a warning. It is only an error with -pedantic-errors. */
10707 is_main = (funcdef_flag
10708 && dname && identifier_p (dname)
10709 && MAIN_NAME_P (dname)
10710 && ctype == NULL_TREE
10711 && in_namespace == NULL_TREE
10712 && current_namespace == global_namespace);
10713
10714 if (type_was_error_mark_node)
10715 /* We've already issued an error, don't complain more. */;
10716 else if (in_system_header_at (input_location) || flag_ms_extensions)
10717 /* Allow it, sigh. */;
10718 else if (! is_main)
10719 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10720 else if (pedantic)
10721 pedwarn (input_location, OPT_Wpedantic,
10722 "ISO C++ forbids declaration of %qs with no type", name);
10723 else
10724 warning (OPT_Wreturn_type,
10725 "ISO C++ forbids declaration of %qs with no type", name);
10726
10727 if (type_was_error_mark_node && template_parm_flag)
10728 /* FIXME we should be able to propagate the error_mark_node as is
10729 for other contexts too. */
10730 type = error_mark_node;
10731 else
10732 type = integer_type_node;
10733 }
10734
10735 ctype = NULL_TREE;
10736
10737 if (explicit_intN)
10738 {
10739 if (! int_n_enabled_p[declspecs->int_n_idx])
10740 {
10741 error ("%<__int%d%> is not supported by this target",
10742 int_n_data[declspecs->int_n_idx].bitsize);
10743 explicit_intN = false;
10744 }
10745 else if (pedantic && ! in_system_header_at (input_location))
10746 pedwarn (input_location, OPT_Wpedantic,
10747 "ISO C++ does not support %<__int%d%> for %qs",
10748 int_n_data[declspecs->int_n_idx].bitsize, name);
10749 }
10750
10751 /* Now process the modifiers that were specified
10752 and check for invalid combinations. */
10753
10754 /* Long double is a special combination. */
10755 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10756 {
10757 long_p = false;
10758 type = cp_build_qualified_type (long_double_type_node,
10759 cp_type_quals (type));
10760 }
10761
10762 /* Check all other uses of type modifiers. */
10763
10764 if (unsigned_p || signed_p || long_p || short_p)
10765 {
10766 location_t loc;
10767 const char *key;
10768 if (unsigned_p)
10769 {
10770 key = "unsigned";
10771 loc = declspecs->locations[ds_unsigned];
10772 }
10773 else if (signed_p)
10774 {
10775 key = "signed";
10776 loc = declspecs->locations[ds_signed];
10777 }
10778 else if (longlong)
10779 {
10780 key = "long long";
10781 loc = declspecs->locations[ds_long_long];
10782 }
10783 else if (long_p)
10784 {
10785 key = "long";
10786 loc = declspecs->locations[ds_long];
10787 }
10788 else /* if (short_p) */
10789 {
10790 key = "short";
10791 loc = declspecs->locations[ds_short];
10792 }
10793
10794 int ok = 0;
10795
10796 if (signed_p && unsigned_p)
10797 {
10798 gcc_rich_location richloc (declspecs->locations[ds_signed]);
10799 richloc.add_range (declspecs->locations[ds_unsigned]);
10800 error_at (&richloc,
10801 "%<signed%> and %<unsigned%> specified together");
10802 }
10803 else if (long_p && short_p)
10804 {
10805 gcc_rich_location richloc (declspecs->locations[ds_long]);
10806 richloc.add_range (declspecs->locations[ds_short]);
10807 error_at (&richloc, "%<long%> and %<short%> specified together");
10808 }
10809 else if (TREE_CODE (type) != INTEGER_TYPE
10810 || type == char8_type_node
10811 || type == char16_type_node
10812 || type == char32_type_node
10813 || ((long_p || short_p)
10814 && (explicit_char || explicit_intN)))
10815 error_at (loc, "%qs specified with %qT", key, type);
10816 else if (!explicit_int && !defaulted_int
10817 && !explicit_char && !explicit_intN)
10818 {
10819 if (typedef_decl)
10820 {
10821 pedwarn (loc, OPT_Wpedantic, "%qs specified with %qT",
10822 key, type);
10823 ok = !flag_pedantic_errors;
10824 }
10825 else if (declspecs->decltype_p)
10826 error_at (loc, "%qs specified with %<decltype%>", key);
10827 else
10828 error_at (loc, "%qs specified with %<typeof%>", key);
10829 }
10830 else
10831 ok = 1;
10832
10833 /* Discard the type modifiers if they are invalid. */
10834 if (! ok)
10835 {
10836 unsigned_p = false;
10837 signed_p = false;
10838 long_p = false;
10839 short_p = false;
10840 longlong = 0;
10841 }
10842 }
10843
10844 /* Decide whether an integer type is signed or not.
10845 Optionally treat bitfields as signed by default. */
10846 if (unsigned_p
10847 /* [class.bit]
10848
10849 It is implementation-defined whether a plain (neither
10850 explicitly signed or unsigned) char, short, int, or long
10851 bit-field is signed or unsigned.
10852
10853 Naturally, we extend this to long long as well. Note that
10854 this does not include wchar_t. */
10855 || (bitfield && !flag_signed_bitfields
10856 && !signed_p
10857 /* A typedef for plain `int' without `signed' can be
10858 controlled just like plain `int', but a typedef for
10859 `signed int' cannot be so controlled. */
10860 && !(typedef_decl
10861 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10862 && TREE_CODE (type) == INTEGER_TYPE
10863 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10864 {
10865 if (explicit_intN)
10866 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10867 else if (longlong)
10868 type = long_long_unsigned_type_node;
10869 else if (long_p)
10870 type = long_unsigned_type_node;
10871 else if (short_p)
10872 type = short_unsigned_type_node;
10873 else if (type == char_type_node)
10874 type = unsigned_char_type_node;
10875 else if (typedef_decl)
10876 type = unsigned_type_for (type);
10877 else
10878 type = unsigned_type_node;
10879 }
10880 else if (signed_p && type == char_type_node)
10881 type = signed_char_type_node;
10882 else if (explicit_intN)
10883 type = int_n_trees[declspecs->int_n_idx].signed_type;
10884 else if (longlong)
10885 type = long_long_integer_type_node;
10886 else if (long_p)
10887 type = long_integer_type_node;
10888 else if (short_p)
10889 type = short_integer_type_node;
10890
10891 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10892 {
10893 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10894 error ("complex invalid for %qs", name);
10895 /* If a modifier is specified, the resulting complex is the complex
10896 form of TYPE. E.g, "complex short" is "complex short int". */
10897 else if (type == integer_type_node)
10898 type = complex_integer_type_node;
10899 else if (type == float_type_node)
10900 type = complex_float_type_node;
10901 else if (type == double_type_node)
10902 type = complex_double_type_node;
10903 else if (type == long_double_type_node)
10904 type = complex_long_double_type_node;
10905 else
10906 type = build_complex_type (type);
10907 }
10908
10909 /* If we're using the injected-class-name to form a compound type or a
10910 declaration, replace it with the underlying class so we don't get
10911 redundant typedefs in the debug output. But if we are returning the
10912 type unchanged, leave it alone so that it's available to
10913 maybe_get_template_decl_from_type_decl. */
10914 if (CLASS_TYPE_P (type)
10915 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10916 && type == TREE_TYPE (TYPE_NAME (type))
10917 && (declarator || type_quals))
10918 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10919
10920 type_quals |= cp_type_quals (type);
10921 type = cp_build_qualified_type_real
10922 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10923 || declspecs->decltype_p)
10924 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10925 /* We might have ignored or rejected some of the qualifiers. */
10926 type_quals = cp_type_quals (type);
10927
10928 if (cxx_dialect >= cxx17 && type && is_auto (type)
10929 && innermost_code != cdk_function
10930 && id_declarator && declarator != id_declarator)
10931 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10932 {
10933 error_at (typespec_loc, "template placeholder type %qT must be followed "
10934 "by a simple declarator-id", type);
10935 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10936 }
10937
10938 staticp = 0;
10939 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10940 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10941 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10942
10943 storage_class = declspecs->storage_class;
10944 if (storage_class == sc_static)
10945 staticp = 1 + (decl_context == FIELD);
10946
10947 if (virtualp)
10948 {
10949 if (staticp == 2)
10950 {
10951 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
10952 richloc.add_range (declspecs->locations[ds_storage_class]);
10953 error_at (&richloc, "member %qD cannot be declared both %<virtual%> "
10954 "and %<static%>", dname);
10955 storage_class = sc_none;
10956 staticp = 0;
10957 }
10958 if (constexpr_p && cxx_dialect < cxx2a)
10959 {
10960 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
10961 richloc.add_range (declspecs->locations[ds_constexpr]);
10962 pedwarn (&richloc, OPT_Wpedantic, "member %qD can be declared both "
10963 "%<virtual%> and %<constexpr%> only in -std=c++2a or "
10964 "-std=gnu++2a", dname);
10965 }
10966 }
10967 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10968
10969 /* Issue errors about use of storage classes for parameters. */
10970 if (decl_context == PARM)
10971 {
10972 if (typedef_p)
10973 {
10974 error_at (declspecs->locations[ds_typedef],
10975 "typedef declaration invalid in parameter declaration");
10976 return error_mark_node;
10977 }
10978 else if (template_parm_flag && storage_class != sc_none)
10979 {
10980 error_at (min_location (declspecs->locations[ds_thread],
10981 declspecs->locations[ds_storage_class]),
10982 "storage class specified for template parameter %qs",
10983 name);
10984 return error_mark_node;
10985 }
10986 else if (storage_class == sc_static
10987 || storage_class == sc_extern
10988 || thread_p)
10989 {
10990 error_at (min_location (declspecs->locations[ds_thread],
10991 declspecs->locations[ds_storage_class]),
10992 "storage class specified for parameter %qs", name);
10993 return error_mark_node;
10994 }
10995
10996 /* Function parameters cannot be concept. */
10997 if (concept_p)
10998 error_at (declspecs->locations[ds_concept],
10999 "a parameter cannot be declared %<concept%>");
11000 /* Function parameters cannot be constexpr. If we saw one, moan
11001 and pretend it wasn't there. */
11002 else if (constexpr_p)
11003 {
11004 error_at (declspecs->locations[ds_constexpr],
11005 "a parameter cannot be declared %<constexpr%>");
11006 constexpr_p = 0;
11007 }
11008 }
11009
11010 /* Give error if `virtual' is used outside of class declaration. */
11011 if (virtualp
11012 && (current_class_name == NULL_TREE || decl_context != FIELD))
11013 {
11014 error_at (declspecs->locations[ds_virtual],
11015 "%<virtual%> outside class declaration");
11016 virtualp = 0;
11017 }
11018
11019 if (innermost_code == cdk_decomp)
11020 {
11021 location_t loc = (declarator->kind == cdk_reference
11022 ? declarator->declarator->id_loc : declarator->id_loc);
11023 if (inlinep)
11024 error_at (declspecs->locations[ds_inline],
11025 "structured binding declaration cannot be %<inline%>");
11026 if (typedef_p)
11027 error_at (declspecs->locations[ds_typedef],
11028 "structured binding declaration cannot be %<typedef%>");
11029 if (constexpr_p)
11030 error_at (declspecs->locations[ds_constexpr], "structured "
11031 "binding declaration cannot be %<constexpr%>");
11032 if (thread_p)
11033 error_at (declspecs->locations[ds_thread],
11034 "structured binding declaration cannot be %qs",
11035 declspecs->gnu_thread_keyword_p
11036 ? "__thread" : "thread_local");
11037 if (concept_p)
11038 error_at (declspecs->locations[ds_concept],
11039 "structured binding declaration cannot be %<concept%>");
11040 switch (storage_class)
11041 {
11042 case sc_none:
11043 break;
11044 case sc_register:
11045 error_at (loc, "structured binding declaration cannot be "
11046 "%<register%>");
11047 break;
11048 case sc_static:
11049 error_at (loc, "structured binding declaration cannot be "
11050 "%<static%>");
11051 break;
11052 case sc_extern:
11053 error_at (loc, "structured binding declaration cannot be "
11054 "%<extern%>");
11055 break;
11056 case sc_mutable:
11057 error_at (loc, "structured binding declaration cannot be "
11058 "%<mutable%>");
11059 break;
11060 case sc_auto:
11061 error_at (loc, "structured binding declaration cannot be "
11062 "C++98 %<auto%>");
11063 break;
11064 default:
11065 gcc_unreachable ();
11066 }
11067 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
11068 || TYPE_IDENTIFIER (type) != auto_identifier)
11069 {
11070 if (type != error_mark_node)
11071 {
11072 error_at (loc, "structured binding declaration cannot have "
11073 "type %qT", type);
11074 inform (loc,
11075 "type must be cv-qualified %<auto%> or reference to "
11076 "cv-qualified %<auto%>");
11077 }
11078 type = build_qualified_type (make_auto (), type_quals);
11079 declspecs->type = type;
11080 }
11081 inlinep = 0;
11082 typedef_p = 0;
11083 constexpr_p = 0;
11084 thread_p = 0;
11085 concept_p = 0;
11086 storage_class = sc_none;
11087 staticp = 0;
11088 declspecs->storage_class = sc_none;
11089 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
11090 }
11091
11092 /* Static anonymous unions are dealt with here. */
11093 if (staticp && decl_context == TYPENAME
11094 && declspecs->type
11095 && ANON_AGGR_TYPE_P (declspecs->type))
11096 decl_context = FIELD;
11097
11098 /* Warn about storage classes that are invalid for certain
11099 kinds of declarations (parameters, typenames, etc.). */
11100 if (thread_p
11101 && ((storage_class
11102 && storage_class != sc_extern
11103 && storage_class != sc_static)
11104 || typedef_p))
11105 {
11106 error ("multiple storage classes in declaration of %qs", name);
11107 thread_p = false;
11108 }
11109 if (decl_context != NORMAL
11110 && ((storage_class != sc_none
11111 && storage_class != sc_mutable)
11112 || thread_p))
11113 {
11114 if ((decl_context == PARM || decl_context == CATCHPARM)
11115 && (storage_class == sc_register
11116 || storage_class == sc_auto))
11117 ;
11118 else if (typedef_p)
11119 ;
11120 else if (decl_context == FIELD
11121 /* C++ allows static class elements. */
11122 && storage_class == sc_static)
11123 /* C++ also allows inlines and signed and unsigned elements,
11124 but in those cases we don't come in here. */
11125 ;
11126 else
11127 {
11128 location_t loc
11129 = min_location (declspecs->locations[ds_thread],
11130 declspecs->locations[ds_storage_class]);
11131 if (decl_context == FIELD)
11132 error_at (loc, "storage class specified for %qs", name);
11133 else if (decl_context == PARM || decl_context == CATCHPARM)
11134 error_at (loc, "storage class specified for parameter %qs", name);
11135 else
11136 error_at (loc, "storage class specified for typename");
11137 if (storage_class == sc_register
11138 || storage_class == sc_auto
11139 || storage_class == sc_extern
11140 || thread_p)
11141 storage_class = sc_none;
11142 }
11143 }
11144 else if (storage_class == sc_extern && funcdef_flag
11145 && ! toplevel_bindings_p ())
11146 error ("nested function %qs declared %<extern%>", name);
11147 else if (toplevel_bindings_p ())
11148 {
11149 if (storage_class == sc_auto)
11150 error ("top-level declaration of %qs specifies %<auto%>", name);
11151 }
11152 else if (thread_p
11153 && storage_class != sc_extern
11154 && storage_class != sc_static)
11155 {
11156 if (declspecs->gnu_thread_keyword_p)
11157 pedwarn (declspecs->locations[ds_thread],
11158 0, "function-scope %qs implicitly auto and "
11159 "declared %<__thread%>", name);
11160
11161 /* When thread_local is applied to a variable of block scope the
11162 storage-class-specifier static is implied if it does not appear
11163 explicitly. */
11164 storage_class = declspecs->storage_class = sc_static;
11165 staticp = 1;
11166 }
11167
11168 if (storage_class && friendp)
11169 {
11170 error_at (min_location (declspecs->locations[ds_thread],
11171 declspecs->locations[ds_storage_class]),
11172 "storage class specifiers invalid in friend function "
11173 "declarations");
11174 storage_class = sc_none;
11175 staticp = 0;
11176 }
11177
11178 if (!id_declarator)
11179 unqualified_id = NULL_TREE;
11180 else
11181 {
11182 unqualified_id = id_declarator->u.id.unqualified_name;
11183 switch (TREE_CODE (unqualified_id))
11184 {
11185 case BIT_NOT_EXPR:
11186 unqualified_id = TREE_OPERAND (unqualified_id, 0);
11187 if (TYPE_P (unqualified_id))
11188 unqualified_id = constructor_name (unqualified_id);
11189 break;
11190
11191 case IDENTIFIER_NODE:
11192 case TEMPLATE_ID_EXPR:
11193 break;
11194
11195 default:
11196 gcc_unreachable ();
11197 }
11198 }
11199
11200 if (declspecs->std_attributes)
11201 {
11202 location_t attr_loc = declspecs->locations[ds_std_attribute];
11203 if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
11204 inform (attr_loc, "an attribute that appertains to a type-specifier "
11205 "is ignored");
11206 }
11207
11208 /* Determine the type of the entity declared by recurring on the
11209 declarator. */
11210 for (; declarator; declarator = declarator->declarator)
11211 {
11212 const cp_declarator *inner_declarator;
11213 tree attrs;
11214
11215 if (type == error_mark_node)
11216 return error_mark_node;
11217
11218 attrs = declarator->attributes;
11219 if (attrs)
11220 {
11221 int attr_flags;
11222
11223 attr_flags = 0;
11224 if (declarator == NULL || declarator->kind == cdk_id)
11225 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
11226 if (declarator->kind == cdk_function)
11227 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
11228 if (declarator->kind == cdk_array)
11229 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
11230 returned_attrs = decl_attributes (&type,
11231 chainon (returned_attrs, attrs),
11232 attr_flags);
11233 }
11234
11235 inner_declarator = declarator->declarator;
11236
11237 /* We don't want to warn in parameter context because we don't
11238 yet know if the parse will succeed, and this might turn out
11239 to be a constructor call. */
11240 if (decl_context != PARM
11241 && decl_context != TYPENAME
11242 && !typedef_p
11243 && declarator->parenthesized != UNKNOWN_LOCATION
11244 /* If the type is class-like and the inner name used a
11245 global namespace qualifier, we need the parens.
11246 Unfortunately all we can tell is whether a qualified name
11247 was used or not. */
11248 && !(inner_declarator
11249 && inner_declarator->kind == cdk_id
11250 && inner_declarator->u.id.qualifying_scope
11251 && (MAYBE_CLASS_TYPE_P (type)
11252 || TREE_CODE (type) == ENUMERAL_TYPE)))
11253 warning_at (declarator->parenthesized, OPT_Wparentheses,
11254 "unnecessary parentheses in declaration of %qs", name);
11255 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
11256 break;
11257
11258 switch (declarator->kind)
11259 {
11260 case cdk_array:
11261 type = create_array_type_for_decl (dname, type,
11262 declarator->u.array.bounds,
11263 declarator->id_loc);
11264 if (!valid_array_size_p (input_location, type, dname))
11265 type = error_mark_node;
11266
11267 if (declarator->std_attributes)
11268 /* [dcl.array]/1:
11269
11270 The optional attribute-specifier-seq appertains to the
11271 array. */
11272 returned_attrs = chainon (returned_attrs,
11273 declarator->std_attributes);
11274 break;
11275
11276 case cdk_function:
11277 {
11278 tree arg_types;
11279 int funcdecl_p;
11280
11281 /* Declaring a function type. */
11282
11283 input_location = declspecs->locations[ds_type_spec];
11284 abstract_virtuals_error (ACU_RETURN, type);
11285 input_location = saved_loc;
11286
11287 /* Pick up type qualifiers which should be applied to `this'. */
11288 memfn_quals = declarator->u.function.qualifiers;
11289 /* Pick up virt-specifiers. */
11290 virt_specifiers = declarator->u.function.virt_specifiers;
11291 /* And ref-qualifier, too */
11292 rqual = declarator->u.function.ref_qualifier;
11293 /* And tx-qualifier. */
11294 tree tx_qual = declarator->u.function.tx_qualifier;
11295 /* Pick up the exception specifications. */
11296 raises = declarator->u.function.exception_specification;
11297 /* If the exception-specification is ill-formed, let's pretend
11298 there wasn't one. */
11299 if (raises == error_mark_node)
11300 raises = NULL_TREE;
11301
11302 if (reqs)
11303 error_at (location_of (reqs), "requires-clause on return type");
11304 reqs = declarator->u.function.requires_clause;
11305
11306 /* Say it's a definition only for the CALL_EXPR
11307 closest to the identifier. */
11308 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
11309
11310 /* Handle a late-specified return type. */
11311 tree late_return_type = declarator->u.function.late_return_type;
11312 if (funcdecl_p
11313 /* This is the case e.g. for
11314 using T = auto () -> int. */
11315 || inner_declarator == NULL)
11316 {
11317 if (tree auto_node = type_uses_auto (type))
11318 {
11319 if (!late_return_type)
11320 {
11321 if (current_class_type
11322 && LAMBDA_TYPE_P (current_class_type))
11323 /* OK for C++11 lambdas. */;
11324 else if (cxx_dialect < cxx14)
11325 {
11326 error_at (typespec_loc, "%qs function uses "
11327 "%<auto%> type specifier without "
11328 "trailing return type", name);
11329 inform (typespec_loc,
11330 "deduced return type only available "
11331 "with -std=c++14 or -std=gnu++14");
11332 }
11333 else if (virtualp)
11334 {
11335 error_at (typespec_loc, "virtual function "
11336 "cannot have deduced return type");
11337 virtualp = false;
11338 }
11339 }
11340 else if (!is_auto (type) && sfk != sfk_conversion)
11341 {
11342 error_at (typespec_loc, "%qs function with trailing "
11343 "return type has %qT as its type rather "
11344 "than plain %<auto%>", name, type);
11345 return error_mark_node;
11346 }
11347 else if (is_auto (type) && AUTO_IS_DECLTYPE (type))
11348 {
11349 if (funcdecl_p)
11350 error_at (typespec_loc,
11351 "%qs function with trailing return type "
11352 "has %<decltype(auto)%> as its type "
11353 "rather than plain %<auto%>", name);
11354 else
11355 error_at (typespec_loc,
11356 "invalid use of %<decltype(auto)%>");
11357 return error_mark_node;
11358 }
11359 tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
11360 if (!tmpl)
11361 if (tree late_auto = type_uses_auto (late_return_type))
11362 tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
11363 if (tmpl && funcdecl_p)
11364 {
11365 if (!dguide_name_p (unqualified_id))
11366 {
11367 error_at (declarator->id_loc, "deduced class "
11368 "type %qD in function return type",
11369 DECL_NAME (tmpl));
11370 inform (DECL_SOURCE_LOCATION (tmpl),
11371 "%qD declared here", tmpl);
11372 return error_mark_node;
11373 }
11374 else if (!late_return_type)
11375 {
11376 error_at (declarator->id_loc, "deduction guide "
11377 "for %qT must have trailing return "
11378 "type", TREE_TYPE (tmpl));
11379 inform (DECL_SOURCE_LOCATION (tmpl),
11380 "%qD declared here", tmpl);
11381 return error_mark_node;
11382 }
11383 else if (CLASS_TYPE_P (late_return_type)
11384 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11385 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11386 == tmpl))
11387 /* OK */;
11388 else
11389 error ("trailing return type %qT of deduction guide "
11390 "is not a specialization of %qT",
11391 late_return_type, TREE_TYPE (tmpl));
11392 }
11393 }
11394 else if (late_return_type
11395 && sfk != sfk_conversion)
11396 {
11397 if (cxx_dialect < cxx11)
11398 /* Not using maybe_warn_cpp0x because this should
11399 always be an error. */
11400 error_at (typespec_loc,
11401 "trailing return type only available "
11402 "with -std=c++11 or -std=gnu++11");
11403 else
11404 error_at (typespec_loc, "%qs function with trailing "
11405 "return type not declared with %<auto%> "
11406 "type specifier", name);
11407 return error_mark_node;
11408 }
11409 }
11410 type = splice_late_return_type (type, late_return_type);
11411 if (type == error_mark_node)
11412 return error_mark_node;
11413
11414 if (late_return_type)
11415 {
11416 late_return_type_p = true;
11417 type_quals = cp_type_quals (type);
11418 }
11419
11420 if (type_quals != TYPE_UNQUALIFIED)
11421 {
11422 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11423 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11424 "qualifiers ignored on function return type");
11425 /* We now know that the TYPE_QUALS don't apply to the
11426 decl, but to its return type. */
11427 type_quals = TYPE_UNQUALIFIED;
11428 }
11429
11430 /* Error about some types functions can't return. */
11431
11432 if (TREE_CODE (type) == FUNCTION_TYPE)
11433 {
11434 error_at (typespec_loc, "%qs declared as function returning "
11435 "a function", name);
11436 return error_mark_node;
11437 }
11438 if (TREE_CODE (type) == ARRAY_TYPE)
11439 {
11440 error_at (typespec_loc, "%qs declared as function returning "
11441 "an array", name);
11442 return error_mark_node;
11443 }
11444
11445 if (ctype == NULL_TREE
11446 && decl_context == FIELD
11447 && funcdecl_p
11448 && friendp == 0)
11449 ctype = current_class_type;
11450
11451 if (ctype && (sfk == sfk_constructor
11452 || sfk == sfk_destructor))
11453 {
11454 /* We are within a class's scope. If our declarator name
11455 is the same as the class name, and we are defining
11456 a function, then it is a constructor/destructor, and
11457 therefore returns a void type. */
11458
11459 /* ISO C++ 12.4/2. A destructor may not be declared
11460 const or volatile. A destructor may not be static.
11461 A destructor may not be declared with ref-qualifier.
11462
11463 ISO C++ 12.1. A constructor may not be declared
11464 const or volatile. A constructor may not be
11465 virtual. A constructor may not be static.
11466 A constructor may not be declared with ref-qualifier. */
11467 if (staticp == 2)
11468 error ((flags == DTOR_FLAG)
11469 ? G_("destructor cannot be static member function")
11470 : G_("constructor cannot be static member function"));
11471 if (memfn_quals)
11472 {
11473 error ((flags == DTOR_FLAG)
11474 ? G_("destructors may not be cv-qualified")
11475 : G_("constructors may not be cv-qualified"));
11476 memfn_quals = TYPE_UNQUALIFIED;
11477 }
11478
11479 if (rqual)
11480 {
11481 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11482 error ((flags == DTOR_FLAG)
11483 ? G_("destructors may not be ref-qualified")
11484 : G_("constructors may not be ref-qualified"));
11485 rqual = REF_QUAL_NONE;
11486 }
11487
11488 if (decl_context == FIELD
11489 && !member_function_or_else (ctype,
11490 current_class_type,
11491 flags))
11492 return error_mark_node;
11493
11494 if (flags != DTOR_FLAG)
11495 {
11496 /* It's a constructor. */
11497 if (explicitp == 1)
11498 explicitp = 2;
11499 if (virtualp)
11500 {
11501 permerror (declspecs->locations[ds_virtual],
11502 "constructors cannot be declared %<virtual%>");
11503 virtualp = 0;
11504 }
11505 if (decl_context == FIELD
11506 && sfk != sfk_constructor)
11507 return error_mark_node;
11508 }
11509 if (decl_context == FIELD)
11510 staticp = 0;
11511 }
11512 else if (friendp)
11513 {
11514 if (virtualp)
11515 {
11516 /* Cannot be both friend and virtual. */
11517 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
11518 richloc.add_range (declspecs->locations[ds_friend]);
11519 error_at (&richloc, "virtual functions cannot be friends");
11520 friendp = 0;
11521 }
11522 if (decl_context == NORMAL)
11523 error ("friend declaration not in class definition");
11524 if (current_function_decl && funcdef_flag)
11525 {
11526 error ("can%'t define friend function %qs in a local "
11527 "class definition", name);
11528 friendp = 0;
11529 }
11530 }
11531 else if (ctype && sfk == sfk_conversion)
11532 {
11533 if (explicitp == 1)
11534 {
11535 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11536 explicitp = 2;
11537 }
11538 if (late_return_type_p)
11539 error ("a conversion function cannot have a trailing return type");
11540 }
11541 else if (sfk == sfk_deduction_guide)
11542 {
11543 if (explicitp == 1)
11544 explicitp = 2;
11545 }
11546
11547 tree pushed_scope = NULL_TREE;
11548 if (funcdecl_p
11549 && decl_context != FIELD
11550 && inner_declarator->u.id.qualifying_scope
11551 && CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
11552 pushed_scope
11553 = push_scope (inner_declarator->u.id.qualifying_scope);
11554
11555 arg_types = grokparms (declarator->u.function.parameters, &parms);
11556
11557 if (pushed_scope)
11558 pop_scope (pushed_scope);
11559
11560 if (inner_declarator
11561 && inner_declarator->kind == cdk_id
11562 && inner_declarator->u.id.sfk == sfk_destructor
11563 && arg_types != void_list_node)
11564 {
11565 error ("destructors may not have parameters");
11566 arg_types = void_list_node;
11567 parms = NULL_TREE;
11568 }
11569
11570 type = build_function_type (type, arg_types);
11571
11572 tree attrs = declarator->std_attributes;
11573 if (tx_qual)
11574 {
11575 tree att = build_tree_list (tx_qual, NULL_TREE);
11576 /* transaction_safe applies to the type, but
11577 transaction_safe_dynamic applies to the function. */
11578 if (is_attribute_p ("transaction_safe", tx_qual))
11579 attrs = chainon (attrs, att);
11580 else
11581 returned_attrs = chainon (returned_attrs, att);
11582 }
11583 if (attrs)
11584 /* [dcl.fct]/2:
11585
11586 The optional attribute-specifier-seq appertains to
11587 the function type. */
11588 decl_attributes (&type, attrs, 0);
11589
11590 if (raises)
11591 type = build_exception_variant (type, raises);
11592 }
11593 break;
11594
11595 case cdk_pointer:
11596 case cdk_reference:
11597 case cdk_ptrmem:
11598 /* Filter out pointers-to-references and references-to-references.
11599 We can get these if a TYPE_DECL is used. */
11600
11601 if (TYPE_REF_P (type))
11602 {
11603 if (declarator->kind != cdk_reference)
11604 {
11605 error ("cannot declare pointer to %q#T", type);
11606 type = TREE_TYPE (type);
11607 }
11608
11609 /* In C++0x, we allow reference to reference declarations
11610 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11611 and template type arguments [14.3.1/4 temp.arg.type]. The
11612 check for direct reference to reference declarations, which
11613 are still forbidden, occurs below. Reasoning behind the change
11614 can be found in DR106, DR540, and the rvalue reference
11615 proposals. */
11616 else if (cxx_dialect == cxx98)
11617 {
11618 error ("cannot declare reference to %q#T", type);
11619 type = TREE_TYPE (type);
11620 }
11621 }
11622 else if (VOID_TYPE_P (type))
11623 {
11624 if (declarator->kind == cdk_reference)
11625 error ("cannot declare reference to %q#T", type);
11626 else if (declarator->kind == cdk_ptrmem)
11627 error ("cannot declare pointer to %q#T member", type);
11628 }
11629
11630 /* We now know that the TYPE_QUALS don't apply to the decl,
11631 but to the target of the pointer. */
11632 type_quals = TYPE_UNQUALIFIED;
11633
11634 /* This code used to handle METHOD_TYPE, but I don't think it's
11635 possible to get it here anymore. */
11636 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11637 if (declarator->kind == cdk_ptrmem
11638 && TREE_CODE (type) == FUNCTION_TYPE)
11639 {
11640 memfn_quals |= type_memfn_quals (type);
11641 type = build_memfn_type (type,
11642 declarator->u.pointer.class_type,
11643 memfn_quals,
11644 rqual);
11645 if (type == error_mark_node)
11646 return error_mark_node;
11647
11648 rqual = REF_QUAL_NONE;
11649 memfn_quals = TYPE_UNQUALIFIED;
11650 }
11651
11652 if (TREE_CODE (type) == FUNCTION_TYPE
11653 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11654 || type_memfn_rqual (type) != REF_QUAL_NONE))
11655 error (declarator->kind == cdk_reference
11656 ? G_("cannot declare reference to qualified function type %qT")
11657 : G_("cannot declare pointer to qualified function type %qT"),
11658 type);
11659
11660 /* When the pointed-to type involves components of variable size,
11661 care must be taken to ensure that the size evaluation code is
11662 emitted early enough to dominate all the possible later uses
11663 and late enough for the variables on which it depends to have
11664 been assigned.
11665
11666 This is expected to happen automatically when the pointed-to
11667 type has a name/declaration of it's own, but special attention
11668 is required if the type is anonymous.
11669
11670 We handle the NORMAL and FIELD contexts here by inserting a
11671 dummy statement that just evaluates the size at a safe point
11672 and ensures it is not deferred until e.g. within a deeper
11673 conditional context (c++/43555).
11674
11675 We expect nothing to be needed here for PARM or TYPENAME.
11676 Evaluating the size at this point for TYPENAME would
11677 actually be incorrect, as we might be in the middle of an
11678 expression with side effects on the pointed-to type size
11679 "arguments" prior to the pointer declaration point and the
11680 size evaluation could end up prior to the side effects. */
11681
11682 if (!TYPE_NAME (type)
11683 && (decl_context == NORMAL || decl_context == FIELD)
11684 && at_function_scope_p ()
11685 && variably_modified_type_p (type, NULL_TREE))
11686 {
11687 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11688 NULL_TREE, type);
11689 add_decl_expr (TYPE_NAME (type));
11690 }
11691
11692 if (declarator->kind == cdk_reference)
11693 {
11694 /* In C++0x, the type we are creating a reference to might be
11695 a typedef which is itself a reference type. In that case,
11696 we follow the reference collapsing rules in
11697 [7.1.3/8 dcl.typedef] to create the final reference type:
11698
11699 "If a typedef TD names a type that is a reference to a type
11700 T, an attempt to create the type 'lvalue reference to cv TD'
11701 creates the type 'lvalue reference to T,' while an attempt
11702 to create the type "rvalue reference to cv TD' creates the
11703 type TD."
11704 */
11705 if (VOID_TYPE_P (type))
11706 /* We already gave an error. */;
11707 else if (TYPE_REF_P (type))
11708 {
11709 if (declarator->u.reference.rvalue_ref)
11710 /* Leave type alone. */;
11711 else
11712 type = cp_build_reference_type (TREE_TYPE (type), false);
11713 }
11714 else
11715 type = cp_build_reference_type
11716 (type, declarator->u.reference.rvalue_ref);
11717
11718 /* In C++0x, we need this check for direct reference to
11719 reference declarations, which are forbidden by
11720 [8.3.2/5 dcl.ref]. Reference to reference declarations
11721 are only allowed indirectly through typedefs and template
11722 type arguments. Example:
11723
11724 void foo(int & &); // invalid ref-to-ref decl
11725
11726 typedef int & int_ref;
11727 void foo(int_ref &); // valid ref-to-ref decl
11728 */
11729 if (inner_declarator && inner_declarator->kind == cdk_reference)
11730 error ("cannot declare reference to %q#T, which is not "
11731 "a typedef or a template type argument", type);
11732 }
11733 else if (TREE_CODE (type) == METHOD_TYPE)
11734 type = build_ptrmemfunc_type (build_pointer_type (type));
11735 else if (declarator->kind == cdk_ptrmem)
11736 {
11737 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11738 != NAMESPACE_DECL);
11739 if (declarator->u.pointer.class_type == error_mark_node)
11740 /* We will already have complained. */
11741 type = error_mark_node;
11742 else
11743 type = build_ptrmem_type (declarator->u.pointer.class_type,
11744 type);
11745 }
11746 else
11747 type = build_pointer_type (type);
11748
11749 /* Process a list of type modifier keywords (such as
11750 const or volatile) that were given inside the `*' or `&'. */
11751
11752 if (declarator->u.pointer.qualifiers)
11753 {
11754 type
11755 = cp_build_qualified_type (type,
11756 declarator->u.pointer.qualifiers);
11757 type_quals = cp_type_quals (type);
11758 }
11759
11760 /* Apply C++11 attributes to the pointer, and not to the
11761 type pointed to. This is unlike what is done for GNU
11762 attributes above. It is to comply with [dcl.ptr]/1:
11763
11764 [the optional attribute-specifier-seq (7.6.1) appertains
11765 to the pointer and not to the object pointed to]. */
11766 if (declarator->std_attributes)
11767 decl_attributes (&type, declarator->std_attributes,
11768 0);
11769
11770 ctype = NULL_TREE;
11771 break;
11772
11773 case cdk_error:
11774 break;
11775
11776 default:
11777 gcc_unreachable ();
11778 }
11779 }
11780
11781 /* A `constexpr' specifier used in an object declaration declares
11782 the object as `const'. */
11783 if (constexpr_p && innermost_code != cdk_function)
11784 {
11785 /* DR1688 says that a `constexpr' specifier in combination with
11786 `volatile' is valid. */
11787
11788 if (!TYPE_REF_P (type))
11789 {
11790 type_quals |= TYPE_QUAL_CONST;
11791 type = cp_build_qualified_type (type, type_quals);
11792 }
11793 }
11794
11795 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11796 && TREE_CODE (type) != FUNCTION_TYPE
11797 && TREE_CODE (type) != METHOD_TYPE
11798 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11799 {
11800 error ("template-id %qD used as a declarator",
11801 unqualified_id);
11802 unqualified_id = dname;
11803 }
11804
11805 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11806 qualified with a class-name, turn it into a METHOD_TYPE, unless
11807 we know that the function is static. We take advantage of this
11808 opportunity to do other processing that pertains to entities
11809 explicitly declared to be class members. Note that if DECLARATOR
11810 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11811 would not have exited the loop above. */
11812 if (declarator
11813 && declarator->kind == cdk_id
11814 && declarator->u.id.qualifying_scope
11815 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11816 {
11817 ctype = declarator->u.id.qualifying_scope;
11818 ctype = TYPE_MAIN_VARIANT (ctype);
11819 template_count = num_template_headers_for_class (ctype);
11820
11821 if (ctype == current_class_type)
11822 {
11823 if (friendp)
11824 {
11825 permerror (input_location, "member functions are implicitly "
11826 "friends of their class");
11827 friendp = 0;
11828 }
11829 else
11830 permerror (declarator->id_loc,
11831 "extra qualification %<%T::%> on member %qs",
11832 ctype, name);
11833 }
11834 else if (/* If the qualifying type is already complete, then we
11835 can skip the following checks. */
11836 !COMPLETE_TYPE_P (ctype)
11837 && (/* If the function is being defined, then
11838 qualifying type must certainly be complete. */
11839 funcdef_flag
11840 /* A friend declaration of "T::f" is OK, even if
11841 "T" is a template parameter. But, if this
11842 function is not a friend, the qualifying type
11843 must be a class. */
11844 || (!friendp && !CLASS_TYPE_P (ctype))
11845 /* For a declaration, the type need not be
11846 complete, if either it is dependent (since there
11847 is no meaningful definition of complete in that
11848 case) or the qualifying class is currently being
11849 defined. */
11850 || !(dependent_type_p (ctype)
11851 || currently_open_class (ctype)))
11852 /* Check that the qualifying type is complete. */
11853 && !complete_type_or_else (ctype, NULL_TREE))
11854 return error_mark_node;
11855 else if (TREE_CODE (type) == FUNCTION_TYPE)
11856 {
11857 if (current_class_type
11858 && (!friendp || funcdef_flag || initialized))
11859 {
11860 error (funcdef_flag || initialized
11861 ? G_("cannot define member function %<%T::%s%> "
11862 "within %qT")
11863 : G_("cannot declare member function %<%T::%s%> "
11864 "within %qT"),
11865 ctype, name, current_class_type);
11866 return error_mark_node;
11867 }
11868 }
11869 else if (typedef_p && current_class_type)
11870 {
11871 error ("cannot declare member %<%T::%s%> within %qT",
11872 ctype, name, current_class_type);
11873 return error_mark_node;
11874 }
11875 }
11876
11877 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11878 ctype = current_class_type;
11879
11880 /* Now TYPE has the actual type. */
11881
11882 if (returned_attrs)
11883 {
11884 if (attrlist)
11885 *attrlist = chainon (returned_attrs, *attrlist);
11886 else
11887 attrlist = &returned_attrs;
11888 }
11889
11890 if (declarator
11891 && declarator->kind == cdk_id
11892 && declarator->std_attributes
11893 && attrlist != NULL)
11894 {
11895 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11896 a declarator-id appertains to the entity that is declared. */
11897 if (declarator->std_attributes != error_mark_node)
11898 *attrlist = chainon (*attrlist, declarator->std_attributes);
11899 else
11900 /* We should have already diagnosed the issue (c++/78344). */
11901 gcc_assert (seen_error ());
11902 }
11903
11904 /* Handle parameter packs. */
11905 if (parameter_pack_p)
11906 {
11907 if (decl_context == PARM)
11908 /* Turn the type into a pack expansion.*/
11909 type = make_pack_expansion (type);
11910 else
11911 error ("non-parameter %qs cannot be a parameter pack", name);
11912 }
11913
11914 if ((decl_context == FIELD || decl_context == PARM)
11915 && !processing_template_decl
11916 && variably_modified_type_p (type, NULL_TREE))
11917 {
11918 if (decl_context == FIELD)
11919 error ("data member may not have variably modified type %qT", type);
11920 else
11921 error ("parameter may not have variably modified type %qT", type);
11922 type = error_mark_node;
11923 }
11924
11925 if (explicitp == 1 || (explicitp && friendp))
11926 {
11927 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11928 in the declaration of a constructor or conversion function within
11929 a class definition. */
11930 if (!current_class_type)
11931 error_at (declspecs->locations[ds_explicit],
11932 "%<explicit%> outside class declaration");
11933 else if (friendp)
11934 error_at (declspecs->locations[ds_explicit],
11935 "%<explicit%> in friend declaration");
11936 else
11937 error_at (declspecs->locations[ds_explicit],
11938 "only declarations of constructors and conversion operators "
11939 "can be %<explicit%>");
11940 explicitp = 0;
11941 }
11942
11943 if (storage_class == sc_mutable)
11944 {
11945 location_t sloc = declspecs->locations[ds_storage_class];
11946 if (decl_context != FIELD || friendp)
11947 {
11948 error_at (sloc, "non-member %qs cannot be declared %<mutable%>",
11949 name);
11950 storage_class = sc_none;
11951 }
11952 else if (decl_context == TYPENAME || typedef_p)
11953 {
11954 error_at (sloc,
11955 "non-object member %qs cannot be declared %<mutable%>",
11956 name);
11957 storage_class = sc_none;
11958 }
11959 else if (TREE_CODE (type) == FUNCTION_TYPE
11960 || TREE_CODE (type) == METHOD_TYPE)
11961 {
11962 error_at (sloc, "function %qs cannot be declared %<mutable%>",
11963 name);
11964 storage_class = sc_none;
11965 }
11966 else if (staticp)
11967 {
11968 error_at (sloc, "%<static%> %qs cannot be declared %<mutable%>",
11969 name);
11970 storage_class = sc_none;
11971 }
11972 else if (type_quals & TYPE_QUAL_CONST)
11973 {
11974 error_at (sloc, "%<const%> %qs cannot be declared %<mutable%>",
11975 name);
11976 storage_class = sc_none;
11977 }
11978 else if (TYPE_REF_P (type))
11979 {
11980 permerror (sloc, "reference %qs cannot be declared %<mutable%>",
11981 name);
11982 storage_class = sc_none;
11983 }
11984 }
11985
11986 location_t loc = declarator ? declarator->id_loc : input_location;
11987
11988 /* If this is declaring a typedef name, return a TYPE_DECL. */
11989 if (typedef_p && decl_context != TYPENAME)
11990 {
11991 bool alias_p = decl_spec_seq_has_spec_p (declspecs, ds_alias);
11992 tree decl;
11993
11994 /* This declaration:
11995
11996 typedef void f(int) const;
11997
11998 declares a function type which is not a member of any
11999 particular class, but which is cv-qualified; for
12000 example "f S::*" declares a pointer to a const-qualified
12001 member function of S. We record the cv-qualification in the
12002 function type. */
12003 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
12004 {
12005 type = apply_memfn_quals (type, memfn_quals, rqual);
12006
12007 /* We have now dealt with these qualifiers. */
12008 memfn_quals = TYPE_UNQUALIFIED;
12009 rqual = REF_QUAL_NONE;
12010 }
12011
12012 if (type_uses_auto (type))
12013 {
12014 if (alias_p)
12015 error_at (declspecs->locations[ds_type_spec],
12016 "%<auto%> not allowed in alias declaration");
12017 else
12018 error_at (declspecs->locations[ds_type_spec],
12019 "typedef declared %<auto%>");
12020 type = error_mark_node;
12021 }
12022
12023 if (reqs)
12024 error_at (location_of (reqs), "requires-clause on typedef");
12025
12026 if (id_declarator && declarator->u.id.qualifying_scope)
12027 {
12028 error ("typedef name may not be a nested-name-specifier");
12029 type = error_mark_node;
12030 }
12031
12032 if (decl_context == FIELD)
12033 decl = build_lang_decl_loc (loc, TYPE_DECL, unqualified_id, type);
12034 else
12035 decl = build_decl (loc, TYPE_DECL, unqualified_id, type);
12036
12037 if (decl_context != FIELD)
12038 {
12039 if (!current_function_decl)
12040 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
12041 else if (DECL_MAYBE_IN_CHARGE_CDTOR_P (current_function_decl))
12042 /* The TYPE_DECL is "abstract" because there will be
12043 clones of this constructor/destructor, and there will
12044 be copies of this TYPE_DECL generated in those
12045 clones. The decloning optimization (for space) may
12046 revert this subsequently if it determines that
12047 the clones should share a common implementation. */
12048 DECL_ABSTRACT_P (decl) = true;
12049 }
12050 else if (current_class_type
12051 && constructor_name_p (unqualified_id, current_class_type))
12052 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
12053 "as enclosing class",
12054 unqualified_id);
12055
12056 /* If the user declares "typedef struct {...} foo" then the
12057 struct will have an anonymous name. Fill that name in now.
12058 Nothing can refer to it, so nothing needs know about the name
12059 change. */
12060 if (type != error_mark_node
12061 && unqualified_id
12062 && TYPE_NAME (type)
12063 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12064 && TYPE_UNNAMED_P (type)
12065 && declspecs->type_definition_p
12066 && attributes_naming_typedef_ok (*attrlist)
12067 && cp_type_quals (type) == TYPE_UNQUALIFIED)
12068 name_unnamed_type (type, decl);
12069
12070 if (signed_p
12071 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
12072 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
12073
12074 bad_specifiers (decl, BSP_TYPE, virtualp,
12075 memfn_quals != TYPE_UNQUALIFIED,
12076 inlinep, friendp, raises != NULL_TREE,
12077 declspecs->locations);
12078
12079 if (alias_p)
12080 /* Acknowledge that this was written:
12081 `using analias = atype;'. */
12082 TYPE_DECL_ALIAS_P (decl) = 1;
12083
12084 return decl;
12085 }
12086
12087 /* Detect the case of an array type of unspecified size
12088 which came, as such, direct from a typedef name.
12089 We must copy the type, so that the array's domain can be
12090 individually set by the object's initializer. */
12091
12092 if (type && typedef_type
12093 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
12094 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
12095 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12096
12097 /* Detect where we're using a typedef of function type to declare a
12098 function. PARMS will not be set, so we must create it now. */
12099
12100 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
12101 {
12102 tree decls = NULL_TREE;
12103 tree args;
12104
12105 for (args = TYPE_ARG_TYPES (type);
12106 args && args != void_list_node;
12107 args = TREE_CHAIN (args))
12108 {
12109 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
12110 TREE_VALUE (args));
12111
12112 DECL_CHAIN (decl) = decls;
12113 decls = decl;
12114 }
12115
12116 parms = nreverse (decls);
12117
12118 if (decl_context != TYPENAME)
12119 {
12120 /* The qualifiers on the function type become the qualifiers on
12121 the non-static member function. */
12122 memfn_quals |= type_memfn_quals (type);
12123 rqual = type_memfn_rqual (type);
12124 type_quals = TYPE_UNQUALIFIED;
12125 }
12126 }
12127
12128 /* If this is a type name (such as, in a cast or sizeof),
12129 compute the type and return it now. */
12130
12131 if (decl_context == TYPENAME)
12132 {
12133 /* Note that here we don't care about type_quals. */
12134
12135 /* Special case: "friend class foo" looks like a TYPENAME context. */
12136 if (friendp)
12137 {
12138 if (inlinep)
12139 {
12140 error ("%<inline%> specified for friend class declaration");
12141 inlinep = 0;
12142 }
12143
12144 if (!current_aggr)
12145 {
12146 /* Don't allow friend declaration without a class-key. */
12147 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12148 permerror (input_location, "template parameters cannot be friends");
12149 else if (TREE_CODE (type) == TYPENAME_TYPE)
12150 permerror (input_location, "friend declaration requires class-key, "
12151 "i.e. %<friend class %T::%D%>",
12152 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
12153 else
12154 permerror (input_location, "friend declaration requires class-key, "
12155 "i.e. %<friend %#T%>",
12156 type);
12157 }
12158
12159 /* Only try to do this stuff if we didn't already give up. */
12160 if (type != integer_type_node)
12161 {
12162 /* A friendly class? */
12163 if (current_class_type)
12164 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
12165 /*complain=*/true);
12166 else
12167 error ("trying to make class %qT a friend of global scope",
12168 type);
12169
12170 type = void_type_node;
12171 }
12172 }
12173 else if (memfn_quals || rqual)
12174 {
12175 if (ctype == NULL_TREE
12176 && TREE_CODE (type) == METHOD_TYPE)
12177 ctype = TYPE_METHOD_BASETYPE (type);
12178
12179 if (ctype)
12180 type = build_memfn_type (type, ctype, memfn_quals, rqual);
12181 /* Core issue #547: need to allow this in template type args.
12182 Allow it in general in C++11 for alias-declarations. */
12183 else if ((template_type_arg || cxx_dialect >= cxx11)
12184 && TREE_CODE (type) == FUNCTION_TYPE)
12185 type = apply_memfn_quals (type, memfn_quals, rqual);
12186 else
12187 error ("invalid qualifiers on non-member function type");
12188 }
12189
12190 if (reqs)
12191 error_at (location_of (reqs), "requires-clause on type-id");
12192
12193 return type;
12194 }
12195 else if (unqualified_id == NULL_TREE && decl_context != PARM
12196 && decl_context != CATCHPARM
12197 && TREE_CODE (type) != UNION_TYPE
12198 && ! bitfield
12199 && innermost_code != cdk_decomp)
12200 {
12201 error ("abstract declarator %qT used as declaration", type);
12202 return error_mark_node;
12203 }
12204
12205 if (!FUNC_OR_METHOD_TYPE_P (type))
12206 {
12207 /* Only functions may be declared using an operator-function-id. */
12208 if (dname && IDENTIFIER_ANY_OP_P (dname))
12209 {
12210 error ("declaration of %qD as non-function", dname);
12211 return error_mark_node;
12212 }
12213
12214 if (reqs)
12215 error_at (location_of (reqs),
12216 "requires-clause on declaration of non-function type %qT",
12217 type);
12218 }
12219
12220 /* We don't check parameter types here because we can emit a better
12221 error message later. */
12222 if (decl_context != PARM)
12223 {
12224 type = check_var_type (unqualified_id, type);
12225 if (type == error_mark_node)
12226 return error_mark_node;
12227 }
12228
12229 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
12230 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
12231
12232 if (decl_context == PARM || decl_context == CATCHPARM)
12233 {
12234 if (ctype || in_namespace)
12235 error ("cannot use %<::%> in parameter declaration");
12236
12237 if (type_uses_auto (type)
12238 && !(cxx_dialect >= cxx17 && template_parm_flag))
12239 {
12240 if (cxx_dialect >= cxx14)
12241 error ("%<auto%> parameter not permitted in this context");
12242 else
12243 error ("parameter declared %<auto%>");
12244 type = error_mark_node;
12245 }
12246
12247 /* A parameter declared as an array of T is really a pointer to T.
12248 One declared as a function is really a pointer to a function.
12249 One declared as a member is really a pointer to member. */
12250
12251 if (TREE_CODE (type) == ARRAY_TYPE)
12252 {
12253 /* Transfer const-ness of array into that of type pointed to. */
12254 type = build_pointer_type (TREE_TYPE (type));
12255 type_quals = TYPE_UNQUALIFIED;
12256 array_parameter_p = true;
12257 }
12258 else if (TREE_CODE (type) == FUNCTION_TYPE)
12259 type = build_pointer_type (type);
12260 }
12261
12262 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
12263 && !(unqualified_id
12264 && identifier_p (unqualified_id)
12265 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
12266 {
12267 cp_cv_quals real_quals = memfn_quals;
12268 if (cxx_dialect < cxx14 && constexpr_p
12269 && sfk != sfk_constructor && sfk != sfk_destructor)
12270 real_quals |= TYPE_QUAL_CONST;
12271 type = build_memfn_type (type, ctype, real_quals, rqual);
12272 }
12273
12274 {
12275 tree decl = NULL_TREE;
12276
12277 if (decl_context == PARM)
12278 {
12279 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
12280 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
12281
12282 bad_specifiers (decl, BSP_PARM, virtualp,
12283 memfn_quals != TYPE_UNQUALIFIED,
12284 inlinep, friendp, raises != NULL_TREE,
12285 declspecs->locations);
12286 }
12287 else if (decl_context == FIELD)
12288 {
12289 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
12290 if (tree auto_node = type_uses_auto (type))
12291 {
12292 location_t tloc = declspecs->locations[ds_type_spec];
12293 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12294 error_at (tloc, "invalid use of template-name %qE without an "
12295 "argument list",
12296 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
12297 else
12298 error_at (tloc, "non-static data member declared with "
12299 "placeholder %qT", auto_node);
12300 type = error_mark_node;
12301 }
12302
12303 /* The C99 flexible array extension. */
12304 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
12305 && TYPE_DOMAIN (type) == NULL_TREE)
12306 {
12307 if (ctype
12308 && (TREE_CODE (ctype) == UNION_TYPE
12309 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
12310 {
12311 error ("flexible array member in union");
12312 type = error_mark_node;
12313 }
12314 else
12315 {
12316 /* Array is a flexible member. */
12317 if (in_system_header_at (input_location))
12318 /* Do not warn on flexible array members in system
12319 headers because glibc uses them. */;
12320 else if (name && declarator)
12321 pedwarn (declarator->id_loc, OPT_Wpedantic,
12322 "ISO C++ forbids flexible array member %qs", name);
12323 else
12324 pedwarn (input_location, OPT_Wpedantic,
12325 "ISO C++ forbids flexible array members");
12326
12327 /* Flexible array member has a null domain. */
12328 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12329 }
12330 }
12331
12332 if (type == error_mark_node)
12333 {
12334 /* Happens when declaring arrays of sizes which
12335 are error_mark_node, for example. */
12336 decl = NULL_TREE;
12337 }
12338 else if (in_namespace && !friendp)
12339 {
12340 /* Something like struct S { int N::j; }; */
12341 error ("invalid use of %<::%>");
12342 return error_mark_node;
12343 }
12344 else if (FUNC_OR_METHOD_TYPE_P (type) && unqualified_id)
12345 {
12346 int publicp = 0;
12347 tree function_context;
12348
12349 if (friendp == 0)
12350 {
12351 /* This should never happen in pure C++ (the check
12352 could be an assert). It could happen in
12353 Objective-C++ if someone writes invalid code that
12354 uses a function declaration for an instance
12355 variable or property (instance variables and
12356 properties are parsed as FIELD_DECLs, but they are
12357 part of an Objective-C class, not a C++ class).
12358 That code is invalid and is caught by this
12359 check. */
12360 if (!ctype)
12361 {
12362 error ("declaration of function %qD in invalid context",
12363 unqualified_id);
12364 return error_mark_node;
12365 }
12366
12367 /* ``A union may [ ... ] not [ have ] virtual functions.''
12368 ARM 9.5 */
12369 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12370 {
12371 error_at (declspecs->locations[ds_virtual],
12372 "function %qD declared %<virtual%> inside a union",
12373 unqualified_id);
12374 return error_mark_node;
12375 }
12376
12377 if (virtualp
12378 && identifier_p (unqualified_id)
12379 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
12380 {
12381 error_at (declspecs->locations[ds_virtual],
12382 "%qD cannot be declared %<virtual%>, since it "
12383 "is always static", unqualified_id);
12384 virtualp = 0;
12385 }
12386 }
12387
12388 /* Check that the name used for a destructor makes sense. */
12389 if (sfk == sfk_destructor)
12390 {
12391 tree uqname = id_declarator->u.id.unqualified_name;
12392
12393 if (!ctype)
12394 {
12395 gcc_assert (friendp);
12396 error ("expected qualified name in friend declaration "
12397 "for destructor %qD", uqname);
12398 return error_mark_node;
12399 }
12400
12401 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
12402 {
12403 error ("declaration of %qD as member of %qT",
12404 uqname, ctype);
12405 return error_mark_node;
12406 }
12407 if (concept_p)
12408 {
12409 error_at (declspecs->locations[ds_concept],
12410 "a destructor cannot be %<concept%>");
12411 return error_mark_node;
12412 }
12413 if (constexpr_p)
12414 {
12415 error_at (declspecs->locations[ds_constexpr],
12416 "a destructor cannot be %<constexpr%>");
12417 return error_mark_node;
12418 }
12419 }
12420 else if (sfk == sfk_constructor && friendp && !ctype)
12421 {
12422 error ("expected qualified name in friend declaration "
12423 "for constructor %qD",
12424 id_declarator->u.id.unqualified_name);
12425 return error_mark_node;
12426 }
12427 if (sfk == sfk_constructor)
12428 if (concept_p)
12429 {
12430 error_at (declspecs->locations[ds_concept],
12431 "a constructor cannot be %<concept%>");
12432 return error_mark_node;
12433 }
12434 if (concept_p)
12435 {
12436 error_at (declspecs->locations[ds_concept],
12437 "a concept cannot be a member function");
12438 concept_p = false;
12439 }
12440
12441 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12442 {
12443 tree tmpl = TREE_OPERAND (unqualified_id, 0);
12444 if (variable_template_p (tmpl))
12445 {
12446 error ("specialization of variable template %qD "
12447 "declared as function", tmpl);
12448 inform (DECL_SOURCE_LOCATION (tmpl),
12449 "variable template declared here");
12450 return error_mark_node;
12451 }
12452 }
12453
12454 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12455 function_context = (ctype != NULL_TREE) ?
12456 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12457 publicp = (! friendp || ! staticp)
12458 && function_context == NULL_TREE;
12459
12460 decl = grokfndecl (ctype, type,
12461 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12462 ? unqualified_id : dname,
12463 parms,
12464 unqualified_id,
12465 declspecs,
12466 reqs,
12467 virtualp, flags, memfn_quals, rqual, raises,
12468 friendp ? -1 : 0, friendp, publicp,
12469 inlinep | (2 * constexpr_p) | (4 * concept_p),
12470 initialized == SD_DELETED, sfk,
12471 funcdef_flag, late_return_type_p,
12472 template_count, in_namespace,
12473 attrlist, declarator->id_loc);
12474 decl = set_virt_specifiers (decl, virt_specifiers);
12475 if (decl == NULL_TREE)
12476 return error_mark_node;
12477 #if 0
12478 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12479 /* The decl and setting of decl_attr is also turned off. */
12480 decl = build_decl_attribute_variant (decl, decl_attr);
12481 #endif
12482
12483 /* [class.conv.ctor]
12484
12485 A constructor declared without the function-specifier
12486 explicit that can be called with a single parameter
12487 specifies a conversion from the type of its first
12488 parameter to the type of its class. Such a constructor
12489 is called a converting constructor. */
12490 if (explicitp == 2)
12491 DECL_NONCONVERTING_P (decl) = 1;
12492
12493 if (declspecs->explicit_specifier)
12494 store_explicit_specifier (decl, declspecs->explicit_specifier);
12495 }
12496 else if (!staticp && !dependent_type_p (type)
12497 && !COMPLETE_TYPE_P (complete_type (type))
12498 && (!complete_or_array_type_p (type)
12499 || initialized == 0))
12500 {
12501 if (TREE_CODE (type) != ARRAY_TYPE
12502 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12503 {
12504 if (unqualified_id)
12505 {
12506 error_at (declarator->id_loc,
12507 "field %qD has incomplete type %qT",
12508 unqualified_id, type);
12509 cxx_incomplete_type_inform (strip_array_types (type));
12510 }
12511 else
12512 error ("name %qT has incomplete type", type);
12513
12514 type = error_mark_node;
12515 decl = NULL_TREE;
12516 }
12517 }
12518 else
12519 {
12520 if (friendp)
12521 {
12522 if (unqualified_id && declarator)
12523 error_at (declarator->id_loc,
12524 "%qE is neither function nor member function; "
12525 "cannot be declared friend", unqualified_id);
12526 else
12527 error ("unnamed field is neither function nor member "
12528 "function; cannot be declared friend");
12529 return error_mark_node;
12530 }
12531 decl = NULL_TREE;
12532 }
12533
12534 if (friendp)
12535 {
12536 /* Friends are treated specially. */
12537 if (ctype == current_class_type)
12538 ; /* We already issued a permerror. */
12539 else if (decl && DECL_NAME (decl))
12540 {
12541 if (template_class_depth (current_class_type) == 0)
12542 {
12543 decl = check_explicit_specialization
12544 (unqualified_id, decl, template_count,
12545 2 * funcdef_flag + 4);
12546 if (decl == error_mark_node)
12547 return error_mark_node;
12548 }
12549
12550 decl = do_friend (ctype, unqualified_id, decl,
12551 *attrlist, flags,
12552 funcdef_flag);
12553 return decl;
12554 }
12555 else
12556 return error_mark_node;
12557 }
12558
12559 /* Structure field. It may not be a function, except for C++. */
12560
12561 if (decl == NULL_TREE)
12562 {
12563 if (staticp)
12564 {
12565 /* C++ allows static class members. All other work
12566 for this is done by grokfield. */
12567 decl = build_lang_decl_loc (loc, VAR_DECL,
12568 unqualified_id, type);
12569 set_linkage_for_static_data_member (decl);
12570 if (concept_p)
12571 error_at (declspecs->locations[ds_concept],
12572 "static data member %qE declared %<concept%>",
12573 unqualified_id);
12574 else if (constexpr_p && !initialized)
12575 {
12576 error_at (DECL_SOURCE_LOCATION (decl),
12577 "%<constexpr%> static data member %qD must "
12578 "have an initializer", decl);
12579 constexpr_p = false;
12580 }
12581
12582 if (inlinep)
12583 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12584
12585 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12586 && !(cxx_dialect >= cxx17 && constexpr_p))
12587 /* Even if there is an in-class initialization, DECL
12588 is considered undefined until an out-of-class
12589 definition is provided, unless this is an inline
12590 variable. */
12591 DECL_EXTERNAL (decl) = 1;
12592
12593 if (thread_p)
12594 {
12595 CP_DECL_THREAD_LOCAL_P (decl) = true;
12596 if (!processing_template_decl)
12597 set_decl_tls_model (decl, decl_default_tls_model (decl));
12598 if (declspecs->gnu_thread_keyword_p)
12599 SET_DECL_GNU_TLS_P (decl);
12600 }
12601 }
12602 else
12603 {
12604 if (concept_p)
12605 error_at (declspecs->locations[ds_concept],
12606 "non-static data member %qE declared %<concept%>",
12607 unqualified_id);
12608 else if (constexpr_p)
12609 {
12610 error_at (declspecs->locations[ds_constexpr],
12611 "non-static data member %qE declared %<constexpr%>",
12612 unqualified_id);
12613 constexpr_p = false;
12614 }
12615 decl = build_decl (loc, FIELD_DECL, unqualified_id, type);
12616 DECL_NONADDRESSABLE_P (decl) = bitfield;
12617 if (bitfield && !unqualified_id)
12618 {
12619 TREE_NO_WARNING (decl) = 1;
12620 DECL_PADDING_P (decl) = 1;
12621 }
12622
12623 if (storage_class == sc_mutable)
12624 {
12625 DECL_MUTABLE_P (decl) = 1;
12626 storage_class = sc_none;
12627 }
12628
12629 if (initialized)
12630 {
12631 /* An attempt is being made to initialize a non-static
12632 member. This is new in C++11. */
12633 maybe_warn_cpp0x (CPP0X_NSDMI);
12634
12635 /* If this has been parsed with static storage class, but
12636 errors forced staticp to be cleared, ensure NSDMI is
12637 not present. */
12638 if (declspecs->storage_class == sc_static)
12639 DECL_INITIAL (decl) = error_mark_node;
12640 }
12641 }
12642
12643 bad_specifiers (decl, BSP_FIELD, virtualp,
12644 memfn_quals != TYPE_UNQUALIFIED,
12645 staticp ? false : inlinep, friendp,
12646 raises != NULL_TREE,
12647 declspecs->locations);
12648 }
12649 }
12650 else if (TREE_CODE (type) == FUNCTION_TYPE
12651 || TREE_CODE (type) == METHOD_TYPE)
12652 {
12653 tree original_name;
12654 int publicp = 0;
12655
12656 if (!unqualified_id)
12657 return error_mark_node;
12658
12659 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12660 original_name = dname;
12661 else
12662 original_name = unqualified_id;
12663 // FIXME:gcc_assert (original_name == dname);
12664
12665 if (storage_class == sc_auto)
12666 error ("storage class %<auto%> invalid for function %qs", name);
12667 else if (storage_class == sc_register)
12668 error ("storage class %<register%> invalid for function %qs", name);
12669 else if (thread_p)
12670 {
12671 if (declspecs->gnu_thread_keyword_p)
12672 error_at (declspecs->locations[ds_thread],
12673 "storage class %<__thread%> invalid for function %qs",
12674 name);
12675 else
12676 error_at (declspecs->locations[ds_thread],
12677 "storage class %<thread_local%> invalid for "
12678 "function %qs", name);
12679 }
12680
12681 if (virt_specifiers)
12682 error ("virt-specifiers in %qs not allowed outside a class "
12683 "definition", name);
12684 /* Function declaration not at top level.
12685 Storage classes other than `extern' are not allowed
12686 and `extern' makes no difference. */
12687 if (! toplevel_bindings_p ()
12688 && (storage_class == sc_static
12689 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12690 && pedantic)
12691 {
12692 if (storage_class == sc_static)
12693 pedwarn (declspecs->locations[ds_storage_class], OPT_Wpedantic,
12694 "%<static%> specifier invalid for function %qs "
12695 "declared out of global scope", name);
12696 else
12697 pedwarn (declspecs->locations[ds_inline], OPT_Wpedantic,
12698 "%<inline%> specifier invalid for function %qs "
12699 "declared out of global scope", name);
12700 }
12701
12702 if (ctype == NULL_TREE)
12703 {
12704 if (virtualp)
12705 {
12706 error ("virtual non-class function %qs", name);
12707 virtualp = 0;
12708 }
12709 else if (sfk == sfk_constructor
12710 || sfk == sfk_destructor)
12711 {
12712 error (funcdef_flag
12713 ? G_("%qs defined in a non-class scope")
12714 : G_("%qs declared in a non-class scope"), name);
12715 sfk = sfk_none;
12716 }
12717 }
12718
12719 /* Record whether the function is public. */
12720 publicp = (ctype != NULL_TREE
12721 || storage_class != sc_static);
12722
12723 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12724 declspecs,
12725 reqs, virtualp, flags, memfn_quals, rqual, raises,
12726 1, friendp,
12727 publicp,
12728 inlinep | (2 * constexpr_p) | (4 * concept_p),
12729 initialized == SD_DELETED,
12730 sfk,
12731 funcdef_flag,
12732 late_return_type_p,
12733 template_count, in_namespace, attrlist,
12734 declarator->id_loc);
12735 if (decl == NULL_TREE)
12736 return error_mark_node;
12737
12738 if (explicitp == 2)
12739 DECL_NONCONVERTING_P (decl) = 1;
12740 if (staticp == 1)
12741 {
12742 int invalid_static = 0;
12743
12744 /* Don't allow a static member function in a class, and forbid
12745 declaring main to be static. */
12746 if (TREE_CODE (type) == METHOD_TYPE)
12747 {
12748 permerror (input_location, "cannot declare member function %qD to have "
12749 "static linkage", decl);
12750 invalid_static = 1;
12751 }
12752 else if (current_function_decl)
12753 {
12754 /* 7.1.1: There can be no static function declarations within a
12755 block. */
12756 error_at (declspecs->locations[ds_storage_class],
12757 "cannot declare static function inside another function");
12758 invalid_static = 1;
12759 }
12760
12761 if (invalid_static)
12762 {
12763 staticp = 0;
12764 storage_class = sc_none;
12765 }
12766 }
12767 }
12768 else
12769 {
12770 /* It's a variable. */
12771
12772 /* An uninitialized decl with `extern' is a reference. */
12773 decl = grokvardecl (type, dname, unqualified_id,
12774 declspecs,
12775 initialized,
12776 type_quals,
12777 inlinep,
12778 concept_p,
12779 template_count,
12780 ctype ? ctype : in_namespace,
12781 loc);
12782 if (decl == NULL_TREE)
12783 return error_mark_node;
12784
12785 bad_specifiers (decl, BSP_VAR, virtualp,
12786 memfn_quals != TYPE_UNQUALIFIED,
12787 inlinep, friendp, raises != NULL_TREE,
12788 declspecs->locations);
12789
12790 if (ctype)
12791 {
12792 DECL_CONTEXT (decl) = ctype;
12793 if (staticp == 1)
12794 {
12795 permerror (declspecs->locations[ds_storage_class],
12796 "%<static%> may not be used when defining "
12797 "(as opposed to declaring) a static data member");
12798 staticp = 0;
12799 storage_class = sc_none;
12800 }
12801 if (storage_class == sc_register && TREE_STATIC (decl))
12802 {
12803 error ("static member %qD declared %<register%>", decl);
12804 storage_class = sc_none;
12805 }
12806 if (storage_class == sc_extern && pedantic)
12807 {
12808 pedwarn (input_location, OPT_Wpedantic,
12809 "cannot explicitly declare member %q#D to have "
12810 "extern linkage", decl);
12811 storage_class = sc_none;
12812 }
12813 }
12814 else if (constexpr_p && DECL_EXTERNAL (decl))
12815 {
12816 error_at (DECL_SOURCE_LOCATION (decl),
12817 "declaration of %<constexpr%> variable %qD "
12818 "is not a definition", decl);
12819 constexpr_p = false;
12820 }
12821
12822 if (inlinep)
12823 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12824 if (innermost_code == cdk_decomp)
12825 {
12826 gcc_assert (declarator && declarator->kind == cdk_decomp);
12827 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12828 DECL_ARTIFICIAL (decl) = 1;
12829 fit_decomposition_lang_decl (decl, NULL_TREE);
12830 }
12831 }
12832
12833 if (VAR_P (decl) && !initialized)
12834 if (tree auto_node = type_uses_auto (type))
12835 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12836 {
12837 location_t loc = declspecs->locations[ds_type_spec];
12838 error_at (loc, "declaration of %q#D has no initializer", decl);
12839 TREE_TYPE (decl) = error_mark_node;
12840 }
12841
12842 if (storage_class == sc_extern && initialized && !funcdef_flag)
12843 {
12844 if (toplevel_bindings_p ())
12845 {
12846 /* It's common practice (and completely valid) to have a const
12847 be initialized and declared extern. */
12848 if (!(type_quals & TYPE_QUAL_CONST))
12849 warning_at (DECL_SOURCE_LOCATION (decl), 0,
12850 "%qs initialized and declared %<extern%>", name);
12851 }
12852 else
12853 {
12854 error_at (DECL_SOURCE_LOCATION (decl),
12855 "%qs has both %<extern%> and initializer", name);
12856 return error_mark_node;
12857 }
12858 }
12859
12860 /* Record `register' declaration for warnings on &
12861 and in case doing stupid register allocation. */
12862
12863 if (storage_class == sc_register)
12864 {
12865 DECL_REGISTER (decl) = 1;
12866 /* Warn about register storage specifiers on PARM_DECLs. */
12867 if (TREE_CODE (decl) == PARM_DECL)
12868 {
12869 if (cxx_dialect >= cxx17)
12870 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12871 "ISO C++17 does not allow %<register%> storage "
12872 "class specifier");
12873 else
12874 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12875 "%<register%> storage class specifier used");
12876 }
12877 }
12878 else if (storage_class == sc_extern)
12879 DECL_THIS_EXTERN (decl) = 1;
12880 else if (storage_class == sc_static)
12881 DECL_THIS_STATIC (decl) = 1;
12882
12883 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12884 if (constexpr_p && VAR_P (decl))
12885 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12886
12887 /* Record constancy and volatility on the DECL itself . There's
12888 no need to do this when processing a template; we'll do this
12889 for the instantiated declaration based on the type of DECL. */
12890 if (!processing_template_decl)
12891 cp_apply_type_quals_to_decl (type_quals, decl);
12892
12893 return decl;
12894 }
12895 }
12896 \f
12897 /* Subroutine of start_function. Ensure that each of the parameter
12898 types (as listed in PARMS) is complete, as is required for a
12899 function definition. */
12900
12901 static void
12902 require_complete_types_for_parms (tree parms)
12903 {
12904 for (; parms; parms = DECL_CHAIN (parms))
12905 {
12906 if (dependent_type_p (TREE_TYPE (parms)))
12907 continue;
12908 if (!VOID_TYPE_P (TREE_TYPE (parms))
12909 && complete_type_or_else (TREE_TYPE (parms), parms))
12910 {
12911 relayout_decl (parms);
12912 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12913
12914 maybe_warn_parm_abi (TREE_TYPE (parms),
12915 DECL_SOURCE_LOCATION (parms));
12916 }
12917 else
12918 /* grokparms or complete_type_or_else will have already issued
12919 an error. */
12920 TREE_TYPE (parms) = error_mark_node;
12921 }
12922 }
12923
12924 /* Returns nonzero if T is a local variable. */
12925
12926 int
12927 local_variable_p (const_tree t)
12928 {
12929 if ((VAR_P (t)
12930 /* A VAR_DECL with a context that is a _TYPE is a static data
12931 member. */
12932 && !TYPE_P (CP_DECL_CONTEXT (t))
12933 /* Any other non-local variable must be at namespace scope. */
12934 && !DECL_NAMESPACE_SCOPE_P (t))
12935 || (TREE_CODE (t) == PARM_DECL))
12936 return 1;
12937
12938 return 0;
12939 }
12940
12941 /* Like local_variable_p, but suitable for use as a tree-walking
12942 function. */
12943
12944 static tree
12945 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12946 void * /*data*/)
12947 {
12948 if (local_variable_p (*tp)
12949 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12950 return *tp;
12951 else if (TYPE_P (*tp))
12952 *walk_subtrees = 0;
12953
12954 return NULL_TREE;
12955 }
12956
12957 /* Check that ARG, which is a default-argument expression for a
12958 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12959 something goes wrong. DECL may also be a _TYPE node, rather than a
12960 DECL, if there is no DECL available. */
12961
12962 tree
12963 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12964 {
12965 tree var;
12966 tree decl_type;
12967
12968 if (TREE_CODE (arg) == DEFAULT_ARG)
12969 /* We get a DEFAULT_ARG when looking at an in-class declaration
12970 with a default argument. Ignore the argument for now; we'll
12971 deal with it after the class is complete. */
12972 return arg;
12973
12974 if (TYPE_P (decl))
12975 {
12976 decl_type = decl;
12977 decl = NULL_TREE;
12978 }
12979 else
12980 decl_type = TREE_TYPE (decl);
12981
12982 if (arg == error_mark_node
12983 || decl == error_mark_node
12984 || TREE_TYPE (arg) == error_mark_node
12985 || decl_type == error_mark_node)
12986 /* Something already went wrong. There's no need to check
12987 further. */
12988 return error_mark_node;
12989
12990 /* [dcl.fct.default]
12991
12992 A default argument expression is implicitly converted to the
12993 parameter type. */
12994 ++cp_unevaluated_operand;
12995 /* Avoid digest_init clobbering the initializer. */
12996 tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
12997 perform_implicit_conversion_flags (decl_type, carg, complain,
12998 LOOKUP_IMPLICIT);
12999 --cp_unevaluated_operand;
13000
13001 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
13002 the call sites. */
13003 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
13004 && null_ptr_cst_p (arg))
13005 return nullptr_node;
13006
13007 /* [dcl.fct.default]
13008
13009 Local variables shall not be used in default argument
13010 expressions.
13011
13012 The keyword `this' shall not be used in a default argument of a
13013 member function. */
13014 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
13015 if (var)
13016 {
13017 if (complain & tf_warning_or_error)
13018 {
13019 if (DECL_NAME (var) == this_identifier)
13020 permerror (input_location, "default argument %qE uses %qD",
13021 arg, var);
13022 else
13023 error ("default argument %qE uses local variable %qD", arg, var);
13024 }
13025 return error_mark_node;
13026 }
13027
13028 /* All is well. */
13029 return arg;
13030 }
13031
13032 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
13033
13034 static tree
13035 type_is_deprecated (tree type)
13036 {
13037 enum tree_code code;
13038 if (TREE_DEPRECATED (type))
13039 return type;
13040 if (TYPE_NAME (type))
13041 {
13042 if (TREE_DEPRECATED (TYPE_NAME (type)))
13043 return type;
13044 else
13045 return NULL_TREE;
13046 }
13047
13048 /* Do warn about using typedefs to a deprecated class. */
13049 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
13050 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
13051
13052 code = TREE_CODE (type);
13053
13054 if (code == POINTER_TYPE || code == REFERENCE_TYPE
13055 || code == OFFSET_TYPE || code == FUNCTION_TYPE
13056 || code == METHOD_TYPE || code == ARRAY_TYPE)
13057 return type_is_deprecated (TREE_TYPE (type));
13058
13059 if (TYPE_PTRMEMFUNC_P (type))
13060 return type_is_deprecated
13061 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
13062
13063 return NULL_TREE;
13064 }
13065
13066 /* Decode the list of parameter types for a function type.
13067 Given the list of things declared inside the parens,
13068 return a list of types.
13069
13070 If this parameter does not end with an ellipsis, we append
13071 void_list_node.
13072
13073 *PARMS is set to the chain of PARM_DECLs created. */
13074
13075 tree
13076 grokparms (tree parmlist, tree *parms)
13077 {
13078 tree result = NULL_TREE;
13079 tree decls = NULL_TREE;
13080 tree parm;
13081 int any_error = 0;
13082
13083 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
13084 {
13085 tree type = NULL_TREE;
13086 tree init = TREE_PURPOSE (parm);
13087 tree decl = TREE_VALUE (parm);
13088
13089 if (parm == void_list_node)
13090 break;
13091
13092 if (! decl || TREE_TYPE (decl) == error_mark_node)
13093 continue;
13094
13095 type = TREE_TYPE (decl);
13096 if (VOID_TYPE_P (type))
13097 {
13098 if (same_type_p (type, void_type_node)
13099 && !init
13100 && !DECL_NAME (decl) && !result
13101 && TREE_CHAIN (parm) == void_list_node)
13102 /* DR 577: A parameter list consisting of a single
13103 unnamed parameter of non-dependent type 'void'. */
13104 break;
13105 else if (cv_qualified_p (type))
13106 error_at (DECL_SOURCE_LOCATION (decl),
13107 "invalid use of cv-qualified type %qT in "
13108 "parameter declaration", type);
13109 else
13110 error_at (DECL_SOURCE_LOCATION (decl),
13111 "invalid use of type %<void%> in parameter "
13112 "declaration");
13113 /* It's not a good idea to actually create parameters of
13114 type `void'; other parts of the compiler assume that a
13115 void type terminates the parameter list. */
13116 type = error_mark_node;
13117 TREE_TYPE (decl) = error_mark_node;
13118 }
13119
13120 if (type != error_mark_node)
13121 {
13122 if (deprecated_state != DEPRECATED_SUPPRESS)
13123 {
13124 tree deptype = type_is_deprecated (type);
13125 if (deptype)
13126 cp_warn_deprecated_use (deptype);
13127 }
13128
13129 /* Top-level qualifiers on the parameters are
13130 ignored for function types. */
13131 type = cp_build_qualified_type (type, 0);
13132 if (TREE_CODE (type) == METHOD_TYPE)
13133 {
13134 error ("parameter %qD invalidly declared method type", decl);
13135 type = build_pointer_type (type);
13136 TREE_TYPE (decl) = type;
13137 }
13138 else if (abstract_virtuals_error (decl, type))
13139 any_error = 1; /* Seems like a good idea. */
13140 else if (cxx_dialect < cxx17 && INDIRECT_TYPE_P (type))
13141 {
13142 /* Before C++17 DR 393:
13143 [dcl.fct]/6, parameter types cannot contain pointers
13144 (references) to arrays of unknown bound. */
13145 tree t = TREE_TYPE (type);
13146 int ptr = TYPE_PTR_P (type);
13147
13148 while (1)
13149 {
13150 if (TYPE_PTR_P (t))
13151 ptr = 1;
13152 else if (TREE_CODE (t) != ARRAY_TYPE)
13153 break;
13154 else if (!TYPE_DOMAIN (t))
13155 break;
13156 t = TREE_TYPE (t);
13157 }
13158 if (TREE_CODE (t) == ARRAY_TYPE)
13159 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
13160 ptr
13161 ? G_("parameter %qD includes pointer to array of "
13162 "unknown bound %qT")
13163 : G_("parameter %qD includes reference to array of "
13164 "unknown bound %qT"),
13165 decl, t);
13166 }
13167
13168 if (any_error)
13169 init = NULL_TREE;
13170 else if (init && !processing_template_decl)
13171 init = check_default_argument (decl, init, tf_warning_or_error);
13172 }
13173
13174 DECL_CHAIN (decl) = decls;
13175 decls = decl;
13176 result = tree_cons (init, type, result);
13177 }
13178 decls = nreverse (decls);
13179 result = nreverse (result);
13180 if (parm)
13181 result = chainon (result, void_list_node);
13182 *parms = decls;
13183
13184 return result;
13185 }
13186
13187 \f
13188 /* D is a constructor or overloaded `operator='.
13189
13190 Let T be the class in which D is declared. Then, this function
13191 returns:
13192
13193 -1 if D's is an ill-formed constructor or copy assignment operator
13194 whose first parameter is of type `T'.
13195 0 if D is not a copy constructor or copy assignment
13196 operator.
13197 1 if D is a copy constructor or copy assignment operator whose
13198 first parameter is a reference to non-const qualified T.
13199 2 if D is a copy constructor or copy assignment operator whose
13200 first parameter is a reference to const qualified T.
13201
13202 This function can be used as a predicate. Positive values indicate
13203 a copy constructor and nonzero values indicate a copy assignment
13204 operator. */
13205
13206 int
13207 copy_fn_p (const_tree d)
13208 {
13209 tree args;
13210 tree arg_type;
13211 int result = 1;
13212
13213 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13214
13215 if (TREE_CODE (d) == TEMPLATE_DECL
13216 || (DECL_TEMPLATE_INFO (d)
13217 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13218 /* Instantiations of template member functions are never copy
13219 functions. Note that member functions of templated classes are
13220 represented as template functions internally, and we must
13221 accept those as copy functions. */
13222 return 0;
13223
13224 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13225 if (!args)
13226 return 0;
13227
13228 arg_type = TREE_VALUE (args);
13229 if (arg_type == error_mark_node)
13230 return 0;
13231
13232 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
13233 {
13234 /* Pass by value copy assignment operator. */
13235 result = -1;
13236 }
13237 else if (TYPE_REF_P (arg_type)
13238 && !TYPE_REF_IS_RVALUE (arg_type)
13239 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
13240 {
13241 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
13242 result = 2;
13243 }
13244 else
13245 return 0;
13246
13247 args = TREE_CHAIN (args);
13248
13249 if (args && args != void_list_node && !TREE_PURPOSE (args))
13250 /* There are more non-optional args. */
13251 return 0;
13252
13253 return result;
13254 }
13255
13256 /* D is a constructor or overloaded `operator='.
13257
13258 Let T be the class in which D is declared. Then, this function
13259 returns true when D is a move constructor or move assignment
13260 operator, false otherwise. */
13261
13262 bool
13263 move_fn_p (const_tree d)
13264 {
13265 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13266
13267 if (cxx_dialect == cxx98)
13268 /* There are no move constructors if we are in C++98 mode. */
13269 return false;
13270
13271 if (TREE_CODE (d) == TEMPLATE_DECL
13272 || (DECL_TEMPLATE_INFO (d)
13273 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13274 /* Instantiations of template member functions are never move
13275 functions. Note that member functions of templated classes are
13276 represented as template functions internally, and we must
13277 accept those as move functions. */
13278 return 0;
13279
13280 return move_signature_fn_p (d);
13281 }
13282
13283 /* D is a constructor or overloaded `operator='.
13284
13285 Then, this function returns true when D has the same signature as a move
13286 constructor or move assignment operator (because either it is such a
13287 ctor/op= or it is a template specialization with the same signature),
13288 false otherwise. */
13289
13290 bool
13291 move_signature_fn_p (const_tree d)
13292 {
13293 tree args;
13294 tree arg_type;
13295 bool result = false;
13296
13297 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13298 if (!args)
13299 return 0;
13300
13301 arg_type = TREE_VALUE (args);
13302 if (arg_type == error_mark_node)
13303 return 0;
13304
13305 if (TYPE_REF_P (arg_type)
13306 && TYPE_REF_IS_RVALUE (arg_type)
13307 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
13308 DECL_CONTEXT (d)))
13309 result = true;
13310
13311 args = TREE_CHAIN (args);
13312
13313 if (args && args != void_list_node && !TREE_PURPOSE (args))
13314 /* There are more non-optional args. */
13315 return false;
13316
13317 return result;
13318 }
13319
13320 /* Remember any special properties of member function DECL. */
13321
13322 void
13323 grok_special_member_properties (tree decl)
13324 {
13325 tree class_type;
13326
13327 if (TREE_CODE (decl) == USING_DECL
13328 || !DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
13329 return;
13330
13331 class_type = DECL_CONTEXT (decl);
13332 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
13333 {
13334 int ctor = copy_fn_p (decl);
13335
13336 if (!DECL_ARTIFICIAL (decl))
13337 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
13338
13339 if (ctor > 0)
13340 {
13341 /* [class.copy]
13342
13343 A non-template constructor for class X is a copy
13344 constructor if its first parameter is of type X&, const
13345 X&, volatile X& or const volatile X&, and either there
13346 are no other parameters or else all other parameters have
13347 default arguments. */
13348 TYPE_HAS_COPY_CTOR (class_type) = 1;
13349 if (user_provided_p (decl))
13350 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
13351 if (ctor > 1)
13352 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
13353 }
13354 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
13355 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
13356 else if (move_fn_p (decl) && user_provided_p (decl))
13357 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
13358 else if (is_list_ctor (decl))
13359 TYPE_HAS_LIST_CTOR (class_type) = 1;
13360
13361 if (DECL_DECLARED_CONSTEXPR_P (decl)
13362 && !ctor && !move_fn_p (decl))
13363 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
13364 }
13365 else if (DECL_NAME (decl) == assign_op_identifier)
13366 {
13367 /* [class.copy]
13368
13369 A non-template assignment operator for class X is a copy
13370 assignment operator if its parameter is of type X, X&, const
13371 X&, volatile X& or const volatile X&. */
13372
13373 int assop = copy_fn_p (decl);
13374
13375 if (assop)
13376 {
13377 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
13378 if (user_provided_p (decl))
13379 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
13380 if (assop != 1)
13381 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
13382 }
13383 else if (move_fn_p (decl) && user_provided_p (decl))
13384 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
13385 }
13386 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
13387 TYPE_HAS_CONVERSION (class_type) = true;
13388
13389 /* Destructors are handled in check_methods. */
13390 }
13391
13392 /* Check a constructor DECL has the correct form. Complains
13393 if the class has a constructor of the form X(X). */
13394
13395 bool
13396 grok_ctor_properties (const_tree ctype, const_tree decl)
13397 {
13398 int ctor_parm = copy_fn_p (decl);
13399
13400 if (ctor_parm < 0)
13401 {
13402 /* [class.copy]
13403
13404 A declaration of a constructor for a class X is ill-formed if
13405 its first parameter is of type (optionally cv-qualified) X
13406 and either there are no other parameters or else all other
13407 parameters have default arguments.
13408
13409 We *don't* complain about member template instantiations that
13410 have this form, though; they can occur as we try to decide
13411 what constructor to use during overload resolution. Since
13412 overload resolution will never prefer such a constructor to
13413 the non-template copy constructor (which is either explicitly
13414 or implicitly defined), there's no need to worry about their
13415 existence. Theoretically, they should never even be
13416 instantiated, but that's hard to forestall. */
13417 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
13418 ctype, ctype);
13419 return false;
13420 }
13421
13422 return true;
13423 }
13424
13425 /* DECL is a declaration for an overloaded or conversion operator. If
13426 COMPLAIN is true, errors are issued for invalid declarations. */
13427
13428 bool
13429 grok_op_properties (tree decl, bool complain)
13430 {
13431 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13432 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
13433 tree name = DECL_NAME (decl);
13434 location_t loc = DECL_SOURCE_LOCATION (decl);
13435
13436 tree class_type = DECL_CONTEXT (decl);
13437 if (class_type && !CLASS_TYPE_P (class_type))
13438 class_type = NULL_TREE;
13439
13440 tree_code operator_code;
13441 unsigned op_flags;
13442 if (IDENTIFIER_CONV_OP_P (name))
13443 {
13444 /* Conversion operators are TYPE_EXPR for the purposes of this
13445 function. */
13446 operator_code = TYPE_EXPR;
13447 op_flags = OVL_OP_FLAG_UNARY;
13448 }
13449 else
13450 {
13451 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13452
13453 operator_code = ovl_op->tree_code;
13454 op_flags = ovl_op->flags;
13455 gcc_checking_assert (operator_code != ERROR_MARK);
13456 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13457 }
13458
13459 if (op_flags & OVL_OP_FLAG_ALLOC)
13460 {
13461 /* operator new and operator delete are quite special. */
13462 if (class_type)
13463 switch (op_flags)
13464 {
13465 case OVL_OP_FLAG_ALLOC:
13466 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13467 break;
13468
13469 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13470 TYPE_GETS_DELETE (class_type) |= 1;
13471 break;
13472
13473 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13474 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13475 break;
13476
13477 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13478 TYPE_GETS_DELETE (class_type) |= 2;
13479 break;
13480
13481 default:
13482 gcc_unreachable ();
13483 }
13484
13485 /* [basic.std.dynamic.allocation]/1:
13486
13487 A program is ill-formed if an allocation function is declared
13488 in a namespace scope other than global scope or declared
13489 static in global scope.
13490
13491 The same also holds true for deallocation functions. */
13492 if (DECL_NAMESPACE_SCOPE_P (decl))
13493 {
13494 if (CP_DECL_CONTEXT (decl) != global_namespace)
13495 {
13496 error_at (loc, "%qD may not be declared within a namespace",
13497 decl);
13498 return false;
13499 }
13500
13501 if (!TREE_PUBLIC (decl))
13502 {
13503 error_at (loc, "%qD may not be declared as static", decl);
13504 return false;
13505 }
13506 }
13507
13508 if (op_flags & OVL_OP_FLAG_DELETE)
13509 coerce_delete_type (decl, loc);
13510 else
13511 {
13512 DECL_IS_OPERATOR_NEW (decl) = 1;
13513 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl), loc);
13514 }
13515
13516 return true;
13517 }
13518
13519 /* An operator function must either be a non-static member function
13520 or have at least one parameter of a class, a reference to a class,
13521 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13522 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13523 {
13524 if (operator_code == TYPE_EXPR
13525 || operator_code == CALL_EXPR
13526 || operator_code == COMPONENT_REF
13527 || operator_code == ARRAY_REF
13528 || operator_code == NOP_EXPR)
13529 {
13530 error_at (loc, "%qD must be a nonstatic member function", decl);
13531 return false;
13532 }
13533
13534 if (DECL_STATIC_FUNCTION_P (decl))
13535 {
13536 error_at (loc, "%qD must be either a non-static member "
13537 "function or a non-member function", decl);
13538 return false;
13539 }
13540
13541 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13542 {
13543 if (!arg || arg == void_list_node)
13544 {
13545 if (complain)
13546 error_at(loc, "%qD must have an argument of class or "
13547 "enumerated type", decl);
13548 return false;
13549 }
13550
13551 tree type = non_reference (TREE_VALUE (arg));
13552 if (type == error_mark_node)
13553 return false;
13554
13555 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13556 because these checks are performed even on template
13557 functions. */
13558 if (MAYBE_CLASS_TYPE_P (type)
13559 || TREE_CODE (type) == ENUMERAL_TYPE)
13560 break;
13561 }
13562 }
13563
13564 if (operator_code == CALL_EXPR)
13565 /* There are no further restrictions on the arguments to an overloaded
13566 "operator ()". */
13567 return true;
13568
13569 if (operator_code == COND_EXPR)
13570 {
13571 /* 13.4.0.3 */
13572 error_at (loc, "ISO C++ prohibits overloading operator ?:");
13573 return false;
13574 }
13575
13576 /* Count the number of arguments and check for ellipsis. */
13577 int arity = 0;
13578 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13579 {
13580 if (!arg)
13581 {
13582 /* Variadic. */
13583 error_at (loc, "%qD must not have variable number of arguments",
13584 decl);
13585 return false;
13586 }
13587 ++arity;
13588 }
13589
13590 /* Verify correct number of arguments. */
13591 switch (op_flags)
13592 {
13593 case OVL_OP_FLAG_AMBIARY:
13594 if (arity == 1)
13595 {
13596 /* We have a unary instance of an ambi-ary op. Remap to the
13597 unary one. */
13598 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13599 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13600 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13601 operator_code = ovl_op->tree_code;
13602 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13603 }
13604 else if (arity != 2)
13605 {
13606 /* This was an ambiguous operator but is invalid. */
13607 error_at (loc,
13608 methodp
13609 ? G_("%qD must have either zero or one argument")
13610 : G_("%qD must have either one or two arguments"), decl);
13611 return false;
13612 }
13613 else if ((operator_code == POSTINCREMENT_EXPR
13614 || operator_code == POSTDECREMENT_EXPR)
13615 && ! processing_template_decl
13616 /* x++ and x--'s second argument must be an int. */
13617 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13618 integer_type_node))
13619 {
13620 error_at (loc,
13621 methodp
13622 ? G_("postfix %qD must have %<int%> as its argument")
13623 : G_("postfix %qD must have %<int%> as its second argument"),
13624 decl);
13625 return false;
13626 }
13627 break;
13628
13629 case OVL_OP_FLAG_UNARY:
13630 if (arity != 1)
13631 {
13632 error_at (loc,
13633 methodp
13634 ? G_("%qD must have no arguments")
13635 : G_("%qD must have exactly one argument"), decl);
13636 return false;
13637 }
13638 break;
13639
13640 case OVL_OP_FLAG_BINARY:
13641 if (arity != 2)
13642 {
13643 error_at (loc,
13644 methodp
13645 ? G_("%qD must have exactly one argument")
13646 : G_("%qD must have exactly two arguments"), decl);
13647 return false;
13648 }
13649 break;
13650
13651 default:
13652 gcc_unreachable ();
13653 }
13654
13655 /* There can be no default arguments. */
13656 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13657 if (TREE_PURPOSE (arg))
13658 {
13659 TREE_PURPOSE (arg) = NULL_TREE;
13660 error_at (loc, "%qD cannot have default arguments", decl);
13661 return false;
13662 }
13663
13664 /* At this point the declaration is well-formed. It may not be
13665 sensible though. */
13666
13667 /* Check member function warnings only on the in-class declaration.
13668 There's no point warning on an out-of-class definition. */
13669 if (class_type && class_type != current_class_type)
13670 return true;
13671
13672 /* Warn about conversion operators that will never be used. */
13673 if (IDENTIFIER_CONV_OP_P (name)
13674 && ! DECL_TEMPLATE_INFO (decl)
13675 && warn_class_conversion)
13676 {
13677 tree t = TREE_TYPE (name);
13678 int ref = TYPE_REF_P (t);
13679
13680 if (ref)
13681 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13682
13683 if (VOID_TYPE_P (t))
13684 warning_at (loc, OPT_Wclass_conversion, "converting %qT to %<void%> "
13685 "will never use a type conversion operator", class_type);
13686 else if (class_type)
13687 {
13688 if (same_type_ignoring_top_level_qualifiers_p (t, class_type))
13689 warning_at (loc, OPT_Wclass_conversion,
13690 ref
13691 ? G_("converting %qT to a reference to the same type "
13692 "will never use a type conversion operator")
13693 : G_("converting %qT to the same type "
13694 "will never use a type conversion operator"),
13695 class_type);
13696 /* Don't force t to be complete here. */
13697 else if (MAYBE_CLASS_TYPE_P (t)
13698 && COMPLETE_TYPE_P (t)
13699 && DERIVED_FROM_P (t, class_type))
13700 warning_at (loc, OPT_Wclass_conversion,
13701 ref
13702 ? G_("converting %qT to a reference to a base class "
13703 "%qT will never use a type conversion operator")
13704 : G_("converting %qT to a base class %qT "
13705 "will never use a type conversion operator"),
13706 class_type, t);
13707 }
13708 }
13709
13710 if (!warn_ecpp)
13711 return true;
13712
13713 /* Effective C++ rules below. */
13714
13715 /* More Effective C++ rule 7. */
13716 if (operator_code == TRUTH_ANDIF_EXPR
13717 || operator_code == TRUTH_ORIF_EXPR
13718 || operator_code == COMPOUND_EXPR)
13719 warning_at (loc, OPT_Weffc__,
13720 "user-defined %qD always evaluates both arguments", decl);
13721
13722 /* More Effective C++ rule 6. */
13723 if (operator_code == POSTINCREMENT_EXPR
13724 || operator_code == POSTDECREMENT_EXPR
13725 || operator_code == PREINCREMENT_EXPR
13726 || operator_code == PREDECREMENT_EXPR)
13727 {
13728 tree arg = TREE_VALUE (argtypes);
13729 tree ret = TREE_TYPE (TREE_TYPE (decl));
13730 if (methodp || TYPE_REF_P (arg))
13731 arg = TREE_TYPE (arg);
13732 arg = TYPE_MAIN_VARIANT (arg);
13733
13734 if (operator_code == PREINCREMENT_EXPR
13735 || operator_code == PREDECREMENT_EXPR)
13736 {
13737 if (!TYPE_REF_P (ret)
13738 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13739 warning_at (loc, OPT_Weffc__, "prefix %qD should return %qT", decl,
13740 build_reference_type (arg));
13741 }
13742 else
13743 {
13744 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13745 warning_at (loc, OPT_Weffc__,
13746 "postfix %qD should return %qT", decl, arg);
13747 }
13748 }
13749
13750 /* Effective C++ rule 23. */
13751 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13752 && (operator_code == PLUS_EXPR
13753 || operator_code == MINUS_EXPR
13754 || operator_code == TRUNC_DIV_EXPR
13755 || operator_code == MULT_EXPR
13756 || operator_code == TRUNC_MOD_EXPR)
13757 && TYPE_REF_P (TREE_TYPE (TREE_TYPE (decl))))
13758 warning_at (loc, OPT_Weffc__, "%qD should return by value", decl);
13759
13760 return true;
13761 }
13762 \f
13763 /* Return a string giving the keyword associate with CODE. */
13764
13765 static const char *
13766 tag_name (enum tag_types code)
13767 {
13768 switch (code)
13769 {
13770 case record_type:
13771 return "struct";
13772 case class_type:
13773 return "class";
13774 case union_type:
13775 return "union";
13776 case enum_type:
13777 return "enum";
13778 case typename_type:
13779 return "typename";
13780 default:
13781 gcc_unreachable ();
13782 }
13783 }
13784
13785 /* Name lookup in an elaborated-type-specifier (after the keyword
13786 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13787 elaborated-type-specifier is invalid, issue a diagnostic and return
13788 error_mark_node; otherwise, return the *_TYPE to which it referred.
13789 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13790
13791 tree
13792 check_elaborated_type_specifier (enum tag_types tag_code,
13793 tree decl,
13794 bool allow_template_p)
13795 {
13796 tree type;
13797
13798 /* In the case of:
13799
13800 struct S { struct S *p; };
13801
13802 name lookup will find the TYPE_DECL for the implicit "S::S"
13803 typedef. Adjust for that here. */
13804 if (DECL_SELF_REFERENCE_P (decl))
13805 decl = TYPE_NAME (TREE_TYPE (decl));
13806
13807 type = TREE_TYPE (decl);
13808
13809 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13810 is false for this case as well. */
13811 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13812 {
13813 error ("using template type parameter %qT after %qs",
13814 type, tag_name (tag_code));
13815 return error_mark_node;
13816 }
13817 /* Accept template template parameters. */
13818 else if (allow_template_p
13819 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13820 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13821 ;
13822 /* [dcl.type.elab]
13823
13824 If the identifier resolves to a typedef-name or the
13825 simple-template-id resolves to an alias template
13826 specialization, the elaborated-type-specifier is ill-formed.
13827
13828 In other words, the only legitimate declaration to use in the
13829 elaborated type specifier is the implicit typedef created when
13830 the type is declared. */
13831 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13832 && !DECL_SELF_REFERENCE_P (decl)
13833 && tag_code != typename_type)
13834 {
13835 if (alias_template_specialization_p (type))
13836 error ("using alias template specialization %qT after %qs",
13837 type, tag_name (tag_code));
13838 else
13839 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13840 inform (DECL_SOURCE_LOCATION (decl),
13841 "%qD has a previous declaration here", decl);
13842 return error_mark_node;
13843 }
13844 else if (TREE_CODE (type) != RECORD_TYPE
13845 && TREE_CODE (type) != UNION_TYPE
13846 && tag_code != enum_type
13847 && tag_code != typename_type)
13848 {
13849 error ("%qT referred to as %qs", type, tag_name (tag_code));
13850 inform (location_of (type), "%qT has a previous declaration here", type);
13851 return error_mark_node;
13852 }
13853 else if (TREE_CODE (type) != ENUMERAL_TYPE
13854 && tag_code == enum_type)
13855 {
13856 error ("%qT referred to as enum", type);
13857 inform (location_of (type), "%qT has a previous declaration here", type);
13858 return error_mark_node;
13859 }
13860 else if (!allow_template_p
13861 && TREE_CODE (type) == RECORD_TYPE
13862 && CLASSTYPE_IS_TEMPLATE (type))
13863 {
13864 /* If a class template appears as elaborated type specifier
13865 without a template header such as:
13866
13867 template <class T> class C {};
13868 void f(class C); // No template header here
13869
13870 then the required template argument is missing. */
13871 error ("template argument required for %<%s %T%>",
13872 tag_name (tag_code),
13873 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13874 return error_mark_node;
13875 }
13876
13877 return type;
13878 }
13879
13880 /* Lookup NAME in elaborate type specifier in scope according to
13881 SCOPE and issue diagnostics if necessary.
13882 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13883 found, and ERROR_MARK_NODE for type error. */
13884
13885 static tree
13886 lookup_and_check_tag (enum tag_types tag_code, tree name,
13887 tag_scope scope, bool template_header_p)
13888 {
13889 tree t;
13890 tree decl;
13891 if (scope == ts_global)
13892 {
13893 /* First try ordinary name lookup, ignoring hidden class name
13894 injected via friend declaration. */
13895 decl = lookup_name_prefer_type (name, 2);
13896 decl = strip_using_decl (decl);
13897 /* If that fails, the name will be placed in the smallest
13898 non-class, non-function-prototype scope according to 3.3.1/5.
13899 We may already have a hidden name declared as friend in this
13900 scope. So lookup again but not ignoring hidden names.
13901 If we find one, that name will be made visible rather than
13902 creating a new tag. */
13903 if (!decl)
13904 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13905 }
13906 else
13907 decl = lookup_type_scope (name, scope);
13908
13909 if (decl
13910 && (DECL_CLASS_TEMPLATE_P (decl)
13911 /* If scope is ts_current we're defining a class, so ignore a
13912 template template parameter. */
13913 || (scope != ts_current
13914 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13915 decl = DECL_TEMPLATE_RESULT (decl);
13916
13917 if (decl && TREE_CODE (decl) == TYPE_DECL)
13918 {
13919 /* Look for invalid nested type:
13920 class C {
13921 class C {};
13922 }; */
13923 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13924 {
13925 error ("%qD has the same name as the class in which it is "
13926 "declared",
13927 decl);
13928 return error_mark_node;
13929 }
13930
13931 /* Two cases we need to consider when deciding if a class
13932 template is allowed as an elaborated type specifier:
13933 1. It is a self reference to its own class.
13934 2. It comes with a template header.
13935
13936 For example:
13937
13938 template <class T> class C {
13939 class C *c1; // DECL_SELF_REFERENCE_P is true
13940 class D;
13941 };
13942 template <class U> class C; // template_header_p is true
13943 template <class T> class C<T>::D {
13944 class C *c2; // DECL_SELF_REFERENCE_P is true
13945 }; */
13946
13947 t = check_elaborated_type_specifier (tag_code,
13948 decl,
13949 template_header_p
13950 | DECL_SELF_REFERENCE_P (decl));
13951 if (template_header_p && t && CLASS_TYPE_P (t)
13952 && (!CLASSTYPE_TEMPLATE_INFO (t)
13953 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13954 {
13955 error ("%qT is not a template", t);
13956 inform (location_of (t), "previous declaration here");
13957 if (TYPE_CLASS_SCOPE_P (t)
13958 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13959 inform (input_location,
13960 "perhaps you want to explicitly add %<%T::%>",
13961 TYPE_CONTEXT (t));
13962 t = error_mark_node;
13963 }
13964
13965 return t;
13966 }
13967 else if (decl && TREE_CODE (decl) == TREE_LIST)
13968 {
13969 error ("reference to %qD is ambiguous", name);
13970 print_candidates (decl);
13971 return error_mark_node;
13972 }
13973 else
13974 return NULL_TREE;
13975 }
13976
13977 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13978 Define the tag as a forward-reference if it is not defined.
13979
13980 If a declaration is given, process it here, and report an error if
13981 multiple declarations are not identical.
13982
13983 SCOPE is TS_CURRENT when this is also a definition. Only look in
13984 the current frame for the name (since C++ allows new names in any
13985 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13986 declaration. Only look beginning from the current scope outward up
13987 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13988
13989 TEMPLATE_HEADER_P is true when this declaration is preceded by
13990 a set of template parameters. */
13991
13992 static tree
13993 xref_tag_1 (enum tag_types tag_code, tree name,
13994 tag_scope scope, bool template_header_p)
13995 {
13996 enum tree_code code;
13997 tree context = NULL_TREE;
13998
13999 gcc_assert (identifier_p (name));
14000
14001 switch (tag_code)
14002 {
14003 case record_type:
14004 case class_type:
14005 code = RECORD_TYPE;
14006 break;
14007 case union_type:
14008 code = UNION_TYPE;
14009 break;
14010 case enum_type:
14011 code = ENUMERAL_TYPE;
14012 break;
14013 default:
14014 gcc_unreachable ();
14015 }
14016
14017 /* In case of anonymous name, xref_tag is only called to
14018 make type node and push name. Name lookup is not required. */
14019 tree t = NULL_TREE;
14020 if (scope != ts_lambda && !anon_aggrname_p (name))
14021 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
14022
14023 if (t == error_mark_node)
14024 return error_mark_node;
14025
14026 if (scope != ts_current && t && current_class_type
14027 && template_class_depth (current_class_type)
14028 && template_header_p)
14029 {
14030 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
14031 return t;
14032
14033 /* Since SCOPE is not TS_CURRENT, we are not looking at a
14034 definition of this tag. Since, in addition, we are currently
14035 processing a (member) template declaration of a template
14036 class, we must be very careful; consider:
14037
14038 template <class X> struct S1
14039
14040 template <class U> struct S2
14041 {
14042 template <class V> friend struct S1;
14043 };
14044
14045 Here, the S2::S1 declaration should not be confused with the
14046 outer declaration. In particular, the inner version should
14047 have a template parameter of level 2, not level 1.
14048
14049 On the other hand, when presented with:
14050
14051 template <class T> struct S1
14052 {
14053 template <class U> struct S2 {};
14054 template <class U> friend struct S2;
14055 };
14056
14057 the friend must find S1::S2 eventually. We accomplish this
14058 by making sure that the new type we create to represent this
14059 declaration has the right TYPE_CONTEXT. */
14060 context = TYPE_CONTEXT (t);
14061 t = NULL_TREE;
14062 }
14063
14064 if (! t)
14065 {
14066 /* If no such tag is yet defined, create a forward-reference node
14067 and record it as the "definition".
14068 When a real declaration of this type is found,
14069 the forward-reference will be altered into a real type. */
14070 if (code == ENUMERAL_TYPE)
14071 {
14072 error ("use of enum %q#D without previous declaration", name);
14073 return error_mark_node;
14074 }
14075 else
14076 {
14077 t = make_class_type (code);
14078 TYPE_CONTEXT (t) = context;
14079 if (scope == ts_lambda)
14080 {
14081 /* Mark it as a lambda type. */
14082 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
14083 /* And push it into current scope. */
14084 scope = ts_current;
14085 }
14086 t = pushtag (name, t, scope);
14087 }
14088 }
14089 else
14090 {
14091 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
14092 {
14093 /* Check that we aren't trying to overload a class with different
14094 constraints. */
14095 tree constr = NULL_TREE;
14096 if (current_template_parms)
14097 {
14098 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
14099 constr = build_constraints (reqs, NULL_TREE);
14100 }
14101 if (!redeclare_class_template (t, current_template_parms, constr))
14102 return error_mark_node;
14103 }
14104 else if (!processing_template_decl
14105 && CLASS_TYPE_P (t)
14106 && CLASSTYPE_IS_TEMPLATE (t))
14107 {
14108 error ("redeclaration of %qT as a non-template", t);
14109 inform (location_of (t), "previous declaration %qD", t);
14110 return error_mark_node;
14111 }
14112
14113 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
14114 {
14115 /* This is no longer an invisible friend. Make it
14116 visible. */
14117 tree decl = TYPE_NAME (t);
14118
14119 DECL_ANTICIPATED (decl) = false;
14120 DECL_FRIEND_P (decl) = false;
14121
14122 if (TYPE_TEMPLATE_INFO (t))
14123 {
14124 tree tmpl = TYPE_TI_TEMPLATE (t);
14125 DECL_ANTICIPATED (tmpl) = false;
14126 DECL_FRIEND_P (tmpl) = false;
14127 }
14128 }
14129 }
14130
14131 return t;
14132 }
14133
14134 /* Wrapper for xref_tag_1. */
14135
14136 tree
14137 xref_tag (enum tag_types tag_code, tree name,
14138 tag_scope scope, bool template_header_p)
14139 {
14140 tree ret;
14141 bool subtime;
14142 subtime = timevar_cond_start (TV_NAME_LOOKUP);
14143 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
14144 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
14145 return ret;
14146 }
14147
14148
14149 tree
14150 xref_tag_from_type (tree old, tree id, tag_scope scope)
14151 {
14152 enum tag_types tag_kind;
14153
14154 if (TREE_CODE (old) == RECORD_TYPE)
14155 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
14156 else
14157 tag_kind = union_type;
14158
14159 if (id == NULL_TREE)
14160 id = TYPE_IDENTIFIER (old);
14161
14162 return xref_tag (tag_kind, id, scope, false);
14163 }
14164
14165 /* Create the binfo hierarchy for REF with (possibly NULL) base list
14166 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
14167 access_* node, and the TREE_VALUE is the type of the base-class.
14168 Non-NULL TREE_TYPE indicates virtual inheritance. */
14169
14170 void
14171 xref_basetypes (tree ref, tree base_list)
14172 {
14173 tree *basep;
14174 tree binfo, base_binfo;
14175 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
14176 unsigned max_bases = 0; /* Maximum direct bases. */
14177 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
14178 int i;
14179 tree default_access;
14180 tree igo_prev; /* Track Inheritance Graph Order. */
14181
14182 if (ref == error_mark_node)
14183 return;
14184
14185 /* The base of a derived class is private by default, all others are
14186 public. */
14187 default_access = (TREE_CODE (ref) == RECORD_TYPE
14188 && CLASSTYPE_DECLARED_CLASS (ref)
14189 ? access_private_node : access_public_node);
14190
14191 /* First, make sure that any templates in base-classes are
14192 instantiated. This ensures that if we call ourselves recursively
14193 we do not get confused about which classes are marked and which
14194 are not. */
14195 basep = &base_list;
14196 while (*basep)
14197 {
14198 tree basetype = TREE_VALUE (*basep);
14199
14200 /* The dependent_type_p call below should really be dependent_scope_p
14201 so that we give a hard error about using an incomplete type as a
14202 base, but we allow it with a pedwarn for backward
14203 compatibility. */
14204 if (processing_template_decl
14205 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
14206 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
14207 if (!dependent_type_p (basetype)
14208 && !complete_type_or_else (basetype, NULL))
14209 /* An incomplete type. Remove it from the list. */
14210 *basep = TREE_CHAIN (*basep);
14211 else
14212 {
14213 max_bases++;
14214 if (TREE_TYPE (*basep))
14215 max_dvbases++;
14216 if (CLASS_TYPE_P (basetype))
14217 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14218 basep = &TREE_CHAIN (*basep);
14219 }
14220 }
14221 max_vbases += max_dvbases;
14222
14223 TYPE_MARKED_P (ref) = 1;
14224
14225 /* The binfo slot should be empty, unless this is an (ill-formed)
14226 redefinition. */
14227 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
14228
14229 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
14230
14231 binfo = make_tree_binfo (max_bases);
14232
14233 TYPE_BINFO (ref) = binfo;
14234 BINFO_OFFSET (binfo) = size_zero_node;
14235 BINFO_TYPE (binfo) = ref;
14236
14237 /* Apply base-class info set up to the variants of this type. */
14238 fixup_type_variants (ref);
14239
14240 if (max_bases)
14241 {
14242 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
14243 /* A C++98 POD cannot have base classes. */
14244 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
14245
14246 if (TREE_CODE (ref) == UNION_TYPE)
14247 {
14248 error ("derived union %qT invalid", ref);
14249 return;
14250 }
14251 }
14252
14253 if (max_bases > 1)
14254 warning (OPT_Wmultiple_inheritance,
14255 "%qT defined with multiple direct bases", ref);
14256
14257 if (max_vbases)
14258 {
14259 /* An aggregate can't have virtual base classes. */
14260 CLASSTYPE_NON_AGGREGATE (ref) = true;
14261
14262 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
14263
14264 if (max_dvbases)
14265 warning (OPT_Wvirtual_inheritance,
14266 "%qT defined with direct virtual base", ref);
14267 }
14268
14269 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
14270 {
14271 tree access = TREE_PURPOSE (base_list);
14272 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
14273 tree basetype = TREE_VALUE (base_list);
14274
14275 if (access == access_default_node)
14276 access = default_access;
14277
14278 /* Before C++17, an aggregate cannot have base classes. In C++17, an
14279 aggregate can't have virtual, private, or protected base classes. */
14280 if (cxx_dialect < cxx17
14281 || access != access_public_node
14282 || via_virtual)
14283 CLASSTYPE_NON_AGGREGATE (ref) = true;
14284
14285 if (PACK_EXPANSION_P (basetype))
14286 basetype = PACK_EXPANSION_PATTERN (basetype);
14287 if (TREE_CODE (basetype) == TYPE_DECL)
14288 basetype = TREE_TYPE (basetype);
14289 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
14290 {
14291 error ("base type %qT fails to be a struct or class type",
14292 basetype);
14293 goto dropped_base;
14294 }
14295
14296 base_binfo = NULL_TREE;
14297 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
14298 {
14299 base_binfo = TYPE_BINFO (basetype);
14300 /* The original basetype could have been a typedef'd type. */
14301 basetype = BINFO_TYPE (base_binfo);
14302
14303 /* Inherit flags from the base. */
14304 TYPE_HAS_NEW_OPERATOR (ref)
14305 |= TYPE_HAS_NEW_OPERATOR (basetype);
14306 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
14307 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
14308 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
14309 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
14310 CLASSTYPE_DIAMOND_SHAPED_P (ref)
14311 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
14312 CLASSTYPE_REPEATED_BASE_P (ref)
14313 |= CLASSTYPE_REPEATED_BASE_P (basetype);
14314 }
14315
14316 /* We must do this test after we've seen through a typedef
14317 type. */
14318 if (TYPE_MARKED_P (basetype))
14319 {
14320 if (basetype == ref)
14321 error ("recursive type %qT undefined", basetype);
14322 else
14323 error ("duplicate base type %qT invalid", basetype);
14324 goto dropped_base;
14325 }
14326
14327 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
14328 /* Regenerate the pack expansion for the bases. */
14329 basetype = make_pack_expansion (basetype);
14330
14331 TYPE_MARKED_P (basetype) = 1;
14332
14333 base_binfo = copy_binfo (base_binfo, basetype, ref,
14334 &igo_prev, via_virtual);
14335 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
14336 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
14337
14338 BINFO_BASE_APPEND (binfo, base_binfo);
14339 BINFO_BASE_ACCESS_APPEND (binfo, access);
14340 continue;
14341
14342 dropped_base:
14343 /* Update max_vbases to reflect the reality that we are dropping
14344 this base: if it reaches zero we want to undo the vec_alloc
14345 above to avoid inconsistencies during error-recovery: eg, in
14346 build_special_member_call, CLASSTYPE_VBASECLASSES non null
14347 and vtt null (c++/27952). */
14348 if (via_virtual)
14349 max_vbases--;
14350 if (CLASS_TYPE_P (basetype))
14351 max_vbases
14352 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14353 }
14354
14355 if (CLASSTYPE_VBASECLASSES (ref)
14356 && max_vbases == 0)
14357 vec_free (CLASSTYPE_VBASECLASSES (ref));
14358
14359 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
14360 /* If we didn't get max_vbases vbases, we must have shared at
14361 least one of them, and are therefore diamond shaped. */
14362 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
14363
14364 /* Unmark all the types. */
14365 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
14366 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14367 TYPE_MARKED_P (ref) = 0;
14368
14369 /* Now see if we have a repeated base type. */
14370 if (!CLASSTYPE_REPEATED_BASE_P (ref))
14371 {
14372 for (base_binfo = binfo; base_binfo;
14373 base_binfo = TREE_CHAIN (base_binfo))
14374 {
14375 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14376 {
14377 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
14378 break;
14379 }
14380 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
14381 }
14382 for (base_binfo = binfo; base_binfo;
14383 base_binfo = TREE_CHAIN (base_binfo))
14384 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14385 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14386 else
14387 break;
14388 }
14389 }
14390
14391 \f
14392 /* Copies the enum-related properties from type SRC to type DST.
14393 Used with the underlying type of an enum and the enum itself. */
14394 static void
14395 copy_type_enum (tree dst, tree src)
14396 {
14397 tree t;
14398 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
14399 {
14400 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
14401 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
14402 TYPE_SIZE (t) = TYPE_SIZE (src);
14403 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
14404 SET_TYPE_MODE (dst, TYPE_MODE (src));
14405 TYPE_PRECISION (t) = TYPE_PRECISION (src);
14406 unsigned valign = TYPE_ALIGN (src);
14407 if (TYPE_USER_ALIGN (t))
14408 valign = MAX (valign, TYPE_ALIGN (t));
14409 else
14410 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
14411 SET_TYPE_ALIGN (t, valign);
14412 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
14413 }
14414 }
14415
14416 /* Begin compiling the definition of an enumeration type.
14417 NAME is its name,
14418
14419 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
14420
14421 UNDERLYING_TYPE is the type that will be used as the storage for
14422 the enumeration type. This should be NULL_TREE if no storage type
14423 was specified.
14424
14425 ATTRIBUTES are any attributes specified after the enum-key.
14426
14427 SCOPED_ENUM_P is true if this is a scoped enumeration type.
14428
14429 if IS_NEW is not NULL, gets TRUE iff a new type is created.
14430
14431 Returns the type object, as yet incomplete.
14432 Also records info about it so that build_enumerator
14433 may be used to declare the individual values as they are read. */
14434
14435 tree
14436 start_enum (tree name, tree enumtype, tree underlying_type,
14437 tree attributes, bool scoped_enum_p, bool *is_new)
14438 {
14439 tree prevtype = NULL_TREE;
14440 gcc_assert (identifier_p (name));
14441
14442 if (is_new)
14443 *is_new = false;
14444 /* [C++0x dcl.enum]p5:
14445
14446 If not explicitly specified, the underlying type of a scoped
14447 enumeration type is int. */
14448 if (!underlying_type && scoped_enum_p)
14449 underlying_type = integer_type_node;
14450
14451 if (underlying_type)
14452 underlying_type = cv_unqualified (underlying_type);
14453
14454 /* If this is the real definition for a previous forward reference,
14455 fill in the contents in the same object that used to be the
14456 forward reference. */
14457 if (!enumtype)
14458 enumtype = lookup_and_check_tag (enum_type, name,
14459 /*tag_scope=*/ts_current,
14460 /*template_header_p=*/false);
14461
14462 /* In case of a template_decl, the only check that should be deferred
14463 to instantiation time is the comparison of underlying types. */
14464 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14465 {
14466 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14467 {
14468 error_at (input_location, "scoped/unscoped mismatch "
14469 "in enum %q#T", enumtype);
14470 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14471 "previous definition here");
14472 enumtype = error_mark_node;
14473 }
14474 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14475 {
14476 error_at (input_location, "underlying type mismatch "
14477 "in enum %q#T", enumtype);
14478 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14479 "previous definition here");
14480 enumtype = error_mark_node;
14481 }
14482 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14483 && !same_type_p (underlying_type,
14484 ENUM_UNDERLYING_TYPE (enumtype)))
14485 {
14486 error_at (input_location, "different underlying type "
14487 "in enum %q#T", enumtype);
14488 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14489 "previous definition here");
14490 underlying_type = NULL_TREE;
14491 }
14492 }
14493
14494 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14495 || processing_template_decl)
14496 {
14497 /* In case of error, make a dummy enum to allow parsing to
14498 continue. */
14499 if (enumtype == error_mark_node)
14500 {
14501 name = make_anon_name ();
14502 enumtype = NULL_TREE;
14503 }
14504
14505 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14506 of an opaque enum, or an opaque enum of an already defined
14507 enumeration (C++11).
14508 In any other case, it'll be NULL_TREE. */
14509 if (!enumtype)
14510 {
14511 if (is_new)
14512 *is_new = true;
14513 }
14514 prevtype = enumtype;
14515
14516 /* Do not push the decl more than once. */
14517 if (!enumtype
14518 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
14519 {
14520 enumtype = cxx_make_type (ENUMERAL_TYPE);
14521 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14522
14523 /* std::byte aliases anything. */
14524 if (enumtype != error_mark_node
14525 && TYPE_CONTEXT (enumtype) == std_node
14526 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14527 TYPE_ALIAS_SET (enumtype) = 0;
14528 }
14529 else
14530 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14531 false);
14532
14533 if (enumtype == error_mark_node)
14534 return error_mark_node;
14535
14536 /* The enum is considered opaque until the opening '{' of the
14537 enumerator list. */
14538 SET_OPAQUE_ENUM_P (enumtype, true);
14539 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14540 }
14541
14542 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14543
14544 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14545
14546 if (underlying_type)
14547 {
14548 if (ENUM_UNDERLYING_TYPE (enumtype))
14549 /* We already checked that it matches, don't change it to a different
14550 typedef variant. */;
14551 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14552 {
14553 copy_type_enum (enumtype, underlying_type);
14554 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14555 }
14556 else if (dependent_type_p (underlying_type))
14557 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14558 else
14559 error ("underlying type %qT of %qT must be an integral type",
14560 underlying_type, enumtype);
14561 }
14562
14563 /* If into a template class, the returned enum is always the first
14564 declaration (opaque or not) seen. This way all the references to
14565 this type will be to the same declaration. The following ones are used
14566 only to check for definition errors. */
14567 if (prevtype && processing_template_decl)
14568 return prevtype;
14569 else
14570 return enumtype;
14571 }
14572
14573 /* After processing and defining all the values of an enumeration type,
14574 install their decls in the enumeration type.
14575 ENUMTYPE is the type object. */
14576
14577 void
14578 finish_enum_value_list (tree enumtype)
14579 {
14580 tree values;
14581 tree underlying_type;
14582 tree decl;
14583 tree value;
14584 tree minnode, maxnode;
14585 tree t;
14586
14587 bool fixed_underlying_type_p
14588 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14589
14590 /* We built up the VALUES in reverse order. */
14591 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14592
14593 /* For an enum defined in a template, just set the type of the values;
14594 all further processing is postponed until the template is
14595 instantiated. We need to set the type so that tsubst of a CONST_DECL
14596 works. */
14597 if (processing_template_decl)
14598 {
14599 for (values = TYPE_VALUES (enumtype);
14600 values;
14601 values = TREE_CHAIN (values))
14602 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14603 return;
14604 }
14605
14606 /* Determine the minimum and maximum values of the enumerators. */
14607 if (TYPE_VALUES (enumtype))
14608 {
14609 minnode = maxnode = NULL_TREE;
14610
14611 for (values = TYPE_VALUES (enumtype);
14612 values;
14613 values = TREE_CHAIN (values))
14614 {
14615 decl = TREE_VALUE (values);
14616
14617 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14618 each enumerator has the type of its enumeration. Prior to the
14619 closing brace, the type of each enumerator is the type of its
14620 initializing value. */
14621 TREE_TYPE (decl) = enumtype;
14622
14623 /* Update the minimum and maximum values, if appropriate. */
14624 value = DECL_INITIAL (decl);
14625 if (value == error_mark_node)
14626 value = integer_zero_node;
14627 /* Figure out what the minimum and maximum values of the
14628 enumerators are. */
14629 if (!minnode)
14630 minnode = maxnode = value;
14631 else if (tree_int_cst_lt (maxnode, value))
14632 maxnode = value;
14633 else if (tree_int_cst_lt (value, minnode))
14634 minnode = value;
14635 }
14636 }
14637 else
14638 /* [dcl.enum]
14639
14640 If the enumerator-list is empty, the underlying type is as if
14641 the enumeration had a single enumerator with value 0. */
14642 minnode = maxnode = integer_zero_node;
14643
14644 if (!fixed_underlying_type_p)
14645 {
14646 /* Compute the number of bits require to represent all values of the
14647 enumeration. We must do this before the type of MINNODE and
14648 MAXNODE are transformed, since tree_int_cst_min_precision relies
14649 on the TREE_TYPE of the value it is passed. */
14650 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14651 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14652 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14653 int precision = MAX (lowprec, highprec);
14654 unsigned int itk;
14655 bool use_short_enum;
14656
14657 /* Determine the underlying type of the enumeration.
14658
14659 [dcl.enum]
14660
14661 The underlying type of an enumeration is an integral type that
14662 can represent all the enumerator values defined in the
14663 enumeration. It is implementation-defined which integral type is
14664 used as the underlying type for an enumeration except that the
14665 underlying type shall not be larger than int unless the value of
14666 an enumerator cannot fit in an int or unsigned int.
14667
14668 We use "int" or an "unsigned int" as the underlying type, even if
14669 a smaller integral type would work, unless the user has
14670 explicitly requested that we use the smallest possible type. The
14671 user can request that for all enumerations with a command line
14672 flag, or for just one enumeration with an attribute. */
14673
14674 use_short_enum = flag_short_enums
14675 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14676
14677 /* If the precision of the type was specified with an attribute and it
14678 was too small, give an error. Otherwise, use it. */
14679 if (TYPE_PRECISION (enumtype))
14680 {
14681 if (precision > TYPE_PRECISION (enumtype))
14682 error ("specified mode too small for enumeral values");
14683 else
14684 {
14685 use_short_enum = true;
14686 precision = TYPE_PRECISION (enumtype);
14687 }
14688 }
14689
14690 for (itk = (use_short_enum ? itk_char : itk_int);
14691 itk != itk_none;
14692 itk++)
14693 {
14694 underlying_type = integer_types[itk];
14695 if (underlying_type != NULL_TREE
14696 && TYPE_PRECISION (underlying_type) >= precision
14697 && TYPE_SIGN (underlying_type) == sgn)
14698 break;
14699 }
14700 if (itk == itk_none)
14701 {
14702 /* DR 377
14703
14704 IF no integral type can represent all the enumerator values, the
14705 enumeration is ill-formed. */
14706 error ("no integral type can represent all of the enumerator values "
14707 "for %qT", enumtype);
14708 precision = TYPE_PRECISION (long_long_integer_type_node);
14709 underlying_type = integer_types[itk_unsigned_long_long];
14710 }
14711
14712 /* [dcl.enum]
14713
14714 The value of sizeof() applied to an enumeration type, an object
14715 of an enumeration type, or an enumerator, is the value of sizeof()
14716 applied to the underlying type. */
14717 copy_type_enum (enumtype, underlying_type);
14718
14719 /* Compute the minimum and maximum values for the type.
14720
14721 [dcl.enum]
14722
14723 For an enumeration where emin is the smallest enumerator and emax
14724 is the largest, the values of the enumeration are the values of the
14725 underlying type in the range bmin to bmax, where bmin and bmax are,
14726 respectively, the smallest and largest values of the smallest bit-
14727 field that can store emin and emax. */
14728
14729 /* The middle-end currently assumes that types with TYPE_PRECISION
14730 narrower than their underlying type are suitably zero or sign
14731 extended to fill their mode. Similarly, it assumes that the front
14732 end assures that a value of a particular type must be within
14733 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14734
14735 We used to set these fields based on bmin and bmax, but that led
14736 to invalid assumptions like optimizing away bounds checking. So
14737 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14738 TYPE_MAX_VALUE to the values for the mode above and only restrict
14739 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14740 ENUM_UNDERLYING_TYPE (enumtype)
14741 = build_distinct_type_copy (underlying_type);
14742 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14743 set_min_and_max_values_for_integral_type
14744 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14745
14746 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14747 if (flag_strict_enums)
14748 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14749 }
14750 else
14751 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14752
14753 /* Convert each of the enumerators to the type of the underlying
14754 type of the enumeration. */
14755 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14756 {
14757 location_t saved_location;
14758
14759 decl = TREE_VALUE (values);
14760 saved_location = input_location;
14761 input_location = DECL_SOURCE_LOCATION (decl);
14762 if (fixed_underlying_type_p)
14763 /* If the enumeration type has a fixed underlying type, we
14764 already checked all of the enumerator values. */
14765 value = DECL_INITIAL (decl);
14766 else
14767 value = perform_implicit_conversion (underlying_type,
14768 DECL_INITIAL (decl),
14769 tf_warning_or_error);
14770 input_location = saved_location;
14771
14772 /* Do not clobber shared ints. */
14773 if (value != error_mark_node)
14774 {
14775 value = copy_node (value);
14776
14777 TREE_TYPE (value) = enumtype;
14778 }
14779 DECL_INITIAL (decl) = value;
14780 }
14781
14782 /* Fix up all variant types of this enum type. */
14783 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14784 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14785
14786 if (at_class_scope_p ()
14787 && COMPLETE_TYPE_P (current_class_type)
14788 && UNSCOPED_ENUM_P (enumtype))
14789 {
14790 insert_late_enum_def_bindings (current_class_type, enumtype);
14791 /* TYPE_FIELDS needs fixup. */
14792 fixup_type_variants (current_class_type);
14793 }
14794
14795 /* Finish debugging output for this type. */
14796 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14797
14798 /* Each enumerator now has the type of its enumeration. Clear the cache
14799 so that this change in types doesn't confuse us later on. */
14800 clear_cv_and_fold_caches ();
14801 }
14802
14803 /* Finishes the enum type. This is called only the first time an
14804 enumeration is seen, be it opaque or odinary.
14805 ENUMTYPE is the type object. */
14806
14807 void
14808 finish_enum (tree enumtype)
14809 {
14810 if (processing_template_decl)
14811 {
14812 if (at_function_scope_p ())
14813 add_stmt (build_min (TAG_DEFN, enumtype));
14814 return;
14815 }
14816
14817 /* If this is a forward declaration, there should not be any variants,
14818 though we can get a variant in the middle of an enum-specifier with
14819 wacky code like 'enum E { e = sizeof(const E*) };' */
14820 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14821 && (TYPE_VALUES (enumtype)
14822 || !TYPE_NEXT_VARIANT (enumtype)));
14823 }
14824
14825 /* Build and install a CONST_DECL for an enumeration constant of the
14826 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14827 Apply ATTRIBUTES if available. LOC is the location of NAME.
14828 Assignment of sequential values by default is handled here. */
14829
14830 void
14831 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14832 location_t loc)
14833 {
14834 tree decl;
14835 tree context;
14836 tree type;
14837
14838 /* scalar_constant_value will pull out this expression, so make sure
14839 it's folded as appropriate. */
14840 if (processing_template_decl)
14841 value = fold_non_dependent_expr (value);
14842
14843 /* If the VALUE was erroneous, pretend it wasn't there; that will
14844 result in the enum being assigned the next value in sequence. */
14845 if (value == error_mark_node)
14846 value = NULL_TREE;
14847
14848 /* Remove no-op casts from the value. */
14849 if (value)
14850 STRIP_TYPE_NOPS (value);
14851
14852 if (! processing_template_decl)
14853 {
14854 /* Validate and default VALUE. */
14855 if (value != NULL_TREE)
14856 {
14857 if (!ENUM_UNDERLYING_TYPE (enumtype))
14858 {
14859 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14860 value, true);
14861 if (tmp_value)
14862 value = tmp_value;
14863 }
14864 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14865 (TREE_TYPE (value)))
14866 value = perform_implicit_conversion_flags
14867 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14868 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14869
14870 if (value == error_mark_node)
14871 value = NULL_TREE;
14872
14873 if (value != NULL_TREE)
14874 {
14875 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14876 (TREE_TYPE (value)))
14877 {
14878 error ("enumerator value for %qD must have integral or "
14879 "unscoped enumeration type", name);
14880 value = NULL_TREE;
14881 }
14882 else
14883 {
14884 value = cxx_constant_value (value);
14885
14886 if (TREE_CODE (value) != INTEGER_CST)
14887 {
14888 error ("enumerator value for %qD is not an integer "
14889 "constant", name);
14890 value = NULL_TREE;
14891 }
14892 }
14893 }
14894 }
14895
14896 /* Default based on previous value. */
14897 if (value == NULL_TREE)
14898 {
14899 if (TYPE_VALUES (enumtype))
14900 {
14901 tree prev_value;
14902
14903 /* C++03 7.2/4: If no initializer is specified for the first
14904 enumerator, the type is an unspecified integral
14905 type. Otherwise the type is the same as the type of the
14906 initializing value of the preceding enumerator unless the
14907 incremented value is not representable in that type, in
14908 which case the type is an unspecified integral type
14909 sufficient to contain the incremented value. */
14910 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14911 if (error_operand_p (prev_value))
14912 value = error_mark_node;
14913 else
14914 {
14915 wi::overflow_type overflowed;
14916 tree type = TREE_TYPE (prev_value);
14917 signop sgn = TYPE_SIGN (type);
14918 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14919 &overflowed);
14920 if (!overflowed)
14921 {
14922 bool pos = !wi::neg_p (wi, sgn);
14923 if (!wi::fits_to_tree_p (wi, type))
14924 {
14925 unsigned int itk;
14926 for (itk = itk_int; itk != itk_none; itk++)
14927 {
14928 type = integer_types[itk];
14929 if (type != NULL_TREE
14930 && (pos || !TYPE_UNSIGNED (type))
14931 && wi::fits_to_tree_p (wi, type))
14932 break;
14933 }
14934 if (type && cxx_dialect < cxx11
14935 && itk > itk_unsigned_long)
14936 pedwarn (input_location, OPT_Wlong_long,
14937 pos ? G_("\
14938 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14939 incremented enumerator value is too large for %<long%>"));
14940 }
14941 if (type == NULL_TREE)
14942 overflowed = wi::OVF_UNKNOWN;
14943 else
14944 value = wide_int_to_tree (type, wi);
14945 }
14946
14947 if (overflowed)
14948 {
14949 error ("overflow in enumeration values at %qD", name);
14950 value = error_mark_node;
14951 }
14952 }
14953 }
14954 else
14955 value = integer_zero_node;
14956 }
14957
14958 /* Remove no-op casts from the value. */
14959 STRIP_TYPE_NOPS (value);
14960
14961 /* If the underlying type of the enum is fixed, check whether
14962 the enumerator values fits in the underlying type. If it
14963 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14964 if (ENUM_UNDERLYING_TYPE (enumtype)
14965 && value
14966 && TREE_CODE (value) == INTEGER_CST)
14967 {
14968 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14969 error ("enumerator value %qE is outside the range of underlying "
14970 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14971
14972 /* Convert the value to the appropriate type. */
14973 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14974 }
14975 }
14976
14977 /* C++ associates enums with global, function, or class declarations. */
14978 context = current_scope ();
14979
14980 /* Build the actual enumeration constant. Note that the enumeration
14981 constants have the underlying type of the enum (if it is fixed)
14982 or the type of their initializer (if the underlying type of the
14983 enum is not fixed):
14984
14985 [ C++0x dcl.enum ]
14986
14987 If the underlying type is fixed, the type of each enumerator
14988 prior to the closing brace is the underlying type; if the
14989 initializing value of an enumerator cannot be represented by
14990 the underlying type, the program is ill-formed. If the
14991 underlying type is not fixed, the type of each enumerator is
14992 the type of its initializing value.
14993
14994 If the underlying type is not fixed, it will be computed by
14995 finish_enum and we will reset the type of this enumerator. Of
14996 course, if we're processing a template, there may be no value. */
14997 type = value ? TREE_TYPE (value) : NULL_TREE;
14998
14999 decl = build_decl (loc, CONST_DECL, name, type);
15000
15001 DECL_CONTEXT (decl) = enumtype;
15002 TREE_CONSTANT (decl) = 1;
15003 TREE_READONLY (decl) = 1;
15004 DECL_INITIAL (decl) = value;
15005
15006 if (attributes)
15007 cplus_decl_attributes (&decl, attributes, 0);
15008
15009 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
15010 {
15011 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
15012 on the TYPE_FIELDS list for `S'. (That's so that you can say
15013 things like `S::i' later.) */
15014
15015 /* The enumerator may be getting declared outside of its enclosing
15016 class, like so:
15017
15018 class S { public: enum E : int; }; enum S::E : int { i = 7; };
15019
15020 For which case we need to make sure that the access of `S::i'
15021 matches the access of `S::E'. */
15022 tree saved_cas = current_access_specifier;
15023 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
15024 current_access_specifier = access_private_node;
15025 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
15026 current_access_specifier = access_protected_node;
15027 else
15028 current_access_specifier = access_public_node;
15029
15030 finish_member_declaration (decl);
15031
15032 current_access_specifier = saved_cas;
15033 }
15034 else
15035 pushdecl (decl);
15036
15037 /* Add this enumeration constant to the list for this type. */
15038 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
15039 }
15040
15041 /* Look for an enumerator with the given NAME within the enumeration
15042 type ENUMTYPE. This routine is used primarily for qualified name
15043 lookup into an enumerator in C++0x, e.g.,
15044
15045 enum class Color { Red, Green, Blue };
15046
15047 Color color = Color::Red;
15048
15049 Returns the value corresponding to the enumerator, or
15050 NULL_TREE if no such enumerator was found. */
15051 tree
15052 lookup_enumerator (tree enumtype, tree name)
15053 {
15054 tree e;
15055 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
15056
15057 e = purpose_member (name, TYPE_VALUES (enumtype));
15058 return e? TREE_VALUE (e) : NULL_TREE;
15059 }
15060
15061 \f
15062 /* We're defining DECL. Make sure that its type is OK. */
15063
15064 static void
15065 check_function_type (tree decl, tree current_function_parms)
15066 {
15067 tree fntype = TREE_TYPE (decl);
15068 tree return_type = complete_type (TREE_TYPE (fntype));
15069
15070 /* In a function definition, arg types must be complete. */
15071 require_complete_types_for_parms (current_function_parms);
15072
15073 if (dependent_type_p (return_type)
15074 || type_uses_auto (return_type))
15075 return;
15076 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
15077 {
15078 tree args = TYPE_ARG_TYPES (fntype);
15079
15080 error ("return type %q#T is incomplete", return_type);
15081
15082 /* Make it return void instead. */
15083 if (TREE_CODE (fntype) == METHOD_TYPE)
15084 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
15085 void_type_node,
15086 TREE_CHAIN (args));
15087 else
15088 fntype = build_function_type (void_type_node, args);
15089 fntype = (cp_build_type_attribute_variant
15090 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
15091 fntype = cxx_copy_lang_qualifiers (fntype, TREE_TYPE (decl));
15092 TREE_TYPE (decl) = fntype;
15093 }
15094 else
15095 {
15096 abstract_virtuals_error (decl, TREE_TYPE (fntype));
15097 maybe_warn_parm_abi (TREE_TYPE (fntype),
15098 DECL_SOURCE_LOCATION (decl));
15099 }
15100 }
15101
15102 /* True iff FN is an implicitly-defined default constructor. */
15103
15104 static bool
15105 implicit_default_ctor_p (tree fn)
15106 {
15107 return (DECL_CONSTRUCTOR_P (fn)
15108 && !user_provided_p (fn)
15109 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
15110 }
15111
15112 /* Clobber the contents of *this to let the back end know that the object
15113 storage is dead when we enter the constructor or leave the destructor. */
15114
15115 static tree
15116 build_clobber_this ()
15117 {
15118 /* Clobbering an empty base is pointless, and harmful if its one byte
15119 TYPE_SIZE overlays real data. */
15120 if (is_empty_class (current_class_type))
15121 return void_node;
15122
15123 /* If we have virtual bases, clobber the whole object, but only if we're in
15124 charge. If we don't have virtual bases, clobber the as-base type so we
15125 don't mess with tail padding. */
15126 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
15127
15128 tree ctype = current_class_type;
15129 if (!vbases)
15130 ctype = CLASSTYPE_AS_BASE (ctype);
15131
15132 tree clobber = build_clobber (ctype);
15133
15134 tree thisref = current_class_ref;
15135 if (ctype != current_class_type)
15136 {
15137 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
15138 thisref = convert_from_reference (thisref);
15139 }
15140
15141 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
15142 if (vbases)
15143 exprstmt = build_if_in_charge (exprstmt);
15144
15145 return exprstmt;
15146 }
15147
15148 /* Create the FUNCTION_DECL for a function definition.
15149 DECLSPECS and DECLARATOR are the parts of the declaration;
15150 they describe the function's name and the type it returns,
15151 but twisted together in a fashion that parallels the syntax of C.
15152
15153 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
15154 DECLARATOR is really the DECL for the function we are about to
15155 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
15156 indicating that the function is an inline defined in-class.
15157
15158 This function creates a binding context for the function body
15159 as well as setting up the FUNCTION_DECL in current_function_decl.
15160
15161 For C++, we must first check whether that datum makes any sense.
15162 For example, "class A local_a(1,2);" means that variable local_a
15163 is an aggregate of type A, which should have a constructor
15164 applied to it with the argument list [1, 2].
15165
15166 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
15167 or may be a BLOCK if the function has been defined previously
15168 in this translation unit. On exit, DECL_INITIAL (decl1) will be
15169 error_mark_node if the function has never been defined, or
15170 a BLOCK if the function has been defined somewhere. */
15171
15172 bool
15173 start_preparsed_function (tree decl1, tree attrs, int flags)
15174 {
15175 tree ctype = NULL_TREE;
15176 tree fntype;
15177 tree restype;
15178 int doing_friend = 0;
15179 cp_binding_level *bl;
15180 tree current_function_parms;
15181 struct c_fileinfo *finfo
15182 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
15183 bool honor_interface;
15184
15185 /* Sanity check. */
15186 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
15187 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
15188
15189 fntype = TREE_TYPE (decl1);
15190 if (TREE_CODE (fntype) == METHOD_TYPE)
15191 ctype = TYPE_METHOD_BASETYPE (fntype);
15192
15193 /* ISO C++ 11.4/5. A friend function defined in a class is in
15194 the (lexical) scope of the class in which it is defined. */
15195 if (!ctype && DECL_FRIEND_P (decl1))
15196 {
15197 ctype = DECL_FRIEND_CONTEXT (decl1);
15198
15199 /* CTYPE could be null here if we're dealing with a template;
15200 for example, `inline friend float foo()' inside a template
15201 will have no CTYPE set. */
15202 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
15203 ctype = NULL_TREE;
15204 else
15205 doing_friend = 1;
15206 }
15207
15208 if (DECL_DECLARED_INLINE_P (decl1)
15209 && lookup_attribute ("noinline", attrs))
15210 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
15211 "inline function %qD given attribute noinline", decl1);
15212
15213 /* Handle gnu_inline attribute. */
15214 if (GNU_INLINE_P (decl1))
15215 {
15216 DECL_EXTERNAL (decl1) = 1;
15217 DECL_NOT_REALLY_EXTERN (decl1) = 0;
15218 DECL_INTERFACE_KNOWN (decl1) = 1;
15219 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
15220 }
15221
15222 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
15223 /* This is a constructor, we must ensure that any default args
15224 introduced by this definition are propagated to the clones
15225 now. The clones are used directly in overload resolution. */
15226 adjust_clone_args (decl1);
15227
15228 /* Sometimes we don't notice that a function is a static member, and
15229 build a METHOD_TYPE for it. Fix that up now. */
15230 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
15231 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
15232
15233 /* Set up current_class_type, and enter the scope of the class, if
15234 appropriate. */
15235 if (ctype)
15236 push_nested_class (ctype);
15237 else if (DECL_STATIC_FUNCTION_P (decl1))
15238 push_nested_class (DECL_CONTEXT (decl1));
15239
15240 /* Now that we have entered the scope of the class, we must restore
15241 the bindings for any template parameters surrounding DECL1, if it
15242 is an inline member template. (Order is important; consider the
15243 case where a template parameter has the same name as a field of
15244 the class.) It is not until after this point that
15245 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
15246 if (flags & SF_INCLASS_INLINE)
15247 maybe_begin_member_template_processing (decl1);
15248
15249 /* Effective C++ rule 15. */
15250 if (warn_ecpp
15251 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
15252 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
15253 && VOID_TYPE_P (TREE_TYPE (fntype)))
15254 warning (OPT_Weffc__,
15255 "%<operator=%> should return a reference to %<*this%>");
15256
15257 /* Make the init_value nonzero so pushdecl knows this is not tentative.
15258 error_mark_node is replaced below (in poplevel) with the BLOCK. */
15259 if (!DECL_INITIAL (decl1))
15260 DECL_INITIAL (decl1) = error_mark_node;
15261
15262 /* This function exists in static storage.
15263 (This does not mean `static' in the C sense!) */
15264 TREE_STATIC (decl1) = 1;
15265
15266 /* We must call push_template_decl after current_class_type is set
15267 up. (If we are processing inline definitions after exiting a
15268 class scope, current_class_type will be NULL_TREE until set above
15269 by push_nested_class.) */
15270 if (processing_template_decl)
15271 {
15272 tree newdecl1 = push_template_decl (decl1);
15273 if (newdecl1 == error_mark_node)
15274 {
15275 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
15276 pop_nested_class ();
15277 return false;
15278 }
15279 decl1 = newdecl1;
15280 }
15281
15282 /* Make sure the parameter and return types are reasonable. When
15283 you declare a function, these types can be incomplete, but they
15284 must be complete when you define the function. */
15285 check_function_type (decl1, DECL_ARGUMENTS (decl1));
15286
15287 /* Build the return declaration for the function. */
15288 restype = TREE_TYPE (fntype);
15289
15290 if (DECL_RESULT (decl1) == NULL_TREE)
15291 {
15292 tree resdecl;
15293
15294 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
15295 DECL_ARTIFICIAL (resdecl) = 1;
15296 DECL_IGNORED_P (resdecl) = 1;
15297 DECL_RESULT (decl1) = resdecl;
15298
15299 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
15300 }
15301
15302 /* Record the decl so that the function name is defined.
15303 If we already have a decl for this name, and it is a FUNCTION_DECL,
15304 use the old decl. */
15305 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
15306 {
15307 /* A specialization is not used to guide overload resolution. */
15308 if (!DECL_FUNCTION_MEMBER_P (decl1)
15309 && !(DECL_USE_TEMPLATE (decl1) &&
15310 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
15311 {
15312 tree olddecl = pushdecl (decl1);
15313
15314 if (olddecl == error_mark_node)
15315 /* If something went wrong when registering the declaration,
15316 use DECL1; we have to have a FUNCTION_DECL to use when
15317 parsing the body of the function. */
15318 ;
15319 else
15320 {
15321 /* Otherwise, OLDDECL is either a previous declaration
15322 of the same function or DECL1 itself. */
15323
15324 if (warn_missing_declarations
15325 && olddecl == decl1
15326 && !DECL_MAIN_P (decl1)
15327 && TREE_PUBLIC (decl1)
15328 && !DECL_DECLARED_INLINE_P (decl1))
15329 {
15330 tree context;
15331
15332 /* Check whether DECL1 is in an anonymous
15333 namespace. */
15334 for (context = DECL_CONTEXT (decl1);
15335 context;
15336 context = DECL_CONTEXT (context))
15337 {
15338 if (TREE_CODE (context) == NAMESPACE_DECL
15339 && DECL_NAME (context) == NULL_TREE)
15340 break;
15341 }
15342
15343 if (context == NULL)
15344 warning_at (DECL_SOURCE_LOCATION (decl1),
15345 OPT_Wmissing_declarations,
15346 "no previous declaration for %qD", decl1);
15347 }
15348
15349 decl1 = olddecl;
15350 }
15351 }
15352 else
15353 {
15354 /* We need to set the DECL_CONTEXT. */
15355 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
15356 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
15357 }
15358 fntype = TREE_TYPE (decl1);
15359 restype = TREE_TYPE (fntype);
15360
15361 /* If #pragma weak applies, mark the decl appropriately now.
15362 The pragma only applies to global functions. Because
15363 determining whether or not the #pragma applies involves
15364 computing the mangled name for the declaration, we cannot
15365 apply the pragma until after we have merged this declaration
15366 with any previous declarations; if the original declaration
15367 has a linkage specification, that specification applies to
15368 the definition as well, and may affect the mangled name. */
15369 if (DECL_FILE_SCOPE_P (decl1))
15370 maybe_apply_pragma_weak (decl1);
15371 }
15372
15373 /* We are now in the scope of the function being defined. */
15374 current_function_decl = decl1;
15375
15376 /* Save the parm names or decls from this function's declarator
15377 where store_parm_decls will find them. */
15378 current_function_parms = DECL_ARGUMENTS (decl1);
15379
15380 /* Let the user know we're compiling this function. */
15381 announce_function (decl1);
15382
15383 gcc_assert (DECL_INITIAL (decl1));
15384
15385 /* This function may already have been parsed, in which case just
15386 return; our caller will skip over the body without parsing. */
15387 if (DECL_INITIAL (decl1) != error_mark_node)
15388 return true;
15389
15390 /* Initialize RTL machinery. We cannot do this until
15391 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
15392 even when processing a template; this is how we get
15393 CFUN set up, and our per-function variables initialized.
15394 FIXME factor out the non-RTL stuff. */
15395 bl = current_binding_level;
15396 allocate_struct_function (decl1, processing_template_decl);
15397
15398 /* Initialize the language data structures. Whenever we start
15399 a new function, we destroy temporaries in the usual way. */
15400 cfun->language = ggc_cleared_alloc<language_function> ();
15401 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15402 current_binding_level = bl;
15403
15404 if (!processing_template_decl && type_uses_auto (restype))
15405 {
15406 FNDECL_USED_AUTO (decl1) = true;
15407 current_function_auto_return_pattern = restype;
15408 }
15409
15410 /* Start the statement-tree, start the tree now. */
15411 DECL_SAVED_TREE (decl1) = push_stmt_list ();
15412
15413 /* If we are (erroneously) defining a function that we have already
15414 defined before, wipe out what we knew before. */
15415 if (!DECL_PENDING_INLINE_P (decl1))
15416 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
15417
15418 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
15419 {
15420 /* We know that this was set up by `grokclassfn'. We do not
15421 wait until `store_parm_decls', since evil parse errors may
15422 never get us to that point. Here we keep the consistency
15423 between `current_class_type' and `current_class_ptr'. */
15424 tree t = DECL_ARGUMENTS (decl1);
15425
15426 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
15427 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
15428
15429 cp_function_chain->x_current_class_ref
15430 = cp_build_fold_indirect_ref (t);
15431 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
15432 cp_function_chain->x_current_class_ptr = t;
15433
15434 /* Constructors and destructors need to know whether they're "in
15435 charge" of initializing virtual base classes. */
15436 t = DECL_CHAIN (t);
15437 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15438 {
15439 current_in_charge_parm = t;
15440 t = DECL_CHAIN (t);
15441 }
15442 if (DECL_HAS_VTT_PARM_P (decl1))
15443 {
15444 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15445 current_vtt_parm = t;
15446 }
15447 }
15448
15449 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15450 /* Implicitly-defined methods (like the
15451 destructor for a class in which no destructor
15452 is explicitly declared) must not be defined
15453 until their definition is needed. So, we
15454 ignore interface specifications for
15455 compiler-generated functions. */
15456 && !DECL_ARTIFICIAL (decl1));
15457
15458 if (processing_template_decl)
15459 /* Don't mess with interface flags. */;
15460 else if (DECL_INTERFACE_KNOWN (decl1))
15461 {
15462 tree ctx = decl_function_context (decl1);
15463
15464 if (DECL_NOT_REALLY_EXTERN (decl1))
15465 DECL_EXTERNAL (decl1) = 0;
15466
15467 if (ctx != NULL_TREE && vague_linkage_p (ctx))
15468 /* This is a function in a local class in an extern inline
15469 or template function. */
15470 comdat_linkage (decl1);
15471 }
15472 /* If this function belongs to an interface, it is public.
15473 If it belongs to someone else's interface, it is also external.
15474 This only affects inlines and template instantiations. */
15475 else if (!finfo->interface_unknown && honor_interface)
15476 {
15477 if (DECL_DECLARED_INLINE_P (decl1)
15478 || DECL_TEMPLATE_INSTANTIATION (decl1))
15479 {
15480 DECL_EXTERNAL (decl1)
15481 = (finfo->interface_only
15482 || (DECL_DECLARED_INLINE_P (decl1)
15483 && ! flag_implement_inlines
15484 && !DECL_VINDEX (decl1)));
15485
15486 /* For WIN32 we also want to put these in linkonce sections. */
15487 maybe_make_one_only (decl1);
15488 }
15489 else
15490 DECL_EXTERNAL (decl1) = 0;
15491 DECL_INTERFACE_KNOWN (decl1) = 1;
15492 /* If this function is in an interface implemented in this file,
15493 make sure that the back end knows to emit this function
15494 here. */
15495 if (!DECL_EXTERNAL (decl1))
15496 mark_needed (decl1);
15497 }
15498 else if (finfo->interface_unknown && finfo->interface_only
15499 && honor_interface)
15500 {
15501 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15502 interface, we will have both finfo->interface_unknown and
15503 finfo->interface_only set. In that case, we don't want to
15504 use the normal heuristics because someone will supply a
15505 #pragma implementation elsewhere, and deducing it here would
15506 produce a conflict. */
15507 comdat_linkage (decl1);
15508 DECL_EXTERNAL (decl1) = 0;
15509 DECL_INTERFACE_KNOWN (decl1) = 1;
15510 DECL_DEFER_OUTPUT (decl1) = 1;
15511 }
15512 else
15513 {
15514 /* This is a definition, not a reference.
15515 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15516 if (!GNU_INLINE_P (decl1))
15517 DECL_EXTERNAL (decl1) = 0;
15518
15519 if ((DECL_DECLARED_INLINE_P (decl1)
15520 || DECL_TEMPLATE_INSTANTIATION (decl1))
15521 && ! DECL_INTERFACE_KNOWN (decl1))
15522 DECL_DEFER_OUTPUT (decl1) = 1;
15523 else
15524 DECL_INTERFACE_KNOWN (decl1) = 1;
15525 }
15526
15527 /* Determine the ELF visibility attribute for the function. We must not
15528 do this before calling "pushdecl", as we must allow "duplicate_decls"
15529 to merge any attributes appropriately. We also need to wait until
15530 linkage is set. */
15531 if (!DECL_CLONED_FUNCTION_P (decl1))
15532 determine_visibility (decl1);
15533
15534 if (!processing_template_decl)
15535 maybe_instantiate_noexcept (decl1);
15536
15537 begin_scope (sk_function_parms, decl1);
15538
15539 ++function_depth;
15540
15541 if (DECL_DESTRUCTOR_P (decl1)
15542 || (DECL_CONSTRUCTOR_P (decl1)
15543 && targetm.cxx.cdtor_returns_this ()))
15544 {
15545 cdtor_label = create_artificial_label (input_location);
15546 LABEL_DECL_CDTOR (cdtor_label) = true;
15547 }
15548
15549 start_fname_decls ();
15550
15551 store_parm_decls (current_function_parms);
15552
15553 if (!processing_template_decl
15554 && (flag_lifetime_dse > 1)
15555 && DECL_CONSTRUCTOR_P (decl1)
15556 && !DECL_CLONED_FUNCTION_P (decl1)
15557 /* Clobbering an empty base is harmful if it overlays real data. */
15558 && !is_empty_class (current_class_type)
15559 /* We can't clobber safely for an implicitly-defined default constructor
15560 because part of the initialization might happen before we enter the
15561 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15562 && !implicit_default_ctor_p (decl1))
15563 finish_expr_stmt (build_clobber_this ());
15564
15565 if (!processing_template_decl
15566 && DECL_CONSTRUCTOR_P (decl1)
15567 && sanitize_flags_p (SANITIZE_VPTR)
15568 && !DECL_CLONED_FUNCTION_P (decl1)
15569 && !implicit_default_ctor_p (decl1))
15570 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15571
15572 start_lambda_scope (decl1);
15573
15574 return true;
15575 }
15576
15577
15578 /* Like start_preparsed_function, except that instead of a
15579 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15580
15581 Returns true on success. If the DECLARATOR is not suitable
15582 for a function, we return false, which tells the parser to
15583 skip the entire function. */
15584
15585 bool
15586 start_function (cp_decl_specifier_seq *declspecs,
15587 const cp_declarator *declarator,
15588 tree attrs)
15589 {
15590 tree decl1;
15591
15592 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15593 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15594 if (decl1 == error_mark_node)
15595 return false;
15596 /* If the declarator is not suitable for a function definition,
15597 cause a syntax error. */
15598 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15599 {
15600 error ("invalid function declaration");
15601 return false;
15602 }
15603
15604 if (DECL_MAIN_P (decl1))
15605 /* main must return int. grokfndecl should have corrected it
15606 (and issued a diagnostic) if the user got it wrong. */
15607 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15608 integer_type_node));
15609
15610 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15611 }
15612 \f
15613 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15614 FN. */
15615
15616 static bool
15617 use_eh_spec_block (tree fn)
15618 {
15619 return (flag_exceptions && flag_enforce_eh_specs
15620 && !processing_template_decl
15621 && !type_throw_all_p (TREE_TYPE (fn))
15622 /* We insert the EH_SPEC_BLOCK only in the original
15623 function; then, it is copied automatically to the
15624 clones. */
15625 && !DECL_CLONED_FUNCTION_P (fn)
15626 /* Implicitly-generated constructors and destructors have
15627 exception specifications. However, those specifications
15628 are the union of the possible exceptions specified by the
15629 constructors/destructors for bases and members, so no
15630 unallowed exception will ever reach this function. By
15631 not creating the EH_SPEC_BLOCK we save a little memory,
15632 and we avoid spurious warnings about unreachable
15633 code. */
15634 && !DECL_DEFAULTED_FN (fn));
15635 }
15636
15637 /* Store the parameter declarations into the current function declaration.
15638 This is called after parsing the parameter declarations, before
15639 digesting the body of the function.
15640
15641 Also install to binding contour return value identifier, if any. */
15642
15643 static void
15644 store_parm_decls (tree current_function_parms)
15645 {
15646 tree fndecl = current_function_decl;
15647 tree parm;
15648
15649 /* This is a chain of any other decls that came in among the parm
15650 declarations. If a parm is declared with enum {foo, bar} x;
15651 then CONST_DECLs for foo and bar are put here. */
15652 tree nonparms = NULL_TREE;
15653
15654 if (current_function_parms)
15655 {
15656 /* This case is when the function was defined with an ANSI prototype.
15657 The parms already have decls, so we need not do anything here
15658 except record them as in effect
15659 and complain if any redundant old-style parm decls were written. */
15660
15661 tree specparms = current_function_parms;
15662 tree next;
15663
15664 /* Must clear this because it might contain TYPE_DECLs declared
15665 at class level. */
15666 current_binding_level->names = NULL;
15667
15668 /* If we're doing semantic analysis, then we'll call pushdecl
15669 for each of these. We must do them in reverse order so that
15670 they end in the correct forward order. */
15671 specparms = nreverse (specparms);
15672
15673 for (parm = specparms; parm; parm = next)
15674 {
15675 next = DECL_CHAIN (parm);
15676 if (TREE_CODE (parm) == PARM_DECL)
15677 pushdecl (parm);
15678 else
15679 {
15680 /* If we find an enum constant or a type tag,
15681 put it aside for the moment. */
15682 TREE_CHAIN (parm) = NULL_TREE;
15683 nonparms = chainon (nonparms, parm);
15684 }
15685 }
15686
15687 /* Get the decls in their original chain order and record in the
15688 function. This is all and only the PARM_DECLs that were
15689 pushed into scope by the loop above. */
15690 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15691 }
15692 else
15693 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15694
15695 /* Now store the final chain of decls for the arguments
15696 as the decl-chain of the current lexical scope.
15697 Put the enumerators in as well, at the front so that
15698 DECL_ARGUMENTS is not modified. */
15699 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15700
15701 if (use_eh_spec_block (current_function_decl))
15702 current_eh_spec_block = begin_eh_spec_block ();
15703 }
15704
15705 \f
15706 /* We have finished doing semantic analysis on DECL, but have not yet
15707 generated RTL for its body. Save away our current state, so that
15708 when we want to generate RTL later we know what to do. */
15709
15710 static void
15711 save_function_data (tree decl)
15712 {
15713 struct language_function *f;
15714
15715 /* Save the language-specific per-function data so that we can
15716 get it back when we really expand this function. */
15717 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15718
15719 /* Make a copy. */
15720 f = ggc_alloc<language_function> ();
15721 memcpy (f, cp_function_chain, sizeof (struct language_function));
15722 DECL_SAVED_FUNCTION_DATA (decl) = f;
15723
15724 /* Clear out the bits we don't need. */
15725 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15726 f->bindings = NULL;
15727 f->base.local_typedefs = NULL;
15728 }
15729
15730
15731 /* Set the return value of the constructor (if present). */
15732
15733 static void
15734 finish_constructor_body (void)
15735 {
15736 tree val;
15737 tree exprstmt;
15738
15739 if (targetm.cxx.cdtor_returns_this ())
15740 {
15741 /* Any return from a constructor will end up here. */
15742 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15743
15744 val = DECL_ARGUMENTS (current_function_decl);
15745 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15746 DECL_RESULT (current_function_decl), val);
15747 /* Return the address of the object. */
15748 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15749 add_stmt (exprstmt);
15750 }
15751 }
15752
15753 /* Do all the processing for the beginning of a destructor; set up the
15754 vtable pointers and cleanups for bases and members. */
15755
15756 static void
15757 begin_destructor_body (void)
15758 {
15759 tree compound_stmt;
15760
15761 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15762 issued an error message. We still want to try to process the
15763 body of the function, but initialize_vtbl_ptrs will crash if
15764 TYPE_BINFO is NULL. */
15765 if (COMPLETE_TYPE_P (current_class_type))
15766 {
15767 compound_stmt = begin_compound_stmt (0);
15768 /* Make all virtual function table pointers in non-virtual base
15769 classes point to CURRENT_CLASS_TYPE's virtual function
15770 tables. */
15771 initialize_vtbl_ptrs (current_class_ptr);
15772 finish_compound_stmt (compound_stmt);
15773
15774 if (flag_lifetime_dse
15775 /* Clobbering an empty base is harmful if it overlays real data. */
15776 && !is_empty_class (current_class_type))
15777 {
15778 if (sanitize_flags_p (SANITIZE_VPTR)
15779 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15780 && TYPE_CONTAINS_VPTR_P (current_class_type))
15781 {
15782 tree binfo = TYPE_BINFO (current_class_type);
15783 tree ref
15784 = cp_build_fold_indirect_ref (current_class_ptr);
15785
15786 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15787 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15788 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15789 NOP_EXPR, vtbl,
15790 tf_warning_or_error);
15791 /* If the vptr is shared with some virtual nearly empty base,
15792 don't clear it if not in charge, the dtor of the virtual
15793 nearly empty base will do that later. */
15794 if (CLASSTYPE_VBASECLASSES (current_class_type)
15795 && CLASSTYPE_PRIMARY_BINFO (current_class_type)
15796 && BINFO_VIRTUAL_P
15797 (CLASSTYPE_PRIMARY_BINFO (current_class_type)))
15798 {
15799 stmt = convert_to_void (stmt, ICV_STATEMENT,
15800 tf_warning_or_error);
15801 stmt = build_if_in_charge (stmt);
15802 }
15803 finish_decl_cleanup (NULL_TREE, stmt);
15804 }
15805 else
15806 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15807 }
15808
15809 /* And insert cleanups for our bases and members so that they
15810 will be properly destroyed if we throw. */
15811 push_base_cleanups ();
15812 }
15813 }
15814
15815 /* At the end of every destructor we generate code to delete the object if
15816 necessary. Do that now. */
15817
15818 static void
15819 finish_destructor_body (void)
15820 {
15821 tree exprstmt;
15822
15823 /* Any return from a destructor will end up here; that way all base
15824 and member cleanups will be run when the function returns. */
15825 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15826
15827 if (targetm.cxx.cdtor_returns_this ())
15828 {
15829 tree val;
15830
15831 val = DECL_ARGUMENTS (current_function_decl);
15832 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15833 DECL_RESULT (current_function_decl), val);
15834 /* Return the address of the object. */
15835 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15836 add_stmt (exprstmt);
15837 }
15838 }
15839
15840 /* Do the necessary processing for the beginning of a function body, which
15841 in this case includes member-initializers, but not the catch clauses of
15842 a function-try-block. Currently, this means opening a binding level
15843 for the member-initializers (in a ctor), member cleanups (in a dtor),
15844 and capture proxies (in a lambda operator()). */
15845
15846 tree
15847 begin_function_body (void)
15848 {
15849 tree stmt;
15850
15851 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15852 return NULL_TREE;
15853
15854 if (processing_template_decl)
15855 /* Do nothing now. */;
15856 else
15857 /* Always keep the BLOCK node associated with the outermost pair of
15858 curly braces of a function. These are needed for correct
15859 operation of dwarfout.c. */
15860 keep_next_level (true);
15861
15862 stmt = begin_compound_stmt (BCS_FN_BODY);
15863
15864 if (processing_template_decl)
15865 /* Do nothing now. */;
15866 else if (DECL_DESTRUCTOR_P (current_function_decl))
15867 begin_destructor_body ();
15868
15869 return stmt;
15870 }
15871
15872 /* Do the processing for the end of a function body. Currently, this means
15873 closing out the cleanups for fully-constructed bases and members, and in
15874 the case of the destructor, deleting the object if desired. Again, this
15875 is only meaningful for [cd]tors, since they are the only functions where
15876 there is a significant distinction between the main body and any
15877 function catch clauses. Handling, say, main() return semantics here
15878 would be wrong, as flowing off the end of a function catch clause for
15879 main() would also need to return 0. */
15880
15881 void
15882 finish_function_body (tree compstmt)
15883 {
15884 if (compstmt == NULL_TREE)
15885 return;
15886
15887 /* Close the block. */
15888 finish_compound_stmt (compstmt);
15889
15890 if (processing_template_decl)
15891 /* Do nothing now. */;
15892 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15893 finish_constructor_body ();
15894 else if (DECL_DESTRUCTOR_P (current_function_decl))
15895 finish_destructor_body ();
15896 }
15897
15898 /* Given a function, returns the BLOCK corresponding to the outermost level
15899 of curly braces, skipping the artificial block created for constructor
15900 initializers. */
15901
15902 tree
15903 outer_curly_brace_block (tree fndecl)
15904 {
15905 tree block = DECL_INITIAL (fndecl);
15906 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15907 return block;
15908 block = BLOCK_SUBBLOCKS (block);
15909 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15910 return block;
15911 block = BLOCK_SUBBLOCKS (block);
15912 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15913 return block;
15914 }
15915
15916 /* If FNDECL is a class's key method, add the class to the list of
15917 keyed classes that should be emitted. */
15918
15919 static void
15920 record_key_method_defined (tree fndecl)
15921 {
15922 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15923 && DECL_VIRTUAL_P (fndecl)
15924 && !processing_template_decl)
15925 {
15926 tree fnclass = DECL_CONTEXT (fndecl);
15927 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15928 vec_safe_push (keyed_classes, fnclass);
15929 }
15930 }
15931
15932 /* Subroutine of finish_function.
15933 Save the body of constexpr functions for possible
15934 future compile time evaluation. */
15935
15936 static void
15937 maybe_save_function_definition (tree fun)
15938 {
15939 if (!processing_template_decl
15940 && DECL_DECLARED_CONSTEXPR_P (fun)
15941 && !cp_function_chain->invalid_constexpr
15942 && !DECL_CLONED_FUNCTION_P (fun))
15943 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15944 }
15945
15946 /* Attempt to add a fix-it hint to RICHLOC suggesting the insertion
15947 of "return *this;" immediately before its location, using FNDECL's
15948 first statement (if any) to give the indentation, if appropriate. */
15949
15950 static void
15951 add_return_star_this_fixit (gcc_rich_location *richloc, tree fndecl)
15952 {
15953 location_t indent = UNKNOWN_LOCATION;
15954 tree stmts = expr_first (DECL_SAVED_TREE (fndecl));
15955 if (stmts)
15956 indent = EXPR_LOCATION (stmts);
15957 richloc->add_fixit_insert_formatted ("return *this;",
15958 richloc->get_loc (),
15959 indent);
15960 }
15961
15962 /* Finish up a function declaration and compile that function
15963 all the way to assembler language output. The free the storage
15964 for the function definition. INLINE_P is TRUE if we just
15965 finished processing the body of an in-class inline function
15966 definition. (This processing will have taken place after the
15967 class definition is complete.) */
15968
15969 tree
15970 finish_function (bool inline_p)
15971 {
15972 tree fndecl = current_function_decl;
15973 tree fntype, ctype = NULL_TREE;
15974
15975 /* When we get some parse errors, we can end up without a
15976 current_function_decl, so cope. */
15977 if (fndecl == NULL_TREE)
15978 return error_mark_node;
15979
15980 finish_lambda_scope ();
15981
15982 if (c_dialect_objc ())
15983 objc_finish_function ();
15984
15985 record_key_method_defined (fndecl);
15986
15987 fntype = TREE_TYPE (fndecl);
15988
15989 /* TREE_READONLY (fndecl) = 1;
15990 This caused &foo to be of type ptr-to-const-function
15991 which then got a warning when stored in a ptr-to-function variable. */
15992
15993 gcc_assert (building_stmt_list_p ());
15994 /* The current function is being defined, so its DECL_INITIAL should
15995 be set, and unless there's a multiple definition, it should be
15996 error_mark_node. */
15997 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15998
15999 /* For a cloned function, we've already got all the code we need;
16000 there's no need to add any extra bits. */
16001 if (!DECL_CLONED_FUNCTION_P (fndecl))
16002 {
16003 /* Make it so that `main' always returns 0 by default. */
16004 if (DECL_MAIN_P (current_function_decl))
16005 finish_return_stmt (integer_zero_node);
16006
16007 if (use_eh_spec_block (current_function_decl))
16008 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
16009 (TREE_TYPE (current_function_decl)),
16010 current_eh_spec_block);
16011 }
16012
16013 /* If we're saving up tree structure, tie off the function now. */
16014 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
16015
16016 finish_fname_decls ();
16017
16018 /* If this function can't throw any exceptions, remember that. */
16019 if (!processing_template_decl
16020 && !cp_function_chain->can_throw
16021 && !flag_non_call_exceptions
16022 && !decl_replaceable_p (fndecl))
16023 TREE_NOTHROW (fndecl) = 1;
16024
16025 /* This must come after expand_function_end because cleanups might
16026 have declarations (from inline functions) that need to go into
16027 this function's blocks. */
16028
16029 /* If the current binding level isn't the outermost binding level
16030 for this function, either there is a bug, or we have experienced
16031 syntax errors and the statement tree is malformed. */
16032 if (current_binding_level->kind != sk_function_parms)
16033 {
16034 /* Make sure we have already experienced errors. */
16035 gcc_assert (errorcount);
16036
16037 /* Throw away the broken statement tree and extra binding
16038 levels. */
16039 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
16040
16041 while (current_binding_level->kind != sk_function_parms)
16042 {
16043 if (current_binding_level->kind == sk_class)
16044 pop_nested_class ();
16045 else
16046 poplevel (0, 0, 0);
16047 }
16048 }
16049 poplevel (1, 0, 1);
16050
16051 /* Statements should always be full-expressions at the outermost set
16052 of curly braces for a function. */
16053 gcc_assert (stmts_are_full_exprs_p ());
16054
16055 /* If there are no return statements in a function with auto return type,
16056 the return type is void. But if the declared type is something like
16057 auto*, this is an error. */
16058 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
16059 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
16060 {
16061 if (is_auto (current_function_auto_return_pattern))
16062 {
16063 apply_deduced_return_type (fndecl, void_type_node);
16064 fntype = TREE_TYPE (fndecl);
16065 }
16066 else if (!current_function_returns_value
16067 && !current_function_returns_null)
16068 {
16069 error ("no return statements in function returning %qT",
16070 current_function_auto_return_pattern);
16071 inform (input_location, "only plain %<auto%> return type can be "
16072 "deduced to %<void%>");
16073 }
16074 }
16075
16076 // If this is a concept, check that the definition is reasonable.
16077 if (DECL_DECLARED_CONCEPT_P (fndecl))
16078 check_function_concept (fndecl);
16079
16080 /* Lambda closure members are implicitly constexpr if possible. */
16081 if (cxx_dialect >= cxx17
16082 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
16083 DECL_DECLARED_CONSTEXPR_P (fndecl)
16084 = ((processing_template_decl
16085 || is_valid_constexpr_fn (fndecl, /*complain*/false))
16086 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
16087
16088 /* Save constexpr function body before it gets munged by
16089 the NRV transformation. */
16090 maybe_save_function_definition (fndecl);
16091
16092 /* Invoke the pre-genericize plugin before we start munging things. */
16093 if (!processing_template_decl)
16094 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
16095
16096 /* Perform delayed folding before NRV transformation. */
16097 if (!processing_template_decl)
16098 cp_fold_function (fndecl);
16099
16100 /* Set up the named return value optimization, if we can. Candidate
16101 variables are selected in check_return_expr. */
16102 if (current_function_return_value)
16103 {
16104 tree r = current_function_return_value;
16105 tree outer;
16106
16107 if (r != error_mark_node
16108 /* This is only worth doing for fns that return in memory--and
16109 simpler, since we don't have to worry about promoted modes. */
16110 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
16111 /* Only allow this for variables declared in the outer scope of
16112 the function so we know that their lifetime always ends with a
16113 return; see g++.dg/opt/nrv6.C. We could be more flexible if
16114 we were to do this optimization in tree-ssa. */
16115 && (outer = outer_curly_brace_block (fndecl))
16116 && chain_member (r, BLOCK_VARS (outer)))
16117 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
16118
16119 current_function_return_value = NULL_TREE;
16120 }
16121
16122 /* Remember that we were in class scope. */
16123 if (current_class_name)
16124 ctype = current_class_type;
16125
16126 /* Must mark the RESULT_DECL as being in this function. */
16127 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
16128
16129 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
16130 to the FUNCTION_DECL node itself. */
16131 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
16132
16133 /* Save away current state, if appropriate. */
16134 if (!processing_template_decl)
16135 save_function_data (fndecl);
16136
16137 /* Complain if there's just no return statement. */
16138 if (warn_return_type
16139 && !VOID_TYPE_P (TREE_TYPE (fntype))
16140 && !dependent_type_p (TREE_TYPE (fntype))
16141 && !current_function_returns_value && !current_function_returns_null
16142 /* Don't complain if we abort or throw. */
16143 && !current_function_returns_abnormally
16144 /* Don't complain if there's an infinite loop. */
16145 && !current_function_infinite_loop
16146 /* Don't complain if we are declared noreturn. */
16147 && !TREE_THIS_VOLATILE (fndecl)
16148 && !DECL_NAME (DECL_RESULT (fndecl))
16149 && !TREE_NO_WARNING (fndecl)
16150 /* Structor return values (if any) are set by the compiler. */
16151 && !DECL_CONSTRUCTOR_P (fndecl)
16152 && !DECL_DESTRUCTOR_P (fndecl)
16153 && targetm.warn_func_return (fndecl))
16154 {
16155 gcc_rich_location richloc (input_location);
16156 /* Potentially add a "return *this;" fix-it hint for
16157 assignment operators. */
16158 if (IDENTIFIER_ASSIGN_OP_P (DECL_NAME (fndecl)))
16159 {
16160 tree valtype = TREE_TYPE (DECL_RESULT (fndecl));
16161 if (TREE_CODE (valtype) == REFERENCE_TYPE
16162 && current_class_ref
16163 && same_type_ignoring_top_level_qualifiers_p
16164 (TREE_TYPE (valtype), TREE_TYPE (current_class_ref))
16165 && global_dc->option_enabled (OPT_Wreturn_type,
16166 global_dc->option_state))
16167 add_return_star_this_fixit (&richloc, fndecl);
16168 }
16169 warning_at (&richloc, OPT_Wreturn_type,
16170 "no return statement in function returning non-void");
16171 TREE_NO_WARNING (fndecl) = 1;
16172 }
16173
16174 /* Store the end of the function, so that we get good line number
16175 info for the epilogue. */
16176 cfun->function_end_locus = input_location;
16177
16178 /* Complain about parameters that are only set, but never otherwise used. */
16179 if (warn_unused_but_set_parameter
16180 && !processing_template_decl
16181 && errorcount == unused_but_set_errorcount
16182 && !DECL_CLONED_FUNCTION_P (fndecl))
16183 {
16184 tree decl;
16185
16186 for (decl = DECL_ARGUMENTS (fndecl);
16187 decl;
16188 decl = DECL_CHAIN (decl))
16189 if (TREE_USED (decl)
16190 && TREE_CODE (decl) == PARM_DECL
16191 && !DECL_READ_P (decl)
16192 && DECL_NAME (decl)
16193 && !DECL_ARTIFICIAL (decl)
16194 && !TREE_NO_WARNING (decl)
16195 && !DECL_IN_SYSTEM_HEADER (decl)
16196 && TREE_TYPE (decl) != error_mark_node
16197 && !TYPE_REF_P (TREE_TYPE (decl))
16198 && (!CLASS_TYPE_P (TREE_TYPE (decl))
16199 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
16200 warning_at (DECL_SOURCE_LOCATION (decl),
16201 OPT_Wunused_but_set_parameter,
16202 "parameter %qD set but not used", decl);
16203 unused_but_set_errorcount = errorcount;
16204 }
16205
16206 /* Complain about locally defined typedefs that are not used in this
16207 function. */
16208 maybe_warn_unused_local_typedefs ();
16209
16210 /* Possibly warn about unused parameters. */
16211 if (warn_unused_parameter
16212 && !processing_template_decl
16213 && !DECL_CLONED_FUNCTION_P (fndecl))
16214 do_warn_unused_parameter (fndecl);
16215
16216 /* Genericize before inlining. */
16217 if (!processing_template_decl)
16218 {
16219 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
16220 cp_genericize (fndecl);
16221 /* Clear out the bits we don't need. */
16222 f->x_current_class_ptr = NULL;
16223 f->x_current_class_ref = NULL;
16224 f->x_eh_spec_block = NULL;
16225 f->x_in_charge_parm = NULL;
16226 f->x_vtt_parm = NULL;
16227 f->x_return_value = NULL;
16228 f->bindings = NULL;
16229 f->extern_decl_map = NULL;
16230 f->infinite_loops = NULL;
16231 }
16232
16233 /* We're leaving the context of this function, so zap cfun. It's still in
16234 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
16235 set_cfun (NULL);
16236 current_function_decl = NULL;
16237
16238 /* If this is an in-class inline definition, we may have to pop the
16239 bindings for the template parameters that we added in
16240 maybe_begin_member_template_processing when start_function was
16241 called. */
16242 if (inline_p)
16243 maybe_end_member_template_processing ();
16244
16245 /* Leave the scope of the class. */
16246 if (ctype)
16247 pop_nested_class ();
16248
16249 --function_depth;
16250
16251 /* Clean up. */
16252 current_function_decl = NULL_TREE;
16253
16254 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
16255 return fndecl;
16256 }
16257 \f
16258 /* Create the FUNCTION_DECL for a function definition.
16259 DECLSPECS and DECLARATOR are the parts of the declaration;
16260 they describe the return type and the name of the function,
16261 but twisted together in a fashion that parallels the syntax of C.
16262
16263 This function creates a binding context for the function body
16264 as well as setting up the FUNCTION_DECL in current_function_decl.
16265
16266 Returns a FUNCTION_DECL on success.
16267
16268 If the DECLARATOR is not suitable for a function (it defines a datum
16269 instead), we return 0, which tells yyparse to report a parse error.
16270
16271 May return void_type_node indicating that this method is actually
16272 a friend. See grokfield for more details.
16273
16274 Came here with a `.pushlevel' .
16275
16276 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
16277 CHANGES TO CODE IN `grokfield'. */
16278
16279 tree
16280 grokmethod (cp_decl_specifier_seq *declspecs,
16281 const cp_declarator *declarator, tree attrlist)
16282 {
16283 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
16284 &attrlist);
16285
16286 if (fndecl == error_mark_node)
16287 return error_mark_node;
16288
16289 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
16290 {
16291 error ("invalid member function declaration");
16292 return error_mark_node;
16293 }
16294
16295 if (attrlist)
16296 cplus_decl_attributes (&fndecl, attrlist, 0);
16297
16298 /* Pass friends other than inline friend functions back. */
16299 if (fndecl == void_type_node)
16300 return fndecl;
16301
16302 if (DECL_IN_AGGR_P (fndecl))
16303 {
16304 if (DECL_CLASS_SCOPE_P (fndecl))
16305 error ("%qD is already defined in class %qT", fndecl,
16306 DECL_CONTEXT (fndecl));
16307 return error_mark_node;
16308 }
16309
16310 check_template_shadow (fndecl);
16311
16312 if (TREE_PUBLIC (fndecl))
16313 DECL_COMDAT (fndecl) = 1;
16314 DECL_DECLARED_INLINE_P (fndecl) = 1;
16315 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
16316
16317 /* We process method specializations in finish_struct_1. */
16318 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
16319 {
16320 fndecl = push_template_decl (fndecl);
16321 if (fndecl == error_mark_node)
16322 return fndecl;
16323 }
16324
16325 if (! DECL_FRIEND_P (fndecl))
16326 {
16327 if (DECL_CHAIN (fndecl))
16328 {
16329 fndecl = copy_node (fndecl);
16330 TREE_CHAIN (fndecl) = NULL_TREE;
16331 }
16332 }
16333
16334 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
16335
16336 DECL_IN_AGGR_P (fndecl) = 1;
16337 return fndecl;
16338 }
16339 \f
16340
16341 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
16342 we can lay it out later, when and if its type becomes complete.
16343
16344 Also handle constexpr variables where the initializer involves
16345 an unlowered PTRMEM_CST because the class isn't complete yet. */
16346
16347 void
16348 maybe_register_incomplete_var (tree var)
16349 {
16350 gcc_assert (VAR_P (var));
16351
16352 /* Keep track of variables with incomplete types. */
16353 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
16354 && DECL_EXTERNAL (var))
16355 {
16356 tree inner_type = TREE_TYPE (var);
16357
16358 while (TREE_CODE (inner_type) == ARRAY_TYPE)
16359 inner_type = TREE_TYPE (inner_type);
16360 inner_type = TYPE_MAIN_VARIANT (inner_type);
16361
16362 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
16363 /* RTTI TD entries are created while defining the type_info. */
16364 || (TYPE_LANG_SPECIFIC (inner_type)
16365 && TYPE_BEING_DEFINED (inner_type)))
16366 {
16367 incomplete_var iv = {var, inner_type};
16368 vec_safe_push (incomplete_vars, iv);
16369 }
16370 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
16371 && decl_constant_var_p (var)
16372 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
16373 {
16374 /* When the outermost open class is complete we can resolve any
16375 pointers-to-members. */
16376 tree context = outermost_open_class ();
16377 incomplete_var iv = {var, context};
16378 vec_safe_push (incomplete_vars, iv);
16379 }
16380 }
16381 }
16382
16383 /* Called when a class type (given by TYPE) is defined. If there are
16384 any existing VAR_DECLs whose type has been completed by this
16385 declaration, update them now. */
16386
16387 void
16388 complete_vars (tree type)
16389 {
16390 unsigned ix;
16391 incomplete_var *iv;
16392
16393 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
16394 {
16395 if (same_type_p (type, iv->incomplete_type))
16396 {
16397 tree var = iv->decl;
16398 tree type = TREE_TYPE (var);
16399
16400 if (type != error_mark_node
16401 && (TYPE_MAIN_VARIANT (strip_array_types (type))
16402 == iv->incomplete_type))
16403 {
16404 /* Complete the type of the variable. The VAR_DECL itself
16405 will be laid out in expand_expr. */
16406 complete_type (type);
16407 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
16408 }
16409
16410 /* Remove this entry from the list. */
16411 incomplete_vars->unordered_remove (ix);
16412 }
16413 else
16414 ix++;
16415 }
16416
16417 /* Check for pending declarations which may have abstract type. */
16418 complete_type_check_abstract (type);
16419 }
16420
16421 /* If DECL is of a type which needs a cleanup, build and return an
16422 expression to perform that cleanup here. Return NULL_TREE if no
16423 cleanup need be done. DECL can also be a _REF when called from
16424 split_nonconstant_init_1. */
16425
16426 tree
16427 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
16428 {
16429 tree type;
16430 tree attr;
16431 tree cleanup;
16432
16433 /* Assume no cleanup is required. */
16434 cleanup = NULL_TREE;
16435
16436 if (error_operand_p (decl))
16437 return cleanup;
16438
16439 /* Handle "__attribute__((cleanup))". We run the cleanup function
16440 before the destructor since the destructor is what actually
16441 terminates the lifetime of the object. */
16442 if (DECL_P (decl))
16443 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
16444 else
16445 attr = NULL_TREE;
16446 if (attr)
16447 {
16448 tree id;
16449 tree fn;
16450 tree arg;
16451
16452 /* Get the name specified by the user for the cleanup function. */
16453 id = TREE_VALUE (TREE_VALUE (attr));
16454 /* Look up the name to find the cleanup function to call. It is
16455 important to use lookup_name here because that is what is
16456 used in c-common.c:handle_cleanup_attribute when performing
16457 initial checks on the attribute. Note that those checks
16458 include ensuring that the function found is not an overloaded
16459 function, or an object with an overloaded call operator,
16460 etc.; we can rely on the fact that the function found is an
16461 ordinary FUNCTION_DECL. */
16462 fn = lookup_name (id);
16463 arg = build_address (decl);
16464 if (!mark_used (decl, complain) && !(complain & tf_error))
16465 return error_mark_node;
16466 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
16467 if (cleanup == error_mark_node)
16468 return error_mark_node;
16469 }
16470 /* Handle ordinary C++ destructors. */
16471 type = TREE_TYPE (decl);
16472 if (type_build_dtor_call (type))
16473 {
16474 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16475 tree addr;
16476 tree call;
16477
16478 if (TREE_CODE (type) == ARRAY_TYPE)
16479 addr = decl;
16480 else
16481 addr = build_address (decl);
16482
16483 call = build_delete (TREE_TYPE (addr), addr,
16484 sfk_complete_destructor, flags, 0, complain);
16485 if (call == error_mark_node)
16486 cleanup = error_mark_node;
16487 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16488 /* Discard the call. */;
16489 else if (cleanup)
16490 cleanup = cp_build_compound_expr (cleanup, call, complain);
16491 else
16492 cleanup = call;
16493 }
16494
16495 /* build_delete sets the location of the destructor call to the
16496 current location, even though the destructor is going to be
16497 called later, at the end of the current scope. This can lead to
16498 a "jumpy" behavior for users of debuggers when they step around
16499 the end of the block. So let's unset the location of the
16500 destructor call instead. */
16501 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16502
16503 if (cleanup
16504 && DECL_P (decl)
16505 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16506 /* Treat objects with destructors as used; the destructor may do
16507 something substantive. */
16508 && !mark_used (decl, complain) && !(complain & tf_error))
16509 return error_mark_node;
16510
16511 return cleanup;
16512 }
16513
16514 \f
16515 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16516 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16517 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16518
16519 tree
16520 static_fn_type (tree memfntype)
16521 {
16522 tree fntype;
16523 tree args;
16524
16525 if (TYPE_PTRMEMFUNC_P (memfntype))
16526 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16527 if (INDIRECT_TYPE_P (memfntype)
16528 || TREE_CODE (memfntype) == FUNCTION_DECL)
16529 memfntype = TREE_TYPE (memfntype);
16530 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16531 return memfntype;
16532 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16533 args = TYPE_ARG_TYPES (memfntype);
16534 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16535 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
16536 fntype = (cp_build_type_attribute_variant
16537 (fntype, TYPE_ATTRIBUTES (memfntype)));
16538 fntype = cxx_copy_lang_qualifiers (fntype, memfntype);
16539 return fntype;
16540 }
16541
16542 /* DECL was originally constructed as a non-static member function,
16543 but turned out to be static. Update it accordingly. */
16544
16545 void
16546 revert_static_member_fn (tree decl)
16547 {
16548 tree stype = static_fn_type (decl);
16549 cp_cv_quals quals = type_memfn_quals (stype);
16550 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16551
16552 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16553 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16554
16555 TREE_TYPE (decl) = stype;
16556
16557 if (DECL_ARGUMENTS (decl))
16558 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16559 DECL_STATIC_FUNCTION_P (decl) = 1;
16560 }
16561
16562 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16563 one of the language-independent trees. */
16564
16565 enum cp_tree_node_structure_enum
16566 cp_tree_node_structure (union lang_tree_node * t)
16567 {
16568 switch (TREE_CODE (&t->generic))
16569 {
16570 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16571 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16572 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16573 case OVERLOAD: return TS_CP_OVERLOAD;
16574 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16575 case PTRMEM_CST: return TS_CP_PTRMEM;
16576 case BASELINK: return TS_CP_BASELINK;
16577 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16578 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16579 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16580 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16581 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16582 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16583 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16584 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16585 default: return TS_CP_GENERIC;
16586 }
16587 }
16588
16589 /* Build the void_list_node (void_type_node having been created). */
16590 tree
16591 build_void_list_node (void)
16592 {
16593 tree t = build_tree_list (NULL_TREE, void_type_node);
16594 return t;
16595 }
16596
16597 bool
16598 cp_missing_noreturn_ok_p (tree decl)
16599 {
16600 /* A missing noreturn is ok for the `main' function. */
16601 return DECL_MAIN_P (decl);
16602 }
16603
16604 /* Return the decl used to identify the COMDAT group into which DECL should
16605 be placed. */
16606
16607 tree
16608 cxx_comdat_group (tree decl)
16609 {
16610 /* Virtual tables, construction virtual tables, and virtual table
16611 tables all go in a single COMDAT group, named after the primary
16612 virtual table. */
16613 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16614 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16615 /* For all other DECLs, the COMDAT group is the mangled name of the
16616 declaration itself. */
16617 else
16618 {
16619 while (DECL_THUNK_P (decl))
16620 {
16621 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16622 into the same section as the target function. In that case
16623 we must return target's name. */
16624 tree target = THUNK_TARGET (decl);
16625 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16626 && DECL_SECTION_NAME (target) != NULL
16627 && DECL_ONE_ONLY (target))
16628 decl = target;
16629 else
16630 break;
16631 }
16632 }
16633
16634 return decl;
16635 }
16636
16637 /* Returns the return type for FN as written by the user, which may include
16638 a placeholder for a deduced return type. */
16639
16640 tree
16641 fndecl_declared_return_type (tree fn)
16642 {
16643 fn = STRIP_TEMPLATE (fn);
16644 if (FNDECL_USED_AUTO (fn))
16645 {
16646 struct language_function *f = NULL;
16647 if (DECL_STRUCT_FUNCTION (fn))
16648 f = DECL_STRUCT_FUNCTION (fn)->language;
16649 if (f == NULL)
16650 f = DECL_SAVED_FUNCTION_DATA (fn);
16651 return f->x_auto_return_pattern;
16652 }
16653 return TREE_TYPE (TREE_TYPE (fn));
16654 }
16655
16656 /* Returns true iff DECL is a variable or function declared with an auto type
16657 that has not yet been deduced to a real type. */
16658
16659 bool
16660 undeduced_auto_decl (tree decl)
16661 {
16662 if (cxx_dialect < cxx11)
16663 return false;
16664 STRIP_ANY_LOCATION_WRAPPER (decl);
16665 return ((VAR_OR_FUNCTION_DECL_P (decl)
16666 || TREE_CODE (decl) == TEMPLATE_DECL)
16667 && type_uses_auto (TREE_TYPE (decl)));
16668 }
16669
16670 /* Complain if DECL has an undeduced return type. */
16671
16672 bool
16673 require_deduced_type (tree decl, tsubst_flags_t complain)
16674 {
16675 if (undeduced_auto_decl (decl))
16676 {
16677 if (complain & tf_error)
16678 error ("use of %qD before deduction of %<auto%>", decl);
16679 return false;
16680 }
16681 return true;
16682 }
16683
16684 /* Create a representation of the explicit-specifier with
16685 constant-expression of EXPR. COMPLAIN is as for tsubst. */
16686
16687 tree
16688 build_explicit_specifier (tree expr, tsubst_flags_t complain)
16689 {
16690 if (instantiation_dependent_expression_p (expr))
16691 /* Wait for instantiation, tsubst_function_decl will handle it. */
16692 return expr;
16693
16694 expr = instantiate_non_dependent_expr_sfinae (expr, complain);
16695 /* Don't let convert_like_real create more template codes. */
16696 processing_template_decl_sentinel s;
16697 expr = build_converted_constant_expr (boolean_type_node, expr, complain);
16698 expr = cxx_constant_value (expr);
16699 return expr;
16700 }
16701
16702 #include "gt-cp-decl.h"