]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/cp/decl.c
67d9244c450e3fb878064f243454461644c1ab4c
[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 if (TYPE_MAIN_VARIANT (remove) == remove)
2136 gcc_assert (TYPE_NEXT_VARIANT (remove) == NULL_TREE);
2137 else
2138 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2139 t = TYPE_NEXT_VARIANT (t))
2140 if (TYPE_NEXT_VARIANT (t) == remove)
2141 {
2142 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2143 break;
2144 }
2145 }
2146 }
2147 else if (merge_attr)
2148 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2149 else
2150 newtype = TREE_TYPE (newdecl);
2151
2152 if (VAR_P (newdecl))
2153 {
2154 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2155 /* For already initialized vars, TREE_READONLY could have been
2156 cleared in cp_finish_decl, because the var needs runtime
2157 initialization or destruction. Make sure not to set
2158 TREE_READONLY on it again. */
2159 if (DECL_INITIALIZED_P (olddecl)
2160 && !DECL_EXTERNAL (olddecl)
2161 && !TREE_READONLY (olddecl))
2162 TREE_READONLY (newdecl) = 0;
2163 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2164 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2165 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2166 if (DECL_DEPENDENT_INIT_P (olddecl))
2167 SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2168 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2169 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2170 if (DECL_CLASS_SCOPE_P (olddecl))
2171 DECL_DECLARED_CONSTEXPR_P (newdecl)
2172 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2173
2174 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2175 if (DECL_LANG_SPECIFIC (olddecl)
2176 && CP_DECL_THREADPRIVATE_P (olddecl))
2177 {
2178 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2179 retrofit_lang_decl (newdecl);
2180 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2181 }
2182 }
2183
2184 /* An explicit specialization of a function template or of a member
2185 function of a class template can be declared transaction_safe
2186 independently of whether the corresponding template entity is declared
2187 transaction_safe. */
2188 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2189 && DECL_TEMPLATE_INSTANTIATION (olddecl)
2190 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2191 && tx_safe_fn_type_p (newtype)
2192 && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2193 newtype = tx_unsafe_fn_variant (newtype);
2194
2195 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2196
2197 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2198 check_default_args (newdecl);
2199
2200 /* Lay the type out, unless already done. */
2201 if (! same_type_p (newtype, oldtype)
2202 && TREE_TYPE (newdecl) != error_mark_node
2203 && !(processing_template_decl && uses_template_parms (newdecl)))
2204 layout_type (TREE_TYPE (newdecl));
2205
2206 if ((VAR_P (newdecl)
2207 || TREE_CODE (newdecl) == PARM_DECL
2208 || TREE_CODE (newdecl) == RESULT_DECL
2209 || TREE_CODE (newdecl) == FIELD_DECL
2210 || TREE_CODE (newdecl) == TYPE_DECL)
2211 && !(processing_template_decl && uses_template_parms (newdecl)))
2212 layout_decl (newdecl, 0);
2213
2214 /* Merge deprecatedness. */
2215 if (TREE_DEPRECATED (newdecl))
2216 TREE_DEPRECATED (olddecl) = 1;
2217
2218 /* Preserve function specific target and optimization options */
2219 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2220 {
2221 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2222 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2223 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2224 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2225
2226 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2227 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2228 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2229 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2230 }
2231 else
2232 {
2233 /* Merge the const type qualifier. */
2234 if (TREE_READONLY (newdecl))
2235 TREE_READONLY (olddecl) = 1;
2236 /* Merge the volatile type qualifier. */
2237 if (TREE_THIS_VOLATILE (newdecl))
2238 TREE_THIS_VOLATILE (olddecl) = 1;
2239 }
2240
2241 /* Merge the initialization information. */
2242 if (DECL_INITIAL (newdecl) == NULL_TREE
2243 && DECL_INITIAL (olddecl) != NULL_TREE)
2244 {
2245 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2246 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2247 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2248 {
2249 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2250 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2251 }
2252 }
2253
2254 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2255 {
2256 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2257 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2258 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2259 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2260 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2261 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2262
2263 if (merge_attr)
2264 merge_attribute_bits (newdecl, olddecl);
2265 else
2266 {
2267 /* Merge the noreturn bit. */
2268 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2269 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2270 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2271 DECL_IS_MALLOC (olddecl) = DECL_IS_MALLOC (newdecl);
2272 DECL_PURE_P (olddecl) = DECL_PURE_P (newdecl);
2273 }
2274 /* Keep the old RTL. */
2275 COPY_DECL_RTL (olddecl, newdecl);
2276 }
2277 else if (VAR_P (newdecl)
2278 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2279 {
2280 /* Keep the old RTL. We cannot keep the old RTL if the old
2281 declaration was for an incomplete object and the new
2282 declaration is not since many attributes of the RTL will
2283 change. */
2284 COPY_DECL_RTL (olddecl, newdecl);
2285 }
2286 }
2287 /* If cannot merge, then use the new type and qualifiers,
2288 and don't preserve the old rtl. */
2289 else
2290 {
2291 /* Clean out any memory we had of the old declaration. */
2292 tree oldstatic = value_member (olddecl, static_aggregates);
2293 if (oldstatic)
2294 TREE_VALUE (oldstatic) = error_mark_node;
2295
2296 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2297 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2298 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2299 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2300 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2301 }
2302
2303 /* Merge the storage class information. */
2304 merge_weak (newdecl, olddecl);
2305
2306 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2307 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2308 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2309 if (! DECL_EXTERNAL (olddecl))
2310 DECL_EXTERNAL (newdecl) = 0;
2311 if (! DECL_COMDAT (olddecl))
2312 DECL_COMDAT (newdecl) = 0;
2313
2314 new_template_info = NULL_TREE;
2315 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2316 {
2317 bool new_redefines_gnu_inline = false;
2318
2319 if (new_defines_function
2320 && ((DECL_INTERFACE_KNOWN (olddecl)
2321 && TREE_CODE (olddecl) == FUNCTION_DECL)
2322 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2323 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2324 == FUNCTION_DECL))))
2325 {
2326 tree fn = olddecl;
2327
2328 if (TREE_CODE (fn) == TEMPLATE_DECL)
2329 fn = DECL_TEMPLATE_RESULT (olddecl);
2330
2331 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2332 }
2333
2334 if (!new_redefines_gnu_inline)
2335 {
2336 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2337 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2338 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2339 }
2340 DECL_TEMPLATE_INSTANTIATED (newdecl)
2341 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2342 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2343
2344 /* If the OLDDECL is an instantiation and/or specialization,
2345 then the NEWDECL must be too. But, it may not yet be marked
2346 as such if the caller has created NEWDECL, but has not yet
2347 figured out that it is a redeclaration. */
2348 if (!DECL_USE_TEMPLATE (newdecl))
2349 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2350
2351 /* Don't really know how much of the language-specific
2352 values we should copy from old to new. */
2353 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2354 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2355 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2356 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2357
2358 if (LANG_DECL_HAS_MIN (newdecl))
2359 {
2360 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
2361 if (DECL_TEMPLATE_INFO (newdecl))
2362 {
2363 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2364 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2365 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2366 /* Remember the presence of explicit specialization args. */
2367 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2368 = TINFO_USED_TEMPLATE_ID (new_template_info);
2369 }
2370 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2371 }
2372 /* Only functions have these fields. */
2373 if (DECL_DECLARES_FUNCTION_P (newdecl))
2374 {
2375 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2376 DECL_BEFRIENDING_CLASSES (newdecl)
2377 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2378 DECL_BEFRIENDING_CLASSES (olddecl));
2379 /* DECL_THUNKS is only valid for virtual functions,
2380 otherwise it is a DECL_FRIEND_CONTEXT. */
2381 if (DECL_VIRTUAL_P (newdecl))
2382 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2383 }
2384 /* Only variables have this field. */
2385 else if (VAR_P (newdecl)
2386 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2387 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2388 }
2389
2390 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2391 {
2392 tree parm;
2393
2394 /* Merge parameter attributes. */
2395 tree oldarg, newarg;
2396 for (oldarg = DECL_ARGUMENTS(olddecl), newarg = DECL_ARGUMENTS(newdecl);
2397 oldarg && newarg;
2398 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg))
2399 {
2400 DECL_ATTRIBUTES (newarg)
2401 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2402 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2403 }
2404
2405 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2406 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2407 {
2408 /* If newdecl is not a specialization, then it is not a
2409 template-related function at all. And that means that we
2410 should have exited above, returning 0. */
2411 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2412
2413 if (DECL_ODR_USED (olddecl))
2414 /* From [temp.expl.spec]:
2415
2416 If a template, a member template or the member of a class
2417 template is explicitly specialized then that
2418 specialization shall be declared before the first use of
2419 that specialization that would cause an implicit
2420 instantiation to take place, in every translation unit in
2421 which such a use occurs. */
2422 error ("explicit specialization of %qD after first use",
2423 olddecl);
2424
2425 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2426 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2427 && DECL_DECLARED_INLINE_P (newdecl));
2428
2429 /* Don't propagate visibility from the template to the
2430 specialization here. We'll do that in determine_visibility if
2431 appropriate. */
2432 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2433
2434 /* [temp.expl.spec/14] We don't inline explicit specialization
2435 just because the primary template says so. */
2436 gcc_assert (!merge_attr);
2437
2438 DECL_DECLARED_INLINE_P (olddecl)
2439 = DECL_DECLARED_INLINE_P (newdecl);
2440
2441 DECL_DISREGARD_INLINE_LIMITS (olddecl)
2442 = DECL_DISREGARD_INLINE_LIMITS (newdecl);
2443
2444 DECL_UNINLINABLE (olddecl) = DECL_UNINLINABLE (newdecl);
2445 }
2446 else if (new_defines_function && DECL_INITIAL (olddecl))
2447 {
2448 /* Never inline re-defined extern inline functions.
2449 FIXME: this could be better handled by keeping both
2450 function as separate declarations. */
2451 DECL_UNINLINABLE (newdecl) = 1;
2452 }
2453 else
2454 {
2455 if (DECL_PENDING_INLINE_P (olddecl))
2456 {
2457 DECL_PENDING_INLINE_P (newdecl) = 1;
2458 DECL_PENDING_INLINE_INFO (newdecl)
2459 = DECL_PENDING_INLINE_INFO (olddecl);
2460 }
2461 else if (DECL_PENDING_INLINE_P (newdecl))
2462 ;
2463 else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
2464 DECL_SAVED_FUNCTION_DATA (newdecl)
2465 = DECL_SAVED_FUNCTION_DATA (olddecl);
2466
2467 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2468
2469 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2470 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2471
2472 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2473 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2474 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2475 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2476 }
2477
2478 /* Preserve abstractness on cloned [cd]tors. */
2479 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2480
2481 /* Update newdecl's parms to point at olddecl. */
2482 for (parm = DECL_ARGUMENTS (newdecl); parm;
2483 parm = DECL_CHAIN (parm))
2484 DECL_CONTEXT (parm) = olddecl;
2485
2486 if (! types_match)
2487 {
2488 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2489 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2490 COPY_DECL_RTL (newdecl, olddecl);
2491 }
2492 if (! types_match || new_defines_function)
2493 {
2494 /* These need to be copied so that the names are available.
2495 Note that if the types do match, we'll preserve inline
2496 info and other bits, but if not, we won't. */
2497 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2498 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2499 }
2500 /* If redeclaring a builtin function, it stays built in
2501 if newdecl is a gnu_inline definition, or if newdecl is just
2502 a declaration. */
2503 if (fndecl_built_in_p (olddecl)
2504 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2505 {
2506 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2507 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2508 /* If we're keeping the built-in definition, keep the rtl,
2509 regardless of declaration matches. */
2510 COPY_DECL_RTL (olddecl, newdecl);
2511 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2512 {
2513 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2514 switch (fncode)
2515 {
2516 /* If a compatible prototype of these builtin functions
2517 is seen, assume the runtime implements it with the
2518 expected semantics. */
2519 case BUILT_IN_STPCPY:
2520 if (builtin_decl_explicit_p (fncode))
2521 set_builtin_decl_implicit_p (fncode, true);
2522 break;
2523 default:
2524 if (builtin_decl_explicit_p (fncode))
2525 set_builtin_decl_declared_p (fncode, true);
2526 break;
2527 }
2528 }
2529
2530 copy_attributes_to_builtin (newdecl);
2531 }
2532 if (new_defines_function)
2533 /* If defining a function declared with other language
2534 linkage, use the previously declared language linkage. */
2535 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2536 else if (types_match)
2537 {
2538 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2539 /* Don't clear out the arguments if we're just redeclaring a
2540 function. */
2541 if (DECL_ARGUMENTS (olddecl))
2542 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2543 }
2544 }
2545 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2546 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2547
2548 /* Now preserve various other info from the definition. */
2549 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2550 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2551 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2552 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2553
2554 /* Warn about conflicting visibility specifications. */
2555 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2556 && DECL_VISIBILITY_SPECIFIED (newdecl)
2557 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2558 {
2559 auto_diagnostic_group d;
2560 if (warning_at (newdecl_loc, OPT_Wattributes,
2561 "%qD: visibility attribute ignored because it "
2562 "conflicts with previous declaration", newdecl))
2563 inform (olddecl_loc,
2564 "previous declaration of %qD", olddecl);
2565 }
2566 /* Choose the declaration which specified visibility. */
2567 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2568 {
2569 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2570 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2571 }
2572 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2573 so keep this behavior. */
2574 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2575 {
2576 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2577 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2578 }
2579 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2580 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2581 {
2582 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2583 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2584 }
2585 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2586 if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2587 > DECL_WARN_IF_NOT_ALIGN (newdecl))
2588 SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2589 DECL_WARN_IF_NOT_ALIGN (olddecl));
2590 if (TREE_CODE (newdecl) == FIELD_DECL)
2591 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2592
2593 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2594 with that from NEWDECL below. */
2595 if (DECL_LANG_SPECIFIC (olddecl))
2596 {
2597 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2598 != DECL_LANG_SPECIFIC (newdecl));
2599 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2600 }
2601
2602 /* Merge the USED information. */
2603 if (TREE_USED (olddecl))
2604 TREE_USED (newdecl) = 1;
2605 else if (TREE_USED (newdecl))
2606 TREE_USED (olddecl) = 1;
2607 if (VAR_P (newdecl))
2608 {
2609 if (DECL_READ_P (olddecl))
2610 DECL_READ_P (newdecl) = 1;
2611 else if (DECL_READ_P (newdecl))
2612 DECL_READ_P (olddecl) = 1;
2613 }
2614 if (DECL_PRESERVE_P (olddecl))
2615 DECL_PRESERVE_P (newdecl) = 1;
2616 else if (DECL_PRESERVE_P (newdecl))
2617 DECL_PRESERVE_P (olddecl) = 1;
2618
2619 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2620 to olddecl and deleted. */
2621 if (TREE_CODE (newdecl) == FUNCTION_DECL
2622 && DECL_FUNCTION_VERSIONED (olddecl))
2623 {
2624 /* Set the flag for newdecl so that it gets copied to olddecl. */
2625 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2626 /* newdecl will be purged after copying to olddecl and is no longer
2627 a version. */
2628 cgraph_node::delete_function_version_by_decl (newdecl);
2629 }
2630
2631 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2632 {
2633 int function_size;
2634 struct symtab_node *snode = symtab_node::get (olddecl);
2635
2636 function_size = sizeof (struct tree_decl_common);
2637
2638 memcpy ((char *) olddecl + sizeof (struct tree_common),
2639 (char *) newdecl + sizeof (struct tree_common),
2640 function_size - sizeof (struct tree_common));
2641
2642 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2643 (char *) newdecl + sizeof (struct tree_decl_common),
2644 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2645
2646 /* Preserve symtab node mapping. */
2647 olddecl->decl_with_vis.symtab_node = snode;
2648
2649 if (new_template_info)
2650 /* If newdecl is a template instantiation, it is possible that
2651 the following sequence of events has occurred:
2652
2653 o A friend function was declared in a class template. The
2654 class template was instantiated.
2655
2656 o The instantiation of the friend declaration was
2657 recorded on the instantiation list, and is newdecl.
2658
2659 o Later, however, instantiate_class_template called pushdecl
2660 on the newdecl to perform name injection. But, pushdecl in
2661 turn called duplicate_decls when it discovered that another
2662 declaration of a global function with the same name already
2663 existed.
2664
2665 o Here, in duplicate_decls, we decided to clobber newdecl.
2666
2667 If we're going to do that, we'd better make sure that
2668 olddecl, and not newdecl, is on the list of
2669 instantiations so that if we try to do the instantiation
2670 again we won't get the clobbered declaration. */
2671 reregister_specialization (newdecl,
2672 new_template_info,
2673 olddecl);
2674 }
2675 else
2676 {
2677 size_t size = tree_code_size (TREE_CODE (newdecl));
2678
2679 memcpy ((char *) olddecl + sizeof (struct tree_common),
2680 (char *) newdecl + sizeof (struct tree_common),
2681 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2682 switch (TREE_CODE (newdecl))
2683 {
2684 case LABEL_DECL:
2685 case VAR_DECL:
2686 case RESULT_DECL:
2687 case PARM_DECL:
2688 case FIELD_DECL:
2689 case TYPE_DECL:
2690 case CONST_DECL:
2691 {
2692 struct symtab_node *snode = NULL;
2693
2694 if (VAR_P (newdecl)
2695 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2696 || DECL_EXTERNAL (olddecl)))
2697 snode = symtab_node::get (olddecl);
2698 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2699 (char *) newdecl + sizeof (struct tree_decl_common),
2700 size - sizeof (struct tree_decl_common)
2701 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2702 if (VAR_P (newdecl))
2703 olddecl->decl_with_vis.symtab_node = snode;
2704 }
2705 break;
2706 default:
2707 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2708 (char *) newdecl + sizeof (struct tree_decl_common),
2709 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2710 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2711 break;
2712 }
2713 }
2714
2715 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2716 {
2717 if (DECL_EXTERNAL (olddecl)
2718 || TREE_PUBLIC (olddecl)
2719 || TREE_STATIC (olddecl))
2720 {
2721 /* Merge the section attribute.
2722 We want to issue an error if the sections conflict but that must be
2723 done later in decl_attributes since we are called before attributes
2724 are assigned. */
2725 if (DECL_SECTION_NAME (newdecl) != NULL)
2726 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2727
2728 if (DECL_ONE_ONLY (newdecl))
2729 {
2730 struct symtab_node *oldsym, *newsym;
2731 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2732 oldsym = cgraph_node::get_create (olddecl);
2733 else
2734 oldsym = varpool_node::get_create (olddecl);
2735 newsym = symtab_node::get (newdecl);
2736 oldsym->set_comdat_group (newsym->get_comdat_group ());
2737 }
2738 }
2739
2740 if (VAR_P (newdecl)
2741 && CP_DECL_THREAD_LOCAL_P (newdecl))
2742 {
2743 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2744 if (!processing_template_decl)
2745 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2746 }
2747 }
2748
2749 DECL_UID (olddecl) = olddecl_uid;
2750 if (olddecl_friend)
2751 DECL_FRIEND_P (olddecl) = 1;
2752 if (hidden_friend)
2753 {
2754 DECL_ANTICIPATED (olddecl) = 1;
2755 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2756 }
2757
2758 /* NEWDECL contains the merged attribute lists.
2759 Update OLDDECL to be the same. */
2760 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2761
2762 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2763 so that encode_section_info has a chance to look at the new decl
2764 flags and attributes. */
2765 if (DECL_RTL_SET_P (olddecl)
2766 && (TREE_CODE (olddecl) == FUNCTION_DECL
2767 || (VAR_P (olddecl)
2768 && TREE_STATIC (olddecl))))
2769 make_decl_rtl (olddecl);
2770
2771 /* The NEWDECL will no longer be needed. Because every out-of-class
2772 declaration of a member results in a call to duplicate_decls,
2773 freeing these nodes represents in a significant savings.
2774
2775 Before releasing the node, be sore to remove function from symbol
2776 table that might have been inserted there to record comdat group.
2777 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2778 structure is shared in between newdecl and oldecl. */
2779 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2780 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2781 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2782 {
2783 struct symtab_node *snode = symtab_node::get (newdecl);
2784 if (snode)
2785 snode->remove ();
2786 }
2787
2788 /* Remove the associated constraints for newdecl, if any, before
2789 reclaiming memory. */
2790 if (flag_concepts)
2791 remove_constraints (newdecl);
2792
2793 ggc_free (newdecl);
2794
2795 return olddecl;
2796 }
2797 \f
2798 /* Return zero if the declaration NEWDECL is valid
2799 when the declaration OLDDECL (assumed to be for the same name)
2800 has already been seen.
2801 Otherwise return an error message format string with a %s
2802 where the identifier should go. */
2803
2804 static const char *
2805 redeclaration_error_message (tree newdecl, tree olddecl)
2806 {
2807 if (TREE_CODE (newdecl) == TYPE_DECL)
2808 {
2809 /* Because C++ can put things into name space for free,
2810 constructs like "typedef struct foo { ... } foo"
2811 would look like an erroneous redeclaration. */
2812 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2813 return NULL;
2814 else
2815 return G_("redefinition of %q#D");
2816 }
2817 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2818 {
2819 /* If this is a pure function, its olddecl will actually be
2820 the original initialization to `0' (which we force to call
2821 abort()). Don't complain about redefinition in this case. */
2822 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2823 && DECL_INITIAL (olddecl) == NULL_TREE)
2824 return NULL;
2825
2826 /* If both functions come from different namespaces, this is not
2827 a redeclaration - this is a conflict with a used function. */
2828 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2829 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2830 && ! decls_match (olddecl, newdecl))
2831 return G_("%qD conflicts with used function");
2832
2833 /* We'll complain about linkage mismatches in
2834 warn_extern_redeclared_static. */
2835
2836 /* Defining the same name twice is no good. */
2837 if (decl_defined_p (olddecl)
2838 && decl_defined_p (newdecl))
2839 {
2840 if (DECL_NAME (olddecl) == NULL_TREE)
2841 return G_("%q#D not declared in class");
2842 else if (!GNU_INLINE_P (olddecl)
2843 || GNU_INLINE_P (newdecl))
2844 return G_("redefinition of %q#D");
2845 }
2846
2847 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2848 {
2849 bool olda = GNU_INLINE_P (olddecl);
2850 bool newa = GNU_INLINE_P (newdecl);
2851
2852 if (olda != newa)
2853 {
2854 if (newa)
2855 return G_("%q+D redeclared inline with "
2856 "%<gnu_inline%> attribute");
2857 else
2858 return G_("%q+D redeclared inline without "
2859 "%<gnu_inline%> attribute");
2860 }
2861 }
2862
2863 check_abi_tag_redeclaration
2864 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2865 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2866
2867 return NULL;
2868 }
2869 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2870 {
2871 tree nt, ot;
2872
2873 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2874 {
2875 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2876 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2877 return G_("redefinition of %q#D");
2878 return NULL;
2879 }
2880
2881 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2882 || (DECL_TEMPLATE_RESULT (newdecl)
2883 == DECL_TEMPLATE_RESULT (olddecl)))
2884 return NULL;
2885
2886 nt = DECL_TEMPLATE_RESULT (newdecl);
2887 if (DECL_TEMPLATE_INFO (nt))
2888 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2889 ot = DECL_TEMPLATE_RESULT (olddecl);
2890 if (DECL_TEMPLATE_INFO (ot))
2891 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2892 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2893 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2894 return G_("redefinition of %q#D");
2895
2896 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2897 {
2898 bool olda = GNU_INLINE_P (ot);
2899 bool newa = GNU_INLINE_P (nt);
2900
2901 if (olda != newa)
2902 {
2903 if (newa)
2904 return G_("%q+D redeclared inline with "
2905 "%<gnu_inline%> attribute");
2906 else
2907 return G_("%q+D redeclared inline without "
2908 "%<gnu_inline%> attribute");
2909 }
2910 }
2911
2912 /* Core issue #226 (C++0x):
2913
2914 If a friend function template declaration specifies a
2915 default template-argument, that declaration shall be a
2916 definition and shall be the only declaration of the
2917 function template in the translation unit. */
2918 if ((cxx_dialect != cxx98)
2919 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2920 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2921 /*is_primary=*/true,
2922 /*is_partial=*/false,
2923 /*is_friend_decl=*/2))
2924 return G_("redeclaration of friend %q#D "
2925 "may not have default template arguments");
2926
2927 return NULL;
2928 }
2929 else if (VAR_P (newdecl)
2930 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2931 && (! DECL_LANG_SPECIFIC (olddecl)
2932 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2933 || CP_DECL_THREAD_LOCAL_P (newdecl)))
2934 {
2935 /* Only variables can be thread-local, and all declarations must
2936 agree on this property. */
2937 if (CP_DECL_THREAD_LOCAL_P (newdecl))
2938 return G_("thread-local declaration of %q#D follows "
2939 "non-thread-local declaration");
2940 else
2941 return G_("non-thread-local declaration of %q#D follows "
2942 "thread-local declaration");
2943 }
2944 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2945 {
2946 /* The objects have been declared at namespace scope. If either
2947 is a member of an anonymous union, then this is an invalid
2948 redeclaration. For example:
2949
2950 int i;
2951 union { int i; };
2952
2953 is invalid. */
2954 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2955 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2956 return G_("redeclaration of %q#D");
2957 /* If at least one declaration is a reference, there is no
2958 conflict. For example:
2959
2960 int i = 3;
2961 extern int i;
2962
2963 is valid. */
2964 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2965 return NULL;
2966
2967 /* Static data member declared outside a class definition
2968 if the variable is defined within the class with constexpr
2969 specifier is declaration rather than definition (and
2970 deprecated). */
2971 if (cxx_dialect >= cxx17
2972 && VAR_P (olddecl)
2973 && DECL_CLASS_SCOPE_P (olddecl)
2974 && DECL_DECLARED_CONSTEXPR_P (olddecl)
2975 && !DECL_INITIAL (newdecl))
2976 {
2977 DECL_EXTERNAL (newdecl) = 1;
2978 /* For now, only warn with explicit -Wdeprecated. */
2979 if (global_options_set.x_warn_deprecated)
2980 {
2981 auto_diagnostic_group d;
2982 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
2983 "redundant redeclaration of %<constexpr%> "
2984 "static data member %qD", newdecl))
2985 inform (DECL_SOURCE_LOCATION (olddecl),
2986 "previous declaration of %qD", olddecl);
2987 }
2988 return NULL;
2989 }
2990
2991 /* Reject two definitions. */
2992 return G_("redefinition of %q#D");
2993 }
2994 else
2995 {
2996 /* Objects declared with block scope: */
2997 /* Reject two definitions, and reject a definition
2998 together with an external reference. */
2999 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3000 return G_("redeclaration of %q#D");
3001 return NULL;
3002 }
3003 }
3004 \f
3005
3006 /* Hash and equality functions for the named_label table. */
3007
3008 hashval_t
3009 named_label_hash::hash (const value_type entry)
3010 {
3011 return IDENTIFIER_HASH_VALUE (entry->name);
3012 }
3013
3014 bool
3015 named_label_hash::equal (const value_type entry, compare_type name)
3016 {
3017 return name == entry->name;
3018 }
3019
3020 /* Look for a label named ID in the current function. If one cannot
3021 be found, create one. Return the named_label_entry, or NULL on
3022 failure. */
3023
3024 static named_label_entry *
3025 lookup_label_1 (tree id, bool making_local_p)
3026 {
3027 /* You can't use labels at global scope. */
3028 if (current_function_decl == NULL_TREE)
3029 {
3030 error ("label %qE referenced outside of any function", id);
3031 return NULL;
3032 }
3033
3034 if (!named_labels)
3035 named_labels = hash_table<named_label_hash>::create_ggc (13);
3036
3037 hashval_t hash = IDENTIFIER_HASH_VALUE (id);
3038 named_label_entry **slot
3039 = named_labels->find_slot_with_hash (id, hash, INSERT);
3040 named_label_entry *old = *slot;
3041
3042 if (old && old->label_decl)
3043 {
3044 if (!making_local_p)
3045 return old;
3046
3047 if (old->binding_level == current_binding_level)
3048 {
3049 error ("local label %qE conflicts with existing label", id);
3050 inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
3051 return NULL;
3052 }
3053 }
3054
3055 /* We are making a new decl, create or reuse the named_label_entry */
3056 named_label_entry *ent = NULL;
3057 if (old && !old->label_decl)
3058 ent = old;
3059 else
3060 {
3061 ent = ggc_cleared_alloc<named_label_entry> ();
3062 ent->name = id;
3063 ent->outer = old;
3064 *slot = ent;
3065 }
3066
3067 /* Now create the LABEL_DECL. */
3068 tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3069
3070 DECL_CONTEXT (decl) = current_function_decl;
3071 SET_DECL_MODE (decl, VOIDmode);
3072 if (making_local_p)
3073 {
3074 C_DECLARED_LABEL_FLAG (decl) = true;
3075 DECL_CHAIN (decl) = current_binding_level->names;
3076 current_binding_level->names = decl;
3077 }
3078
3079 ent->label_decl = decl;
3080
3081 return ent;
3082 }
3083
3084 /* Wrapper for lookup_label_1. */
3085
3086 tree
3087 lookup_label (tree id)
3088 {
3089 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3090 named_label_entry *ent = lookup_label_1 (id, false);
3091 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3092 return ent ? ent->label_decl : NULL_TREE;
3093 }
3094
3095 tree
3096 declare_local_label (tree id)
3097 {
3098 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3099 named_label_entry *ent = lookup_label_1 (id, true);
3100 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3101 return ent ? ent->label_decl : NULL_TREE;
3102 }
3103
3104 /* Returns nonzero if it is ill-formed to jump past the declaration of
3105 DECL. Returns 2 if it's also a real problem. */
3106
3107 static int
3108 decl_jump_unsafe (tree decl)
3109 {
3110 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3111 with automatic storage duration is not in scope to a point where it is
3112 in scope is ill-formed unless the variable has scalar type, class type
3113 with a trivial default constructor and a trivial destructor, a
3114 cv-qualified version of one of these types, or an array of one of the
3115 preceding types and is declared without an initializer (8.5). */
3116 tree type = TREE_TYPE (decl);
3117
3118 if (!VAR_P (decl) || TREE_STATIC (decl)
3119 || type == error_mark_node)
3120 return 0;
3121
3122 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3123 || variably_modified_type_p (type, NULL_TREE))
3124 return 2;
3125
3126 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3127 return 1;
3128
3129 return 0;
3130 }
3131
3132 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3133 to the user. */
3134
3135 static bool
3136 identify_goto (tree decl, location_t loc, const location_t *locus,
3137 diagnostic_t diag_kind)
3138 {
3139 bool complained
3140 = emit_diagnostic (diag_kind, loc, 0,
3141 decl ? N_("jump to label %qD")
3142 : N_("jump to case label"), decl);
3143 if (complained && locus)
3144 inform (*locus, " from here");
3145 return complained;
3146 }
3147
3148 /* Check that a single previously seen jump to a newly defined label
3149 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3150 the jump context; NAMES are the names in scope in LEVEL at the jump
3151 context; LOCUS is the source position of the jump or 0. Returns
3152 true if all is well. */
3153
3154 static bool
3155 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3156 bool exited_omp, const location_t *locus)
3157 {
3158 cp_binding_level *b;
3159 bool complained = false;
3160 int identified = 0;
3161 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3162
3163 if (exited_omp)
3164 {
3165 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3166 if (complained)
3167 inform (input_location, " exits OpenMP structured block");
3168 saw_omp = true;
3169 identified = 2;
3170 }
3171
3172 for (b = current_binding_level; b ; b = b->level_chain)
3173 {
3174 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3175
3176 for (new_decls = b->names; new_decls != old_decls;
3177 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3178 : TREE_CHAIN (new_decls)))
3179 {
3180 int problem = decl_jump_unsafe (new_decls);
3181 if (! problem)
3182 continue;
3183
3184 if (!identified)
3185 {
3186 complained = identify_goto (decl, input_location, locus,
3187 problem > 1
3188 ? DK_ERROR : DK_PERMERROR);
3189 identified = 1;
3190 }
3191 if (complained)
3192 {
3193 if (problem > 1)
3194 inform (DECL_SOURCE_LOCATION (new_decls),
3195 " crosses initialization of %q#D", new_decls);
3196 else
3197 inform (DECL_SOURCE_LOCATION (new_decls),
3198 " enters scope of %q#D, which has "
3199 "non-trivial destructor", new_decls);
3200 }
3201 }
3202
3203 if (b == level)
3204 break;
3205
3206 const char *inf = NULL;
3207 location_t loc = input_location;
3208 switch (b->kind)
3209 {
3210 case sk_try:
3211 if (!saw_eh)
3212 inf = N_("enters try block");
3213 saw_eh = true;
3214 break;
3215
3216 case sk_catch:
3217 if (!saw_eh)
3218 inf = N_("enters catch block");
3219 saw_eh = true;
3220 break;
3221
3222 case sk_omp:
3223 if (!saw_omp)
3224 inf = N_("enters OpenMP structured block");
3225 saw_omp = true;
3226 break;
3227
3228 case sk_transaction:
3229 if (!saw_tm)
3230 inf = N_("enters synchronized or atomic statement");
3231 saw_tm = true;
3232 break;
3233
3234 case sk_block:
3235 if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3236 {
3237 inf = N_("enters constexpr if statement");
3238 loc = EXPR_LOCATION (b->level_chain->this_entity);
3239 saw_cxif = true;
3240 }
3241 break;
3242
3243 default:
3244 break;
3245 }
3246
3247 if (inf)
3248 {
3249 if (identified < 2)
3250 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3251 identified = 2;
3252 if (complained)
3253 inform (loc, " %s", inf);
3254 }
3255 }
3256
3257 return !identified;
3258 }
3259
3260 static void
3261 check_previous_goto (tree decl, struct named_label_use_entry *use)
3262 {
3263 check_previous_goto_1 (decl, use->binding_level,
3264 use->names_in_scope, use->in_omp_scope,
3265 &use->o_goto_locus);
3266 }
3267
3268 static bool
3269 check_switch_goto (cp_binding_level* level)
3270 {
3271 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3272 }
3273
3274 /* Check that a new jump to a label DECL is OK. Called by
3275 finish_goto_stmt. */
3276
3277 void
3278 check_goto (tree decl)
3279 {
3280 /* We can't know where a computed goto is jumping.
3281 So we assume that it's OK. */
3282 if (TREE_CODE (decl) != LABEL_DECL)
3283 return;
3284
3285 /* We didn't record any information about this label when we created it,
3286 and there's not much point since it's trivial to analyze as a return. */
3287 if (decl == cdtor_label)
3288 return;
3289
3290 hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3291 named_label_entry **slot
3292 = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3293 named_label_entry *ent = *slot;
3294
3295 /* If the label hasn't been defined yet, defer checking. */
3296 if (! DECL_INITIAL (decl))
3297 {
3298 /* Don't bother creating another use if the last goto had the
3299 same data, and will therefore create the same set of errors. */
3300 if (ent->uses
3301 && ent->uses->names_in_scope == current_binding_level->names)
3302 return;
3303
3304 named_label_use_entry *new_use
3305 = ggc_alloc<named_label_use_entry> ();
3306 new_use->binding_level = current_binding_level;
3307 new_use->names_in_scope = current_binding_level->names;
3308 new_use->o_goto_locus = input_location;
3309 new_use->in_omp_scope = false;
3310
3311 new_use->next = ent->uses;
3312 ent->uses = new_use;
3313 return;
3314 }
3315
3316 bool saw_catch = false, complained = false;
3317 int identified = 0;
3318 tree bad;
3319 unsigned ix;
3320
3321 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3322 || ent->in_constexpr_if
3323 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3324 {
3325 diagnostic_t diag_kind = DK_PERMERROR;
3326 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3327 || ent->in_transaction_scope || ent->in_omp_scope)
3328 diag_kind = DK_ERROR;
3329 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3330 &input_location, diag_kind);
3331 identified = 1 + (diag_kind == DK_ERROR);
3332 }
3333
3334 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3335 {
3336 int u = decl_jump_unsafe (bad);
3337
3338 if (u > 1 && DECL_ARTIFICIAL (bad))
3339 {
3340 /* Can't skip init of __exception_info. */
3341 if (identified == 1)
3342 {
3343 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3344 &input_location, DK_ERROR);
3345 identified = 2;
3346 }
3347 if (complained)
3348 inform (DECL_SOURCE_LOCATION (bad), " enters catch block");
3349 saw_catch = true;
3350 }
3351 else if (complained)
3352 {
3353 if (u > 1)
3354 inform (DECL_SOURCE_LOCATION (bad),
3355 " skips initialization of %q#D", bad);
3356 else
3357 inform (DECL_SOURCE_LOCATION (bad),
3358 " enters scope of %q#D which has "
3359 "non-trivial destructor", bad);
3360 }
3361 }
3362
3363 if (complained)
3364 {
3365 if (ent->in_try_scope)
3366 inform (input_location, " enters try block");
3367 else if (ent->in_catch_scope && !saw_catch)
3368 inform (input_location, " enters catch block");
3369 else if (ent->in_transaction_scope)
3370 inform (input_location, " enters synchronized or atomic statement");
3371 else if (ent->in_constexpr_if)
3372 inform (input_location, " enters %<constexpr%> if statement");
3373 }
3374
3375 if (ent->in_omp_scope)
3376 {
3377 if (complained)
3378 inform (input_location, " enters OpenMP structured block");
3379 }
3380 else if (flag_openmp)
3381 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3382 {
3383 if (b == ent->binding_level)
3384 break;
3385 if (b->kind == sk_omp)
3386 {
3387 if (identified < 2)
3388 {
3389 complained = identify_goto (decl,
3390 DECL_SOURCE_LOCATION (decl),
3391 &input_location, DK_ERROR);
3392 identified = 2;
3393 }
3394 if (complained)
3395 inform (input_location, " exits OpenMP structured block");
3396 break;
3397 }
3398 }
3399 }
3400
3401 /* Check that a return is ok wrt OpenMP structured blocks.
3402 Called by finish_return_stmt. Returns true if all is well. */
3403
3404 bool
3405 check_omp_return (void)
3406 {
3407 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3408 if (b->kind == sk_omp)
3409 {
3410 error ("invalid exit from OpenMP structured block");
3411 return false;
3412 }
3413 else if (b->kind == sk_function_parms)
3414 break;
3415 return true;
3416 }
3417
3418 /* Define a label, specifying the location in the source file.
3419 Return the LABEL_DECL node for the label. */
3420
3421 static tree
3422 define_label_1 (location_t location, tree name)
3423 {
3424 /* After labels, make any new cleanups in the function go into their
3425 own new (temporary) binding contour. */
3426 for (cp_binding_level *p = current_binding_level;
3427 p->kind != sk_function_parms;
3428 p = p->level_chain)
3429 p->more_cleanups_ok = 0;
3430
3431 named_label_entry *ent = lookup_label_1 (name, false);
3432 tree decl = ent->label_decl;
3433
3434 if (DECL_INITIAL (decl) != NULL_TREE)
3435 {
3436 error ("duplicate label %qD", decl);
3437 return error_mark_node;
3438 }
3439 else
3440 {
3441 /* Mark label as having been defined. */
3442 DECL_INITIAL (decl) = error_mark_node;
3443 /* Say where in the source. */
3444 DECL_SOURCE_LOCATION (decl) = location;
3445
3446 ent->binding_level = current_binding_level;
3447 ent->names_in_scope = current_binding_level->names;
3448
3449 for (named_label_use_entry *use = ent->uses; use; use = use->next)
3450 check_previous_goto (decl, use);
3451 ent->uses = NULL;
3452 }
3453
3454 return decl;
3455 }
3456
3457 /* Wrapper for define_label_1. */
3458
3459 tree
3460 define_label (location_t location, tree name)
3461 {
3462 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3463 tree ret = define_label_1 (location, name);
3464 timevar_cond_stop (TV_NAME_LOOKUP, running);
3465 return ret;
3466 }
3467
3468
3469 struct cp_switch
3470 {
3471 cp_binding_level *level;
3472 struct cp_switch *next;
3473 /* The SWITCH_STMT being built. */
3474 tree switch_stmt;
3475 /* A splay-tree mapping the low element of a case range to the high
3476 element, or NULL_TREE if there is no high element. Used to
3477 determine whether or not a new case label duplicates an old case
3478 label. We need a tree, rather than simply a hash table, because
3479 of the GNU case range extension. */
3480 splay_tree cases;
3481 /* Remember whether there was a case value that is outside the
3482 range of the original type of the controlling expression. */
3483 bool outside_range_p;
3484 /* Remember whether a default: case label has been seen. */
3485 bool has_default_p;
3486 /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT. */
3487 bool break_stmt_seen_p;
3488 /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3489 where BREAK_STMT doesn't belong to the SWITCH_STMT. */
3490 bool in_loop_body_p;
3491 };
3492
3493 /* A stack of the currently active switch statements. The innermost
3494 switch statement is on the top of the stack. There is no need to
3495 mark the stack for garbage collection because it is only active
3496 during the processing of the body of a function, and we never
3497 collect at that point. */
3498
3499 static struct cp_switch *switch_stack;
3500
3501 /* Called right after a switch-statement condition is parsed.
3502 SWITCH_STMT is the switch statement being parsed. */
3503
3504 void
3505 push_switch (tree switch_stmt)
3506 {
3507 struct cp_switch *p = XNEW (struct cp_switch);
3508 p->level = current_binding_level;
3509 p->next = switch_stack;
3510 p->switch_stmt = switch_stmt;
3511 p->cases = splay_tree_new (case_compare, NULL, NULL);
3512 p->outside_range_p = false;
3513 p->has_default_p = false;
3514 p->break_stmt_seen_p = false;
3515 p->in_loop_body_p = false;
3516 switch_stack = p;
3517 }
3518
3519 void
3520 pop_switch (void)
3521 {
3522 struct cp_switch *cs = switch_stack;
3523 location_t switch_location;
3524
3525 /* Emit warnings as needed. */
3526 switch_location = cp_expr_loc_or_loc (cs->switch_stmt, input_location);
3527 const bool bool_cond_p
3528 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3529 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3530 if (!processing_template_decl)
3531 c_do_switch_warnings (cs->cases, switch_location,
3532 SWITCH_STMT_TYPE (cs->switch_stmt),
3533 SWITCH_STMT_COND (cs->switch_stmt),
3534 bool_cond_p, cs->outside_range_p);
3535
3536 /* For the benefit of block_may_fallthru remember if the switch body
3537 case labels cover all possible values and if there are break; stmts. */
3538 if (cs->has_default_p
3539 || (!processing_template_decl
3540 && c_switch_covers_all_cases_p (cs->cases,
3541 SWITCH_STMT_TYPE (cs->switch_stmt))))
3542 SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3543 if (!cs->break_stmt_seen_p)
3544 SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3545 gcc_assert (!cs->in_loop_body_p);
3546 splay_tree_delete (cs->cases);
3547 switch_stack = switch_stack->next;
3548 free (cs);
3549 }
3550
3551 /* Note that a BREAK_STMT is about to be added. If it is inside of
3552 a SWITCH_STMT and not inside of a loop body inside of it, note
3553 in switch_stack we've seen a BREAK_STMT. */
3554
3555 void
3556 note_break_stmt (void)
3557 {
3558 if (switch_stack && !switch_stack->in_loop_body_p)
3559 switch_stack->break_stmt_seen_p = true;
3560 }
3561
3562 /* Note the start of processing of an iteration statement's body.
3563 The note_break_stmt function will do nothing while processing it.
3564 Return a flag that should be passed to note_iteration_stmt_body_end. */
3565
3566 bool
3567 note_iteration_stmt_body_start (void)
3568 {
3569 if (!switch_stack)
3570 return false;
3571 bool ret = switch_stack->in_loop_body_p;
3572 switch_stack->in_loop_body_p = true;
3573 return ret;
3574 }
3575
3576 /* Note the end of processing of an iteration statement's body. */
3577
3578 void
3579 note_iteration_stmt_body_end (bool prev)
3580 {
3581 if (switch_stack)
3582 switch_stack->in_loop_body_p = prev;
3583 }
3584
3585 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3586 condition. Note that if TYPE and VALUE are already integral we don't
3587 really do the conversion because the language-independent
3588 warning/optimization code will work better that way. */
3589
3590 static tree
3591 case_conversion (tree type, tree value)
3592 {
3593 if (value == NULL_TREE)
3594 return value;
3595
3596 value = mark_rvalue_use (value);
3597
3598 if (cxx_dialect >= cxx11
3599 && (SCOPED_ENUM_P (type)
3600 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3601 {
3602 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3603 type = type_promotes_to (type);
3604 value = (perform_implicit_conversion_flags
3605 (type, value, tf_warning_or_error,
3606 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3607 }
3608 return cxx_constant_value (value);
3609 }
3610
3611 /* Note that we've seen a definition of a case label, and complain if this
3612 is a bad place for one. */
3613
3614 tree
3615 finish_case_label (location_t loc, tree low_value, tree high_value)
3616 {
3617 tree cond, r;
3618 cp_binding_level *p;
3619 tree type;
3620
3621 if (low_value == NULL_TREE && high_value == NULL_TREE)
3622 switch_stack->has_default_p = true;
3623
3624 if (processing_template_decl)
3625 {
3626 tree label;
3627
3628 /* For templates, just add the case label; we'll do semantic
3629 analysis at instantiation-time. */
3630 label = build_decl (loc, LABEL_DECL, NULL_TREE, void_type_node);
3631 return add_stmt (build_case_label (low_value, high_value, label));
3632 }
3633
3634 /* Find the condition on which this switch statement depends. */
3635 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3636 if (cond && TREE_CODE (cond) == TREE_LIST)
3637 cond = TREE_VALUE (cond);
3638
3639 if (!check_switch_goto (switch_stack->level))
3640 return error_mark_node;
3641
3642 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3643 if (type == error_mark_node)
3644 return error_mark_node;
3645
3646 low_value = case_conversion (type, low_value);
3647 high_value = case_conversion (type, high_value);
3648
3649 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3650 low_value, high_value,
3651 &switch_stack->outside_range_p);
3652
3653 /* After labels, make any new cleanups in the function go into their
3654 own new (temporary) binding contour. */
3655 for (p = current_binding_level;
3656 p->kind != sk_function_parms;
3657 p = p->level_chain)
3658 p->more_cleanups_ok = 0;
3659
3660 return r;
3661 }
3662 \f
3663 struct typename_info {
3664 tree scope;
3665 tree name;
3666 tree template_id;
3667 bool enum_p;
3668 bool class_p;
3669 };
3670
3671 struct typename_hasher : ggc_ptr_hash<tree_node>
3672 {
3673 typedef typename_info *compare_type;
3674
3675 /* Hash a TYPENAME_TYPE. */
3676
3677 static hashval_t
3678 hash (tree t)
3679 {
3680 hashval_t hash;
3681
3682 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3683 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3684
3685 return hash;
3686 }
3687
3688 /* Compare two TYPENAME_TYPEs. */
3689
3690 static bool
3691 equal (tree t1, const typename_info *t2)
3692 {
3693 return (TYPE_IDENTIFIER (t1) == t2->name
3694 && TYPE_CONTEXT (t1) == t2->scope
3695 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3696 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3697 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3698 }
3699 };
3700
3701 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3702 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3703
3704 Returns the new TYPENAME_TYPE. */
3705
3706 static GTY (()) hash_table<typename_hasher> *typename_htab;
3707
3708 tree
3709 build_typename_type (tree context, tree name, tree fullname,
3710 enum tag_types tag_type)
3711 {
3712 tree t;
3713 tree d;
3714 typename_info ti;
3715 tree *e;
3716 hashval_t hash;
3717
3718 if (typename_htab == NULL)
3719 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3720
3721 ti.scope = FROB_CONTEXT (context);
3722 ti.name = name;
3723 ti.template_id = fullname;
3724 ti.enum_p = tag_type == enum_type;
3725 ti.class_p = (tag_type == class_type
3726 || tag_type == record_type
3727 || tag_type == union_type);
3728 hash = (htab_hash_pointer (ti.scope)
3729 ^ htab_hash_pointer (ti.name));
3730
3731 /* See if we already have this type. */
3732 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3733 if (*e)
3734 t = *e;
3735 else
3736 {
3737 /* Build the TYPENAME_TYPE. */
3738 t = cxx_make_type (TYPENAME_TYPE);
3739 TYPE_CONTEXT (t) = ti.scope;
3740 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3741 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3742 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3743
3744 /* Build the corresponding TYPE_DECL. */
3745 d = build_decl (input_location, TYPE_DECL, name, t);
3746 TYPE_NAME (TREE_TYPE (d)) = d;
3747 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3748 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3749 DECL_ARTIFICIAL (d) = 1;
3750
3751 /* Store it in the hash table. */
3752 *e = t;
3753
3754 /* TYPENAME_TYPEs must always be compared structurally, because
3755 they may or may not resolve down to another type depending on
3756 the currently open classes. */
3757 SET_TYPE_STRUCTURAL_EQUALITY (t);
3758 }
3759
3760 return t;
3761 }
3762
3763 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3764 provided to name the type. Returns an appropriate type, unless an
3765 error occurs, in which case error_mark_node is returned. If we
3766 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3767 return that, rather than the _TYPE it corresponds to, in other
3768 cases we look through the type decl. If TF_ERROR is set, complain
3769 about errors, otherwise be quiet. */
3770
3771 tree
3772 make_typename_type (tree context, tree name, enum tag_types tag_type,
3773 tsubst_flags_t complain)
3774 {
3775 tree fullname;
3776 tree t;
3777 bool want_template;
3778
3779 if (name == error_mark_node
3780 || context == NULL_TREE
3781 || context == error_mark_node)
3782 return error_mark_node;
3783
3784 if (TYPE_P (name))
3785 {
3786 if (!(TYPE_LANG_SPECIFIC (name)
3787 && (CLASSTYPE_IS_TEMPLATE (name)
3788 || CLASSTYPE_USE_TEMPLATE (name))))
3789 name = TYPE_IDENTIFIER (name);
3790 else
3791 /* Create a TEMPLATE_ID_EXPR for the type. */
3792 name = build_nt (TEMPLATE_ID_EXPR,
3793 CLASSTYPE_TI_TEMPLATE (name),
3794 CLASSTYPE_TI_ARGS (name));
3795 }
3796 else if (TREE_CODE (name) == TYPE_DECL)
3797 name = DECL_NAME (name);
3798
3799 fullname = name;
3800
3801 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3802 {
3803 name = TREE_OPERAND (name, 0);
3804 if (DECL_TYPE_TEMPLATE_P (name))
3805 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3806 if (TREE_CODE (name) != IDENTIFIER_NODE)
3807 {
3808 if (complain & tf_error)
3809 error ("%qD is not a type", name);
3810 return error_mark_node;
3811 }
3812 }
3813 if (TREE_CODE (name) == TEMPLATE_DECL)
3814 {
3815 if (complain & tf_error)
3816 error ("%qD used without template arguments", name);
3817 return error_mark_node;
3818 }
3819 gcc_assert (identifier_p (name));
3820 gcc_assert (TYPE_P (context));
3821
3822 if (TREE_CODE (context) == TYPE_PACK_EXPANSION)
3823 /* This can happen for C++17 variadic using (c++/88986). */;
3824 else if (!MAYBE_CLASS_TYPE_P (context))
3825 {
3826 if (complain & tf_error)
3827 error ("%q#T is not a class", context);
3828 return error_mark_node;
3829 }
3830
3831 /* When the CONTEXT is a dependent type, NAME could refer to a
3832 dependent base class of CONTEXT. But look inside it anyway
3833 if CONTEXT is a currently open scope, in case it refers to a
3834 member of the current instantiation or a non-dependent base;
3835 lookup will stop when we hit a dependent base. */
3836 if (!dependent_scope_p (context))
3837 /* We should only set WANT_TYPE when we're a nested typename type.
3838 Then we can give better diagnostics if we find a non-type. */
3839 t = lookup_field (context, name, 2, /*want_type=*/true);
3840 else
3841 t = NULL_TREE;
3842
3843 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3844 return build_typename_type (context, name, fullname, tag_type);
3845
3846 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3847
3848 if (!t)
3849 {
3850 if (complain & tf_error)
3851 {
3852 if (!COMPLETE_TYPE_P (context))
3853 cxx_incomplete_type_error (NULL_TREE, context);
3854 else
3855 error (want_template ? G_("no class template named %q#T in %q#T")
3856 : G_("no type named %q#T in %q#T"), name, context);
3857 }
3858 return error_mark_node;
3859 }
3860
3861 /* Pull out the template from an injected-class-name (or multiple). */
3862 if (want_template)
3863 t = maybe_get_template_decl_from_type_decl (t);
3864
3865 if (TREE_CODE (t) == TREE_LIST)
3866 {
3867 if (complain & tf_error)
3868 {
3869 error ("lookup of %qT in %qT is ambiguous", name, context);
3870 print_candidates (t);
3871 }
3872 return error_mark_node;
3873 }
3874
3875 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3876 {
3877 if (complain & tf_error)
3878 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3879 context, name, t);
3880 return error_mark_node;
3881 }
3882 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3883 {
3884 if (complain & tf_error)
3885 error ("%<typename %T::%D%> names %q#T, which is not a type",
3886 context, name, t);
3887 return error_mark_node;
3888 }
3889
3890 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3891 return error_mark_node;
3892
3893 /* If we are currently parsing a template and if T is a typedef accessed
3894 through CONTEXT then we need to remember and check access of T at
3895 template instantiation time. */
3896 add_typedef_to_current_template_for_access_check (t, context, input_location);
3897
3898 if (want_template)
3899 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3900 NULL_TREE, context,
3901 /*entering_scope=*/0,
3902 complain | tf_user);
3903
3904 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3905 t = TREE_TYPE (t);
3906
3907 maybe_record_typedef_use (t);
3908
3909 return t;
3910 }
3911
3912 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3913 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3914 in which case error_mark_node is returned.
3915
3916 If PARM_LIST is non-NULL, also make sure that the template parameter
3917 list of TEMPLATE_DECL matches.
3918
3919 If COMPLAIN zero, don't complain about any errors that occur. */
3920
3921 tree
3922 make_unbound_class_template (tree context, tree name, tree parm_list,
3923 tsubst_flags_t complain)
3924 {
3925 tree t;
3926 tree d;
3927
3928 if (TYPE_P (name))
3929 name = TYPE_IDENTIFIER (name);
3930 else if (DECL_P (name))
3931 name = DECL_NAME (name);
3932 gcc_assert (identifier_p (name));
3933
3934 if (!dependent_type_p (context)
3935 || currently_open_class (context))
3936 {
3937 tree tmpl = NULL_TREE;
3938
3939 if (MAYBE_CLASS_TYPE_P (context))
3940 tmpl = lookup_field (context, name, 0, false);
3941
3942 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3943 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3944
3945 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3946 {
3947 if (complain & tf_error)
3948 error ("no class template named %q#T in %q#T", name, context);
3949 return error_mark_node;
3950 }
3951
3952 if (parm_list
3953 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3954 {
3955 if (complain & tf_error)
3956 {
3957 error ("template parameters do not match template %qD", tmpl);
3958 inform (DECL_SOURCE_LOCATION (tmpl),
3959 "%qD declared here", tmpl);
3960 }
3961 return error_mark_node;
3962 }
3963
3964 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3965 complain))
3966 return error_mark_node;
3967
3968 return tmpl;
3969 }
3970
3971 /* Build the UNBOUND_CLASS_TEMPLATE. */
3972 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3973 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3974 TREE_TYPE (t) = NULL_TREE;
3975 SET_TYPE_STRUCTURAL_EQUALITY (t);
3976
3977 /* Build the corresponding TEMPLATE_DECL. */
3978 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3979 TYPE_NAME (TREE_TYPE (d)) = d;
3980 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3981 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3982 DECL_ARTIFICIAL (d) = 1;
3983 DECL_TEMPLATE_PARMS (d) = parm_list;
3984
3985 return t;
3986 }
3987
3988 \f
3989
3990 /* Push the declarations of builtin types into the global namespace.
3991 RID_INDEX is the index of the builtin type in the array
3992 RID_POINTERS. NAME is the name used when looking up the builtin
3993 type. TYPE is the _TYPE node for the builtin type.
3994
3995 The calls to set_global_binding below should be
3996 eliminated. Built-in types should not be looked up name; their
3997 names are keywords that the parser can recognize. However, there
3998 is code in c-common.c that uses identifier_global_value to look up
3999 built-in types by name. */
4000
4001 void
4002 record_builtin_type (enum rid rid_index,
4003 const char* name,
4004 tree type)
4005 {
4006 tree decl = NULL_TREE;
4007
4008 if (name)
4009 {
4010 tree tname = get_identifier (name);
4011 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
4012 DECL_ARTIFICIAL (tdecl) = 1;
4013 set_global_binding (tdecl);
4014 decl = tdecl;
4015 }
4016
4017 if ((int) rid_index < (int) RID_MAX)
4018 if (tree rname = ridpointers[(int) rid_index])
4019 if (!decl || DECL_NAME (decl) != rname)
4020 {
4021 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
4022 DECL_ARTIFICIAL (rdecl) = 1;
4023 set_global_binding (rdecl);
4024 if (!decl)
4025 decl = rdecl;
4026 }
4027
4028 if (decl)
4029 {
4030 if (!TYPE_NAME (type))
4031 TYPE_NAME (type) = decl;
4032 debug_hooks->type_decl (decl, 0);
4033 }
4034 }
4035
4036 /* Push a type into the namespace so that the back ends ignore it. */
4037
4038 static void
4039 record_unknown_type (tree type, const char* name)
4040 {
4041 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
4042 TYPE_DECL, get_identifier (name), type));
4043 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
4044 DECL_IGNORED_P (decl) = 1;
4045 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4046 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
4047 SET_TYPE_ALIGN (type, 1);
4048 TYPE_USER_ALIGN (type) = 0;
4049 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
4050 }
4051
4052 /* Create all the predefined identifiers. */
4053
4054 static void
4055 initialize_predefined_identifiers (void)
4056 {
4057 struct predefined_identifier
4058 {
4059 const char *name; /* Name. */
4060 tree *node; /* Node to store it in. */
4061 cp_identifier_kind kind; /* Kind of identifier. */
4062 };
4063
4064 /* A table of identifiers to create at startup. */
4065 static const predefined_identifier predefined_identifiers[] = {
4066 {"C++", &lang_name_cplusplus, cik_normal},
4067 {"C", &lang_name_c, cik_normal},
4068 /* Some of these names have a trailing space so that it is
4069 impossible for them to conflict with names written by users. */
4070 {"__ct ", &ctor_identifier, cik_ctor},
4071 {"__ct_base ", &base_ctor_identifier, cik_ctor},
4072 {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4073 {"__dt ", &dtor_identifier, cik_dtor},
4074 {"__dt_base ", &base_dtor_identifier, cik_dtor},
4075 {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4076 {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4077 {"__conv_op ", &conv_op_identifier, cik_conv_op},
4078 {"__in_chrg", &in_charge_identifier, cik_normal},
4079 {"this", &this_identifier, cik_normal},
4080 {"__delta", &delta_identifier, cik_normal},
4081 {"__pfn", &pfn_identifier, cik_normal},
4082 {"_vptr", &vptr_identifier, cik_normal},
4083 {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4084 {"::", &global_identifier, cik_normal},
4085 {"std", &std_identifier, cik_normal},
4086 /* The demangler expects anonymous namespaces to be called
4087 something starting with '_GLOBAL__N_'. It no longer needs
4088 to be unique to the TU. */
4089 {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4090 {"auto", &auto_identifier, cik_normal},
4091 {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4092 {"initializer_list", &init_list_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 {"__for_range", &for_range_identifier, cik_normal},
4097 {"__for_begin", &for_begin_identifier, cik_normal},
4098 {"__for_end", &for_end_identifier, cik_normal},
4099 {"abi_tag", &abi_tag_identifier, cik_normal},
4100 {"aligned", &aligned_identifier, cik_normal},
4101 {"begin", &begin_identifier, cik_normal},
4102 {"end", &end_identifier, cik_normal},
4103 {"get", &get__identifier, cik_normal},
4104 {"gnu", &gnu_identifier, cik_normal},
4105 {"tuple_element", &tuple_element_identifier, cik_normal},
4106 {"tuple_size", &tuple_size_identifier, cik_normal},
4107 {"type", &type_identifier, cik_normal},
4108 {"value", &value_identifier, cik_normal},
4109 {"_FUN", &fun_identifier, cik_normal},
4110 {"__closure", &closure_identifier, cik_normal},
4111 {NULL, NULL, cik_normal}
4112 };
4113
4114 for (const predefined_identifier *pid = predefined_identifiers;
4115 pid->name; ++pid)
4116 {
4117 *pid->node = get_identifier (pid->name);
4118 /* Some of these identifiers already have a special kind. */
4119 if (pid->kind != cik_normal)
4120 set_identifier_kind (*pid->node, pid->kind);
4121 }
4122 }
4123
4124 /* Create the predefined scalar types of C,
4125 and some nodes representing standard constants (0, 1, (void *)0).
4126 Initialize the global binding level.
4127 Make definitions for built-in primitive functions. */
4128
4129 void
4130 cxx_init_decl_processing (void)
4131 {
4132 tree void_ftype;
4133 tree void_ftype_ptr;
4134
4135 /* Create all the identifiers we need. */
4136 initialize_predefined_identifiers ();
4137
4138 /* Create the global variables. */
4139 push_to_top_level ();
4140
4141 current_function_decl = NULL_TREE;
4142 current_binding_level = NULL;
4143 /* Enter the global namespace. */
4144 gcc_assert (global_namespace == NULL_TREE);
4145 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4146 void_type_node);
4147 TREE_PUBLIC (global_namespace) = 1;
4148 DECL_CONTEXT (global_namespace)
4149 = build_translation_unit_decl (get_identifier (main_input_filename));
4150 /* Remember whether we want the empty class passing ABI change warning
4151 in this TU. */
4152 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4153 = warn_abi && abi_version_crosses (12);
4154 debug_hooks->register_main_translation_unit
4155 (DECL_CONTEXT (global_namespace));
4156 begin_scope (sk_namespace, global_namespace);
4157 current_namespace = global_namespace;
4158
4159 if (flag_visibility_ms_compat)
4160 default_visibility = VISIBILITY_HIDDEN;
4161
4162 /* Initially, C. */
4163 current_lang_name = lang_name_c;
4164
4165 /* Create the `std' namespace. */
4166 push_namespace (std_identifier);
4167 std_node = current_namespace;
4168 pop_namespace ();
4169
4170 flag_noexcept_type = (cxx_dialect >= cxx17);
4171
4172 c_common_nodes_and_builtins ();
4173
4174 tree bool_ftype = build_function_type_list (boolean_type_node, NULL_TREE);
4175 tree decl
4176 = add_builtin_function ("__builtin_is_constant_evaluated",
4177 bool_ftype, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
4178 BUILT_IN_FRONTEND, NULL, NULL_TREE);
4179 set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4180
4181 integer_two_node = build_int_cst (NULL_TREE, 2);
4182
4183 /* Guess at the initial static decls size. */
4184 vec_alloc (static_decls, 500);
4185
4186 /* ... and keyed classes. */
4187 vec_alloc (keyed_classes, 100);
4188
4189 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4190 truthvalue_type_node = boolean_type_node;
4191 truthvalue_false_node = boolean_false_node;
4192 truthvalue_true_node = boolean_true_node;
4193
4194 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4195 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4196 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4197 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4198 NULL_TREE);
4199
4200 #if 0
4201 record_builtin_type (RID_MAX, NULL, string_type_node);
4202 #endif
4203
4204 delta_type_node = ptrdiff_type_node;
4205 vtable_index_type = ptrdiff_type_node;
4206
4207 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4208 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4209 void_ftype_ptr = build_function_type_list (void_type_node,
4210 ptr_type_node, NULL_TREE);
4211 void_ftype_ptr
4212 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4213
4214 /* Create the conversion operator marker. This operator's DECL_NAME
4215 is in the identifier table, so we can use identifier equality to
4216 find it. */
4217 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4218 void_ftype);
4219
4220 /* C++ extensions */
4221
4222 unknown_type_node = make_node (LANG_TYPE);
4223 record_unknown_type (unknown_type_node, "unknown type");
4224
4225 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4226 TREE_TYPE (unknown_type_node) = unknown_type_node;
4227
4228 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4229 result. */
4230 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4231 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4232
4233 init_list_type_node = make_node (LANG_TYPE);
4234 record_unknown_type (init_list_type_node, "init list");
4235
4236 {
4237 /* Make sure we get a unique function type, so we can give
4238 its pointer type a name. (This wins for gdb.) */
4239 tree vfunc_type = make_node (FUNCTION_TYPE);
4240 TREE_TYPE (vfunc_type) = integer_type_node;
4241 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4242 layout_type (vfunc_type);
4243
4244 vtable_entry_type = build_pointer_type (vfunc_type);
4245 }
4246 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4247
4248 vtbl_type_node
4249 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4250 layout_type (vtbl_type_node);
4251 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4252 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4253 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4254 layout_type (vtbl_ptr_type_node);
4255 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4256
4257 push_namespace (get_identifier ("__cxxabiv1"));
4258 abi_node = current_namespace;
4259 pop_namespace ();
4260
4261 global_type_node = make_node (LANG_TYPE);
4262 record_unknown_type (global_type_node, "global type");
4263
4264 any_targ_node = make_node (LANG_TYPE);
4265 record_unknown_type (any_targ_node, "any type");
4266
4267 /* Now, C++. */
4268 current_lang_name = lang_name_cplusplus;
4269
4270 if (aligned_new_threshold > 1
4271 && !pow2p_hwi (aligned_new_threshold))
4272 {
4273 error ("%<-faligned-new=%d%> is not a power of two",
4274 aligned_new_threshold);
4275 aligned_new_threshold = 1;
4276 }
4277 if (aligned_new_threshold == -1)
4278 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4279 if (aligned_new_threshold == 1)
4280 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4281
4282 {
4283 tree newattrs, extvisattr;
4284 tree newtype, deltype;
4285 tree ptr_ftype_sizetype;
4286 tree new_eh_spec;
4287
4288 ptr_ftype_sizetype
4289 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4290 if (cxx_dialect == cxx98)
4291 {
4292 tree bad_alloc_id;
4293 tree bad_alloc_type_node;
4294 tree bad_alloc_decl;
4295
4296 push_namespace (std_identifier);
4297 bad_alloc_id = get_identifier ("bad_alloc");
4298 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4299 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4300 bad_alloc_decl
4301 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4302 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4303 pop_namespace ();
4304
4305 new_eh_spec
4306 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4307 }
4308 else
4309 new_eh_spec = noexcept_false_spec;
4310
4311 /* Ensure attribs.c is initialized. */
4312 init_attributes ();
4313
4314 /* Ensure constraint.cc is initialized. */
4315 init_constraint_processing ();
4316
4317 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4318 NULL_TREE);
4319 newattrs = tree_cons (get_identifier ("alloc_size"),
4320 build_tree_list (NULL_TREE, integer_one_node),
4321 extvisattr);
4322 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4323 newtype = build_exception_variant (newtype, new_eh_spec);
4324 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4325 deltype = build_exception_variant (deltype, empty_except_spec);
4326 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4327 DECL_IS_MALLOC (opnew) = 1;
4328 DECL_IS_OPERATOR_NEW (opnew) = 1;
4329 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4330 DECL_IS_MALLOC (opnew) = 1;
4331 DECL_IS_OPERATOR_NEW (opnew) = 1;
4332 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4333 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4334 if (flag_sized_deallocation)
4335 {
4336 /* Also push the sized deallocation variants:
4337 void operator delete(void*, std::size_t) throw();
4338 void operator delete[](void*, std::size_t) throw(); */
4339 tree void_ftype_ptr_size
4340 = build_function_type_list (void_type_node, ptr_type_node,
4341 size_type_node, NULL_TREE);
4342 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4343 extvisattr);
4344 deltype = build_exception_variant (deltype, empty_except_spec);
4345 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4346 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4347 }
4348
4349 if (aligned_new_threshold)
4350 {
4351 push_namespace (std_identifier);
4352 tree align_id = get_identifier ("align_val_t");
4353 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4354 NULL_TREE, /*scoped*/true, NULL);
4355 pop_namespace ();
4356
4357 /* operator new (size_t, align_val_t); */
4358 newtype = build_function_type_list (ptr_type_node, size_type_node,
4359 align_type_node, NULL_TREE);
4360 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4361 newtype = build_exception_variant (newtype, new_eh_spec);
4362 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4363 DECL_IS_MALLOC (opnew) = 1;
4364 DECL_IS_OPERATOR_NEW (opnew) = 1;
4365 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4366 DECL_IS_MALLOC (opnew) = 1;
4367 DECL_IS_OPERATOR_NEW (opnew) = 1;
4368
4369 /* operator delete (void *, align_val_t); */
4370 deltype = build_function_type_list (void_type_node, ptr_type_node,
4371 align_type_node, NULL_TREE);
4372 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4373 deltype = build_exception_variant (deltype, empty_except_spec);
4374 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4375 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4376
4377 if (flag_sized_deallocation)
4378 {
4379 /* operator delete (void *, size_t, align_val_t); */
4380 deltype = build_function_type_list (void_type_node, ptr_type_node,
4381 size_type_node, align_type_node,
4382 NULL_TREE);
4383 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4384 deltype = build_exception_variant (deltype, empty_except_spec);
4385 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4386 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4387 }
4388 }
4389
4390 nullptr_type_node = make_node (NULLPTR_TYPE);
4391 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4392 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4393 TYPE_UNSIGNED (nullptr_type_node) = 1;
4394 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4395 if (abi_version_at_least (9))
4396 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4397 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4398 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4399 nullptr_node = build_int_cst (nullptr_type_node, 0);
4400 }
4401
4402 abort_fndecl
4403 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4404 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4405
4406 /* Perform other language dependent initializations. */
4407 init_class_processing ();
4408 init_rtti_processing ();
4409 init_template_processing ();
4410
4411 if (flag_exceptions)
4412 init_exception_processing ();
4413
4414 if (! supports_one_only ())
4415 flag_weak = 0;
4416
4417 make_fname_decl = cp_make_fname_decl;
4418 start_fname_decls ();
4419
4420 /* Show we use EH for cleanups. */
4421 if (flag_exceptions)
4422 using_eh_for_cleanups ();
4423 }
4424
4425 /* Generate an initializer for a function naming variable from
4426 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4427 filled in with the type of the init. */
4428
4429 tree
4430 cp_fname_init (const char* name, tree *type_p)
4431 {
4432 tree domain = NULL_TREE;
4433 tree type;
4434 tree init = NULL_TREE;
4435 size_t length = 0;
4436
4437 if (name)
4438 {
4439 length = strlen (name);
4440 domain = build_index_type (size_int (length));
4441 init = build_string (length + 1, name);
4442 }
4443
4444 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4445 type = build_cplus_array_type (type, domain);
4446
4447 *type_p = type;
4448
4449 if (init)
4450 TREE_TYPE (init) = type;
4451 else
4452 init = error_mark_node;
4453
4454 return init;
4455 }
4456
4457 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4458 the decl, LOC is the location to give the decl, NAME is the
4459 initialization string and TYPE_DEP indicates whether NAME depended
4460 on the type of the function. We make use of that to detect
4461 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4462 at the point of first use, so we mustn't push the decl now. */
4463
4464 static tree
4465 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4466 {
4467 const char *const name = (type_dep && in_template_function ()
4468 ? NULL : fname_as_string (type_dep));
4469 tree type;
4470 tree init = cp_fname_init (name, &type);
4471 tree decl = build_decl (loc, VAR_DECL, id, type);
4472
4473 if (name)
4474 free (CONST_CAST (char *, name));
4475
4476 /* As we're using pushdecl_with_scope, we must set the context. */
4477 DECL_CONTEXT (decl) = current_function_decl;
4478
4479 TREE_READONLY (decl) = 1;
4480 DECL_ARTIFICIAL (decl) = 1;
4481 DECL_DECLARED_CONSTEXPR_P (decl) = 1;
4482 TREE_STATIC (decl) = 1;
4483
4484 TREE_USED (decl) = 1;
4485
4486 if (init)
4487 {
4488 SET_DECL_VALUE_EXPR (decl, init);
4489 DECL_HAS_VALUE_EXPR_P (decl) = 1;
4490 /* For decl_constant_var_p. */
4491 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
4492 }
4493
4494 if (current_function_decl)
4495 {
4496 DECL_CONTEXT (decl) = current_function_decl;
4497 decl = pushdecl_outermost_localscope (decl);
4498 if (decl != error_mark_node)
4499 add_decl_expr (decl);
4500 }
4501 else
4502 {
4503 DECL_THIS_STATIC (decl) = true;
4504 pushdecl_top_level_and_finish (decl, NULL_TREE);
4505 }
4506
4507 return decl;
4508 }
4509
4510 static tree
4511 builtin_function_1 (tree decl, tree context, bool is_global)
4512 {
4513 tree id = DECL_NAME (decl);
4514 const char *name = IDENTIFIER_POINTER (id);
4515
4516 retrofit_lang_decl (decl);
4517
4518 DECL_ARTIFICIAL (decl) = 1;
4519 SET_DECL_LANGUAGE (decl, lang_c);
4520 /* Runtime library routines are, by definition, available in an
4521 external shared object. */
4522 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4523 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4524
4525 DECL_CONTEXT (decl) = context;
4526
4527 /* A function in the user's namespace should have an explicit
4528 declaration before it is used. Mark the built-in function as
4529 anticipated but not actually declared. */
4530 if (name[0] != '_' || name[1] != '_')
4531 DECL_ANTICIPATED (decl) = 1;
4532 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4533 {
4534 size_t len = strlen (name);
4535
4536 /* Treat __*_chk fortification functions as anticipated as well,
4537 unless they are __builtin_*. */
4538 if (len > strlen ("___chk")
4539 && memcmp (name + len - strlen ("_chk"),
4540 "_chk", strlen ("_chk") + 1) == 0)
4541 DECL_ANTICIPATED (decl) = 1;
4542 }
4543
4544 if (is_global)
4545 return pushdecl_top_level (decl);
4546 else
4547 return pushdecl (decl);
4548 }
4549
4550 tree
4551 cxx_builtin_function (tree decl)
4552 {
4553 tree id = DECL_NAME (decl);
4554 const char *name = IDENTIFIER_POINTER (id);
4555 /* All builtins that don't begin with an '_' should additionally
4556 go in the 'std' namespace. */
4557 if (name[0] != '_')
4558 {
4559 tree decl2 = copy_node(decl);
4560 push_namespace (std_identifier);
4561 builtin_function_1 (decl2, std_node, false);
4562 pop_namespace ();
4563 }
4564
4565 return builtin_function_1 (decl, NULL_TREE, false);
4566 }
4567
4568 /* Like cxx_builtin_function, but guarantee the function is added to the global
4569 scope. This is to allow function specific options to add new machine
4570 dependent builtins when the target ISA changes via attribute((target(...)))
4571 which saves space on program startup if the program does not use non-generic
4572 ISAs. */
4573
4574 tree
4575 cxx_builtin_function_ext_scope (tree decl)
4576 {
4577
4578 tree id = DECL_NAME (decl);
4579 const char *name = IDENTIFIER_POINTER (id);
4580 /* All builtins that don't begin with an '_' should additionally
4581 go in the 'std' namespace. */
4582 if (name[0] != '_')
4583 {
4584 tree decl2 = copy_node(decl);
4585 push_namespace (std_identifier);
4586 builtin_function_1 (decl2, std_node, true);
4587 pop_namespace ();
4588 }
4589
4590 return builtin_function_1 (decl, NULL_TREE, true);
4591 }
4592
4593 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4594 function. Not called directly. */
4595
4596 static tree
4597 build_library_fn (tree name, enum tree_code operator_code, tree type,
4598 int ecf_flags)
4599 {
4600 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4601 DECL_EXTERNAL (fn) = 1;
4602 TREE_PUBLIC (fn) = 1;
4603 DECL_ARTIFICIAL (fn) = 1;
4604 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4605 = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4606 SET_DECL_LANGUAGE (fn, lang_c);
4607 /* Runtime library routines are, by definition, available in an
4608 external shared object. */
4609 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4610 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4611 set_call_expr_flags (fn, ecf_flags);
4612 return fn;
4613 }
4614
4615 /* Returns the _DECL for a library function with C++ linkage. */
4616
4617 static tree
4618 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4619 int ecf_flags)
4620 {
4621 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4622 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4623 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4624 return fn;
4625 }
4626
4627 /* Like build_library_fn, but takes a C string instead of an
4628 IDENTIFIER_NODE. */
4629
4630 tree
4631 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4632 {
4633 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4634 }
4635
4636 /* Like build_cp_library_fn, but takes a C string instead of an
4637 IDENTIFIER_NODE. */
4638
4639 tree
4640 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4641 {
4642 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4643 ecf_flags);
4644 }
4645
4646 /* Like build_library_fn, but also pushes the function so that we will
4647 be able to find it via get_global_binding. Also, the function
4648 may throw exceptions listed in RAISES. */
4649
4650 tree
4651 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4652 {
4653 tree fn;
4654
4655 if (raises)
4656 type = build_exception_variant (type, raises);
4657
4658 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4659 pushdecl_top_level (fn);
4660 return fn;
4661 }
4662
4663 /* Like build_cp_library_fn, but also pushes the function so that it
4664 will be found by normal lookup. */
4665
4666 static tree
4667 push_cp_library_fn (enum tree_code operator_code, tree type,
4668 int ecf_flags)
4669 {
4670 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4671 operator_code, type, ecf_flags);
4672 pushdecl (fn);
4673 if (flag_tm)
4674 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4675 return fn;
4676 }
4677
4678 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4679 a FUNCTION_TYPE. */
4680
4681 tree
4682 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4683 {
4684 tree type = build_function_type (void_type_node, parmtypes);
4685 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4686 }
4687
4688 /* Like push_library_fn, but also note that this function throws
4689 and does not return. Used for __throw_foo and the like. */
4690
4691 tree
4692 push_throw_library_fn (tree name, tree type)
4693 {
4694 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4695 return fn;
4696 }
4697 \f
4698 /* When we call finish_struct for an anonymous union, we create
4699 default copy constructors and such. But, an anonymous union
4700 shouldn't have such things; this function undoes the damage to the
4701 anonymous union type T.
4702
4703 (The reason that we create the synthesized methods is that we don't
4704 distinguish `union { int i; }' from `typedef union { int i; } U'.
4705 The first is an anonymous union; the second is just an ordinary
4706 union type.) */
4707
4708 void
4709 fixup_anonymous_aggr (tree t)
4710 {
4711 /* Wipe out memory of synthesized methods. */
4712 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4713 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4714 TYPE_HAS_COPY_CTOR (t) = 0;
4715 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4716 TYPE_HAS_COPY_ASSIGN (t) = 0;
4717 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4718
4719 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4720 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4721 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4722 *prev_p = DECL_CHAIN (probe);
4723 else
4724 prev_p = &DECL_CHAIN (probe);
4725
4726 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4727 assignment operators (because they cannot have these methods themselves).
4728 For anonymous unions this is already checked because they are not allowed
4729 in any union, otherwise we have to check it. */
4730 if (TREE_CODE (t) != UNION_TYPE)
4731 {
4732 tree field, type;
4733
4734 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4735 if (TREE_CODE (field) == FIELD_DECL)
4736 {
4737 type = TREE_TYPE (field);
4738 if (CLASS_TYPE_P (type))
4739 {
4740 if (TYPE_NEEDS_CONSTRUCTING (type))
4741 error ("member %q+#D with constructor not allowed "
4742 "in anonymous aggregate", field);
4743 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4744 error ("member %q+#D with destructor not allowed "
4745 "in anonymous aggregate", field);
4746 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4747 error ("member %q+#D with copy assignment operator "
4748 "not allowed in anonymous aggregate", field);
4749 }
4750 }
4751 }
4752 }
4753
4754 /* Warn for an attribute located at LOCATION that appertains to the
4755 class type CLASS_TYPE that has not been properly placed after its
4756 class-key, in it class-specifier. */
4757
4758 void
4759 warn_misplaced_attr_for_class_type (location_t location,
4760 tree class_type)
4761 {
4762 gcc_assert (OVERLOAD_TYPE_P (class_type));
4763
4764 auto_diagnostic_group d;
4765 if (warning_at (location, OPT_Wattributes,
4766 "attribute ignored in declaration "
4767 "of %q#T", class_type))
4768 inform (location,
4769 "attribute for %q#T must follow the %qs keyword",
4770 class_type, class_key_or_enum_as_string (class_type));
4771 }
4772
4773 /* Make sure that a declaration with no declarator is well-formed, i.e.
4774 just declares a tagged type or anonymous union.
4775
4776 Returns the type declared; or NULL_TREE if none. */
4777
4778 tree
4779 check_tag_decl (cp_decl_specifier_seq *declspecs,
4780 bool explicit_type_instantiation_p)
4781 {
4782 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4783 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4784 /* If a class, struct, or enum type is declared by the DECLSPECS
4785 (i.e, if a class-specifier, enum-specifier, or non-typename
4786 elaborated-type-specifier appears in the DECLSPECS),
4787 DECLARED_TYPE is set to the corresponding type. */
4788 tree declared_type = NULL_TREE;
4789 bool error_p = false;
4790
4791 if (declspecs->multiple_types_p)
4792 error ("multiple types in one declaration");
4793 else if (declspecs->redefined_builtin_type)
4794 {
4795 if (!in_system_header_at (input_location))
4796 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4797 "redeclaration of C++ built-in type %qT",
4798 declspecs->redefined_builtin_type);
4799 return NULL_TREE;
4800 }
4801
4802 if (declspecs->type
4803 && TYPE_P (declspecs->type)
4804 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4805 && MAYBE_CLASS_TYPE_P (declspecs->type))
4806 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4807 declared_type = declspecs->type;
4808 else if (declspecs->type == error_mark_node)
4809 error_p = true;
4810
4811 if (type_uses_auto (declared_type))
4812 {
4813 error_at (declspecs->locations[ds_type_spec],
4814 "%<auto%> can only be specified for variables "
4815 "or function declarations");
4816 return error_mark_node;
4817 }
4818
4819 if (declared_type && !OVERLOAD_TYPE_P (declared_type))
4820 declared_type = NULL_TREE;
4821
4822 if (!declared_type && !saw_friend && !error_p)
4823 permerror (input_location, "declaration does not declare anything");
4824 /* Check for an anonymous union. */
4825 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4826 && TYPE_UNNAMED_P (declared_type))
4827 {
4828 /* 7/3 In a simple-declaration, the optional init-declarator-list
4829 can be omitted only when declaring a class (clause 9) or
4830 enumeration (7.2), that is, when the decl-specifier-seq contains
4831 either a class-specifier, an elaborated-type-specifier with
4832 a class-key (9.1), or an enum-specifier. In these cases and
4833 whenever a class-specifier or enum-specifier is present in the
4834 decl-specifier-seq, the identifiers in these specifiers are among
4835 the names being declared by the declaration (as class-name,
4836 enum-names, or enumerators, depending on the syntax). In such
4837 cases, and except for the declaration of an unnamed bit-field (9.6),
4838 the decl-specifier-seq shall introduce one or more names into the
4839 program, or shall redeclare a name introduced by a previous
4840 declaration. [Example:
4841 enum { }; // ill-formed
4842 typedef class { }; // ill-formed
4843 --end example] */
4844 if (saw_typedef)
4845 {
4846 error ("missing type-name in typedef-declaration");
4847 return NULL_TREE;
4848 }
4849 /* Anonymous unions are objects, so they can have specifiers. */;
4850 SET_ANON_AGGR_TYPE_P (declared_type);
4851
4852 if (TREE_CODE (declared_type) != UNION_TYPE
4853 && !in_system_header_at (input_location))
4854 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4855 }
4856
4857 else
4858 {
4859 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4860 error_at (declspecs->locations[ds_inline],
4861 "%<inline%> can only be specified for functions");
4862 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4863 error_at (declspecs->locations[ds_virtual],
4864 "%<virtual%> can only be specified for functions");
4865 else if (saw_friend
4866 && (!current_class_type
4867 || current_scope () != current_class_type))
4868 error_at (declspecs->locations[ds_friend],
4869 "%<friend%> can only be specified inside a class");
4870 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4871 error_at (declspecs->locations[ds_explicit],
4872 "%<explicit%> can only be specified for constructors");
4873 else if (declspecs->storage_class)
4874 error_at (declspecs->locations[ds_storage_class],
4875 "a storage class can only be specified for objects "
4876 "and functions");
4877 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4878 error_at (declspecs->locations[ds_const],
4879 "%<const%> can only be specified for objects and "
4880 "functions");
4881 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4882 error_at (declspecs->locations[ds_volatile],
4883 "%<volatile%> can only be specified for objects and "
4884 "functions");
4885 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4886 error_at (declspecs->locations[ds_restrict],
4887 "%<__restrict%> can only be specified for objects and "
4888 "functions");
4889 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4890 error_at (declspecs->locations[ds_thread],
4891 "%<__thread%> can only be specified for objects "
4892 "and functions");
4893 else if (saw_typedef)
4894 warning_at (declspecs->locations[ds_typedef], 0,
4895 "%<typedef%> was ignored in this declaration");
4896 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4897 error_at (declspecs->locations[ds_constexpr],
4898 "%<constexpr%> cannot be used for type declarations");
4899 }
4900
4901 if (declspecs->attributes && warn_attributes && declared_type)
4902 {
4903 location_t loc;
4904 if (!CLASS_TYPE_P (declared_type)
4905 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4906 /* For a non-template class, use the name location. */
4907 loc = location_of (declared_type);
4908 else
4909 /* For a template class (an explicit instantiation), use the
4910 current location. */
4911 loc = input_location;
4912
4913 if (explicit_type_instantiation_p)
4914 /* [dcl.attr.grammar]/4:
4915
4916 No attribute-specifier-seq shall appertain to an explicit
4917 instantiation. */
4918 {
4919 if (warning_at (loc, OPT_Wattributes,
4920 "attribute ignored in explicit instantiation %q#T",
4921 declared_type))
4922 inform (loc,
4923 "no attribute can be applied to "
4924 "an explicit instantiation");
4925 }
4926 else
4927 warn_misplaced_attr_for_class_type (loc, declared_type);
4928 }
4929
4930 return declared_type;
4931 }
4932
4933 /* Called when a declaration is seen that contains no names to declare.
4934 If its type is a reference to a structure, union or enum inherited
4935 from a containing scope, shadow that tag name for the current scope
4936 with a forward reference.
4937 If its type defines a new named structure or union
4938 or defines an enum, it is valid but we need not do anything here.
4939 Otherwise, it is an error.
4940
4941 C++: may have to grok the declspecs to learn about static,
4942 complain for anonymous unions.
4943
4944 Returns the TYPE declared -- or NULL_TREE if none. */
4945
4946 tree
4947 shadow_tag (cp_decl_specifier_seq *declspecs)
4948 {
4949 tree t = check_tag_decl (declspecs,
4950 /*explicit_type_instantiation_p=*/false);
4951
4952 if (!t)
4953 return NULL_TREE;
4954
4955 if (maybe_process_partial_specialization (t) == error_mark_node)
4956 return NULL_TREE;
4957
4958 /* This is where the variables in an anonymous union are
4959 declared. An anonymous union declaration looks like:
4960 union { ... } ;
4961 because there is no declarator after the union, the parser
4962 sends that declaration here. */
4963 if (ANON_AGGR_TYPE_P (t))
4964 {
4965 fixup_anonymous_aggr (t);
4966
4967 if (TYPE_FIELDS (t))
4968 {
4969 tree decl = grokdeclarator (/*declarator=*/NULL,
4970 declspecs, NORMAL, 0, NULL);
4971 finish_anon_union (decl);
4972 }
4973 }
4974
4975 return t;
4976 }
4977 \f
4978 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4979
4980 tree
4981 groktypename (cp_decl_specifier_seq *type_specifiers,
4982 const cp_declarator *declarator,
4983 bool is_template_arg)
4984 {
4985 tree attrs;
4986 tree type;
4987 enum decl_context context
4988 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4989 attrs = type_specifiers->attributes;
4990 type_specifiers->attributes = NULL_TREE;
4991 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4992 if (attrs && type != error_mark_node)
4993 {
4994 if (CLASS_TYPE_P (type))
4995 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4996 "outside of definition", type);
4997 else if (MAYBE_CLASS_TYPE_P (type))
4998 /* A template type parameter or other dependent type. */
4999 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
5000 "type %qT without an associated declaration", type);
5001 else
5002 cplus_decl_attributes (&type, attrs, 0);
5003 }
5004 return type;
5005 }
5006
5007 /* Process a DECLARATOR for a function-scope variable declaration,
5008 namespace-scope variable declaration, or function declaration.
5009 (Function definitions go through start_function; class member
5010 declarations appearing in the body of the class go through
5011 grokfield.) The DECL corresponding to the DECLARATOR is returned.
5012 If an error occurs, the error_mark_node is returned instead.
5013
5014 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
5015 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
5016 for an explicitly defaulted function, or SD_DELETED for an explicitly
5017 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
5018 implicitly initialized via a default constructor. ATTRIBUTES and
5019 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
5020
5021 The scope represented by the context of the returned DECL is pushed
5022 (if it is not the global namespace) and is assigned to
5023 *PUSHED_SCOPE_P. The caller is then responsible for calling
5024 pop_scope on *PUSHED_SCOPE_P if it is set. */
5025
5026 tree
5027 start_decl (const cp_declarator *declarator,
5028 cp_decl_specifier_seq *declspecs,
5029 int initialized,
5030 tree attributes,
5031 tree prefix_attributes,
5032 tree *pushed_scope_p)
5033 {
5034 tree decl;
5035 tree context;
5036 bool was_public;
5037 int flags;
5038 bool alias;
5039
5040 *pushed_scope_p = NULL_TREE;
5041
5042 /* An object declared as __attribute__((deprecated)) suppresses
5043 warnings of uses of other deprecated items. */
5044 if (lookup_attribute ("deprecated", attributes))
5045 deprecated_state = DEPRECATED_SUPPRESS;
5046
5047 attributes = chainon (attributes, prefix_attributes);
5048
5049 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5050 &attributes);
5051
5052 deprecated_state = DEPRECATED_NORMAL;
5053
5054 if (decl == NULL_TREE || VOID_TYPE_P (decl)
5055 || decl == error_mark_node)
5056 return error_mark_node;
5057
5058 context = CP_DECL_CONTEXT (decl);
5059 if (context != global_namespace)
5060 *pushed_scope_p = push_scope (context);
5061
5062 /* Is it valid for this decl to have an initializer at all?
5063 If not, set INITIALIZED to zero, which will indirectly
5064 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
5065 if (initialized
5066 && TREE_CODE (decl) == TYPE_DECL)
5067 {
5068 error_at (DECL_SOURCE_LOCATION (decl),
5069 "typedef %qD is initialized (use decltype instead)", decl);
5070 return error_mark_node;
5071 }
5072
5073 if (initialized)
5074 {
5075 if (! toplevel_bindings_p ()
5076 && DECL_EXTERNAL (decl))
5077 warning (0, "declaration of %q#D has %<extern%> and is initialized",
5078 decl);
5079 DECL_EXTERNAL (decl) = 0;
5080 if (toplevel_bindings_p ())
5081 TREE_STATIC (decl) = 1;
5082 }
5083 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
5084
5085 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
5086 record_key_method_defined (decl);
5087
5088 /* If this is a typedef that names the class for linkage purposes
5089 (7.1.3p8), apply any attributes directly to the type. */
5090 if (TREE_CODE (decl) == TYPE_DECL
5091 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
5092 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
5093 flags = ATTR_FLAG_TYPE_IN_PLACE;
5094 else
5095 flags = 0;
5096
5097 /* Set attributes here so if duplicate decl, will have proper attributes. */
5098 cplus_decl_attributes (&decl, attributes, flags);
5099
5100 /* Dllimported symbols cannot be defined. Static data members (which
5101 can be initialized in-class and dllimported) go through grokfield,
5102 not here, so we don't need to exclude those decls when checking for
5103 a definition. */
5104 if (initialized && DECL_DLLIMPORT_P (decl))
5105 {
5106 error_at (DECL_SOURCE_LOCATION (decl),
5107 "definition of %q#D is marked %<dllimport%>", decl);
5108 DECL_DLLIMPORT_P (decl) = 0;
5109 }
5110
5111 /* If #pragma weak was used, mark the decl weak now. */
5112 if (!processing_template_decl && !DECL_DECOMPOSITION_P (decl))
5113 maybe_apply_pragma_weak (decl);
5114
5115 if (TREE_CODE (decl) == FUNCTION_DECL
5116 && DECL_DECLARED_INLINE_P (decl)
5117 && DECL_UNINLINABLE (decl)
5118 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5119 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5120 "inline function %qD given attribute noinline", decl);
5121
5122 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5123 {
5124 bool this_tmpl = (processing_template_decl
5125 > template_class_depth (context));
5126 if (VAR_P (decl))
5127 {
5128 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5129 if (field == NULL_TREE
5130 || !(VAR_P (field) || variable_template_p (field)))
5131 error ("%q+#D is not a static data member of %q#T", decl, context);
5132 else if (variable_template_p (field)
5133 && (DECL_LANG_SPECIFIC (decl)
5134 && DECL_TEMPLATE_SPECIALIZATION (decl)))
5135 /* OK, specialization was already checked. */;
5136 else if (variable_template_p (field) && !this_tmpl)
5137 {
5138 error_at (DECL_SOURCE_LOCATION (decl),
5139 "non-member-template declaration of %qD", decl);
5140 inform (DECL_SOURCE_LOCATION (field), "does not match "
5141 "member template declaration here");
5142 return error_mark_node;
5143 }
5144 else
5145 {
5146 if (variable_template_p (field))
5147 field = DECL_TEMPLATE_RESULT (field);
5148
5149 if (DECL_CONTEXT (field) != context)
5150 {
5151 if (!same_type_p (DECL_CONTEXT (field), context))
5152 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5153 "to be defined as %<%T::%D%>",
5154 DECL_CONTEXT (field), DECL_NAME (decl),
5155 context, DECL_NAME (decl));
5156 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5157 }
5158 /* Static data member are tricky; an in-class initialization
5159 still doesn't provide a definition, so the in-class
5160 declaration will have DECL_EXTERNAL set, but will have an
5161 initialization. Thus, duplicate_decls won't warn
5162 about this situation, and so we check here. */
5163 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5164 error ("duplicate initialization of %qD", decl);
5165 field = duplicate_decls (decl, field,
5166 /*newdecl_is_friend=*/false);
5167 if (field == error_mark_node)
5168 return error_mark_node;
5169 else if (field)
5170 decl = field;
5171 }
5172 }
5173 else
5174 {
5175 tree field = check_classfn (context, decl,
5176 this_tmpl
5177 ? current_template_parms
5178 : NULL_TREE);
5179 if (field && field != error_mark_node
5180 && duplicate_decls (decl, field,
5181 /*newdecl_is_friend=*/false))
5182 decl = field;
5183 }
5184
5185 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5186 DECL_IN_AGGR_P (decl) = 0;
5187 /* Do not mark DECL as an explicit specialization if it was not
5188 already marked as an instantiation; a declaration should
5189 never be marked as a specialization unless we know what
5190 template is being specialized. */
5191 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5192 {
5193 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5194 if (TREE_CODE (decl) == FUNCTION_DECL)
5195 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5196 && DECL_DECLARED_INLINE_P (decl));
5197 else
5198 DECL_COMDAT (decl) = false;
5199
5200 /* [temp.expl.spec] An explicit specialization of a static data
5201 member of a template is a definition if the declaration
5202 includes an initializer; otherwise, it is a declaration.
5203
5204 We check for processing_specialization so this only applies
5205 to the new specialization syntax. */
5206 if (!initialized && processing_specialization)
5207 DECL_EXTERNAL (decl) = 1;
5208 }
5209
5210 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5211 /* Aliases are definitions. */
5212 && !alias)
5213 permerror (declarator->id_loc,
5214 "declaration of %q#D outside of class is not definition",
5215 decl);
5216 }
5217
5218 was_public = TREE_PUBLIC (decl);
5219
5220 /* Enter this declaration into the symbol table. Don't push the plain
5221 VAR_DECL for a variable template. */
5222 if (!template_parm_scope_p ()
5223 || !VAR_P (decl))
5224 decl = maybe_push_decl (decl);
5225
5226 if (processing_template_decl)
5227 decl = push_template_decl (decl);
5228 if (decl == error_mark_node)
5229 return error_mark_node;
5230
5231 if (VAR_P (decl)
5232 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5233 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5234 {
5235 /* This is a const variable with implicit 'static'. Set
5236 DECL_THIS_STATIC so we can tell it from variables that are
5237 !TREE_PUBLIC because of the anonymous namespace. */
5238 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5239 DECL_THIS_STATIC (decl) = 1;
5240 }
5241
5242 if (current_function_decl && VAR_P (decl)
5243 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5244 {
5245 bool ok = false;
5246 if (CP_DECL_THREAD_LOCAL_P (decl))
5247 error_at (DECL_SOURCE_LOCATION (decl),
5248 "%qD declared %<thread_local%> in %<constexpr%> function",
5249 decl);
5250 else if (TREE_STATIC (decl))
5251 error_at (DECL_SOURCE_LOCATION (decl),
5252 "%qD declared %<static%> in %<constexpr%> function", decl);
5253 else
5254 ok = true;
5255 if (!ok)
5256 cp_function_chain->invalid_constexpr = true;
5257 }
5258
5259 if (!processing_template_decl && VAR_P (decl))
5260 start_decl_1 (decl, initialized);
5261
5262 return decl;
5263 }
5264
5265 /* Process the declaration of a variable DECL. INITIALIZED is true
5266 iff DECL is explicitly initialized. (INITIALIZED is false if the
5267 variable is initialized via an implicitly-called constructor.)
5268 This function must be called for ordinary variables (including, for
5269 example, implicit instantiations of templates), but must not be
5270 called for template declarations. */
5271
5272 void
5273 start_decl_1 (tree decl, bool initialized)
5274 {
5275 tree type;
5276 bool complete_p;
5277 bool aggregate_definition_p;
5278
5279 gcc_assert (!processing_template_decl);
5280
5281 if (error_operand_p (decl))
5282 return;
5283
5284 gcc_assert (VAR_P (decl));
5285
5286 type = TREE_TYPE (decl);
5287 complete_p = COMPLETE_TYPE_P (type);
5288 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5289
5290 /* If an explicit initializer is present, or if this is a definition
5291 of an aggregate, then we need a complete type at this point.
5292 (Scalars are always complete types, so there is nothing to
5293 check.) This code just sets COMPLETE_P; errors (if necessary)
5294 are issued below. */
5295 if ((initialized || aggregate_definition_p)
5296 && !complete_p
5297 && COMPLETE_TYPE_P (complete_type (type)))
5298 {
5299 complete_p = true;
5300 /* We will not yet have set TREE_READONLY on DECL if the type
5301 was "const", but incomplete, before this point. But, now, we
5302 have a complete type, so we can try again. */
5303 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5304 }
5305
5306 if (initialized)
5307 /* Is it valid for this decl to have an initializer at all? */
5308 {
5309 /* Don't allow initializations for incomplete types except for
5310 arrays which might be completed by the initialization. */
5311 if (complete_p)
5312 ; /* A complete type is ok. */
5313 else if (type_uses_auto (type))
5314 ; /* An auto type is ok. */
5315 else if (TREE_CODE (type) != ARRAY_TYPE)
5316 {
5317 error ("variable %q#D has initializer but incomplete type", decl);
5318 type = TREE_TYPE (decl) = error_mark_node;
5319 }
5320 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5321 {
5322 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5323 error ("elements of array %q#D have incomplete type", decl);
5324 /* else we already gave an error in start_decl. */
5325 }
5326 }
5327 else if (aggregate_definition_p && !complete_p)
5328 {
5329 if (type_uses_auto (type))
5330 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5331 else
5332 {
5333 error ("aggregate %q#D has incomplete type and cannot be defined",
5334 decl);
5335 /* Change the type so that assemble_variable will give
5336 DECL an rtl we can live with: (mem (const_int 0)). */
5337 type = TREE_TYPE (decl) = error_mark_node;
5338 }
5339 }
5340
5341 /* Create a new scope to hold this declaration if necessary.
5342 Whether or not a new scope is necessary cannot be determined
5343 until after the type has been completed; if the type is a
5344 specialization of a class template it is not until after
5345 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5346 will be set correctly. */
5347 maybe_push_cleanup_level (type);
5348 }
5349
5350 /* Handle initialization of references. DECL, TYPE, and INIT have the
5351 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5352 but will be set to a new CLEANUP_STMT if a temporary is created
5353 that must be destroyed subsequently.
5354
5355 Returns an initializer expression to use to initialize DECL, or
5356 NULL if the initialization can be performed statically.
5357
5358 Quotes on semantics can be found in ARM 8.4.3. */
5359
5360 static tree
5361 grok_reference_init (tree decl, tree type, tree init, int flags)
5362 {
5363 if (init == NULL_TREE)
5364 {
5365 if ((DECL_LANG_SPECIFIC (decl) == 0
5366 || DECL_IN_AGGR_P (decl) == 0)
5367 && ! DECL_THIS_EXTERN (decl))
5368 error_at (DECL_SOURCE_LOCATION (decl),
5369 "%qD declared as reference but not initialized", decl);
5370 return NULL_TREE;
5371 }
5372
5373 if (TREE_CODE (init) == TREE_LIST)
5374 init = build_x_compound_expr_from_list (init, ELK_INIT,
5375 tf_warning_or_error);
5376
5377 tree ttype = TREE_TYPE (type);
5378 if (TREE_CODE (ttype) != ARRAY_TYPE
5379 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5380 /* Note: default conversion is only called in very special cases. */
5381 init = decay_conversion (init, tf_warning_or_error);
5382
5383 /* check_initializer handles this for non-reference variables, but for
5384 references we need to do it here or the initializer will get the
5385 incomplete array type and confuse later calls to
5386 cp_complete_array_type. */
5387 if (TREE_CODE (ttype) == ARRAY_TYPE
5388 && TYPE_DOMAIN (ttype) == NULL_TREE
5389 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5390 || TREE_CODE (init) == STRING_CST))
5391 {
5392 cp_complete_array_type (&ttype, init, false);
5393 if (ttype != TREE_TYPE (type))
5394 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5395 }
5396
5397 /* Convert INIT to the reference type TYPE. This may involve the
5398 creation of a temporary, whose lifetime must be the same as that
5399 of the reference. If so, a DECL_EXPR for the temporary will be
5400 added just after the DECL_EXPR for DECL. That's why we don't set
5401 DECL_INITIAL for local references (instead assigning to them
5402 explicitly); we need to allow the temporary to be initialized
5403 first. */
5404 return initialize_reference (type, init, flags,
5405 tf_warning_or_error);
5406 }
5407
5408 /* Designated initializers in arrays are not supported in GNU C++.
5409 The parser cannot detect this error since it does not know whether
5410 a given brace-enclosed initializer is for a class type or for an
5411 array. This function checks that CE does not use a designated
5412 initializer. If it does, an error is issued. Returns true if CE
5413 is valid, i.e., does not have a designated initializer. */
5414
5415 bool
5416 check_array_designated_initializer (constructor_elt *ce,
5417 unsigned HOST_WIDE_INT index)
5418 {
5419 /* Designated initializers for array elements are not supported. */
5420 if (ce->index)
5421 {
5422 /* The parser only allows identifiers as designated
5423 initializers. */
5424 if (ce->index == error_mark_node)
5425 {
5426 error ("name used in a GNU-style designated "
5427 "initializer for an array");
5428 return false;
5429 }
5430 else if (identifier_p (ce->index))
5431 {
5432 error ("name %qD used in a GNU-style designated "
5433 "initializer for an array", ce->index);
5434 return false;
5435 }
5436
5437 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5438 ce->index, true);
5439 if (ce_index
5440 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5441 && (TREE_CODE (ce_index = fold_non_dependent_expr (ce_index))
5442 == INTEGER_CST))
5443 {
5444 /* A C99 designator is OK if it matches the current index. */
5445 if (wi::to_wide (ce_index) == index)
5446 {
5447 ce->index = ce_index;
5448 return true;
5449 }
5450 else
5451 sorry ("non-trivial designated initializers not supported");
5452 }
5453 else
5454 error ("C99 designator %qE is not an integral constant-expression",
5455 ce->index);
5456
5457 return false;
5458 }
5459
5460 return true;
5461 }
5462
5463 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5464 array until we finish parsing the initializer. If that's the
5465 situation we're in, update DECL accordingly. */
5466
5467 static void
5468 maybe_deduce_size_from_array_init (tree decl, tree init)
5469 {
5470 tree type = TREE_TYPE (decl);
5471
5472 if (TREE_CODE (type) == ARRAY_TYPE
5473 && TYPE_DOMAIN (type) == NULL_TREE
5474 && TREE_CODE (decl) != TYPE_DECL)
5475 {
5476 /* do_default is really a C-ism to deal with tentative definitions.
5477 But let's leave it here to ease the eventual merge. */
5478 int do_default = !DECL_EXTERNAL (decl);
5479 tree initializer = init ? init : DECL_INITIAL (decl);
5480 int failure = 0;
5481
5482 /* Check that there are no designated initializers in INIT, as
5483 those are not supported in GNU C++, and as the middle-end
5484 will crash if presented with a non-numeric designated
5485 initializer. */
5486 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5487 {
5488 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5489 constructor_elt *ce;
5490 HOST_WIDE_INT i;
5491 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5492 {
5493 if (instantiation_dependent_expression_p (ce->index))
5494 return;
5495 if (!check_array_designated_initializer (ce, i))
5496 failure = 1;
5497 }
5498 }
5499
5500 if (failure)
5501 TREE_TYPE (decl) = error_mark_node;
5502 else
5503 {
5504 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5505 do_default);
5506 if (failure == 1)
5507 {
5508 error_at (cp_expr_loc_or_loc (initializer,
5509 DECL_SOURCE_LOCATION (decl)),
5510 "initializer fails to determine size of %qD", decl);
5511 }
5512 else if (failure == 2)
5513 {
5514 if (do_default)
5515 {
5516 error_at (DECL_SOURCE_LOCATION (decl),
5517 "array size missing in %qD", decl);
5518 }
5519 /* If a `static' var's size isn't known, make it extern as
5520 well as static, so it does not get allocated. If it's not
5521 `static', then don't mark it extern; finish_incomplete_decl
5522 will give it a default size and it will get allocated. */
5523 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5524 DECL_EXTERNAL (decl) = 1;
5525 }
5526 else if (failure == 3)
5527 {
5528 error_at (DECL_SOURCE_LOCATION (decl),
5529 "zero-size array %qD", decl);
5530 }
5531 }
5532
5533 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5534
5535 relayout_decl (decl);
5536 }
5537 }
5538
5539 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5540 any appropriate error messages regarding the layout. */
5541
5542 static void
5543 layout_var_decl (tree decl)
5544 {
5545 tree type;
5546
5547 type = TREE_TYPE (decl);
5548 if (type == error_mark_node)
5549 return;
5550
5551 /* If we haven't already laid out this declaration, do so now.
5552 Note that we must not call complete type for an external object
5553 because it's type might involve templates that we are not
5554 supposed to instantiate yet. (And it's perfectly valid to say
5555 `extern X x' for some incomplete type `X'.) */
5556 if (!DECL_EXTERNAL (decl))
5557 complete_type (type);
5558 if (!DECL_SIZE (decl)
5559 && TREE_TYPE (decl) != error_mark_node
5560 && complete_or_array_type_p (type))
5561 layout_decl (decl, 0);
5562
5563 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5564 {
5565 /* An automatic variable with an incomplete type: that is an error.
5566 Don't talk about array types here, since we took care of that
5567 message in grokdeclarator. */
5568 error_at (DECL_SOURCE_LOCATION (decl),
5569 "storage size of %qD isn%'t known", decl);
5570 TREE_TYPE (decl) = error_mark_node;
5571 }
5572 #if 0
5573 /* Keep this code around in case we later want to control debug info
5574 based on whether a type is "used". (jason 1999-11-11) */
5575
5576 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5577 /* Let debugger know it should output info for this type. */
5578 note_debug_info_needed (ttype);
5579
5580 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5581 note_debug_info_needed (DECL_CONTEXT (decl));
5582 #endif
5583
5584 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5585 && DECL_SIZE (decl) != NULL_TREE
5586 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5587 {
5588 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5589 constant_expression_warning (DECL_SIZE (decl));
5590 else
5591 {
5592 error_at (DECL_SOURCE_LOCATION (decl),
5593 "storage size of %qD isn%'t constant", decl);
5594 TREE_TYPE (decl) = error_mark_node;
5595 }
5596 }
5597 }
5598
5599 /* If a local static variable is declared in an inline function, or if
5600 we have a weak definition, we must endeavor to create only one
5601 instance of the variable at link-time. */
5602
5603 void
5604 maybe_commonize_var (tree decl)
5605 {
5606 /* Don't mess with __FUNCTION__ and similar. */
5607 if (DECL_ARTIFICIAL (decl))
5608 return;
5609
5610 /* Static data in a function with comdat linkage also has comdat
5611 linkage. */
5612 if ((TREE_STATIC (decl)
5613 && DECL_FUNCTION_SCOPE_P (decl)
5614 && vague_linkage_p (DECL_CONTEXT (decl)))
5615 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5616 {
5617 if (flag_weak)
5618 {
5619 /* With weak symbols, we simply make the variable COMDAT;
5620 that will cause copies in multiple translations units to
5621 be merged. */
5622 comdat_linkage (decl);
5623 }
5624 else
5625 {
5626 if (DECL_INITIAL (decl) == NULL_TREE
5627 || DECL_INITIAL (decl) == error_mark_node)
5628 {
5629 /* Without weak symbols, we can use COMMON to merge
5630 uninitialized variables. */
5631 TREE_PUBLIC (decl) = 1;
5632 DECL_COMMON (decl) = 1;
5633 }
5634 else
5635 {
5636 /* While for initialized variables, we must use internal
5637 linkage -- which means that multiple copies will not
5638 be merged. */
5639 TREE_PUBLIC (decl) = 0;
5640 DECL_COMMON (decl) = 0;
5641 DECL_INTERFACE_KNOWN (decl) = 1;
5642 const char *msg;
5643 if (DECL_INLINE_VAR_P (decl))
5644 msg = G_("sorry: semantics of inline variable "
5645 "%q#D are wrong (you%'ll wind up with "
5646 "multiple copies)");
5647 else
5648 msg = G_("sorry: semantics of inline function "
5649 "static data %q#D are wrong (you%'ll wind "
5650 "up with multiple copies)");
5651 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5652 msg, decl))
5653 inform (DECL_SOURCE_LOCATION (decl),
5654 "you can work around this by removing the initializer");
5655 }
5656 }
5657 }
5658 }
5659
5660 /* Issue an error message if DECL is an uninitialized const variable.
5661 CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr
5662 context from potential_constant_expression. Returns true if all is well,
5663 false otherwise. */
5664
5665 bool
5666 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p,
5667 tsubst_flags_t complain)
5668 {
5669 tree type = strip_array_types (TREE_TYPE (decl));
5670
5671 /* ``Unless explicitly declared extern, a const object does not have
5672 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5673 7.1.6 */
5674 if (VAR_P (decl)
5675 && !TYPE_REF_P (type)
5676 && (constexpr_context_p
5677 || CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5678 && !DECL_NONTRIVIALLY_INITIALIZED_P (decl))
5679 {
5680 tree field = default_init_uninitialized_part (type);
5681 if (!field)
5682 return true;
5683
5684 if (!constexpr_context_p)
5685 {
5686 if (CP_TYPE_CONST_P (type))
5687 {
5688 if (complain & tf_error)
5689 permerror (DECL_SOURCE_LOCATION (decl),
5690 "uninitialized const %qD", decl);
5691 }
5692 else
5693 {
5694 if (!is_instantiation_of_constexpr (current_function_decl)
5695 && (complain & tf_error))
5696 error_at (DECL_SOURCE_LOCATION (decl),
5697 "uninitialized variable %qD in %<constexpr%> "
5698 "function", decl);
5699 cp_function_chain->invalid_constexpr = true;
5700 }
5701 }
5702 else if (complain & tf_error)
5703 error_at (DECL_SOURCE_LOCATION (decl),
5704 "uninitialized variable %qD in %<constexpr%> context",
5705 decl);
5706
5707 if (CLASS_TYPE_P (type) && (complain & tf_error))
5708 {
5709 tree defaulted_ctor;
5710
5711 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5712 "%q#T has no user-provided default constructor", type);
5713 defaulted_ctor = in_class_defaulted_default_constructor (type);
5714 if (defaulted_ctor)
5715 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5716 "constructor is not user-provided because it is "
5717 "explicitly defaulted in the class body");
5718 inform (DECL_SOURCE_LOCATION (field),
5719 "and the implicitly-defined constructor does not "
5720 "initialize %q#D", field);
5721 }
5722
5723 return false;
5724 }
5725
5726 return true;
5727 }
5728 \f
5729 /* Structure holding the current initializer being processed by reshape_init.
5730 CUR is a pointer to the current element being processed, END is a pointer
5731 after the last element present in the initializer. */
5732 struct reshape_iter
5733 {
5734 constructor_elt *cur;
5735 constructor_elt *end;
5736 };
5737
5738 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5739
5740 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5741 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5742 initialized. If there are no more such fields, the return value
5743 will be NULL. */
5744
5745 tree
5746 next_initializable_field (tree field)
5747 {
5748 while (field
5749 && (TREE_CODE (field) != FIELD_DECL
5750 || DECL_UNNAMED_BIT_FIELD (field)
5751 || (DECL_ARTIFICIAL (field)
5752 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5753 field = DECL_CHAIN (field);
5754
5755 return field;
5756 }
5757
5758 /* Return true for [dcl.init.list] direct-list-initialization from
5759 single element of enumeration with a fixed underlying type. */
5760
5761 bool
5762 is_direct_enum_init (tree type, tree init)
5763 {
5764 if (cxx_dialect >= cxx17
5765 && TREE_CODE (type) == ENUMERAL_TYPE
5766 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5767 && TREE_CODE (init) == CONSTRUCTOR
5768 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5769 && CONSTRUCTOR_NELTS (init) == 1)
5770 return true;
5771 return false;
5772 }
5773
5774 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5775 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5776 INTEGER_CST representing the size of the array minus one (the maximum index),
5777 or NULL_TREE if the array was declared without specifying the size. D is
5778 the iterator within the constructor. */
5779
5780 static tree
5781 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5782 tsubst_flags_t complain)
5783 {
5784 tree new_init;
5785 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5786 unsigned HOST_WIDE_INT max_index_cst = 0;
5787 unsigned HOST_WIDE_INT index;
5788
5789 /* The initializer for an array is always a CONSTRUCTOR. */
5790 new_init = build_constructor (init_list_type_node, NULL);
5791
5792 if (sized_array_p)
5793 {
5794 /* Minus 1 is used for zero sized arrays. */
5795 if (integer_all_onesp (max_index))
5796 return new_init;
5797
5798 if (tree_fits_uhwi_p (max_index))
5799 max_index_cst = tree_to_uhwi (max_index);
5800 /* sizetype is sign extended, not zero extended. */
5801 else
5802 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5803 }
5804
5805 /* Set to the index of the last element with a non-zero initializer.
5806 Zero initializers for elements past this one can be dropped. */
5807 unsigned HOST_WIDE_INT last_nonzero = -1;
5808 /* Loop until there are no more initializers. */
5809 for (index = 0;
5810 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5811 ++index)
5812 {
5813 tree elt_init;
5814 constructor_elt *old_cur = d->cur;
5815
5816 check_array_designated_initializer (d->cur, index);
5817 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5818 complain);
5819 if (elt_init == error_mark_node)
5820 return error_mark_node;
5821 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5822 size_int (index), elt_init);
5823 if (!TREE_CONSTANT (elt_init))
5824 TREE_CONSTANT (new_init) = false;
5825
5826 /* Pointers initialized to strings must be treated as non-zero
5827 even if the string is empty. */
5828 tree init_type = TREE_TYPE (elt_init);
5829 if ((POINTER_TYPE_P (elt_type) != POINTER_TYPE_P (init_type))
5830 || !initializer_zerop (elt_init))
5831 last_nonzero = index;
5832
5833 /* This can happen with an invalid initializer (c++/54501). */
5834 if (d->cur == old_cur && !sized_array_p)
5835 break;
5836 }
5837
5838 if (sized_array_p && trivial_type_p (elt_type))
5839 {
5840 /* Strip trailing zero-initializers from an array of a trivial
5841 type of known size. They are redundant and get in the way
5842 of telling them apart from those with implicit zero value. */
5843 unsigned HOST_WIDE_INT nelts = CONSTRUCTOR_NELTS (new_init);
5844 if (last_nonzero > nelts)
5845 nelts = 0;
5846 else if (last_nonzero < nelts - 1)
5847 nelts = last_nonzero + 1;
5848
5849 vec_safe_truncate (CONSTRUCTOR_ELTS (new_init), nelts);
5850 }
5851
5852 return new_init;
5853 }
5854
5855 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5856 Parameters are the same of reshape_init_r. */
5857
5858 static tree
5859 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5860 {
5861 tree max_index = NULL_TREE;
5862
5863 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5864
5865 if (TYPE_DOMAIN (type))
5866 max_index = array_type_nelts (type);
5867
5868 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5869 }
5870
5871 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5872 Parameters are the same of reshape_init_r. */
5873
5874 static tree
5875 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5876 {
5877 tree max_index = NULL_TREE;
5878
5879 gcc_assert (VECTOR_TYPE_P (type));
5880
5881 if (COMPOUND_LITERAL_P (d->cur->value))
5882 {
5883 tree value = d->cur->value;
5884 if (!same_type_p (TREE_TYPE (value), type))
5885 {
5886 if (complain & tf_error)
5887 error ("invalid type %qT as initializer for a vector of type %qT",
5888 TREE_TYPE (d->cur->value), type);
5889 value = error_mark_node;
5890 }
5891 ++d->cur;
5892 return value;
5893 }
5894
5895 /* For a vector, we initialize it as an array of the appropriate size. */
5896 if (VECTOR_TYPE_P (type))
5897 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5898
5899 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5900 }
5901
5902 /* Subroutine of reshape_init_r, processes the initializers for classes
5903 or union. Parameters are the same of reshape_init_r. */
5904
5905 static tree
5906 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5907 tsubst_flags_t complain)
5908 {
5909 tree field;
5910 tree new_init;
5911
5912 gcc_assert (CLASS_TYPE_P (type));
5913
5914 /* The initializer for a class is always a CONSTRUCTOR. */
5915 new_init = build_constructor (init_list_type_node, NULL);
5916 field = next_initializable_field (TYPE_FIELDS (type));
5917
5918 if (!field)
5919 {
5920 /* [dcl.init.aggr]
5921
5922 An initializer for an aggregate member that is an
5923 empty class shall have the form of an empty
5924 initializer-list {}. */
5925 if (!first_initializer_p)
5926 {
5927 if (complain & tf_error)
5928 error ("initializer for %qT must be brace-enclosed", type);
5929 return error_mark_node;
5930 }
5931 return new_init;
5932 }
5933
5934 /* Loop through the initializable fields, gathering initializers. */
5935 while (d->cur != d->end)
5936 {
5937 tree field_init;
5938 constructor_elt *old_cur = d->cur;
5939
5940 /* Handle designated initializers, as an extension. */
5941 if (d->cur->index)
5942 {
5943 if (d->cur->index == error_mark_node)
5944 return error_mark_node;
5945
5946 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5947 {
5948 /* We already reshaped this. */
5949 if (field != d->cur->index)
5950 {
5951 tree id = DECL_NAME (d->cur->index);
5952 gcc_assert (id);
5953 gcc_checking_assert (d->cur->index
5954 == get_class_binding (type, id, false));
5955 field = d->cur->index;
5956 }
5957 }
5958 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5959 field = get_class_binding (type, d->cur->index, false);
5960 else
5961 {
5962 if (complain & tf_error)
5963 error ("%<[%E] =%> used in a GNU-style designated initializer"
5964 " for class %qT", d->cur->index, type);
5965 return error_mark_node;
5966 }
5967
5968 if (!field || TREE_CODE (field) != FIELD_DECL)
5969 {
5970 if (complain & tf_error)
5971 error ("%qT has no non-static data member named %qD", type,
5972 d->cur->index);
5973 return error_mark_node;
5974 }
5975 }
5976
5977 /* If we processed all the member of the class, we are done. */
5978 if (!field)
5979 break;
5980
5981 field_init = reshape_init_r (TREE_TYPE (field), d,
5982 /*first_initializer_p=*/false, complain);
5983 if (field_init == error_mark_node)
5984 return error_mark_node;
5985
5986 if (d->cur == old_cur && d->cur->index)
5987 {
5988 /* This can happen with an invalid initializer for a flexible
5989 array member (c++/54441). */
5990 if (complain & tf_error)
5991 error ("invalid initializer for %q#D", field);
5992 return error_mark_node;
5993 }
5994
5995 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5996
5997 /* [dcl.init.aggr]
5998
5999 When a union is initialized with a brace-enclosed
6000 initializer, the braces shall only contain an
6001 initializer for the first member of the union. */
6002 if (TREE_CODE (type) == UNION_TYPE)
6003 break;
6004
6005 field = next_initializable_field (DECL_CHAIN (field));
6006 }
6007
6008 return new_init;
6009 }
6010
6011 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
6012 designators are not valid; either complain or return true to indicate
6013 that reshape_init_r should return error_mark_node. */
6014
6015 static bool
6016 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
6017 {
6018 if (d->cur->index)
6019 {
6020 if (complain & tf_error)
6021 error ("C99 designator %qE outside aggregate initializer",
6022 d->cur->index);
6023 else
6024 return true;
6025 }
6026 return false;
6027 }
6028
6029 /* Subroutine of reshape_init, which processes a single initializer (part of
6030 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
6031 iterator within the CONSTRUCTOR which points to the initializer to process.
6032 FIRST_INITIALIZER_P is true if this is the first initializer of the
6033 outermost CONSTRUCTOR node. */
6034
6035 static tree
6036 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
6037 tsubst_flags_t complain)
6038 {
6039 tree init = d->cur->value;
6040
6041 if (error_operand_p (init))
6042 return error_mark_node;
6043
6044 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
6045 && has_designator_problem (d, complain))
6046 return error_mark_node;
6047
6048 tree stripped_init = tree_strip_any_location_wrapper (init);
6049
6050 if (TREE_CODE (type) == COMPLEX_TYPE)
6051 {
6052 /* A complex type can be initialized from one or two initializers,
6053 but braces are not elided. */
6054 d->cur++;
6055 if (BRACE_ENCLOSED_INITIALIZER_P (stripped_init))
6056 {
6057 if (CONSTRUCTOR_NELTS (stripped_init) > 2)
6058 {
6059 if (complain & tf_error)
6060 error ("too many initializers for %qT", type);
6061 else
6062 return error_mark_node;
6063 }
6064 }
6065 else if (first_initializer_p && d->cur != d->end)
6066 {
6067 vec<constructor_elt, va_gc> *v = 0;
6068 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
6069 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
6070 if (has_designator_problem (d, complain))
6071 return error_mark_node;
6072 d->cur++;
6073 init = build_constructor (init_list_type_node, v);
6074 }
6075 return init;
6076 }
6077
6078 /* A non-aggregate type is always initialized with a single
6079 initializer. */
6080 if (!CP_AGGREGATE_TYPE_P (type))
6081 {
6082 /* It is invalid to initialize a non-aggregate type with a
6083 brace-enclosed initializer before C++0x.
6084 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
6085 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
6086 a CONSTRUCTOR (with a record type). */
6087 if (TREE_CODE (stripped_init) == CONSTRUCTOR
6088 /* Don't complain about a capture-init. */
6089 && !CONSTRUCTOR_IS_DIRECT_INIT (stripped_init)
6090 && BRACE_ENCLOSED_INITIALIZER_P (stripped_init)) /* p7626.C */
6091 {
6092 if (SCALAR_TYPE_P (type))
6093 {
6094 if (cxx_dialect < cxx11)
6095 {
6096 if (complain & tf_error)
6097 error ("braces around scalar initializer for type %qT",
6098 type);
6099 init = error_mark_node;
6100 }
6101 else if (first_initializer_p
6102 || (CONSTRUCTOR_NELTS (stripped_init) > 0
6103 && (BRACE_ENCLOSED_INITIALIZER_P
6104 (CONSTRUCTOR_ELT (stripped_init,0)->value))))
6105 {
6106 if (complain & tf_error)
6107 error ("too many braces around scalar initializer"
6108 "for type %qT", type);
6109 init = error_mark_node;
6110 }
6111 }
6112 else
6113 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6114 }
6115
6116 d->cur++;
6117 return init;
6118 }
6119
6120 /* "If T is a class type and the initializer list has a single element of
6121 type cv U, where U is T or a class derived from T, the object is
6122 initialized from that element." Even if T is an aggregate. */
6123 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
6124 && first_initializer_p
6125 && d->end - d->cur == 1
6126 && reference_related_p (type, TREE_TYPE (init)))
6127 {
6128 d->cur++;
6129 return init;
6130 }
6131
6132 /* [dcl.init.aggr]
6133
6134 All implicit type conversions (clause _conv_) are considered when
6135 initializing the aggregate member with an initializer from an
6136 initializer-list. If the initializer can initialize a member,
6137 the member is initialized. Otherwise, if the member is itself a
6138 non-empty subaggregate, brace elision is assumed and the
6139 initializer is considered for the initialization of the first
6140 member of the subaggregate. */
6141 if (TREE_CODE (init) != CONSTRUCTOR
6142 /* But don't try this for the first initializer, since that would be
6143 looking through the outermost braces; A a2 = { a1 }; is not a
6144 valid aggregate initialization. */
6145 && !first_initializer_p
6146 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
6147 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
6148 complain)))
6149 {
6150 d->cur++;
6151 return init;
6152 }
6153
6154 /* [dcl.init.string]
6155
6156 A char array (whether plain char, signed char, or unsigned char)
6157 can be initialized by a string-literal (optionally enclosed in
6158 braces); a wchar_t array can be initialized by a wide
6159 string-literal (optionally enclosed in braces). */
6160 if (TREE_CODE (type) == ARRAY_TYPE
6161 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
6162 {
6163 tree str_init = init;
6164 tree stripped_str_init = stripped_init;
6165
6166 /* Strip one level of braces if and only if they enclose a single
6167 element (as allowed by [dcl.init.string]). */
6168 if (!first_initializer_p
6169 && TREE_CODE (stripped_str_init) == CONSTRUCTOR
6170 && CONSTRUCTOR_NELTS (stripped_str_init) == 1)
6171 {
6172 str_init = (*CONSTRUCTOR_ELTS (stripped_str_init))[0].value;
6173 stripped_str_init = tree_strip_any_location_wrapper (str_init);
6174 }
6175
6176 /* If it's a string literal, then it's the initializer for the array
6177 as a whole. Otherwise, continue with normal initialization for
6178 array types (one value per array element). */
6179 if (TREE_CODE (stripped_str_init) == STRING_CST)
6180 {
6181 if (has_designator_problem (d, complain))
6182 return error_mark_node;
6183 d->cur++;
6184 return str_init;
6185 }
6186 }
6187
6188 /* The following cases are about aggregates. If we are not within a full
6189 initializer already, and there is not a CONSTRUCTOR, it means that there
6190 is a missing set of braces (that is, we are processing the case for
6191 which reshape_init exists). */
6192 if (!first_initializer_p)
6193 {
6194 if (TREE_CODE (stripped_init) == CONSTRUCTOR)
6195 {
6196 tree init_type = TREE_TYPE (init);
6197 if (init_type && TYPE_PTRMEMFUNC_P (init_type))
6198 /* There is no need to call reshape_init for pointer-to-member
6199 function initializers, as they are always constructed correctly
6200 by the front end. Here we have e.g. {.__pfn=0B, .__delta=0},
6201 which is missing outermost braces. We should warn below, and
6202 one of the routines below will wrap it in additional { }. */;
6203 /* For a nested compound literal, there is no need to reshape since
6204 we called reshape_init in finish_compound_literal, before calling
6205 digest_init. */
6206 else if (COMPOUND_LITERAL_P (stripped_init)
6207 /* Similarly, a CONSTRUCTOR of the target's type is a
6208 previously digested initializer. */
6209 || same_type_ignoring_top_level_qualifiers_p (type,
6210 init_type))
6211 {
6212 ++d->cur;
6213 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (stripped_init));
6214 return init;
6215 }
6216 else
6217 {
6218 /* Something that hasn't been reshaped yet. */
6219 ++d->cur;
6220 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (stripped_init));
6221 return reshape_init (type, init, complain);
6222 }
6223 }
6224
6225 if (complain & tf_warning)
6226 warning (OPT_Wmissing_braces,
6227 "missing braces around initializer for %qT",
6228 type);
6229 }
6230
6231 /* Dispatch to specialized routines. */
6232 if (CLASS_TYPE_P (type))
6233 return reshape_init_class (type, d, first_initializer_p, complain);
6234 else if (TREE_CODE (type) == ARRAY_TYPE)
6235 return reshape_init_array (type, d, complain);
6236 else if (VECTOR_TYPE_P (type))
6237 return reshape_init_vector (type, d, complain);
6238 else
6239 gcc_unreachable();
6240 }
6241
6242 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6243 brace-enclosed aggregate initializer.
6244
6245 INIT is the CONSTRUCTOR containing the list of initializers describing
6246 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6247 It may not presently match the shape of the TYPE; for example:
6248
6249 struct S { int a; int b; };
6250 struct S a[] = { 1, 2, 3, 4 };
6251
6252 Here INIT will hold a vector of four elements, rather than a
6253 vector of two elements, each itself a vector of two elements. This
6254 routine transforms INIT from the former form into the latter. The
6255 revised CONSTRUCTOR node is returned. */
6256
6257 tree
6258 reshape_init (tree type, tree init, tsubst_flags_t complain)
6259 {
6260 vec<constructor_elt, va_gc> *v;
6261 reshape_iter d;
6262 tree new_init;
6263
6264 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6265
6266 v = CONSTRUCTOR_ELTS (init);
6267
6268 /* An empty constructor does not need reshaping, and it is always a valid
6269 initializer. */
6270 if (vec_safe_is_empty (v))
6271 return init;
6272
6273 /* Handle [dcl.init.list] direct-list-initialization from
6274 single element of enumeration with a fixed underlying type. */
6275 if (is_direct_enum_init (type, init))
6276 {
6277 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6278 type = cv_unqualified (type);
6279 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6280 {
6281 warning_sentinel w (warn_useless_cast);
6282 warning_sentinel w2 (warn_ignored_qualifiers);
6283 return cp_build_c_cast (type, elt, tf_warning_or_error);
6284 }
6285 else
6286 return error_mark_node;
6287 }
6288
6289 /* Recurse on this CONSTRUCTOR. */
6290 d.cur = &(*v)[0];
6291 d.end = d.cur + v->length ();
6292
6293 new_init = reshape_init_r (type, &d, true, complain);
6294 if (new_init == error_mark_node)
6295 return error_mark_node;
6296
6297 /* Make sure all the element of the constructor were used. Otherwise,
6298 issue an error about exceeding initializers. */
6299 if (d.cur != d.end)
6300 {
6301 if (complain & tf_error)
6302 error ("too many initializers for %qT", type);
6303 return error_mark_node;
6304 }
6305
6306 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6307 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6308 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6309 if (CONSTRUCTOR_IS_DESIGNATED_INIT (init)
6310 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6311 CONSTRUCTOR_IS_DESIGNATED_INIT (new_init) = true;
6312
6313 return new_init;
6314 }
6315
6316 /* Verify array initializer. Returns true if errors have been reported. */
6317
6318 bool
6319 check_array_initializer (tree decl, tree type, tree init)
6320 {
6321 tree element_type = TREE_TYPE (type);
6322
6323 /* The array type itself need not be complete, because the
6324 initializer may tell us how many elements are in the array.
6325 But, the elements of the array must be complete. */
6326 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6327 {
6328 if (decl)
6329 error_at (DECL_SOURCE_LOCATION (decl),
6330 "elements of array %q#D have incomplete type", decl);
6331 else
6332 error ("elements of array %q#T have incomplete type", type);
6333 return true;
6334 }
6335 /* A compound literal can't have variable size. */
6336 if (init && !decl
6337 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6338 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6339 {
6340 error ("variable-sized compound literal");
6341 return true;
6342 }
6343 return false;
6344 }
6345
6346 /* Subroutine of check_initializer; args are passed down from that function.
6347 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6348
6349 static tree
6350 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6351
6352 {
6353 gcc_assert (stmts_are_full_exprs_p ());
6354 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6355 }
6356
6357 /* Verify INIT (the initializer for DECL), and record the
6358 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6359 grok_reference_init.
6360
6361 If the return value is non-NULL, it is an expression that must be
6362 evaluated dynamically to initialize DECL. */
6363
6364 static tree
6365 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6366 {
6367 tree type = TREE_TYPE (decl);
6368 tree init_code = NULL;
6369 tree core_type;
6370
6371 /* Things that are going to be initialized need to have complete
6372 type. */
6373 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6374
6375 if (DECL_HAS_VALUE_EXPR_P (decl))
6376 {
6377 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6378 it doesn't have storage to be initialized. */
6379 gcc_assert (init == NULL_TREE);
6380 return NULL_TREE;
6381 }
6382
6383 if (type == error_mark_node)
6384 /* We will have already complained. */
6385 return NULL_TREE;
6386
6387 if (TREE_CODE (type) == ARRAY_TYPE)
6388 {
6389 if (check_array_initializer (decl, type, init))
6390 return NULL_TREE;
6391 }
6392 else if (!COMPLETE_TYPE_P (type))
6393 {
6394 error_at (DECL_SOURCE_LOCATION (decl),
6395 "%q#D has incomplete type", decl);
6396 TREE_TYPE (decl) = error_mark_node;
6397 return NULL_TREE;
6398 }
6399 else
6400 /* There is no way to make a variable-sized class type in GNU C++. */
6401 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6402
6403 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6404 {
6405 int init_len = CONSTRUCTOR_NELTS (init);
6406 if (SCALAR_TYPE_P (type))
6407 {
6408 if (init_len == 0)
6409 {
6410 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6411 init = build_zero_init (type, NULL_TREE, false);
6412 }
6413 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6414 {
6415 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6416 "scalar object %qD requires one element in "
6417 "initializer", decl);
6418 TREE_TYPE (decl) = error_mark_node;
6419 return NULL_TREE;
6420 }
6421 }
6422 }
6423
6424 if (TREE_CODE (decl) == CONST_DECL)
6425 {
6426 gcc_assert (!TYPE_REF_P (type));
6427
6428 DECL_INITIAL (decl) = init;
6429
6430 gcc_assert (init != NULL_TREE);
6431 init = NULL_TREE;
6432 }
6433 else if (!init && DECL_REALLY_EXTERN (decl))
6434 ;
6435 else if (init || type_build_ctor_call (type)
6436 || TYPE_REF_P (type))
6437 {
6438 if (TYPE_REF_P (type))
6439 {
6440 init = grok_reference_init (decl, type, init, flags);
6441 flags |= LOOKUP_ALREADY_DIGESTED;
6442 }
6443 else if (!init)
6444 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6445 tf_warning_or_error);
6446 /* Do not reshape constructors of vectors (they don't need to be
6447 reshaped. */
6448 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6449 {
6450 if (is_std_init_list (type))
6451 {
6452 init = perform_implicit_conversion (type, init,
6453 tf_warning_or_error);
6454 flags |= LOOKUP_ALREADY_DIGESTED;
6455 }
6456 else if (TYPE_NON_AGGREGATE_CLASS (type))
6457 {
6458 /* Don't reshape if the class has constructors. */
6459 if (cxx_dialect == cxx98)
6460 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6461 "in C++98 %qD must be initialized by "
6462 "constructor, not by %<{...}%>",
6463 decl);
6464 }
6465 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6466 {
6467 error ("opaque vector types cannot be initialized");
6468 init = error_mark_node;
6469 }
6470 else
6471 {
6472 init = reshape_init (type, init, tf_warning_or_error);
6473 flags |= LOOKUP_NO_NARROWING;
6474 }
6475 }
6476 else if (TREE_CODE (init) == TREE_LIST
6477 && TREE_TYPE (init) != unknown_type_node
6478 && !MAYBE_CLASS_TYPE_P (type))
6479 {
6480 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6481
6482 /* We get here with code like `int a (2);' */
6483 init = build_x_compound_expr_from_list (init, ELK_INIT,
6484 tf_warning_or_error);
6485 }
6486
6487 /* If DECL has an array type without a specific bound, deduce the
6488 array size from the initializer. */
6489 maybe_deduce_size_from_array_init (decl, init);
6490 type = TREE_TYPE (decl);
6491 if (type == error_mark_node)
6492 return NULL_TREE;
6493
6494 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6495 && !(flags & LOOKUP_ALREADY_DIGESTED)
6496 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6497 && CP_AGGREGATE_TYPE_P (type)
6498 && (CLASS_TYPE_P (type)
6499 || !TYPE_NEEDS_CONSTRUCTING (type)
6500 || type_has_extended_temps (type))))
6501 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6502 {
6503 init_code = build_aggr_init_full_exprs (decl, init, flags);
6504
6505 /* A constructor call is a non-trivial initializer even if
6506 it isn't explicitly written. */
6507 if (TREE_SIDE_EFFECTS (init_code))
6508 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6509
6510 /* If this is a constexpr initializer, expand_default_init will
6511 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6512 case, pull the initializer back out and pass it down into
6513 store_init_value. */
6514 while (TREE_CODE (init_code) == EXPR_STMT
6515 || TREE_CODE (init_code) == CONVERT_EXPR)
6516 init_code = TREE_OPERAND (init_code, 0);
6517 if (TREE_CODE (init_code) == INIT_EXPR)
6518 {
6519 init = TREE_OPERAND (init_code, 1);
6520 init_code = NULL_TREE;
6521 /* Don't call digest_init; it's unnecessary and will complain
6522 about aggregate initialization of non-aggregate classes. */
6523 flags |= LOOKUP_ALREADY_DIGESTED;
6524 }
6525 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6526 {
6527 /* Declared constexpr, but no suitable initializer; massage
6528 init appropriately so we can pass it into store_init_value
6529 for the error. */
6530 if (CLASS_TYPE_P (type)
6531 && (!init || TREE_CODE (init) == TREE_LIST))
6532 {
6533 init = build_functional_cast (type, init, tf_none);
6534 if (TREE_CODE (init) == TARGET_EXPR)
6535 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6536 }
6537 init_code = NULL_TREE;
6538 }
6539 else
6540 init = NULL_TREE;
6541 }
6542
6543 if (init && TREE_CODE (init) != TREE_VEC)
6544 {
6545 /* In aggregate initialization of a variable, each element
6546 initialization is a full-expression because there is no
6547 enclosing expression. */
6548 gcc_assert (stmts_are_full_exprs_p ());
6549
6550 init_code = store_init_value (decl, init, cleanups, flags);
6551
6552 if (DECL_INITIAL (decl)
6553 && TREE_CODE (DECL_INITIAL (decl)) == CONSTRUCTOR
6554 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (DECL_INITIAL (decl))))
6555 {
6556 tree elt = CONSTRUCTOR_ELTS (DECL_INITIAL (decl))->last ().value;
6557 if (TREE_CODE (TREE_TYPE (elt)) == ARRAY_TYPE
6558 && TYPE_SIZE (TREE_TYPE (elt)) == NULL_TREE)
6559 cp_complete_array_type (&TREE_TYPE (elt), elt, false);
6560 }
6561
6562 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6563 && DECL_INITIAL (decl)
6564 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6565 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6566 warning_at (cp_expr_loc_or_loc (DECL_INITIAL (decl),
6567 DECL_SOURCE_LOCATION (decl)),
6568 0, "array %qD initialized by parenthesized "
6569 "string literal %qE",
6570 decl, DECL_INITIAL (decl));
6571 init = NULL;
6572 }
6573 }
6574 else
6575 {
6576 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6577 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6578 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6579 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6580 /*complain=*/true);
6581
6582 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6583 tf_warning_or_error);
6584 }
6585
6586 if (init && init != error_mark_node)
6587 init_code = build2 (INIT_EXPR, type, decl, init);
6588
6589 if (init_code)
6590 {
6591 /* We might have set these in cp_finish_decl. */
6592 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6593 TREE_CONSTANT (decl) = false;
6594 }
6595
6596 if (init_code
6597 && DECL_IN_AGGR_P (decl)
6598 && DECL_INITIALIZED_IN_CLASS_P (decl))
6599 {
6600 static int explained = 0;
6601
6602 if (cxx_dialect < cxx11)
6603 error ("initializer invalid for static member with constructor");
6604 else if (cxx_dialect < cxx17)
6605 error ("non-constant in-class initialization invalid for static "
6606 "member %qD", decl);
6607 else
6608 error ("non-constant in-class initialization invalid for non-inline "
6609 "static member %qD", decl);
6610 if (!explained)
6611 {
6612 inform (input_location,
6613 "(an out of class initialization is required)");
6614 explained = 1;
6615 }
6616 return NULL_TREE;
6617 }
6618
6619 return init_code;
6620 }
6621
6622 /* If DECL is not a local variable, give it RTL. */
6623
6624 static void
6625 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6626 {
6627 int toplev = toplevel_bindings_p ();
6628 int defer_p;
6629
6630 /* Set the DECL_ASSEMBLER_NAME for the object. */
6631 if (asmspec)
6632 {
6633 /* The `register' keyword, when used together with an
6634 asm-specification, indicates that the variable should be
6635 placed in a particular register. */
6636 if (VAR_P (decl) && DECL_REGISTER (decl))
6637 {
6638 set_user_assembler_name (decl, asmspec);
6639 DECL_HARD_REGISTER (decl) = 1;
6640 }
6641 else
6642 {
6643 if (TREE_CODE (decl) == FUNCTION_DECL
6644 && fndecl_built_in_p (decl, BUILT_IN_NORMAL))
6645 set_builtin_user_assembler_name (decl, asmspec);
6646 set_user_assembler_name (decl, asmspec);
6647 }
6648 }
6649
6650 /* Handle non-variables up front. */
6651 if (!VAR_P (decl))
6652 {
6653 rest_of_decl_compilation (decl, toplev, at_eof);
6654 return;
6655 }
6656
6657 /* If we see a class member here, it should be a static data
6658 member. */
6659 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6660 {
6661 gcc_assert (TREE_STATIC (decl));
6662 /* An in-class declaration of a static data member should be
6663 external; it is only a declaration, and not a definition. */
6664 if (init == NULL_TREE)
6665 gcc_assert (DECL_EXTERNAL (decl)
6666 || !TREE_PUBLIC (decl));
6667 }
6668
6669 /* We don't create any RTL for local variables. */
6670 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6671 return;
6672
6673 /* We defer emission of local statics until the corresponding
6674 DECL_EXPR is expanded. But with constexpr its function might never
6675 be expanded, so go ahead and tell cgraph about the variable now. */
6676 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6677 && !var_in_maybe_constexpr_fn (decl))
6678 || DECL_VIRTUAL_P (decl));
6679
6680 /* Defer template instantiations. */
6681 if (DECL_LANG_SPECIFIC (decl)
6682 && DECL_IMPLICIT_INSTANTIATION (decl))
6683 defer_p = 1;
6684
6685 /* If we're not deferring, go ahead and assemble the variable. */
6686 if (!defer_p)
6687 rest_of_decl_compilation (decl, toplev, at_eof);
6688 }
6689
6690 /* walk_tree helper for wrap_temporary_cleanups, below. */
6691
6692 static tree
6693 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6694 {
6695 /* Stop at types or full-expression boundaries. */
6696 if (TYPE_P (*stmt_p)
6697 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6698 {
6699 *walk_subtrees = 0;
6700 return NULL_TREE;
6701 }
6702
6703 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6704 {
6705 tree guard = (tree)data;
6706 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6707
6708 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6709 /* Tell honor_protect_cleanup_actions to handle this as a separate
6710 cleanup. */
6711 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6712
6713 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6714 }
6715
6716 return NULL_TREE;
6717 }
6718
6719 /* We're initializing a local variable which has a cleanup GUARD. If there
6720 are any temporaries used in the initializer INIT of this variable, we
6721 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6722 variable will be cleaned up properly if one of them throws.
6723
6724 Unfortunately, there's no way to express this properly in terms of
6725 nesting, as the regions for the temporaries overlap the region for the
6726 variable itself; if there are two temporaries, the variable needs to be
6727 the first thing destroyed if either of them throws. However, we only
6728 want to run the variable's cleanup if it actually got constructed. So
6729 we need to guard the temporary cleanups with the variable's cleanup if
6730 they are run on the normal path, but not if they are run on the
6731 exceptional path. We implement this by telling
6732 honor_protect_cleanup_actions to strip the variable cleanup from the
6733 exceptional path. */
6734
6735 static void
6736 wrap_temporary_cleanups (tree init, tree guard)
6737 {
6738 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6739 }
6740
6741 /* Generate code to initialize DECL (a local variable). */
6742
6743 static void
6744 initialize_local_var (tree decl, tree init)
6745 {
6746 tree type = TREE_TYPE (decl);
6747 tree cleanup;
6748 int already_used;
6749
6750 gcc_assert (VAR_P (decl)
6751 || TREE_CODE (decl) == RESULT_DECL);
6752 gcc_assert (!TREE_STATIC (decl));
6753
6754 if (DECL_SIZE (decl) == NULL_TREE)
6755 {
6756 /* If we used it already as memory, it must stay in memory. */
6757 DECL_INITIAL (decl) = NULL_TREE;
6758 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6759 return;
6760 }
6761
6762 if (type == error_mark_node)
6763 return;
6764
6765 /* Compute and store the initial value. */
6766 already_used = TREE_USED (decl) || TREE_USED (type);
6767 if (TREE_USED (type))
6768 DECL_READ_P (decl) = 1;
6769
6770 /* Generate a cleanup, if necessary. */
6771 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6772
6773 /* Perform the initialization. */
6774 if (init)
6775 {
6776 tree rinit = (TREE_CODE (init) == INIT_EXPR
6777 ? TREE_OPERAND (init, 1) : NULL_TREE);
6778 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6779 {
6780 /* Stick simple initializers in DECL_INITIAL so that
6781 -Wno-init-self works (c++/34772). */
6782 gcc_assert (TREE_OPERAND (init, 0) == decl);
6783 DECL_INITIAL (decl) = rinit;
6784
6785 if (warn_init_self && TYPE_REF_P (type))
6786 {
6787 STRIP_NOPS (rinit);
6788 if (rinit == decl)
6789 warning_at (DECL_SOURCE_LOCATION (decl),
6790 OPT_Winit_self,
6791 "reference %qD is initialized with itself", decl);
6792 }
6793 }
6794 else
6795 {
6796 int saved_stmts_are_full_exprs_p;
6797
6798 /* If we're only initializing a single object, guard the
6799 destructors of any temporaries used in its initializer with
6800 its destructor. This isn't right for arrays because each
6801 element initialization is a full-expression. */
6802 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6803 wrap_temporary_cleanups (init, cleanup);
6804
6805 gcc_assert (building_stmt_list_p ());
6806 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6807 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6808 finish_expr_stmt (init);
6809 current_stmt_tree ()->stmts_are_full_exprs_p =
6810 saved_stmts_are_full_exprs_p;
6811 }
6812 }
6813
6814 /* Set this to 0 so we can tell whether an aggregate which was
6815 initialized was ever used. Don't do this if it has a
6816 destructor, so we don't complain about the 'resource
6817 allocation is initialization' idiom. Now set
6818 attribute((unused)) on types so decls of that type will be
6819 marked used. (see TREE_USED, above.) */
6820 if (TYPE_NEEDS_CONSTRUCTING (type)
6821 && ! already_used
6822 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6823 && DECL_NAME (decl))
6824 TREE_USED (decl) = 0;
6825 else if (already_used)
6826 TREE_USED (decl) = 1;
6827
6828 if (cleanup)
6829 finish_decl_cleanup (decl, cleanup);
6830 }
6831
6832 /* DECL is a VAR_DECL for a compiler-generated variable with static
6833 storage duration (like a virtual table) whose initializer is a
6834 compile-time constant. Initialize the variable and provide it to the
6835 back end. */
6836
6837 void
6838 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6839 {
6840 tree init;
6841 gcc_assert (DECL_ARTIFICIAL (decl));
6842 init = build_constructor (TREE_TYPE (decl), v);
6843 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6844 DECL_INITIAL (decl) = init;
6845 DECL_INITIALIZED_P (decl) = 1;
6846 /* Mark the decl as constexpr so that we can access its content
6847 at compile time. */
6848 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
6849 DECL_DECLARED_CONSTEXPR_P (decl) = true;
6850 determine_visibility (decl);
6851 layout_var_decl (decl);
6852 maybe_commonize_var (decl);
6853 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6854 }
6855
6856 /* INIT is the initializer for a variable, as represented by the
6857 parser. Returns true iff INIT is value-dependent. */
6858
6859 static bool
6860 value_dependent_init_p (tree init)
6861 {
6862 if (TREE_CODE (init) == TREE_LIST)
6863 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6864 return any_value_dependent_elements_p (init);
6865 else if (TREE_CODE (init) == CONSTRUCTOR)
6866 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6867 {
6868 if (dependent_type_p (TREE_TYPE (init)))
6869 return true;
6870
6871 vec<constructor_elt, va_gc> *elts;
6872 size_t nelts;
6873 size_t i;
6874
6875 elts = CONSTRUCTOR_ELTS (init);
6876 nelts = vec_safe_length (elts);
6877 for (i = 0; i < nelts; ++i)
6878 if (value_dependent_init_p ((*elts)[i].value))
6879 return true;
6880 }
6881 else
6882 /* It must be a simple expression, e.g., int i = 3; */
6883 return value_dependent_expression_p (init);
6884
6885 return false;
6886 }
6887
6888 // Returns true if a DECL is VAR_DECL with the concept specifier.
6889 static inline bool
6890 is_concept_var (tree decl)
6891 {
6892 return (VAR_P (decl)
6893 // Not all variables have DECL_LANG_SPECIFIC.
6894 && DECL_LANG_SPECIFIC (decl)
6895 && DECL_DECLARED_CONCEPT_P (decl));
6896 }
6897
6898 /* A helper function to be called via walk_tree. If any label exists
6899 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6900
6901 static tree
6902 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6903 {
6904 if (TYPE_P (*tp))
6905 *walk_subtrees = 0;
6906 if (TREE_CODE (*tp) == LABEL_DECL)
6907 cfun->has_forced_label_in_static = 1;
6908 return NULL_TREE;
6909 }
6910
6911 /* Finish processing of a declaration;
6912 install its line number and initial value.
6913 If the length of an array type is not known before,
6914 it must be determined now, from the initial value, or it is an error.
6915
6916 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6917 true, then INIT is an integral constant expression.
6918
6919 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6920 if the (init) syntax was used. */
6921
6922 void
6923 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6924 tree asmspec_tree, int flags)
6925 {
6926 tree type;
6927 vec<tree, va_gc> *cleanups = NULL;
6928 const char *asmspec = NULL;
6929 int was_readonly = 0;
6930 bool var_definition_p = false;
6931 tree auto_node;
6932
6933 if (decl == error_mark_node)
6934 return;
6935 else if (! decl)
6936 {
6937 if (init)
6938 error ("assignment (not initialization) in declaration");
6939 return;
6940 }
6941
6942 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6943 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6944 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6945
6946 type = TREE_TYPE (decl);
6947 if (type == error_mark_node)
6948 return;
6949
6950 /* Warn about register storage specifiers except when in GNU global
6951 or local register variable extension. */
6952 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6953 {
6954 if (cxx_dialect >= cxx17)
6955 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6956 "ISO C++17 does not allow %<register%> storage "
6957 "class specifier");
6958 else
6959 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6960 "%<register%> storage class specifier used");
6961 }
6962
6963 /* If a name was specified, get the string. */
6964 if (at_namespace_scope_p ())
6965 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6966 if (asmspec_tree && asmspec_tree != error_mark_node)
6967 asmspec = TREE_STRING_POINTER (asmspec_tree);
6968
6969 if (current_class_type
6970 && CP_DECL_CONTEXT (decl) == current_class_type
6971 && TYPE_BEING_DEFINED (current_class_type)
6972 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6973 && (DECL_INITIAL (decl) || init))
6974 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6975
6976 /* Do auto deduction unless decl is a function or an uninstantiated
6977 template specialization. */
6978 if (TREE_CODE (decl) != FUNCTION_DECL
6979 && !(init == NULL_TREE
6980 && DECL_LANG_SPECIFIC (decl)
6981 && DECL_TEMPLATE_INSTANTIATION (decl)
6982 && !DECL_TEMPLATE_INSTANTIATED (decl))
6983 && (auto_node = type_uses_auto (type)))
6984 {
6985 tree d_init;
6986 if (init == NULL_TREE)
6987 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6988 d_init = init;
6989 if (d_init)
6990 {
6991 if (TREE_CODE (d_init) == TREE_LIST
6992 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6993 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6994 tf_warning_or_error);
6995 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6996 }
6997 enum auto_deduction_context adc = adc_variable_type;
6998 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6999 adc = adc_decomp_type;
7000 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
7001 tf_warning_or_error, adc,
7002 NULL_TREE, flags);
7003 if (type == error_mark_node)
7004 return;
7005 if (TREE_CODE (type) == FUNCTION_TYPE)
7006 {
7007 error ("initializer for %<decltype(auto) %D%> has function type "
7008 "(did you forget the %<()%> ?)", decl);
7009 TREE_TYPE (decl) = error_mark_node;
7010 return;
7011 }
7012 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
7013 }
7014
7015 if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node)
7016 {
7017 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
7018 if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl))
7019 {
7020 init = NULL_TREE;
7021 DECL_EXTERNAL (decl) = 1;
7022 }
7023 }
7024
7025 if (VAR_P (decl)
7026 && DECL_CLASS_SCOPE_P (decl)
7027 && DECL_INITIALIZED_IN_CLASS_P (decl))
7028 check_static_variable_definition (decl, type);
7029
7030 if (init && TREE_CODE (decl) == FUNCTION_DECL)
7031 {
7032 tree clone;
7033 if (init == ridpointers[(int)RID_DELETE])
7034 {
7035 /* FIXME check this is 1st decl. */
7036 DECL_DELETED_FN (decl) = 1;
7037 DECL_DECLARED_INLINE_P (decl) = 1;
7038 DECL_INITIAL (decl) = error_mark_node;
7039 FOR_EACH_CLONE (clone, decl)
7040 {
7041 DECL_DELETED_FN (clone) = 1;
7042 DECL_DECLARED_INLINE_P (clone) = 1;
7043 DECL_INITIAL (clone) = error_mark_node;
7044 }
7045 init = NULL_TREE;
7046 }
7047 else if (init == ridpointers[(int)RID_DEFAULT])
7048 {
7049 if (defaultable_fn_check (decl))
7050 DECL_DEFAULTED_FN (decl) = 1;
7051 else
7052 DECL_INITIAL (decl) = NULL_TREE;
7053 }
7054 }
7055
7056 if (init && VAR_P (decl))
7057 {
7058 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
7059 /* If DECL is a reference, then we want to know whether init is a
7060 reference constant; init_const_expr_p as passed tells us whether
7061 it's an rvalue constant. */
7062 if (TYPE_REF_P (type))
7063 init_const_expr_p = potential_constant_expression (init);
7064 if (init_const_expr_p)
7065 {
7066 /* Set these flags now for templates. We'll update the flags in
7067 store_init_value for instantiations. */
7068 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
7069 if (decl_maybe_constant_var_p (decl)
7070 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
7071 && !TYPE_REF_P (type))
7072 TREE_CONSTANT (decl) = 1;
7073 }
7074 }
7075
7076 if (processing_template_decl)
7077 {
7078 bool type_dependent_p;
7079
7080 /* Add this declaration to the statement-tree. */
7081 if (at_function_scope_p ())
7082 add_decl_expr (decl);
7083
7084 type_dependent_p = dependent_type_p (type);
7085
7086 if (check_for_bare_parameter_packs (init))
7087 {
7088 init = NULL_TREE;
7089 DECL_INITIAL (decl) = NULL_TREE;
7090 }
7091
7092 /* Generally, initializers in templates are expanded when the
7093 template is instantiated. But, if DECL is a variable constant
7094 then it can be used in future constant expressions, so its value
7095 must be available. */
7096
7097 bool dep_init = false;
7098
7099 if (!VAR_P (decl) || type_dependent_p)
7100 /* We can't do anything if the decl has dependent type. */;
7101 else if (!init && is_concept_var (decl))
7102 {
7103 error ("variable concept has no initializer");
7104 init = boolean_true_node;
7105 }
7106 else if (init
7107 && init_const_expr_p
7108 && !TYPE_REF_P (type)
7109 && decl_maybe_constant_var_p (decl)
7110 && !(dep_init = value_dependent_init_p (init)))
7111 {
7112 /* This variable seems to be a non-dependent constant, so process
7113 its initializer. If check_initializer returns non-null the
7114 initialization wasn't constant after all. */
7115 tree init_code;
7116 cleanups = make_tree_vector ();
7117 init_code = check_initializer (decl, init, flags, &cleanups);
7118 if (init_code == NULL_TREE)
7119 init = NULL_TREE;
7120 release_tree_vector (cleanups);
7121 }
7122 else
7123 {
7124 gcc_assert (!DECL_PRETTY_FUNCTION_P (decl));
7125 /* Deduce array size even if the initializer is dependent. */
7126 maybe_deduce_size_from_array_init (decl, init);
7127 /* And complain about multiple initializers. */
7128 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
7129 && !MAYBE_CLASS_TYPE_P (type))
7130 init = build_x_compound_expr_from_list (init, ELK_INIT,
7131 tf_warning_or_error);
7132 }
7133
7134 if (init)
7135 DECL_INITIAL (decl) = init;
7136
7137 if (dep_init)
7138 {
7139 retrofit_lang_decl (decl);
7140 SET_DECL_DEPENDENT_INIT_P (decl, true);
7141 }
7142 return;
7143 }
7144
7145 /* Just store non-static data member initializers for later. */
7146 if (init && TREE_CODE (decl) == FIELD_DECL)
7147 DECL_INITIAL (decl) = init;
7148
7149 /* Take care of TYPE_DECLs up front. */
7150 if (TREE_CODE (decl) == TYPE_DECL)
7151 {
7152 if (type != error_mark_node
7153 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
7154 {
7155 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7156 warning (0, "shadowing previous type declaration of %q#D", decl);
7157 set_identifier_type_value (DECL_NAME (decl), decl);
7158 }
7159
7160 /* If we have installed this as the canonical typedef for this
7161 type, and that type has not been defined yet, delay emitting
7162 the debug information for it, as we will emit it later. */
7163 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7164 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7165 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7166
7167 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
7168 at_eof);
7169 return;
7170 }
7171
7172 /* A reference will be modified here, as it is initialized. */
7173 if (! DECL_EXTERNAL (decl)
7174 && TREE_READONLY (decl)
7175 && TYPE_REF_P (type))
7176 {
7177 was_readonly = 1;
7178 TREE_READONLY (decl) = 0;
7179 }
7180
7181 if (VAR_P (decl))
7182 {
7183 /* If this is a local variable that will need a mangled name,
7184 register it now. We must do this before processing the
7185 initializer for the variable, since the initialization might
7186 require a guard variable, and since the mangled name of the
7187 guard variable will depend on the mangled name of this
7188 variable. */
7189 if (DECL_FUNCTION_SCOPE_P (decl)
7190 && TREE_STATIC (decl)
7191 && !DECL_ARTIFICIAL (decl))
7192 {
7193 /* The variable holding an anonymous union will have had its
7194 discriminator set in finish_anon_union, after which it's
7195 NAME will have been cleared. */
7196 if (DECL_NAME (decl))
7197 determine_local_discriminator (decl);
7198 /* Normally has_forced_label_in_static is set during GIMPLE
7199 lowering, but [cd]tors are never actually compiled directly.
7200 We need to set this early so we can deal with the label
7201 address extension. */
7202 if ((DECL_CONSTRUCTOR_P (current_function_decl)
7203 || DECL_DESTRUCTOR_P (current_function_decl))
7204 && init)
7205 {
7206 walk_tree (&init, notice_forced_label_r, NULL, NULL);
7207 add_local_decl (cfun, decl);
7208 }
7209 /* And make sure it's in the symbol table for
7210 c_parse_final_cleanups to find. */
7211 varpool_node::get_create (decl);
7212 }
7213
7214 /* Convert the initializer to the type of DECL, if we have not
7215 already initialized DECL. */
7216 if (!DECL_INITIALIZED_P (decl)
7217 /* If !DECL_EXTERNAL then DECL is being defined. In the
7218 case of a static data member initialized inside the
7219 class-specifier, there can be an initializer even if DECL
7220 is *not* defined. */
7221 && (!DECL_EXTERNAL (decl) || init))
7222 {
7223 cleanups = make_tree_vector ();
7224 init = check_initializer (decl, init, flags, &cleanups);
7225
7226 /* Handle:
7227
7228 [dcl.init]
7229
7230 The memory occupied by any object of static storage
7231 duration is zero-initialized at program startup before
7232 any other initialization takes place.
7233
7234 We cannot create an appropriate initializer until after
7235 the type of DECL is finalized. If DECL_INITIAL is set,
7236 then the DECL is statically initialized, and any
7237 necessary zero-initialization has already been performed. */
7238 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7239 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7240 /*nelts=*/NULL_TREE,
7241 /*static_storage_p=*/true);
7242 /* Remember that the initialization for this variable has
7243 taken place. */
7244 DECL_INITIALIZED_P (decl) = 1;
7245 /* This declaration is the definition of this variable,
7246 unless we are initializing a static data member within
7247 the class specifier. */
7248 if (!DECL_EXTERNAL (decl))
7249 var_definition_p = true;
7250 }
7251 /* If the variable has an array type, lay out the type, even if
7252 there is no initializer. It is valid to index through the
7253 array, and we must get TYPE_ALIGN set correctly on the array
7254 type. */
7255 else if (TREE_CODE (type) == ARRAY_TYPE)
7256 layout_type (type);
7257
7258 if (TREE_STATIC (decl)
7259 && !at_function_scope_p ()
7260 && current_function_decl == NULL)
7261 /* So decl is a global variable or a static member of a
7262 non local class. Record the types it uses
7263 so that we can decide later to emit debug info for them. */
7264 record_types_used_by_current_var_decl (decl);
7265 }
7266
7267 /* Add this declaration to the statement-tree. This needs to happen
7268 after the call to check_initializer so that the DECL_EXPR for a
7269 reference temp is added before the DECL_EXPR for the reference itself. */
7270 if (DECL_FUNCTION_SCOPE_P (decl))
7271 {
7272 /* If we're building a variable sized type, and we might be
7273 reachable other than via the top of the current binding
7274 level, then create a new BIND_EXPR so that we deallocate
7275 the object at the right time. */
7276 if (VAR_P (decl)
7277 && DECL_SIZE (decl)
7278 && !TREE_CONSTANT (DECL_SIZE (decl))
7279 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7280 {
7281 tree bind;
7282 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7283 TREE_SIDE_EFFECTS (bind) = 1;
7284 add_stmt (bind);
7285 BIND_EXPR_BODY (bind) = push_stmt_list ();
7286 }
7287 add_decl_expr (decl);
7288 }
7289
7290 /* Let the middle end know about variables and functions -- but not
7291 static data members in uninstantiated class templates. */
7292 if (VAR_OR_FUNCTION_DECL_P (decl))
7293 {
7294 if (VAR_P (decl))
7295 {
7296 layout_var_decl (decl);
7297 maybe_commonize_var (decl);
7298 }
7299
7300 /* This needs to happen after the linkage is set. */
7301 determine_visibility (decl);
7302
7303 if (var_definition_p && TREE_STATIC (decl))
7304 {
7305 /* If a TREE_READONLY variable needs initialization
7306 at runtime, it is no longer readonly and we need to
7307 avoid MEM_READONLY_P being set on RTL created for it. */
7308 if (init)
7309 {
7310 if (TREE_READONLY (decl))
7311 TREE_READONLY (decl) = 0;
7312 was_readonly = 0;
7313 }
7314 else if (was_readonly)
7315 TREE_READONLY (decl) = 1;
7316
7317 /* Likewise if it needs destruction. */
7318 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7319 TREE_READONLY (decl) = 0;
7320 }
7321
7322 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7323
7324 /* Check for abstractness of the type. Notice that there is no
7325 need to strip array types here since the check for those types
7326 is already done within create_array_type_for_decl. */
7327 abstract_virtuals_error (decl, type);
7328
7329 if (TREE_TYPE (decl) == error_mark_node)
7330 /* No initialization required. */
7331 ;
7332 else if (TREE_CODE (decl) == FUNCTION_DECL)
7333 {
7334 if (init)
7335 {
7336 if (init == ridpointers[(int)RID_DEFAULT])
7337 {
7338 /* An out-of-class default definition is defined at
7339 the point where it is explicitly defaulted. */
7340 if (DECL_DELETED_FN (decl))
7341 maybe_explain_implicit_delete (decl);
7342 else if (DECL_INITIAL (decl) == error_mark_node)
7343 synthesize_method (decl);
7344 }
7345 else
7346 error_at (cp_expr_loc_or_loc (init,
7347 DECL_SOURCE_LOCATION (decl)),
7348 "function %q#D is initialized like a variable",
7349 decl);
7350 }
7351 /* else no initialization required. */
7352 }
7353 else if (DECL_EXTERNAL (decl)
7354 && ! (DECL_LANG_SPECIFIC (decl)
7355 && DECL_NOT_REALLY_EXTERN (decl)))
7356 {
7357 if (init)
7358 DECL_INITIAL (decl) = init;
7359 }
7360 /* A variable definition. */
7361 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7362 /* Initialize the local variable. */
7363 initialize_local_var (decl, init);
7364
7365 /* If a variable is defined, and then a subsequent
7366 definition with external linkage is encountered, we will
7367 get here twice for the same variable. We want to avoid
7368 calling expand_static_init more than once. For variables
7369 that are not static data members, we can call
7370 expand_static_init only when we actually process the
7371 initializer. It is not legal to redeclare a static data
7372 member, so this issue does not arise in that case. */
7373 else if (var_definition_p && TREE_STATIC (decl))
7374 expand_static_init (decl, init);
7375 }
7376
7377 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7378 reference, insert it in the statement-tree now. */
7379 if (cleanups)
7380 {
7381 unsigned i; tree t;
7382 FOR_EACH_VEC_ELT (*cleanups, i, t)
7383 push_cleanup (decl, t, false);
7384 release_tree_vector (cleanups);
7385 }
7386
7387 if (was_readonly)
7388 TREE_READONLY (decl) = 1;
7389
7390 if (flag_openmp
7391 && VAR_P (decl)
7392 && lookup_attribute ("omp declare target implicit",
7393 DECL_ATTRIBUTES (decl)))
7394 {
7395 DECL_ATTRIBUTES (decl)
7396 = remove_attribute ("omp declare target implicit",
7397 DECL_ATTRIBUTES (decl));
7398 complete_type (TREE_TYPE (decl));
7399 if (!cp_omp_mappable_type (TREE_TYPE (decl)))
7400 error ("%q+D in declare target directive does not have mappable type",
7401 decl);
7402 else if (!lookup_attribute ("omp declare target",
7403 DECL_ATTRIBUTES (decl))
7404 && !lookup_attribute ("omp declare target link",
7405 DECL_ATTRIBUTES (decl)))
7406 DECL_ATTRIBUTES (decl)
7407 = tree_cons (get_identifier ("omp declare target"),
7408 NULL_TREE, DECL_ATTRIBUTES (decl));
7409 }
7410
7411 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7412 }
7413
7414 /* For class TYPE return itself or some its bases that contain
7415 any direct non-static data members. Return error_mark_node if an
7416 error has been diagnosed. */
7417
7418 static tree
7419 find_decomp_class_base (location_t loc, tree type, tree ret)
7420 {
7421 bool member_seen = false;
7422 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7423 if (TREE_CODE (field) != FIELD_DECL
7424 || DECL_ARTIFICIAL (field)
7425 || DECL_UNNAMED_BIT_FIELD (field))
7426 continue;
7427 else if (ret)
7428 return type;
7429 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7430 {
7431 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7432 error_at (loc, "cannot decompose class type %qT because it has an "
7433 "anonymous struct member", type);
7434 else
7435 error_at (loc, "cannot decompose class type %qT because it has an "
7436 "anonymous union member", type);
7437 inform (DECL_SOURCE_LOCATION (field), "declared here");
7438 return error_mark_node;
7439 }
7440 else if (!accessible_p (type, field, true))
7441 {
7442 error_at (loc, "cannot decompose inaccessible member %qD of %qT",
7443 field, type);
7444 inform (DECL_SOURCE_LOCATION (field),
7445 TREE_PRIVATE (field)
7446 ? G_("declared private here")
7447 : G_("declared protected here"));
7448 return error_mark_node;
7449 }
7450 else
7451 member_seen = true;
7452
7453 tree base_binfo, binfo;
7454 tree orig_ret = ret;
7455 int i;
7456 if (member_seen)
7457 ret = type;
7458 for (binfo = TYPE_BINFO (type), i = 0;
7459 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7460 {
7461 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7462 if (t == error_mark_node)
7463 return error_mark_node;
7464 if (t != NULL_TREE && t != ret)
7465 {
7466 if (ret == type)
7467 {
7468 error_at (loc, "cannot decompose class type %qT: both it and "
7469 "its base class %qT have non-static data members",
7470 type, t);
7471 return error_mark_node;
7472 }
7473 else if (orig_ret != NULL_TREE)
7474 return t;
7475 else if (ret != NULL_TREE)
7476 {
7477 error_at (loc, "cannot decompose class type %qT: its base "
7478 "classes %qT and %qT have non-static data "
7479 "members", type, ret, t);
7480 return error_mark_node;
7481 }
7482 else
7483 ret = t;
7484 }
7485 }
7486 return ret;
7487 }
7488
7489 /* Return std::tuple_size<TYPE>::value. */
7490
7491 static tree
7492 get_tuple_size (tree type)
7493 {
7494 tree args = make_tree_vec (1);
7495 TREE_VEC_ELT (args, 0) = type;
7496 tree inst = lookup_template_class (tuple_size_identifier, args,
7497 /*in_decl*/NULL_TREE,
7498 /*context*/std_node,
7499 /*entering_scope*/false, tf_none);
7500 inst = complete_type (inst);
7501 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7502 return NULL_TREE;
7503 tree val = lookup_qualified_name (inst, value_identifier,
7504 /*type*/false, /*complain*/false);
7505 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7506 val = maybe_constant_value (val);
7507 if (TREE_CODE (val) == INTEGER_CST)
7508 return val;
7509 else
7510 return error_mark_node;
7511 }
7512
7513 /* Return std::tuple_element<I,TYPE>::type. */
7514
7515 static tree
7516 get_tuple_element_type (tree type, unsigned i)
7517 {
7518 tree args = make_tree_vec (2);
7519 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7520 TREE_VEC_ELT (args, 1) = type;
7521 tree inst = lookup_template_class (tuple_element_identifier, args,
7522 /*in_decl*/NULL_TREE,
7523 /*context*/std_node,
7524 /*entering_scope*/false,
7525 tf_warning_or_error);
7526 return make_typename_type (inst, type_identifier,
7527 none_type, tf_warning_or_error);
7528 }
7529
7530 /* Return e.get<i>() or get<i>(e). */
7531
7532 static tree
7533 get_tuple_decomp_init (tree decl, unsigned i)
7534 {
7535 tree targs = make_tree_vec (1);
7536 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7537
7538 tree etype = TREE_TYPE (decl);
7539 tree e = convert_from_reference (decl);
7540
7541 /* [The id-expression] e is an lvalue if the type of the entity e is an
7542 lvalue reference and an xvalue otherwise. */
7543 if (!TYPE_REF_P (etype)
7544 || TYPE_REF_IS_RVALUE (etype))
7545 e = move (e);
7546
7547 tree fns = lookup_qualified_name (TREE_TYPE (e), get__identifier,
7548 /*type*/false, /*complain*/false);
7549 bool use_member_get = false;
7550
7551 /* To use a member get, member lookup must find at least one
7552 declaration that is a function template
7553 whose first template parameter is a non-type parameter. */
7554 for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
7555 {
7556 tree fn = *iter;
7557 if (TREE_CODE (fn) == TEMPLATE_DECL)
7558 {
7559 tree tparms = DECL_TEMPLATE_PARMS (fn);
7560 tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
7561 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
7562 {
7563 use_member_get = true;
7564 break;
7565 }
7566 }
7567 }
7568
7569 if (use_member_get)
7570 {
7571 fns = lookup_template_function (fns, targs);
7572 return build_new_method_call (e, fns, /*args*/NULL,
7573 /*path*/NULL_TREE, LOOKUP_NORMAL,
7574 /*fn_p*/NULL, tf_warning_or_error);
7575 }
7576 else
7577 {
7578 vec<tree,va_gc> *args = make_tree_vector_single (e);
7579 fns = lookup_template_function (get__identifier, targs);
7580 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7581 return finish_call_expr (fns, &args, /*novirt*/false,
7582 /*koenig*/true, tf_warning_or_error);
7583 }
7584 }
7585
7586 /* It's impossible to recover the decltype of a tuple decomposition variable
7587 based on the actual type of the variable, so store it in a hash table. */
7588
7589 static GTY((cache)) tree_cache_map *decomp_type_table;
7590 static void
7591 store_decomp_type (tree v, tree t)
7592 {
7593 if (!decomp_type_table)
7594 decomp_type_table = tree_cache_map::create_ggc (13);
7595 decomp_type_table->put (v, t);
7596 }
7597
7598 tree
7599 lookup_decomp_type (tree v)
7600 {
7601 return *decomp_type_table->get (v);
7602 }
7603
7604 /* Mangle a decomposition declaration if needed. Arguments like
7605 in cp_finish_decomp. */
7606
7607 void
7608 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7609 {
7610 if (!processing_template_decl
7611 && !error_operand_p (decl)
7612 && DECL_NAMESPACE_SCOPE_P (decl))
7613 {
7614 auto_vec<tree, 16> v;
7615 v.safe_grow (count);
7616 tree d = first;
7617 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7618 v[count - i - 1] = d;
7619 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7620 maybe_apply_pragma_weak (decl);
7621 }
7622 }
7623
7624 /* Finish a decomposition declaration. DECL is the underlying declaration
7625 "e", FIRST is the head of a chain of decls for the individual identifiers
7626 chained through DECL_CHAIN in reverse order and COUNT is the number of
7627 those decls. */
7628
7629 void
7630 cp_finish_decomp (tree decl, tree first, unsigned int count)
7631 {
7632 if (error_operand_p (decl))
7633 {
7634 error_out:
7635 while (count--)
7636 {
7637 TREE_TYPE (first) = error_mark_node;
7638 if (DECL_HAS_VALUE_EXPR_P (first))
7639 {
7640 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7641 DECL_HAS_VALUE_EXPR_P (first) = 0;
7642 }
7643 first = DECL_CHAIN (first);
7644 }
7645 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7646 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7647 return;
7648 }
7649
7650 location_t loc = DECL_SOURCE_LOCATION (decl);
7651 if (type_dependent_expression_p (decl)
7652 /* This happens for range for when not in templates.
7653 Still add the DECL_VALUE_EXPRs for later processing. */
7654 || (!processing_template_decl
7655 && type_uses_auto (TREE_TYPE (decl))))
7656 {
7657 for (unsigned int i = 0; i < count; i++)
7658 {
7659 if (!DECL_HAS_VALUE_EXPR_P (first))
7660 {
7661 tree v = build_nt (ARRAY_REF, decl,
7662 size_int (count - i - 1),
7663 NULL_TREE, NULL_TREE);
7664 SET_DECL_VALUE_EXPR (first, v);
7665 DECL_HAS_VALUE_EXPR_P (first) = 1;
7666 }
7667 if (processing_template_decl)
7668 fit_decomposition_lang_decl (first, decl);
7669 first = DECL_CHAIN (first);
7670 }
7671 return;
7672 }
7673
7674 auto_vec<tree, 16> v;
7675 v.safe_grow (count);
7676 tree d = first;
7677 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7678 {
7679 v[count - i - 1] = d;
7680 fit_decomposition_lang_decl (d, decl);
7681 }
7682
7683 tree type = TREE_TYPE (decl);
7684 tree dexp = decl;
7685
7686 if (TYPE_REF_P (type))
7687 {
7688 dexp = convert_from_reference (dexp);
7689 type = complete_type (TREE_TYPE (type));
7690 if (type == error_mark_node)
7691 goto error_out;
7692 if (!COMPLETE_TYPE_P (type))
7693 {
7694 error_at (loc, "structured binding refers to incomplete type %qT",
7695 type);
7696 goto error_out;
7697 }
7698 }
7699
7700 tree eltype = NULL_TREE;
7701 unsigned HOST_WIDE_INT eltscnt = 0;
7702 if (TREE_CODE (type) == ARRAY_TYPE)
7703 {
7704 tree nelts;
7705 nelts = array_type_nelts_top (type);
7706 if (nelts == error_mark_node)
7707 goto error_out;
7708 if (!tree_fits_uhwi_p (nelts))
7709 {
7710 error_at (loc, "cannot decompose variable length array %qT", type);
7711 goto error_out;
7712 }
7713 eltscnt = tree_to_uhwi (nelts);
7714 if (count != eltscnt)
7715 {
7716 cnt_mismatch:
7717 if (count > eltscnt)
7718 error_n (loc, count,
7719 "%u name provided for structured binding",
7720 "%u names provided for structured binding", count);
7721 else
7722 error_n (loc, count,
7723 "only %u name provided for structured binding",
7724 "only %u names provided for structured binding", count);
7725 inform_n (loc, eltscnt,
7726 "while %qT decomposes into %wu element",
7727 "while %qT decomposes into %wu elements",
7728 type, eltscnt);
7729 goto error_out;
7730 }
7731 eltype = TREE_TYPE (type);
7732 for (unsigned int i = 0; i < count; i++)
7733 {
7734 TREE_TYPE (v[i]) = eltype;
7735 layout_decl (v[i], 0);
7736 if (processing_template_decl)
7737 continue;
7738 tree t = unshare_expr (dexp);
7739 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7740 eltype, t, size_int (i), NULL_TREE,
7741 NULL_TREE);
7742 SET_DECL_VALUE_EXPR (v[i], t);
7743 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7744 }
7745 }
7746 /* 2 GNU extensions. */
7747 else if (TREE_CODE (type) == COMPLEX_TYPE)
7748 {
7749 eltscnt = 2;
7750 if (count != eltscnt)
7751 goto cnt_mismatch;
7752 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7753 for (unsigned int i = 0; i < count; i++)
7754 {
7755 TREE_TYPE (v[i]) = eltype;
7756 layout_decl (v[i], 0);
7757 if (processing_template_decl)
7758 continue;
7759 tree t = unshare_expr (dexp);
7760 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7761 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7762 t);
7763 SET_DECL_VALUE_EXPR (v[i], t);
7764 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7765 }
7766 }
7767 else if (TREE_CODE (type) == VECTOR_TYPE)
7768 {
7769 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7770 {
7771 error_at (loc, "cannot decompose variable length vector %qT", type);
7772 goto error_out;
7773 }
7774 if (count != eltscnt)
7775 goto cnt_mismatch;
7776 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7777 for (unsigned int i = 0; i < count; i++)
7778 {
7779 TREE_TYPE (v[i]) = eltype;
7780 layout_decl (v[i], 0);
7781 if (processing_template_decl)
7782 continue;
7783 tree t = unshare_expr (dexp);
7784 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7785 &t, size_int (i));
7786 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7787 eltype, t, size_int (i), NULL_TREE,
7788 NULL_TREE);
7789 SET_DECL_VALUE_EXPR (v[i], t);
7790 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7791 }
7792 }
7793 else if (tree tsize = get_tuple_size (type))
7794 {
7795 if (tsize == error_mark_node)
7796 {
7797 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7798 "constant expression", type);
7799 goto error_out;
7800 }
7801 if (!tree_fits_uhwi_p (tsize))
7802 {
7803 error_n (loc, count,
7804 "%u name provided for structured binding",
7805 "%u names provided for structured binding", count);
7806 inform (loc, "while %qT decomposes into %E elements",
7807 type, tsize);
7808 goto error_out;
7809 }
7810 eltscnt = tree_to_uhwi (tsize);
7811 if (count != eltscnt)
7812 goto cnt_mismatch;
7813 int save_read = DECL_READ_P (decl);
7814 for (unsigned i = 0; i < count; ++i)
7815 {
7816 location_t sloc = input_location;
7817 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7818
7819 input_location = dloc;
7820 tree init = get_tuple_decomp_init (decl, i);
7821 tree eltype = (init == error_mark_node ? error_mark_node
7822 : get_tuple_element_type (type, i));
7823 input_location = sloc;
7824
7825 if (init == error_mark_node || eltype == error_mark_node)
7826 {
7827 inform (dloc, "in initialization of structured binding "
7828 "variable %qD", v[i]);
7829 goto error_out;
7830 }
7831 /* Save the decltype away before reference collapse. */
7832 store_decomp_type (v[i], eltype);
7833 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7834 TREE_TYPE (v[i]) = eltype;
7835 layout_decl (v[i], 0);
7836 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7837 {
7838 /* In this case the names are variables, not just proxies. */
7839 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7840 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7841 }
7842 if (!processing_template_decl)
7843 cp_finish_decl (v[i], init, /*constexpr*/false,
7844 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7845 }
7846 /* Ignore reads from the underlying decl performed during initialization
7847 of the individual variables. If those will be read, we'll mark
7848 the underlying decl as read at that point. */
7849 DECL_READ_P (decl) = save_read;
7850 }
7851 else if (TREE_CODE (type) == UNION_TYPE)
7852 {
7853 error_at (loc, "cannot decompose union type %qT", type);
7854 goto error_out;
7855 }
7856 else if (!CLASS_TYPE_P (type))
7857 {
7858 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7859 goto error_out;
7860 }
7861 else if (LAMBDA_TYPE_P (type))
7862 {
7863 error_at (loc, "cannot decompose lambda closure type %qT", type);
7864 goto error_out;
7865 }
7866 else if (processing_template_decl && !COMPLETE_TYPE_P (type))
7867 pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
7868 type);
7869 else
7870 {
7871 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7872 if (btype == error_mark_node)
7873 goto error_out;
7874 else if (btype == NULL_TREE)
7875 {
7876 error_at (loc, "cannot decompose class type %qT without non-static "
7877 "data members", type);
7878 goto error_out;
7879 }
7880 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7881 if (TREE_CODE (field) != FIELD_DECL
7882 || DECL_ARTIFICIAL (field)
7883 || DECL_UNNAMED_BIT_FIELD (field))
7884 continue;
7885 else
7886 eltscnt++;
7887 if (count != eltscnt)
7888 goto cnt_mismatch;
7889 tree t = dexp;
7890 if (type != btype)
7891 {
7892 t = convert_to_base (t, btype, /*check_access*/true,
7893 /*nonnull*/false, tf_warning_or_error);
7894 type = btype;
7895 }
7896 unsigned int i = 0;
7897 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7898 if (TREE_CODE (field) != FIELD_DECL
7899 || DECL_ARTIFICIAL (field)
7900 || DECL_UNNAMED_BIT_FIELD (field))
7901 continue;
7902 else
7903 {
7904 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7905 NULL_TREE);
7906 if (REFERENCE_REF_P (tt))
7907 tt = TREE_OPERAND (tt, 0);
7908 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7909 layout_decl (v[i], 0);
7910 if (!processing_template_decl)
7911 {
7912 SET_DECL_VALUE_EXPR (v[i], tt);
7913 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7914 }
7915 i++;
7916 }
7917 }
7918 if (processing_template_decl)
7919 {
7920 for (unsigned int i = 0; i < count; i++)
7921 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7922 {
7923 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7924 NULL_TREE, NULL_TREE);
7925 SET_DECL_VALUE_EXPR (v[i], a);
7926 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7927 }
7928 }
7929 }
7930
7931 /* Returns a declaration for a VAR_DECL as if:
7932
7933 extern "C" TYPE NAME;
7934
7935 had been seen. Used to create compiler-generated global
7936 variables. */
7937
7938 static tree
7939 declare_global_var (tree name, tree type)
7940 {
7941 tree decl;
7942
7943 push_to_top_level ();
7944 decl = build_decl (input_location, VAR_DECL, name, type);
7945 TREE_PUBLIC (decl) = 1;
7946 DECL_EXTERNAL (decl) = 1;
7947 DECL_ARTIFICIAL (decl) = 1;
7948 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7949 /* If the user has explicitly declared this variable (perhaps
7950 because the code we are compiling is part of a low-level runtime
7951 library), then it is possible that our declaration will be merged
7952 with theirs by pushdecl. */
7953 decl = pushdecl (decl);
7954 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7955 pop_from_top_level ();
7956
7957 return decl;
7958 }
7959
7960 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7961 if "__cxa_atexit" is not being used) corresponding to the function
7962 to be called when the program exits. */
7963
7964 static tree
7965 get_atexit_fn_ptr_type (void)
7966 {
7967 tree fn_type;
7968
7969 if (!atexit_fn_ptr_type_node)
7970 {
7971 tree arg_type;
7972 if (flag_use_cxa_atexit
7973 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7974 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7975 arg_type = ptr_type_node;
7976 else
7977 /* The parameter to "atexit" is "void (*)(void)". */
7978 arg_type = NULL_TREE;
7979
7980 fn_type = build_function_type_list (void_type_node,
7981 arg_type, NULL_TREE);
7982 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7983 }
7984
7985 return atexit_fn_ptr_type_node;
7986 }
7987
7988 /* Returns a pointer to the `atexit' function. Note that if
7989 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7990 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7991
7992 static tree
7993 get_atexit_node (void)
7994 {
7995 tree atexit_fndecl;
7996 tree fn_type;
7997 tree fn_ptr_type;
7998 const char *name;
7999 bool use_aeabi_atexit;
8000
8001 if (atexit_node)
8002 return atexit_node;
8003
8004 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
8005 {
8006 /* The declaration for `__cxa_atexit' is:
8007
8008 int __cxa_atexit (void (*)(void *), void *, void *)
8009
8010 We build up the argument types and then the function type
8011 itself. */
8012 tree argtype0, argtype1, argtype2;
8013
8014 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
8015 /* First, build the pointer-to-function type for the first
8016 argument. */
8017 fn_ptr_type = get_atexit_fn_ptr_type ();
8018 /* Then, build the rest of the argument types. */
8019 argtype2 = ptr_type_node;
8020 if (use_aeabi_atexit)
8021 {
8022 argtype1 = fn_ptr_type;
8023 argtype0 = ptr_type_node;
8024 }
8025 else
8026 {
8027 argtype1 = ptr_type_node;
8028 argtype0 = fn_ptr_type;
8029 }
8030 /* And the final __cxa_atexit type. */
8031 fn_type = build_function_type_list (integer_type_node,
8032 argtype0, argtype1, argtype2,
8033 NULL_TREE);
8034 if (use_aeabi_atexit)
8035 name = "__aeabi_atexit";
8036 else
8037 name = "__cxa_atexit";
8038 }
8039 else
8040 {
8041 /* The declaration for `atexit' is:
8042
8043 int atexit (void (*)());
8044
8045 We build up the argument types and then the function type
8046 itself. */
8047 fn_ptr_type = get_atexit_fn_ptr_type ();
8048 /* Build the final atexit type. */
8049 fn_type = build_function_type_list (integer_type_node,
8050 fn_ptr_type, NULL_TREE);
8051 name = "atexit";
8052 }
8053
8054 /* Now, build the function declaration. */
8055 push_lang_context (lang_name_c);
8056 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
8057 mark_used (atexit_fndecl);
8058 pop_lang_context ();
8059 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
8060
8061 return atexit_node;
8062 }
8063
8064 /* Like get_atexit_node, but for thread-local cleanups. */
8065
8066 static tree
8067 get_thread_atexit_node (void)
8068 {
8069 /* The declaration for `__cxa_thread_atexit' is:
8070
8071 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
8072 tree fn_type = build_function_type_list (integer_type_node,
8073 get_atexit_fn_ptr_type (),
8074 ptr_type_node, ptr_type_node,
8075 NULL_TREE);
8076
8077 /* Now, build the function declaration. */
8078 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
8079 ECF_LEAF | ECF_NOTHROW);
8080 return decay_conversion (atexit_fndecl, tf_warning_or_error);
8081 }
8082
8083 /* Returns the __dso_handle VAR_DECL. */
8084
8085 static tree
8086 get_dso_handle_node (void)
8087 {
8088 if (dso_handle_node)
8089 return dso_handle_node;
8090
8091 /* Declare the variable. */
8092 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8093 ptr_type_node);
8094
8095 #ifdef HAVE_GAS_HIDDEN
8096 if (dso_handle_node != error_mark_node)
8097 {
8098 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
8099 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
8100 }
8101 #endif
8102
8103 return dso_handle_node;
8104 }
8105
8106 /* Begin a new function with internal linkage whose job will be simply
8107 to destroy some particular variable. */
8108
8109 static GTY(()) int start_cleanup_cnt;
8110
8111 static tree
8112 start_cleanup_fn (void)
8113 {
8114 char name[32];
8115 tree fntype;
8116 tree fndecl;
8117 bool use_cxa_atexit = flag_use_cxa_atexit
8118 && !targetm.cxx.use_atexit_for_cxa_atexit ();
8119
8120 push_to_top_level ();
8121
8122 /* No need to mangle this. */
8123 push_lang_context (lang_name_c);
8124
8125 /* Build the name of the function. */
8126 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
8127 /* Build the function declaration. */
8128 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
8129 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8130 /* It's a function with internal linkage, generated by the
8131 compiler. */
8132 TREE_PUBLIC (fndecl) = 0;
8133 DECL_ARTIFICIAL (fndecl) = 1;
8134 /* Make the function `inline' so that it is only emitted if it is
8135 actually needed. It is unlikely that it will be inlined, since
8136 it is only called via a function pointer, but we avoid unnecessary
8137 emissions this way. */
8138 DECL_DECLARED_INLINE_P (fndecl) = 1;
8139 DECL_INTERFACE_KNOWN (fndecl) = 1;
8140 /* Build the parameter. */
8141 if (use_cxa_atexit)
8142 {
8143 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
8144 TREE_USED (parmdecl) = 1;
8145 DECL_READ_P (parmdecl) = 1;
8146 DECL_ARGUMENTS (fndecl) = parmdecl;
8147 }
8148
8149 pushdecl (fndecl);
8150 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
8151
8152 pop_lang_context ();
8153
8154 return current_function_decl;
8155 }
8156
8157 /* Finish the cleanup function begun by start_cleanup_fn. */
8158
8159 static void
8160 end_cleanup_fn (void)
8161 {
8162 expand_or_defer_fn (finish_function (/*inline_p=*/false));
8163
8164 pop_from_top_level ();
8165 }
8166
8167 /* Generate code to handle the destruction of DECL, an object with
8168 static storage duration. */
8169
8170 tree
8171 register_dtor_fn (tree decl)
8172 {
8173 tree cleanup;
8174 tree addr;
8175 tree compound_stmt;
8176 tree fcall;
8177 tree type;
8178 bool ob_parm, dso_parm, use_dtor;
8179 tree arg0, arg1, arg2;
8180 tree atex_node;
8181
8182 type = TREE_TYPE (decl);
8183 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8184 return void_node;
8185
8186 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
8187 "__aeabi_atexit"), and DECL is a class object, we can just pass the
8188 destructor to "__cxa_atexit"; we don't have to build a temporary
8189 function to do the cleanup. */
8190 dso_parm = (flag_use_cxa_atexit
8191 && !targetm.cxx.use_atexit_for_cxa_atexit ());
8192 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
8193 use_dtor = ob_parm && CLASS_TYPE_P (type);
8194 if (use_dtor)
8195 {
8196 cleanup = get_class_binding (type, complete_dtor_identifier);
8197
8198 /* Make sure it is accessible. */
8199 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
8200 tf_warning_or_error);
8201 }
8202 else
8203 {
8204 /* Call build_cleanup before we enter the anonymous function so
8205 that any access checks will be done relative to the current
8206 scope, rather than the scope of the anonymous function. */
8207 build_cleanup (decl);
8208
8209 /* Now start the function. */
8210 cleanup = start_cleanup_fn ();
8211
8212 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8213 to the original function, rather than the anonymous one. That
8214 will make the back end think that nested functions are in use,
8215 which causes confusion. */
8216 push_deferring_access_checks (dk_no_check);
8217 fcall = build_cleanup (decl);
8218 pop_deferring_access_checks ();
8219
8220 /* Create the body of the anonymous function. */
8221 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
8222 finish_expr_stmt (fcall);
8223 finish_compound_stmt (compound_stmt);
8224 end_cleanup_fn ();
8225 }
8226
8227 /* Call atexit with the cleanup function. */
8228 mark_used (cleanup);
8229 cleanup = build_address (cleanup);
8230
8231 if (CP_DECL_THREAD_LOCAL_P (decl))
8232 atex_node = get_thread_atexit_node ();
8233 else
8234 atex_node = get_atexit_node ();
8235
8236 if (use_dtor)
8237 {
8238 /* We must convert CLEANUP to the type that "__cxa_atexit"
8239 expects. */
8240 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
8241 /* "__cxa_atexit" will pass the address of DECL to the
8242 cleanup function. */
8243 mark_used (decl);
8244 addr = build_address (decl);
8245 /* The declared type of the parameter to "__cxa_atexit" is
8246 "void *". For plain "T*", we could just let the
8247 machinery in cp_build_function_call convert it -- but if the
8248 type is "cv-qualified T *", then we need to convert it
8249 before passing it in, to avoid spurious errors. */
8250 addr = build_nop (ptr_type_node, addr);
8251 }
8252 else
8253 /* Since the cleanup functions we build ignore the address
8254 they're given, there's no reason to pass the actual address
8255 in, and, in general, it's cheaper to pass NULL than any
8256 other value. */
8257 addr = null_pointer_node;
8258
8259 if (dso_parm)
8260 arg2 = cp_build_addr_expr (get_dso_handle_node (),
8261 tf_warning_or_error);
8262 else if (ob_parm)
8263 /* Just pass NULL to the dso handle parm if we don't actually
8264 have a DSO handle on this target. */
8265 arg2 = null_pointer_node;
8266 else
8267 arg2 = NULL_TREE;
8268
8269 if (ob_parm)
8270 {
8271 if (!CP_DECL_THREAD_LOCAL_P (decl)
8272 && targetm.cxx.use_aeabi_atexit ())
8273 {
8274 arg1 = cleanup;
8275 arg0 = addr;
8276 }
8277 else
8278 {
8279 arg1 = addr;
8280 arg0 = cleanup;
8281 }
8282 }
8283 else
8284 {
8285 arg0 = cleanup;
8286 arg1 = NULL_TREE;
8287 }
8288 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8289 arg0, arg1, arg2, NULL_TREE);
8290 }
8291
8292 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8293 is its initializer. Generate code to handle the construction
8294 and destruction of DECL. */
8295
8296 static void
8297 expand_static_init (tree decl, tree init)
8298 {
8299 gcc_assert (VAR_P (decl));
8300 gcc_assert (TREE_STATIC (decl));
8301
8302 /* Some variables require no dynamic initialization. */
8303 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8304 {
8305 /* Make sure the destructor is callable. */
8306 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8307 if (!init)
8308 return;
8309 }
8310
8311 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8312 && !DECL_FUNCTION_SCOPE_P (decl))
8313 {
8314 location_t dloc = DECL_SOURCE_LOCATION (decl);
8315 if (init)
8316 error_at (dloc, "non-local variable %qD declared %<__thread%> "
8317 "needs dynamic initialization", decl);
8318 else
8319 error_at (dloc, "non-local variable %qD declared %<__thread%> "
8320 "has a non-trivial destructor", decl);
8321 static bool informed;
8322 if (!informed)
8323 {
8324 inform (dloc, "C++11 %<thread_local%> allows dynamic "
8325 "initialization and destruction");
8326 informed = true;
8327 }
8328 return;
8329 }
8330
8331 if (DECL_FUNCTION_SCOPE_P (decl))
8332 {
8333 /* Emit code to perform this initialization but once. */
8334 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8335 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8336 tree guard, guard_addr;
8337 tree flag, begin;
8338 /* We don't need thread-safety code for thread-local vars. */
8339 bool thread_guard = (flag_threadsafe_statics
8340 && !CP_DECL_THREAD_LOCAL_P (decl));
8341
8342 /* Emit code to perform this initialization but once. This code
8343 looks like:
8344
8345 static <type> guard;
8346 if (!__atomic_load (guard.first_byte)) {
8347 if (__cxa_guard_acquire (&guard)) {
8348 bool flag = false;
8349 try {
8350 // Do initialization.
8351 flag = true; __cxa_guard_release (&guard);
8352 // Register variable for destruction at end of program.
8353 } catch {
8354 if (!flag) __cxa_guard_abort (&guard);
8355 }
8356 }
8357 }
8358
8359 Note that the `flag' variable is only set to 1 *after* the
8360 initialization is complete. This ensures that an exception,
8361 thrown during the construction, will cause the variable to
8362 reinitialized when we pass through this code again, as per:
8363
8364 [stmt.dcl]
8365
8366 If the initialization exits by throwing an exception, the
8367 initialization is not complete, so it will be tried again
8368 the next time control enters the declaration.
8369
8370 This process should be thread-safe, too; multiple threads
8371 should not be able to initialize the variable more than
8372 once. */
8373
8374 /* Create the guard variable. */
8375 guard = get_guard (decl);
8376
8377 /* Begin the conditional initialization. */
8378 if_stmt = begin_if_stmt ();
8379
8380 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8381 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8382
8383 if (thread_guard)
8384 {
8385 tree vfntype = NULL_TREE;
8386 tree acquire_name, release_name, abort_name;
8387 tree acquire_fn, release_fn, abort_fn;
8388 guard_addr = build_address (guard);
8389
8390 acquire_name = get_identifier ("__cxa_guard_acquire");
8391 release_name = get_identifier ("__cxa_guard_release");
8392 abort_name = get_identifier ("__cxa_guard_abort");
8393 acquire_fn = get_global_binding (acquire_name);
8394 release_fn = get_global_binding (release_name);
8395 abort_fn = get_global_binding (abort_name);
8396 if (!acquire_fn)
8397 acquire_fn = push_library_fn
8398 (acquire_name, build_function_type_list (integer_type_node,
8399 TREE_TYPE (guard_addr),
8400 NULL_TREE),
8401 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8402 if (!release_fn || !abort_fn)
8403 vfntype = build_function_type_list (void_type_node,
8404 TREE_TYPE (guard_addr),
8405 NULL_TREE);
8406 if (!release_fn)
8407 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8408 ECF_NOTHROW | ECF_LEAF);
8409 if (!abort_fn)
8410 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8411 ECF_NOTHROW | ECF_LEAF);
8412
8413 inner_if_stmt = begin_if_stmt ();
8414 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8415 inner_if_stmt);
8416
8417 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8418 begin = get_target_expr (boolean_false_node);
8419 flag = TARGET_EXPR_SLOT (begin);
8420
8421 TARGET_EXPR_CLEANUP (begin)
8422 = build3 (COND_EXPR, void_type_node, flag,
8423 void_node,
8424 build_call_n (abort_fn, 1, guard_addr));
8425 CLEANUP_EH_ONLY (begin) = 1;
8426
8427 /* Do the initialization itself. */
8428 init = add_stmt_to_compound (begin, init);
8429 init = add_stmt_to_compound
8430 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8431 init = add_stmt_to_compound
8432 (init, build_call_n (release_fn, 1, guard_addr));
8433 }
8434 else
8435 init = add_stmt_to_compound (init, set_guard (guard));
8436
8437 /* Use atexit to register a function for destroying this static
8438 variable. */
8439 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8440
8441 finish_expr_stmt (init);
8442
8443 if (thread_guard)
8444 {
8445 finish_compound_stmt (inner_then_clause);
8446 finish_then_clause (inner_if_stmt);
8447 finish_if_stmt (inner_if_stmt);
8448 }
8449
8450 finish_compound_stmt (then_clause);
8451 finish_then_clause (if_stmt);
8452 finish_if_stmt (if_stmt);
8453 }
8454 else if (CP_DECL_THREAD_LOCAL_P (decl))
8455 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8456 else
8457 static_aggregates = tree_cons (init, decl, static_aggregates);
8458 }
8459
8460 \f
8461 /* Make TYPE a complete type based on INITIAL_VALUE.
8462 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8463 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8464 3 if the initializer list is empty (in pedantic mode). */
8465
8466 int
8467 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8468 {
8469 int failure;
8470 tree type, elt_type;
8471
8472 /* Don't get confused by a CONSTRUCTOR for some other type. */
8473 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8474 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8475 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8476 return 1;
8477
8478 if (initial_value)
8479 {
8480 unsigned HOST_WIDE_INT i;
8481 tree value;
8482
8483 /* An array of character type can be initialized from a
8484 brace-enclosed string constant.
8485
8486 FIXME: this code is duplicated from reshape_init. Probably
8487 we should just call reshape_init here? */
8488 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8489 && TREE_CODE (initial_value) == CONSTRUCTOR
8490 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8491 {
8492 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8493 tree value = (*v)[0].value;
8494 STRIP_ANY_LOCATION_WRAPPER (value);
8495
8496 if (TREE_CODE (value) == STRING_CST
8497 && v->length () == 1)
8498 initial_value = value;
8499 }
8500
8501 /* If any of the elements are parameter packs, we can't actually
8502 complete this type now because the array size is dependent. */
8503 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8504 {
8505 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8506 i, value)
8507 {
8508 if (PACK_EXPANSION_P (value))
8509 return 0;
8510 }
8511 }
8512 }
8513
8514 failure = complete_array_type (ptype, initial_value, do_default);
8515
8516 /* We can create the array before the element type is complete, which
8517 means that we didn't have these two bits set in the original type
8518 either. In completing the type, we are expected to propagate these
8519 bits. See also complete_type which does the same thing for arrays
8520 of fixed size. */
8521 type = *ptype;
8522 if (type != error_mark_node && TYPE_DOMAIN (type))
8523 {
8524 elt_type = TREE_TYPE (type);
8525 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8526 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8527 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8528 }
8529
8530 return failure;
8531 }
8532
8533 /* As above, but either give an error or reject zero-size arrays, depending
8534 on COMPLAIN. */
8535
8536 int
8537 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8538 bool do_default, tsubst_flags_t complain)
8539 {
8540 int failure;
8541 bool sfinae = !(complain & tf_error);
8542 /* In SFINAE context we can't be lenient about zero-size arrays. */
8543 if (sfinae)
8544 ++pedantic;
8545 failure = cp_complete_array_type (ptype, initial_value, do_default);
8546 if (sfinae)
8547 --pedantic;
8548 if (failure)
8549 {
8550 if (sfinae)
8551 /* Not an error. */;
8552 else if (failure == 1)
8553 error ("initializer fails to determine size of %qT", *ptype);
8554 else if (failure == 2)
8555 {
8556 if (do_default)
8557 error ("array size missing in %qT", *ptype);
8558 }
8559 else if (failure == 3)
8560 error ("zero-size array %qT", *ptype);
8561 *ptype = error_mark_node;
8562 }
8563 return failure;
8564 }
8565 \f
8566 /* Return zero if something is declared to be a member of type
8567 CTYPE when in the context of CUR_TYPE. STRING is the error
8568 message to print in that case. Otherwise, quietly return 1. */
8569
8570 static int
8571 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8572 {
8573 if (ctype && ctype != cur_type)
8574 {
8575 if (flags == DTOR_FLAG)
8576 error ("destructor for alien class %qT cannot be a member", ctype);
8577 else
8578 error ("constructor for alien class %qT cannot be a member", ctype);
8579 return 0;
8580 }
8581 return 1;
8582 }
8583 \f
8584 /* Subroutine of `grokdeclarator'. */
8585
8586 /* Generate errors possibly applicable for a given set of specifiers.
8587 This is for ARM $7.1.2. */
8588
8589 static void
8590 bad_specifiers (tree object,
8591 enum bad_spec_place type,
8592 int virtualp,
8593 int quals,
8594 int inlinep,
8595 int friendp,
8596 int raises,
8597 const location_t* locations)
8598 {
8599 switch (type)
8600 {
8601 case BSP_VAR:
8602 if (virtualp)
8603 error_at (locations[ds_virtual],
8604 "%qD declared as a %<virtual%> variable", object);
8605 if (quals)
8606 error ("%<const%> and %<volatile%> function specifiers on "
8607 "%qD invalid in variable declaration", object);
8608 break;
8609 case BSP_PARM:
8610 if (virtualp)
8611 error_at (locations[ds_virtual],
8612 "%qD declared as a %<virtual%> parameter", object);
8613 if (inlinep)
8614 error_at (locations[ds_inline],
8615 "%qD declared as an %<inline%> parameter", object);
8616 if (quals)
8617 error ("%<const%> and %<volatile%> function specifiers on "
8618 "%qD invalid in parameter declaration", object);
8619 break;
8620 case BSP_TYPE:
8621 if (virtualp)
8622 error_at (locations[ds_virtual],
8623 "%qD declared as a %<virtual%> type", object);
8624 if (inlinep)
8625 error_at (locations[ds_inline],
8626 "%qD declared as an %<inline%> type", object);
8627 if (quals)
8628 error ("%<const%> and %<volatile%> function specifiers on "
8629 "%qD invalid in type declaration", object);
8630 break;
8631 case BSP_FIELD:
8632 if (virtualp)
8633 error_at (locations[ds_virtual],
8634 "%qD declared as a %<virtual%> field", object);
8635 if (inlinep)
8636 error_at (locations[ds_inline],
8637 "%qD declared as an %<inline%> field", object);
8638 if (quals)
8639 error ("%<const%> and %<volatile%> function specifiers on "
8640 "%qD invalid in field declaration", object);
8641 break;
8642 default:
8643 gcc_unreachable();
8644 }
8645 if (friendp)
8646 error ("%q+D declared as a friend", object);
8647 if (raises
8648 && !flag_noexcept_type
8649 && (TREE_CODE (object) == TYPE_DECL
8650 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8651 && !TYPE_REFFN_P (TREE_TYPE (object))
8652 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8653 error ("%q+D declared with an exception specification", object);
8654 }
8655
8656 /* DECL is a member function or static data member and is presently
8657 being defined. Check that the definition is taking place in a
8658 valid namespace. */
8659
8660 static void
8661 check_class_member_definition_namespace (tree decl)
8662 {
8663 /* These checks only apply to member functions and static data
8664 members. */
8665 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8666 /* We check for problems with specializations in pt.c in
8667 check_specialization_namespace, where we can issue better
8668 diagnostics. */
8669 if (processing_specialization)
8670 return;
8671 /* We check this in check_explicit_instantiation_namespace. */
8672 if (processing_explicit_instantiation)
8673 return;
8674 /* [class.mfct]
8675
8676 A member function definition that appears outside of the
8677 class definition shall appear in a namespace scope enclosing
8678 the class definition.
8679
8680 [class.static.data]
8681
8682 The definition for a static data member shall appear in a
8683 namespace scope enclosing the member's class definition. */
8684 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8685 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8686 decl, DECL_CONTEXT (decl));
8687 }
8688
8689 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8690 METHOD_TYPE for a non-static member function; QUALS are the
8691 cv-qualifiers that apply to the function. */
8692
8693 tree
8694 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8695 {
8696 tree this_type;
8697 tree qual_type;
8698 tree parm;
8699 cp_cv_quals this_quals;
8700
8701 if (CLASS_TYPE_P (type))
8702 {
8703 this_type
8704 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8705 this_type = build_pointer_type (this_type);
8706 }
8707 else
8708 this_type = type_of_this_parm (type);
8709 /* The `this' parameter is implicitly `const'; it cannot be
8710 assigned to. */
8711 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8712 qual_type = cp_build_qualified_type (this_type, this_quals);
8713 parm = build_artificial_parm (fn, this_identifier, qual_type);
8714 cp_apply_type_quals_to_decl (this_quals, parm);
8715 return parm;
8716 }
8717
8718 /* DECL is a static member function. Complain if it was declared
8719 with function-cv-quals. */
8720
8721 static void
8722 check_static_quals (tree decl, cp_cv_quals quals)
8723 {
8724 if (quals != TYPE_UNQUALIFIED)
8725 error ("static member function %q#D declared with type qualifiers",
8726 decl);
8727 }
8728
8729 // Check that FN takes no arguments and returns bool.
8730 static void
8731 check_concept_fn (tree fn)
8732 {
8733 // A constraint is nullary.
8734 if (DECL_ARGUMENTS (fn))
8735 error_at (DECL_SOURCE_LOCATION (fn),
8736 "concept %q#D declared with function parameters", fn);
8737
8738 // The declared return type of the concept shall be bool, and
8739 // it shall not be deduced from it definition.
8740 tree type = TREE_TYPE (TREE_TYPE (fn));
8741 if (is_auto (type))
8742 error_at (DECL_SOURCE_LOCATION (fn),
8743 "concept %q#D declared with a deduced return type", fn);
8744 else if (type != boolean_type_node)
8745 error_at (DECL_SOURCE_LOCATION (fn),
8746 "concept %q#D with non-%<bool%> return type %qT", fn, type);
8747 }
8748
8749 /* Helper function. Replace the temporary this parameter injected
8750 during cp_finish_omp_declare_simd with the real this parameter. */
8751
8752 static tree
8753 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8754 {
8755 tree this_parm = (tree) data;
8756 if (TREE_CODE (*tp) == PARM_DECL
8757 && DECL_NAME (*tp) == this_identifier
8758 && *tp != this_parm)
8759 *tp = this_parm;
8760 else if (TYPE_P (*tp))
8761 *walk_subtrees = 0;
8762 return NULL_TREE;
8763 }
8764
8765 /* CTYPE is class type, or null if non-class.
8766 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8767 or METHOD_TYPE.
8768 DECLARATOR is the function's name.
8769 PARMS is a chain of PARM_DECLs for the function.
8770 VIRTUALP is truthvalue of whether the function is virtual or not.
8771 FLAGS are to be passed through to `grokclassfn'.
8772 QUALS are qualifiers indicating whether the function is `const'
8773 or `volatile'.
8774 RAISES is a list of exceptions that this function can raise.
8775 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8776 not look, and -1 if we should not call `grokclassfn' at all.
8777
8778 SFK is the kind of special function (if any) for the new function.
8779
8780 Returns `NULL_TREE' if something goes wrong, after issuing
8781 applicable error messages. */
8782
8783 static tree
8784 grokfndecl (tree ctype,
8785 tree type,
8786 tree declarator,
8787 tree parms,
8788 tree orig_declarator,
8789 const cp_decl_specifier_seq *declspecs,
8790 tree decl_reqs,
8791 int virtualp,
8792 enum overload_flags flags,
8793 cp_cv_quals quals,
8794 cp_ref_qualifier rqual,
8795 tree raises,
8796 int check,
8797 int friendp,
8798 int publicp,
8799 int inlinep,
8800 bool deletedp,
8801 special_function_kind sfk,
8802 bool funcdef_flag,
8803 bool late_return_type_p,
8804 int template_count,
8805 tree in_namespace,
8806 tree* attrlist,
8807 location_t location)
8808 {
8809 tree decl;
8810 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8811 tree t;
8812
8813 if (location == UNKNOWN_LOCATION)
8814 location = input_location;
8815
8816 // Was the concept specifier present?
8817 bool concept_p = inlinep & 4;
8818
8819 // Concept declarations must have a corresponding definition.
8820 if (concept_p && !funcdef_flag)
8821 {
8822 error_at (location, "concept %qD has no definition", declarator);
8823 return NULL_TREE;
8824 }
8825
8826 type = build_cp_fntype_variant (type, rqual, raises, late_return_type_p);
8827
8828 decl = build_lang_decl_loc (location, FUNCTION_DECL, declarator, type);
8829
8830 /* Set the constraints on the declaration. */
8831 if (flag_concepts)
8832 {
8833 tree tmpl_reqs = NULL_TREE;
8834 if (processing_template_decl > template_class_depth (ctype))
8835 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8836
8837 /* Adjust the required expression into a constraint. */
8838 if (decl_reqs)
8839 decl_reqs = normalize_expression (decl_reqs);
8840
8841 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8842 set_constraints (decl, ci);
8843 }
8844
8845 if (TREE_CODE (type) == METHOD_TYPE)
8846 {
8847 tree parm = build_this_parm (decl, type, quals);
8848 DECL_CHAIN (parm) = parms;
8849 parms = parm;
8850
8851 /* Allocate space to hold the vptr bit if needed. */
8852 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8853 }
8854
8855 DECL_ARGUMENTS (decl) = parms;
8856 for (t = parms; t; t = DECL_CHAIN (t))
8857 DECL_CONTEXT (t) = decl;
8858
8859 /* Propagate volatile out from type to decl. */
8860 if (TYPE_VOLATILE (type))
8861 TREE_THIS_VOLATILE (decl) = 1;
8862
8863 /* Setup decl according to sfk. */
8864 switch (sfk)
8865 {
8866 case sfk_constructor:
8867 case sfk_copy_constructor:
8868 case sfk_move_constructor:
8869 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8870 DECL_NAME (decl) = ctor_identifier;
8871 break;
8872 case sfk_destructor:
8873 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8874 DECL_NAME (decl) = dtor_identifier;
8875 break;
8876 default:
8877 break;
8878 }
8879
8880 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8881 {
8882 if (funcdef_flag)
8883 error_at (location,
8884 "defining explicit specialization %qD in friend declaration",
8885 orig_declarator);
8886 else
8887 {
8888 tree fns = TREE_OPERAND (orig_declarator, 0);
8889 tree args = TREE_OPERAND (orig_declarator, 1);
8890
8891 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8892 {
8893 /* Something like `template <class T> friend void f<T>()'. */
8894 error_at (location,
8895 "invalid use of template-id %qD in declaration "
8896 "of primary template",
8897 orig_declarator);
8898 return NULL_TREE;
8899 }
8900
8901
8902 /* A friend declaration of the form friend void f<>(). Record
8903 the information in the TEMPLATE_ID_EXPR. */
8904 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8905
8906 gcc_assert (identifier_p (fns)
8907 || TREE_CODE (fns) == OVERLOAD
8908 || TREE_CODE (fns) == FUNCTION_DECL);
8909 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8910
8911 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8912 if (TREE_PURPOSE (t)
8913 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8914 {
8915 error_at (defarg_location (TREE_PURPOSE (t)),
8916 "default arguments are not allowed in declaration "
8917 "of friend template specialization %qD",
8918 decl);
8919 return NULL_TREE;
8920 }
8921
8922 if (inlinep & 1)
8923 {
8924 error_at (declspecs->locations[ds_inline],
8925 "%<inline%> is not allowed in declaration of friend "
8926 "template specialization %qD",
8927 decl);
8928 return NULL_TREE;
8929 }
8930 }
8931 }
8932
8933 /* C++17 11.3.6/4: "If a friend declaration specifies a default argument
8934 expression, that declaration shall be a definition..." */
8935 if (friendp && !funcdef_flag)
8936 {
8937 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
8938 t && t != void_list_node; t = TREE_CHAIN (t))
8939 if (TREE_PURPOSE (t))
8940 {
8941 permerror (DECL_SOURCE_LOCATION (decl),
8942 "friend declaration of %qD specifies default "
8943 "arguments and isn%'t a definition", decl);
8944 break;
8945 }
8946 }
8947
8948 /* If this decl has namespace scope, set that up. */
8949 if (in_namespace)
8950 set_decl_namespace (decl, in_namespace, friendp);
8951 else if (!ctype)
8952 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8953
8954 /* `main' and builtins have implicit 'C' linkage. */
8955 if (ctype == NULL_TREE
8956 && DECL_FILE_SCOPE_P (decl)
8957 && current_lang_name == lang_name_cplusplus
8958 && (MAIN_NAME_P (declarator)
8959 || (IDENTIFIER_LENGTH (declarator) > 10
8960 && IDENTIFIER_POINTER (declarator)[0] == '_'
8961 && IDENTIFIER_POINTER (declarator)[1] == '_'
8962 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8963 "builtin_", 8) == 0)
8964 || (targetcm.cxx_implicit_extern_c
8965 && (targetcm.cxx_implicit_extern_c
8966 (IDENTIFIER_POINTER (declarator))))))
8967 SET_DECL_LANGUAGE (decl, lang_c);
8968
8969 /* Should probably propagate const out from type to decl I bet (mrs). */
8970 if (staticp)
8971 {
8972 DECL_STATIC_FUNCTION_P (decl) = 1;
8973 DECL_CONTEXT (decl) = ctype;
8974 }
8975
8976 if (deletedp)
8977 DECL_DELETED_FN (decl) = 1;
8978
8979 if (ctype)
8980 {
8981 DECL_CONTEXT (decl) = ctype;
8982 if (funcdef_flag)
8983 check_class_member_definition_namespace (decl);
8984 }
8985
8986 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8987 {
8988 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8989 error_at (location, "cannot declare %<::main%> to be a template");
8990 if (inlinep & 1)
8991 error_at (declspecs->locations[ds_inline],
8992 "cannot declare %<::main%> to be inline");
8993 if (inlinep & 2)
8994 error_at (declspecs->locations[ds_constexpr],
8995 "cannot declare %<::main%> to be %<constexpr%>");
8996 if (!publicp)
8997 error_at (location, "cannot declare %<::main%> to be static");
8998 inlinep = 0;
8999 publicp = 1;
9000 }
9001
9002 /* Members of anonymous types and local classes have no linkage; make
9003 them internal. If a typedef is made later, this will be changed. */
9004 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
9005 || decl_function_context (TYPE_MAIN_DECL (ctype))))
9006 publicp = 0;
9007
9008 if (publicp && cxx_dialect == cxx98)
9009 {
9010 /* [basic.link]: A name with no linkage (notably, the name of a class
9011 or enumeration declared in a local scope) shall not be used to
9012 declare an entity with linkage.
9013
9014 DR 757 relaxes this restriction for C++0x. */
9015 no_linkage_error (decl);
9016 }
9017
9018 TREE_PUBLIC (decl) = publicp;
9019 if (! publicp)
9020 {
9021 DECL_INTERFACE_KNOWN (decl) = 1;
9022 DECL_NOT_REALLY_EXTERN (decl) = 1;
9023 }
9024
9025 /* If the declaration was declared inline, mark it as such. */
9026 if (inlinep)
9027 {
9028 DECL_DECLARED_INLINE_P (decl) = 1;
9029 if (publicp)
9030 DECL_COMDAT (decl) = 1;
9031 }
9032 if (inlinep & 2)
9033 DECL_DECLARED_CONSTEXPR_P (decl) = true;
9034
9035 // If the concept declaration specifier was found, check
9036 // that the declaration satisfies the necessary requirements.
9037 if (concept_p)
9038 {
9039 DECL_DECLARED_CONCEPT_P (decl) = true;
9040 check_concept_fn (decl);
9041 }
9042
9043 DECL_EXTERNAL (decl) = 1;
9044 if (TREE_CODE (type) == FUNCTION_TYPE)
9045 {
9046 if (quals || rqual)
9047 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
9048 TYPE_UNQUALIFIED,
9049 REF_QUAL_NONE);
9050
9051 if (quals)
9052 {
9053 error (ctype
9054 ? G_("static member function %qD cannot have cv-qualifier")
9055 : G_("non-member function %qD cannot have cv-qualifier"),
9056 decl);
9057 quals = TYPE_UNQUALIFIED;
9058 }
9059
9060 if (rqual)
9061 {
9062 error (ctype
9063 ? G_("static member function %qD cannot have ref-qualifier")
9064 : G_("non-member function %qD cannot have ref-qualifier"),
9065 decl);
9066 rqual = REF_QUAL_NONE;
9067 }
9068 }
9069
9070 if (deduction_guide_p (decl))
9071 {
9072 if (!DECL_NAMESPACE_SCOPE_P (decl))
9073 {
9074 error_at (location, "deduction guide %qD must be declared at "
9075 "namespace scope", decl);
9076 return NULL_TREE;
9077 }
9078 if (funcdef_flag)
9079 error_at (location,
9080 "deduction guide %qD must not have a function body", decl);
9081 }
9082 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
9083 && !grok_op_properties (decl, /*complain=*/true))
9084 return NULL_TREE;
9085 else if (UDLIT_OPER_P (DECL_NAME (decl)))
9086 {
9087 bool long_long_unsigned_p;
9088 bool long_double_p;
9089 const char *suffix = NULL;
9090 /* [over.literal]/6: Literal operators shall not have C linkage. */
9091 if (DECL_LANGUAGE (decl) == lang_c)
9092 {
9093 error_at (location, "literal operator with C linkage");
9094 maybe_show_extern_c_location ();
9095 return NULL_TREE;
9096 }
9097
9098 if (DECL_NAMESPACE_SCOPE_P (decl))
9099 {
9100 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
9101 &long_double_p))
9102 {
9103 error_at (location, "%qD has invalid argument list", decl);
9104 return NULL_TREE;
9105 }
9106
9107 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
9108 if (long_long_unsigned_p)
9109 {
9110 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
9111 warning_at (location, 0, "integer suffix %qs"
9112 " shadowed by implementation", suffix);
9113 }
9114 else if (long_double_p)
9115 {
9116 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
9117 warning_at (location, 0, "floating point suffix %qs"
9118 " shadowed by implementation", suffix);
9119 }
9120 /* 17.6.3.3.5 */
9121 if (suffix[0] != '_'
9122 && !in_system_header_at (location)
9123 && !current_function_decl && !(friendp && !funcdef_flag))
9124 warning_at (location, OPT_Wliteral_suffix,
9125 "literal operator suffixes not preceded by %<_%>"
9126 " are reserved for future standardization");
9127 }
9128 else
9129 {
9130 error_at (location, "%qD must be a non-member function", decl);
9131 return NULL_TREE;
9132 }
9133 }
9134
9135 if (funcdef_flag)
9136 /* Make the init_value nonzero so pushdecl knows this is not
9137 tentative. error_mark_node is replaced later with the BLOCK. */
9138 DECL_INITIAL (decl) = error_mark_node;
9139
9140 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
9141 TREE_NOTHROW (decl) = 1;
9142
9143 if (flag_openmp || flag_openmp_simd)
9144 {
9145 /* Adjust "omp declare simd" attributes. */
9146 tree ods = lookup_attribute ("omp declare simd", *attrlist);
9147 if (ods)
9148 {
9149 tree attr;
9150 for (attr = ods; attr;
9151 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
9152 {
9153 if (TREE_CODE (type) == METHOD_TYPE)
9154 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
9155 DECL_ARGUMENTS (decl), NULL);
9156 if (TREE_VALUE (attr) != NULL_TREE)
9157 {
9158 tree cl = TREE_VALUE (TREE_VALUE (attr));
9159 cl = c_omp_declare_simd_clauses_to_numbers
9160 (DECL_ARGUMENTS (decl), cl);
9161 if (cl)
9162 TREE_VALUE (TREE_VALUE (attr)) = cl;
9163 else
9164 TREE_VALUE (attr) = NULL_TREE;
9165 }
9166 }
9167 }
9168 }
9169
9170 /* Caller will do the rest of this. */
9171 if (check < 0)
9172 return decl;
9173
9174 if (ctype != NULL_TREE)
9175 grokclassfn (ctype, decl, flags);
9176
9177 /* 12.4/3 */
9178 if (cxx_dialect >= cxx11
9179 && DECL_DESTRUCTOR_P (decl)
9180 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
9181 && !processing_template_decl)
9182 deduce_noexcept_on_destructor (decl);
9183
9184 decl = check_explicit_specialization (orig_declarator, decl,
9185 template_count,
9186 2 * funcdef_flag +
9187 4 * (friendp != 0) +
9188 8 * concept_p,
9189 *attrlist);
9190 if (decl == error_mark_node)
9191 return NULL_TREE;
9192
9193 if (DECL_STATIC_FUNCTION_P (decl))
9194 check_static_quals (decl, quals);
9195
9196 if (attrlist)
9197 {
9198 cplus_decl_attributes (&decl, *attrlist, 0);
9199 *attrlist = NULL_TREE;
9200 }
9201
9202 /* Check main's type after attributes have been applied. */
9203 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9204 {
9205 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9206 integer_type_node))
9207 {
9208 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
9209 tree newtype;
9210 error_at (declspecs->locations[ds_type_spec],
9211 "%<::main%> must return %<int%>");
9212 newtype = build_function_type (integer_type_node, oldtypeargs);
9213 TREE_TYPE (decl) = newtype;
9214 }
9215 if (warn_main)
9216 check_main_parameter_types (decl);
9217 }
9218
9219 if (ctype != NULL_TREE && check)
9220 {
9221 tree old_decl = check_classfn (ctype, decl,
9222 (processing_template_decl
9223 > template_class_depth (ctype))
9224 ? current_template_parms
9225 : NULL_TREE);
9226
9227 if (old_decl == error_mark_node)
9228 return NULL_TREE;
9229
9230 if (old_decl)
9231 {
9232 tree ok;
9233 tree pushed_scope;
9234
9235 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
9236 /* Because grokfndecl is always supposed to return a
9237 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9238 here. We depend on our callers to figure out that its
9239 really a template that's being returned. */
9240 old_decl = DECL_TEMPLATE_RESULT (old_decl);
9241
9242 if (DECL_STATIC_FUNCTION_P (old_decl)
9243 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9244 {
9245 /* Remove the `this' parm added by grokclassfn. */
9246 revert_static_member_fn (decl);
9247 check_static_quals (decl, quals);
9248 }
9249 if (DECL_ARTIFICIAL (old_decl))
9250 {
9251 error ("definition of implicitly-declared %qD", old_decl);
9252 return NULL_TREE;
9253 }
9254 else if (DECL_DEFAULTED_FN (old_decl))
9255 {
9256 error ("definition of explicitly-defaulted %q+D", decl);
9257 inform (DECL_SOURCE_LOCATION (old_decl),
9258 "%q#D explicitly defaulted here", old_decl);
9259 return NULL_TREE;
9260 }
9261
9262 /* Since we've smashed OLD_DECL to its
9263 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9264 if (TREE_CODE (decl) == TEMPLATE_DECL)
9265 decl = DECL_TEMPLATE_RESULT (decl);
9266
9267 /* Attempt to merge the declarations. This can fail, in
9268 the case of some invalid specialization declarations. */
9269 pushed_scope = push_scope (ctype);
9270 ok = duplicate_decls (decl, old_decl, friendp);
9271 if (pushed_scope)
9272 pop_scope (pushed_scope);
9273 if (!ok)
9274 {
9275 error ("no %q#D member function declared in class %qT",
9276 decl, ctype);
9277 return NULL_TREE;
9278 }
9279 if (ok == error_mark_node)
9280 return NULL_TREE;
9281 return old_decl;
9282 }
9283 }
9284
9285 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9286 return NULL_TREE;
9287
9288 if (ctype == NULL_TREE || check)
9289 return decl;
9290
9291 if (virtualp)
9292 DECL_VIRTUAL_P (decl) = 1;
9293
9294 return decl;
9295 }
9296
9297 /* decl is a FUNCTION_DECL.
9298 specifiers are the parsed virt-specifiers.
9299
9300 Set flags to reflect the virt-specifiers.
9301
9302 Returns decl. */
9303
9304 static tree
9305 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
9306 {
9307 if (decl == NULL_TREE)
9308 return decl;
9309 if (specifiers & VIRT_SPEC_OVERRIDE)
9310 DECL_OVERRIDE_P (decl) = 1;
9311 if (specifiers & VIRT_SPEC_FINAL)
9312 DECL_FINAL_P (decl) = 1;
9313 return decl;
9314 }
9315
9316 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
9317 the linkage that DECL will receive in the object file. */
9318
9319 static void
9320 set_linkage_for_static_data_member (tree decl)
9321 {
9322 /* A static data member always has static storage duration and
9323 external linkage. Note that static data members are forbidden in
9324 local classes -- the only situation in which a class has
9325 non-external linkage. */
9326 TREE_PUBLIC (decl) = 1;
9327 TREE_STATIC (decl) = 1;
9328 /* For non-template classes, static data members are always put
9329 out in exactly those files where they are defined, just as
9330 with ordinary namespace-scope variables. */
9331 if (!processing_template_decl)
9332 DECL_INTERFACE_KNOWN (decl) = 1;
9333 }
9334
9335 /* Create a VAR_DECL named NAME with the indicated TYPE.
9336
9337 If SCOPE is non-NULL, it is the class type or namespace containing
9338 the variable. If SCOPE is NULL, the variable should is created in
9339 the innermost enclosing scope. */
9340
9341 static tree
9342 grokvardecl (tree type,
9343 tree name,
9344 tree orig_declarator,
9345 const cp_decl_specifier_seq *declspecs,
9346 int initialized,
9347 int type_quals,
9348 int inlinep,
9349 bool conceptp,
9350 int template_count,
9351 tree scope,
9352 location_t location)
9353 {
9354 tree decl;
9355 tree explicit_scope;
9356
9357 gcc_assert (!name || identifier_p (name));
9358
9359 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9360 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9361
9362 /* Compute the scope in which to place the variable, but remember
9363 whether or not that scope was explicitly specified by the user. */
9364 explicit_scope = scope;
9365 if (!scope)
9366 {
9367 /* An explicit "extern" specifier indicates a namespace-scope
9368 variable. */
9369 if (declspecs->storage_class == sc_extern)
9370 scope = current_decl_namespace ();
9371 else if (!at_function_scope_p ())
9372 scope = current_scope ();
9373 }
9374
9375 if (scope
9376 && (/* If the variable is a namespace-scope variable declared in a
9377 template, we need DECL_LANG_SPECIFIC. */
9378 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9379 /* Similarly for namespace-scope variables with language linkage
9380 other than C++. */
9381 || (TREE_CODE (scope) == NAMESPACE_DECL
9382 && current_lang_name != lang_name_cplusplus)
9383 /* Similarly for static data members. */
9384 || TYPE_P (scope)
9385 /* Similarly for explicit specializations. */
9386 || (orig_declarator
9387 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9388 decl = build_lang_decl_loc (location, VAR_DECL, name, type);
9389 else
9390 decl = build_decl (location, VAR_DECL, name, type);
9391
9392 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9393 set_decl_namespace (decl, explicit_scope, 0);
9394 else
9395 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9396
9397 if (declspecs->storage_class == sc_extern)
9398 {
9399 DECL_THIS_EXTERN (decl) = 1;
9400 DECL_EXTERNAL (decl) = !initialized;
9401 }
9402
9403 if (DECL_CLASS_SCOPE_P (decl))
9404 {
9405 set_linkage_for_static_data_member (decl);
9406 /* This function is only called with out-of-class definitions. */
9407 DECL_EXTERNAL (decl) = 0;
9408 check_class_member_definition_namespace (decl);
9409 }
9410 /* At top level, either `static' or no s.c. makes a definition
9411 (perhaps tentative), and absence of `static' makes it public. */
9412 else if (toplevel_bindings_p ())
9413 {
9414 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9415 && (DECL_THIS_EXTERN (decl)
9416 || ! constp
9417 || volatilep
9418 || inlinep));
9419 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9420 }
9421 /* Not at top level, only `static' makes a static definition. */
9422 else
9423 {
9424 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9425 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9426 }
9427
9428 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9429 {
9430 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9431 {
9432 CP_DECL_THREAD_LOCAL_P (decl) = true;
9433 if (!processing_template_decl)
9434 set_decl_tls_model (decl, decl_default_tls_model (decl));
9435 }
9436 if (declspecs->gnu_thread_keyword_p)
9437 SET_DECL_GNU_TLS_P (decl);
9438 }
9439
9440 /* If the type of the decl has no linkage, make sure that we'll
9441 notice that in mark_used. */
9442 if (cxx_dialect > cxx98
9443 && decl_linkage (decl) != lk_none
9444 && DECL_LANG_SPECIFIC (decl) == NULL
9445 && !DECL_EXTERN_C_P (decl)
9446 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9447 retrofit_lang_decl (decl);
9448
9449 if (TREE_PUBLIC (decl))
9450 {
9451 /* [basic.link]: A name with no linkage (notably, the name of a class
9452 or enumeration declared in a local scope) shall not be used to
9453 declare an entity with linkage.
9454
9455 DR 757 relaxes this restriction for C++0x. */
9456 if (cxx_dialect < cxx11)
9457 no_linkage_error (decl);
9458 }
9459 else
9460 DECL_INTERFACE_KNOWN (decl) = 1;
9461
9462 if (DECL_NAME (decl)
9463 && MAIN_NAME_P (DECL_NAME (decl))
9464 && scope == global_namespace)
9465 error ("cannot declare %<::main%> to be a global variable");
9466
9467 /* Check that the variable can be safely declared as a concept.
9468 Note that this also forbids explicit specializations. */
9469 if (conceptp)
9470 {
9471 if (!processing_template_decl)
9472 {
9473 error_at (declspecs->locations[ds_concept],
9474 "a non-template variable cannot be %<concept%>");
9475 return NULL_TREE;
9476 }
9477 else
9478 DECL_DECLARED_CONCEPT_P (decl) = true;
9479 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9480 error_at (declspecs->locations[ds_type_spec],
9481 "concept must have type %<bool%>");
9482 }
9483 else if (flag_concepts
9484 && processing_template_decl > template_class_depth (scope))
9485 {
9486 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9487 tree ci = build_constraints (reqs, NULL_TREE);
9488 set_constraints (decl, ci);
9489 }
9490
9491 // Handle explicit specializations and instantiations of variable templates.
9492 if (orig_declarator)
9493 decl = check_explicit_specialization (orig_declarator, decl,
9494 template_count, conceptp * 8);
9495
9496 return decl != error_mark_node ? decl : NULL_TREE;
9497 }
9498
9499 /* Create and return a canonical pointer to member function type, for
9500 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9501
9502 tree
9503 build_ptrmemfunc_type (tree type)
9504 {
9505 tree field, fields;
9506 tree t;
9507
9508 if (type == error_mark_node)
9509 return type;
9510
9511 /* Make sure that we always have the unqualified pointer-to-member
9512 type first. */
9513 if (cp_cv_quals quals = cp_type_quals (type))
9514 {
9515 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9516 return cp_build_qualified_type (unqual, quals);
9517 }
9518
9519 /* If a canonical type already exists for this type, use it. We use
9520 this method instead of type_hash_canon, because it only does a
9521 simple equality check on the list of field members. */
9522
9523 t = TYPE_PTRMEMFUNC_TYPE (type);
9524 if (t)
9525 return t;
9526
9527 t = make_node (RECORD_TYPE);
9528
9529 /* Let the front end know this is a pointer to member function. */
9530 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9531
9532 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9533 fields = field;
9534
9535 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9536 delta_type_node);
9537 DECL_CHAIN (field) = fields;
9538 fields = field;
9539
9540 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9541
9542 /* Zap out the name so that the back end will give us the debugging
9543 information for this anonymous RECORD_TYPE. */
9544 TYPE_NAME (t) = NULL_TREE;
9545
9546 /* Cache this pointer-to-member type so that we can find it again
9547 later. */
9548 TYPE_PTRMEMFUNC_TYPE (type) = t;
9549
9550 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9551 SET_TYPE_STRUCTURAL_EQUALITY (t);
9552 else if (TYPE_CANONICAL (type) != type)
9553 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9554
9555 return t;
9556 }
9557
9558 /* Create and return a pointer to data member type. */
9559
9560 tree
9561 build_ptrmem_type (tree class_type, tree member_type)
9562 {
9563 if (TREE_CODE (member_type) == METHOD_TYPE)
9564 {
9565 cp_cv_quals quals = type_memfn_quals (member_type);
9566 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9567 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9568 return build_ptrmemfunc_type (build_pointer_type (member_type));
9569 }
9570 else
9571 {
9572 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9573 return build_offset_type (class_type, member_type);
9574 }
9575 }
9576
9577 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9578 Check to see that the definition is valid. Issue appropriate error
9579 messages. */
9580
9581 static void
9582 check_static_variable_definition (tree decl, tree type)
9583 {
9584 /* Avoid redundant diagnostics on out-of-class definitions. */
9585 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9586 ;
9587 /* Can't check yet if we don't know the type. */
9588 else if (dependent_type_p (type))
9589 ;
9590 /* If DECL is declared constexpr, we'll do the appropriate checks
9591 in check_initializer. Similarly for inline static data members. */
9592 else if (DECL_P (decl)
9593 && (DECL_DECLARED_CONSTEXPR_P (decl)
9594 || undeduced_auto_decl (decl)
9595 || DECL_VAR_DECLARED_INLINE_P (decl)))
9596 ;
9597 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9598 {
9599 if (!COMPLETE_TYPE_P (type))
9600 error_at (DECL_SOURCE_LOCATION (decl),
9601 "in-class initialization of static data member %q#D of "
9602 "incomplete type", decl);
9603 else if (literal_type_p (type))
9604 permerror (DECL_SOURCE_LOCATION (decl),
9605 "%<constexpr%> needed for in-class initialization of "
9606 "static data member %q#D of non-integral type", decl);
9607 else
9608 error_at (DECL_SOURCE_LOCATION (decl),
9609 "in-class initialization of static data member %q#D of "
9610 "non-literal type", decl);
9611 }
9612 /* Motion 10 at San Diego: If a static const integral data member is
9613 initialized with an integral constant expression, the initializer
9614 may appear either in the declaration (within the class), or in
9615 the definition, but not both. If it appears in the class, the
9616 member is a member constant. The file-scope definition is always
9617 required. */
9618 else if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9619 error_at (DECL_SOURCE_LOCATION (decl),
9620 "invalid in-class initialization of static data member "
9621 "of non-integral type %qT",
9622 type);
9623 else if (!CP_TYPE_CONST_P (type))
9624 error_at (DECL_SOURCE_LOCATION (decl),
9625 "ISO C++ forbids in-class initialization of non-const "
9626 "static member %qD",
9627 decl);
9628 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9629 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9630 "ISO C++ forbids initialization of member constant "
9631 "%qD of non-integral type %qT", decl, type);
9632 }
9633
9634 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9635 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9636 expressions out into temporary variables so that walk_tree doesn't
9637 step into them (c++/15764). */
9638
9639 static tree
9640 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9641 {
9642 hash_set<tree> *pset = (hash_set<tree> *)data;
9643 tree expr = *expr_p;
9644 if (TREE_CODE (expr) == SAVE_EXPR)
9645 {
9646 tree op = TREE_OPERAND (expr, 0);
9647 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9648 if (TREE_SIDE_EFFECTS (op))
9649 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9650 *walk_subtrees = 0;
9651 }
9652 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9653 *walk_subtrees = 0;
9654 return NULL;
9655 }
9656
9657 /* Entry point for the above. */
9658
9659 static void
9660 stabilize_vla_size (tree size)
9661 {
9662 hash_set<tree> pset;
9663 /* Break out any function calls into temporary variables. */
9664 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9665 }
9666
9667 /* Reduce a SIZEOF_EXPR to its value. */
9668
9669 tree
9670 fold_sizeof_expr (tree t)
9671 {
9672 tree r;
9673 if (SIZEOF_EXPR_TYPE_P (t))
9674 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9675 SIZEOF_EXPR, false, false);
9676 else if (TYPE_P (TREE_OPERAND (t, 0)))
9677 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9678 false, false);
9679 else
9680 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9681 false);
9682 if (r == error_mark_node)
9683 r = size_one_node;
9684 return r;
9685 }
9686
9687 /* Given the SIZE (i.e., number of elements) in an array, compute
9688 an appropriate index type for the array. If non-NULL, NAME is
9689 the name of the entity being declared. */
9690
9691 static tree
9692 compute_array_index_type_loc (location_t name_loc, tree name, tree size,
9693 tsubst_flags_t complain)
9694 {
9695 if (error_operand_p (size))
9696 return error_mark_node;
9697
9698 /* The type of the index being computed. */
9699 tree itype;
9700
9701 /* The original numeric size as seen in the source code before
9702 conversion to size_t. */
9703 tree origsize = size;
9704
9705 location_t loc = cp_expr_loc_or_loc (size, name ? name_loc : input_location);
9706
9707 if (!type_dependent_expression_p (size))
9708 {
9709 origsize = size = mark_rvalue_use (size);
9710
9711 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9712 && TREE_SIDE_EFFECTS (size))
9713 /* In C++98, we mark a non-constant array bound with a magic
9714 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9715 else
9716 {
9717 size = instantiate_non_dependent_expr_sfinae (size, complain);
9718 size = build_converted_constant_expr (size_type_node, size, complain);
9719 /* Pedantically a constant expression is required here and so
9720 __builtin_is_constant_evaluated () should fold to true if it
9721 is successfully folded into a constant. */
9722 size = maybe_constant_value (size, NULL_TREE,
9723 /*manifestly_const_eval=*/true);
9724
9725 if (!TREE_CONSTANT (size))
9726 size = origsize;
9727 }
9728
9729 if (error_operand_p (size))
9730 return error_mark_node;
9731
9732 /* The array bound must be an integer type. */
9733 tree type = TREE_TYPE (size);
9734 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9735 {
9736 if (!(complain & tf_error))
9737 return error_mark_node;
9738 if (name)
9739 error_at (loc, "size of array %qD has non-integral type %qT",
9740 name, type);
9741 else
9742 error_at (loc, "size of array has non-integral type %qT", type);
9743 size = integer_one_node;
9744 }
9745 }
9746
9747 /* A type is dependent if it is...an array type constructed from any
9748 dependent type or whose size is specified by a constant expression
9749 that is value-dependent. */
9750 /* We can only call value_dependent_expression_p on integral constant
9751 expressions; treat non-constant expressions as dependent, too. */
9752 if (processing_template_decl
9753 && (type_dependent_expression_p (size)
9754 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9755 {
9756 /* We cannot do any checking for a SIZE that isn't known to be
9757 constant. Just build the index type and mark that it requires
9758 structural equality checks. */
9759 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9760 size, size_one_node));
9761 TYPE_DEPENDENT_P (itype) = 1;
9762 TYPE_DEPENDENT_P_VALID (itype) = 1;
9763 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9764 return itype;
9765 }
9766
9767 if (TREE_CODE (size) != INTEGER_CST)
9768 {
9769 tree folded = cp_fully_fold (size);
9770 if (TREE_CODE (folded) == INTEGER_CST)
9771 {
9772 if (name)
9773 pedwarn (loc, OPT_Wpedantic, "size of array %qD is not an "
9774 "integral constant-expression", name);
9775 else
9776 pedwarn (loc, OPT_Wpedantic,
9777 "size of array is not an integral constant-expression");
9778 }
9779 /* Use the folded result for VLAs, too; it will have resolved
9780 SIZEOF_EXPR. */
9781 size = folded;
9782 }
9783
9784 /* Normally, the array-bound will be a constant. */
9785 if (TREE_CODE (size) == INTEGER_CST)
9786 {
9787 /* The size to use in diagnostics that reflects the constant
9788 size used in the source, rather than SIZE massaged above. */
9789 tree diagsize = size;
9790
9791 /* If the original size before conversion to size_t was signed
9792 and negative, convert it to ssizetype to restore the sign. */
9793 if (!TYPE_UNSIGNED (TREE_TYPE (origsize))
9794 && TREE_CODE (size) == INTEGER_CST
9795 && tree_int_cst_sign_bit (size))
9796 {
9797 diagsize = fold_convert (ssizetype, size);
9798
9799 /* Clear the overflow bit that may have been set as a result
9800 of the conversion from the sizetype of the new size to
9801 ssizetype. */
9802 TREE_OVERFLOW (diagsize) = false;
9803 }
9804
9805 /* Verify that the array has a positive number of elements
9806 and issue the appropriate diagnostic if it doesn't. */
9807 if (!valid_array_size_p (loc, diagsize, name, (complain & tf_error)))
9808 {
9809 if (!(complain & tf_error))
9810 return error_mark_node;
9811 size = integer_one_node;
9812 }
9813 /* As an extension we allow zero-sized arrays. */
9814 else if (integer_zerop (size))
9815 {
9816 if (!(complain & tf_error))
9817 /* We must fail if performing argument deduction (as
9818 indicated by the state of complain), so that
9819 another substitution can be found. */
9820 return error_mark_node;
9821 else if (in_system_header_at (input_location))
9822 /* Allow them in system headers because glibc uses them. */;
9823 else if (name)
9824 pedwarn (loc, OPT_Wpedantic,
9825 "ISO C++ forbids zero-size array %qD", name);
9826 else
9827 pedwarn (loc, OPT_Wpedantic,
9828 "ISO C++ forbids zero-size array");
9829 }
9830 }
9831 else if (TREE_CONSTANT (size)
9832 /* We don't allow VLAs at non-function scopes, or during
9833 tentative template substitution. */
9834 || !at_function_scope_p ()
9835 || !(complain & tf_error))
9836 {
9837 if (!(complain & tf_error))
9838 return error_mark_node;
9839 /* `(int) &fn' is not a valid array bound. */
9840 if (name)
9841 error_at (loc,
9842 "size of array %qD is not an integral constant-expression",
9843 name);
9844 else
9845 error_at (loc, "size of array is not an integral constant-expression");
9846 size = integer_one_node;
9847 }
9848 else if (pedantic && warn_vla != 0)
9849 {
9850 if (name)
9851 pedwarn (name_loc, OPT_Wvla,
9852 "ISO C++ forbids variable length array %qD", name);
9853 else
9854 pedwarn (input_location, OPT_Wvla,
9855 "ISO C++ forbids variable length array");
9856 }
9857 else if (warn_vla > 0)
9858 {
9859 if (name)
9860 warning_at (name_loc, OPT_Wvla,
9861 "variable length array %qD is used", name);
9862 else
9863 warning (OPT_Wvla,
9864 "variable length array is used");
9865 }
9866
9867 if (processing_template_decl && !TREE_CONSTANT (size))
9868 /* A variable sized array. */
9869 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9870 else
9871 {
9872 /* Compute the index of the largest element in the array. It is
9873 one less than the number of elements in the array. We save
9874 and restore PROCESSING_TEMPLATE_DECL so that computations in
9875 cp_build_binary_op will be appropriately folded. */
9876 {
9877 processing_template_decl_sentinel s;
9878 itype = cp_build_binary_op (input_location,
9879 MINUS_EXPR,
9880 cp_convert (ssizetype, size, complain),
9881 cp_convert (ssizetype, integer_one_node,
9882 complain),
9883 complain);
9884 itype = maybe_constant_value (itype);
9885 }
9886
9887 if (!TREE_CONSTANT (itype))
9888 {
9889 /* A variable sized array. */
9890 itype = variable_size (itype);
9891
9892 stabilize_vla_size (itype);
9893
9894 if (sanitize_flags_p (SANITIZE_VLA)
9895 && current_function_decl != NULL_TREE)
9896 {
9897 /* We have to add 1 -- in the ubsan routine we generate
9898 LE_EXPR rather than LT_EXPR. */
9899 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9900 build_one_cst (TREE_TYPE (itype)));
9901 t = ubsan_instrument_vla (input_location, t);
9902 finish_expr_stmt (t);
9903 }
9904 }
9905 /* Make sure that there was no overflow when creating to a signed
9906 index type. (For example, on a 32-bit machine, an array with
9907 size 2^32 - 1 is too big.) */
9908 else if (TREE_CODE (itype) == INTEGER_CST
9909 && TREE_OVERFLOW (itype))
9910 {
9911 if (!(complain & tf_error))
9912 return error_mark_node;
9913 error ("overflow in array dimension");
9914 TREE_OVERFLOW (itype) = 0;
9915 }
9916 }
9917
9918 /* Create and return the appropriate index type. */
9919 itype = build_index_type (itype);
9920
9921 /* If the index type were dependent, we would have returned early, so
9922 remember that it isn't. */
9923 TYPE_DEPENDENT_P (itype) = 0;
9924 TYPE_DEPENDENT_P_VALID (itype) = 1;
9925 return itype;
9926 }
9927
9928 tree
9929 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9930 {
9931 return compute_array_index_type_loc (input_location, name, size, complain);
9932 }
9933
9934 /* Returns the scope (if any) in which the entity declared by
9935 DECLARATOR will be located. If the entity was declared with an
9936 unqualified name, NULL_TREE is returned. */
9937
9938 tree
9939 get_scope_of_declarator (const cp_declarator *declarator)
9940 {
9941 while (declarator && declarator->kind != cdk_id)
9942 declarator = declarator->declarator;
9943
9944 /* If the declarator-id is a SCOPE_REF, the scope in which the
9945 declaration occurs is the first operand. */
9946 if (declarator
9947 && declarator->u.id.qualifying_scope)
9948 return declarator->u.id.qualifying_scope;
9949
9950 /* Otherwise, the declarator is not a qualified name; the entity will
9951 be declared in the current scope. */
9952 return NULL_TREE;
9953 }
9954
9955 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9956 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9957 with this type. */
9958
9959 static tree
9960 create_array_type_for_decl (tree name, tree type, tree size, location_t loc)
9961 {
9962 tree itype = NULL_TREE;
9963
9964 /* If things have already gone awry, bail now. */
9965 if (type == error_mark_node || size == error_mark_node)
9966 return error_mark_node;
9967
9968 /* 8.3.4/1: If the type of the identifier of D contains the auto
9969 type-specifier, the program is ill-formed. */
9970 if (type_uses_auto (type))
9971 {
9972 if (name)
9973 error_at (loc, "%qD declared as array of %qT", name, type);
9974 else
9975 error ("creating array of %qT", type);
9976 return error_mark_node;
9977 }
9978
9979 /* If there are some types which cannot be array elements,
9980 issue an error-message and return. */
9981 switch (TREE_CODE (type))
9982 {
9983 case VOID_TYPE:
9984 if (name)
9985 error_at (loc, "declaration of %qD as array of void", name);
9986 else
9987 error ("creating array of void");
9988 return error_mark_node;
9989
9990 case FUNCTION_TYPE:
9991 if (name)
9992 error_at (loc, "declaration of %qD as array of functions", name);
9993 else
9994 error ("creating array of functions");
9995 return error_mark_node;
9996
9997 case REFERENCE_TYPE:
9998 if (name)
9999 error_at (loc, "declaration of %qD as array of references", name);
10000 else
10001 error ("creating array of references");
10002 return error_mark_node;
10003
10004 case METHOD_TYPE:
10005 if (name)
10006 error_at (loc, "declaration of %qD as array of function members",
10007 name);
10008 else
10009 error ("creating array of function members");
10010 return error_mark_node;
10011
10012 default:
10013 break;
10014 }
10015
10016 /* [dcl.array]
10017
10018 The constant expressions that specify the bounds of the arrays
10019 can be omitted only for the first member of the sequence. */
10020 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
10021 {
10022 if (name)
10023 error_at (loc, "declaration of %qD as multidimensional array must "
10024 "have bounds for all dimensions except the first",
10025 name);
10026 else
10027 error ("multidimensional array must have bounds for all "
10028 "dimensions except the first");
10029
10030 return error_mark_node;
10031 }
10032
10033 /* Figure out the index type for the array. */
10034 if (size)
10035 itype = compute_array_index_type_loc (loc, name, size,
10036 tf_warning_or_error);
10037
10038 /* [dcl.array]
10039 T is called the array element type; this type shall not be [...] an
10040 abstract class type. */
10041 abstract_virtuals_error (name, type);
10042
10043 return build_cplus_array_type (type, itype);
10044 }
10045
10046 /* Returns the smallest location that is not UNKNOWN_LOCATION. */
10047
10048 static location_t
10049 min_location (location_t loca, location_t locb)
10050 {
10051 if (loca == UNKNOWN_LOCATION
10052 || (locb != UNKNOWN_LOCATION
10053 && linemap_location_before_p (line_table, locb, loca)))
10054 return locb;
10055 return loca;
10056 }
10057
10058 /* Returns the smallest location != UNKNOWN_LOCATION among the
10059 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
10060 and LOCATIONS[ds_restrict]. */
10061
10062 static location_t
10063 smallest_type_quals_location (int type_quals, const location_t* locations)
10064 {
10065 location_t loc = UNKNOWN_LOCATION;
10066
10067 if (type_quals & TYPE_QUAL_CONST)
10068 loc = locations[ds_const];
10069
10070 if (type_quals & TYPE_QUAL_VOLATILE)
10071 loc = min_location (loc, locations[ds_volatile]);
10072
10073 if (type_quals & TYPE_QUAL_RESTRICT)
10074 loc = min_location (loc, locations[ds_restrict]);
10075
10076 return loc;
10077 }
10078
10079 /* Check that it's OK to declare a function with the indicated TYPE
10080 and TYPE_QUALS. SFK indicates the kind of special function (if any)
10081 that this function is. OPTYPE is the type given in a conversion
10082 operator declaration, or the class type for a constructor/destructor.
10083 Returns the actual return type of the function; that may be different
10084 than TYPE if an error occurs, or for certain special functions. */
10085
10086 static tree
10087 check_special_function_return_type (special_function_kind sfk,
10088 tree type,
10089 tree optype,
10090 int type_quals,
10091 const location_t* locations)
10092 {
10093 switch (sfk)
10094 {
10095 case sfk_constructor:
10096 if (type)
10097 error ("return type specification for constructor invalid");
10098 else if (type_quals != TYPE_UNQUALIFIED)
10099 error_at (smallest_type_quals_location (type_quals, locations),
10100 "qualifiers are not allowed on constructor declaration");
10101
10102 if (targetm.cxx.cdtor_returns_this ())
10103 type = build_pointer_type (optype);
10104 else
10105 type = void_type_node;
10106 break;
10107
10108 case sfk_destructor:
10109 if (type)
10110 error ("return type specification for destructor invalid");
10111 else if (type_quals != TYPE_UNQUALIFIED)
10112 error_at (smallest_type_quals_location (type_quals, locations),
10113 "qualifiers are not allowed on destructor declaration");
10114
10115 /* We can't use the proper return type here because we run into
10116 problems with ambiguous bases and covariant returns. */
10117 if (targetm.cxx.cdtor_returns_this ())
10118 type = build_pointer_type (void_type_node);
10119 else
10120 type = void_type_node;
10121 break;
10122
10123 case sfk_conversion:
10124 if (type)
10125 error ("return type specified for %<operator %T%>", optype);
10126 else if (type_quals != TYPE_UNQUALIFIED)
10127 error_at (smallest_type_quals_location (type_quals, locations),
10128 "qualifiers are not allowed on declaration of "
10129 "%<operator %T%>", optype);
10130
10131 type = optype;
10132 break;
10133
10134 case sfk_deduction_guide:
10135 if (type)
10136 error ("return type specified for deduction guide");
10137 else if (type_quals != TYPE_UNQUALIFIED)
10138 error_at (smallest_type_quals_location (type_quals, locations),
10139 "qualifiers are not allowed on declaration of "
10140 "deduction guide");
10141 if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
10142 {
10143 error ("template template parameter %qT in declaration of "
10144 "deduction guide", optype);
10145 type = error_mark_node;
10146 }
10147 else
10148 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
10149 for (int i = 0; i < ds_last; ++i)
10150 if (i != ds_explicit && locations[i])
10151 error_at (locations[i],
10152 "decl-specifier in declaration of deduction guide");
10153 break;
10154
10155 default:
10156 gcc_unreachable ();
10157 }
10158
10159 return type;
10160 }
10161
10162 /* A variable or data member (whose unqualified name is IDENTIFIER)
10163 has been declared with the indicated TYPE. If the TYPE is not
10164 acceptable, issue an error message and return a type to use for
10165 error-recovery purposes. */
10166
10167 tree
10168 check_var_type (tree identifier, tree type)
10169 {
10170 if (VOID_TYPE_P (type))
10171 {
10172 if (!identifier)
10173 error ("unnamed variable or field declared void");
10174 else if (identifier_p (identifier))
10175 {
10176 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
10177 error ("variable or field %qE declared void", identifier);
10178 }
10179 else
10180 error ("variable or field declared void");
10181 type = error_mark_node;
10182 }
10183
10184 return type;
10185 }
10186
10187 /* Handle declaring DECL as an inline variable. */
10188
10189 static void
10190 mark_inline_variable (tree decl, location_t loc)
10191 {
10192 bool inlinep = true;
10193 if (! toplevel_bindings_p ())
10194 {
10195 error_at (loc, "%<inline%> specifier invalid for variable "
10196 "%qD declared at block scope", decl);
10197 inlinep = false;
10198 }
10199 else if (cxx_dialect < cxx17)
10200 pedwarn (loc, 0, "inline variables are only available "
10201 "with %<-std=c++17%> or %<-std=gnu++17%>");
10202 if (inlinep)
10203 {
10204 retrofit_lang_decl (decl);
10205 SET_DECL_VAR_DECLARED_INLINE_P (decl);
10206 }
10207 }
10208
10209
10210 /* Assign a typedef-given name to a class or enumeration type declared
10211 as anonymous at first. This was split out of grokdeclarator
10212 because it is also used in libcc1. */
10213
10214 void
10215 name_unnamed_type (tree type, tree decl)
10216 {
10217 gcc_assert (TYPE_UNNAMED_P (type));
10218
10219 /* Replace the anonymous name with the real name everywhere. */
10220 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10221 {
10222 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
10223 /* We do not rename the debug info representing the
10224 unnamed tagged type because the standard says in
10225 [dcl.typedef] that the naming applies only for
10226 linkage purposes. */
10227 /*debug_hooks->set_name (t, decl);*/
10228 TYPE_NAME (t) = decl;
10229 }
10230
10231 if (TYPE_LANG_SPECIFIC (type))
10232 TYPE_WAS_UNNAMED (type) = 1;
10233
10234 /* If this is a typedef within a template class, the nested
10235 type is a (non-primary) template. The name for the
10236 template needs updating as well. */
10237 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10238 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10239 = TYPE_IDENTIFIER (type);
10240
10241 /* Adjust linkage now that we aren't unnamed anymore. */
10242 reset_type_linkage (type);
10243
10244 /* FIXME remangle member functions; member functions of a
10245 type with external linkage have external linkage. */
10246
10247 /* Check that our job is done, and that it would fail if we
10248 attempted to do it again. */
10249 gcc_assert (!TYPE_UNNAMED_P (type));
10250 }
10251
10252 /* Given declspecs and a declarator (abstract or otherwise), determine
10253 the name and type of the object declared and construct a DECL node
10254 for it.
10255
10256 DECLSPECS points to the representation of declaration-specifier
10257 sequence that precedes declarator.
10258
10259 DECL_CONTEXT says which syntactic context this declaration is in:
10260 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
10261 FUNCDEF for a function definition. Like NORMAL but a few different
10262 error messages in each case. Return value may be zero meaning
10263 this definition is too screwy to try to parse.
10264 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
10265 handle member functions (which have FIELD context).
10266 Return value may be zero meaning this definition is too screwy to
10267 try to parse.
10268 PARM for a parameter declaration (either within a function prototype
10269 or before a function body). Make a PARM_DECL, or return void_type_node.
10270 TPARM for a template parameter declaration.
10271 CATCHPARM for a parameter declaration before a catch clause.
10272 TYPENAME if for a typename (in a cast or sizeof).
10273 Don't make a DECL node; just return the ..._TYPE node.
10274 FIELD for a struct or union field; make a FIELD_DECL.
10275 BITFIELD for a field with specified width.
10276
10277 INITIALIZED is as for start_decl.
10278
10279 ATTRLIST is a pointer to the list of attributes, which may be NULL
10280 if there are none; *ATTRLIST may be modified if attributes from inside
10281 the declarator should be applied to the declaration.
10282
10283 When this function is called, scoping variables (such as
10284 CURRENT_CLASS_TYPE) should reflect the scope in which the
10285 declaration occurs, not the scope in which the new declaration will
10286 be placed. For example, on:
10287
10288 void S::f() { ... }
10289
10290 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
10291 should not be `S'.
10292
10293 Returns a DECL (if a declarator is present), a TYPE (if there is no
10294 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
10295 error occurs. */
10296
10297 tree
10298 grokdeclarator (const cp_declarator *declarator,
10299 cp_decl_specifier_seq *declspecs,
10300 enum decl_context decl_context,
10301 int initialized,
10302 tree* attrlist)
10303 {
10304 tree type = NULL_TREE;
10305 int longlong = 0;
10306 int explicit_intN = 0;
10307 int virtualp, explicitp, friendp, inlinep, staticp;
10308 int explicit_int = 0;
10309 int explicit_char = 0;
10310 int defaulted_int = 0;
10311
10312 tree typedef_decl = NULL_TREE;
10313 const char *name = NULL;
10314 tree typedef_type = NULL_TREE;
10315 /* True if this declarator is a function definition. */
10316 bool funcdef_flag = false;
10317 cp_declarator_kind innermost_code = cdk_error;
10318 int bitfield = 0;
10319 #if 0
10320 /* See the code below that used this. */
10321 tree decl_attr = NULL_TREE;
10322 #endif
10323
10324 /* Keep track of what sort of function is being processed
10325 so that we can warn about default return values, or explicit
10326 return values which do not match prescribed defaults. */
10327 special_function_kind sfk = sfk_none;
10328
10329 tree dname = NULL_TREE;
10330 tree ctor_return_type = NULL_TREE;
10331 enum overload_flags flags = NO_SPECIAL;
10332 /* cv-qualifiers that apply to the declarator, for a declaration of
10333 a member function. */
10334 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
10335 /* virt-specifiers that apply to the declarator, for a declaration of
10336 a member function. */
10337 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
10338 /* ref-qualifier that applies to the declarator, for a declaration of
10339 a member function. */
10340 cp_ref_qualifier rqual = REF_QUAL_NONE;
10341 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
10342 int type_quals = TYPE_UNQUALIFIED;
10343 tree raises = NULL_TREE;
10344 int template_count = 0;
10345 tree returned_attrs = NULL_TREE;
10346 tree parms = NULL_TREE;
10347 const cp_declarator *id_declarator;
10348 /* The unqualified name of the declarator; either an
10349 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
10350 tree unqualified_id;
10351 /* The class type, if any, in which this entity is located,
10352 or NULL_TREE if none. Note that this value may be different from
10353 the current class type; for example if an attempt is made to declare
10354 "A::f" inside "B", this value will be "A". */
10355 tree ctype = current_class_type;
10356 /* The NAMESPACE_DECL for the namespace in which this entity is
10357 located. If an unqualified name is used to declare the entity,
10358 this value will be NULL_TREE, even if the entity is located at
10359 namespace scope. */
10360 tree in_namespace = NULL_TREE;
10361 cp_storage_class storage_class;
10362 bool unsigned_p, signed_p, short_p, long_p, thread_p;
10363 bool type_was_error_mark_node = false;
10364 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10365 bool template_type_arg = false;
10366 bool template_parm_flag = false;
10367 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10368 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10369 bool late_return_type_p = false;
10370 bool array_parameter_p = false;
10371 location_t saved_loc = input_location;
10372 tree reqs = NULL_TREE;
10373
10374 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10375 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10376 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10377 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10378 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10379 explicit_intN = declspecs->explicit_intN_p;
10380 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10381
10382 // Was concept_p specified? Note that ds_concept
10383 // implies ds_constexpr!
10384 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10385 if (concept_p)
10386 constexpr_p = true;
10387
10388 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10389 type_quals |= TYPE_QUAL_CONST;
10390 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10391 type_quals |= TYPE_QUAL_VOLATILE;
10392 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10393 type_quals |= TYPE_QUAL_RESTRICT;
10394
10395 if (decl_context == FUNCDEF)
10396 funcdef_flag = true, decl_context = NORMAL;
10397 else if (decl_context == MEMFUNCDEF)
10398 funcdef_flag = true, decl_context = FIELD;
10399 else if (decl_context == BITFIELD)
10400 bitfield = 1, decl_context = FIELD;
10401 else if (decl_context == TEMPLATE_TYPE_ARG)
10402 template_type_arg = true, decl_context = TYPENAME;
10403 else if (decl_context == TPARM)
10404 template_parm_flag = true, decl_context = PARM;
10405
10406 if (initialized > 1)
10407 funcdef_flag = true;
10408
10409 location_t typespec_loc = smallest_type_quals_location (type_quals,
10410 declspecs->locations);
10411 if (typespec_loc == UNKNOWN_LOCATION)
10412 typespec_loc = declspecs->locations[ds_type_spec];
10413 if (typespec_loc == UNKNOWN_LOCATION)
10414 typespec_loc = input_location;
10415
10416 /* Look inside a declarator for the name being declared
10417 and get it as a string, for an error message. */
10418 for (id_declarator = declarator;
10419 id_declarator;
10420 id_declarator = id_declarator->declarator)
10421 {
10422 if (id_declarator->kind != cdk_id)
10423 innermost_code = id_declarator->kind;
10424
10425 switch (id_declarator->kind)
10426 {
10427 case cdk_function:
10428 if (id_declarator->declarator
10429 && id_declarator->declarator->kind == cdk_id)
10430 {
10431 sfk = id_declarator->declarator->u.id.sfk;
10432 if (sfk == sfk_destructor)
10433 flags = DTOR_FLAG;
10434 }
10435 break;
10436
10437 case cdk_id:
10438 {
10439 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10440 tree decl = id_declarator->u.id.unqualified_name;
10441 if (!decl)
10442 break;
10443 if (qualifying_scope)
10444 {
10445 if (check_for_bare_parameter_packs (qualifying_scope,
10446 id_declarator->id_loc))
10447 return error_mark_node;
10448 if (at_function_scope_p ())
10449 {
10450 /* [dcl.meaning]
10451
10452 A declarator-id shall not be qualified except
10453 for ...
10454
10455 None of the cases are permitted in block
10456 scope. */
10457 if (qualifying_scope == global_namespace)
10458 error ("invalid use of qualified-name %<::%D%>",
10459 decl);
10460 else if (TYPE_P (qualifying_scope))
10461 error ("invalid use of qualified-name %<%T::%D%>",
10462 qualifying_scope, decl);
10463 else
10464 error ("invalid use of qualified-name %<%D::%D%>",
10465 qualifying_scope, decl);
10466 return error_mark_node;
10467 }
10468 else if (TYPE_P (qualifying_scope))
10469 {
10470 ctype = qualifying_scope;
10471 if (!MAYBE_CLASS_TYPE_P (ctype))
10472 {
10473 error ("%q#T is not a class or a namespace", ctype);
10474 ctype = NULL_TREE;
10475 }
10476 else if (innermost_code != cdk_function
10477 && current_class_type
10478 && !uniquely_derived_from_p (ctype,
10479 current_class_type))
10480 {
10481 error ("invalid use of qualified-name %<%T::%D%>",
10482 qualifying_scope, decl);
10483 return error_mark_node;
10484 }
10485 }
10486 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10487 in_namespace = qualifying_scope;
10488 }
10489 switch (TREE_CODE (decl))
10490 {
10491 case BIT_NOT_EXPR:
10492 {
10493 if (innermost_code != cdk_function)
10494 {
10495 error ("declaration of %qD as non-function", decl);
10496 return error_mark_node;
10497 }
10498 else if (!qualifying_scope
10499 && !(current_class_type && at_class_scope_p ()))
10500 {
10501 error ("declaration of %qD as non-member", decl);
10502 return error_mark_node;
10503 }
10504
10505 tree type = TREE_OPERAND (decl, 0);
10506 if (TYPE_P (type))
10507 type = constructor_name (type);
10508 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10509 dname = decl;
10510 }
10511 break;
10512
10513 case TEMPLATE_ID_EXPR:
10514 {
10515 tree fns = TREE_OPERAND (decl, 0);
10516
10517 dname = fns;
10518 if (!identifier_p (dname))
10519 dname = OVL_NAME (dname);
10520 }
10521 /* Fall through. */
10522
10523 case IDENTIFIER_NODE:
10524 if (identifier_p (decl))
10525 dname = decl;
10526
10527 if (IDENTIFIER_KEYWORD_P (dname))
10528 {
10529 error ("declarator-id missing; using reserved word %qD",
10530 dname);
10531 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10532 }
10533 else if (!IDENTIFIER_CONV_OP_P (dname))
10534 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10535 else
10536 {
10537 gcc_assert (flags == NO_SPECIAL);
10538 flags = TYPENAME_FLAG;
10539 sfk = sfk_conversion;
10540 tree glob = get_global_binding (dname);
10541 if (glob && TREE_CODE (glob) == TYPE_DECL)
10542 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10543 else
10544 name = "<invalid operator>";
10545 }
10546 break;
10547
10548 default:
10549 gcc_unreachable ();
10550 }
10551 break;
10552 }
10553
10554 case cdk_array:
10555 case cdk_pointer:
10556 case cdk_reference:
10557 case cdk_ptrmem:
10558 break;
10559
10560 case cdk_decomp:
10561 name = "structured binding";
10562 break;
10563
10564 case cdk_error:
10565 return error_mark_node;
10566
10567 default:
10568 gcc_unreachable ();
10569 }
10570 if (id_declarator->kind == cdk_id)
10571 break;
10572 }
10573
10574 /* [dcl.fct.edf]
10575
10576 The declarator in a function-definition shall have the form
10577 D1 ( parameter-declaration-clause) ... */
10578 if (funcdef_flag && innermost_code != cdk_function)
10579 {
10580 error ("function definition does not declare parameters");
10581 return error_mark_node;
10582 }
10583
10584 if (flags == TYPENAME_FLAG
10585 && innermost_code != cdk_function
10586 && ! (ctype && !declspecs->any_specifiers_p))
10587 {
10588 error ("declaration of %qD as non-function", dname);
10589 return error_mark_node;
10590 }
10591
10592 if (dname && identifier_p (dname))
10593 {
10594 if (UDLIT_OPER_P (dname)
10595 && innermost_code != cdk_function)
10596 {
10597 error ("declaration of %qD as non-function", dname);
10598 return error_mark_node;
10599 }
10600
10601 if (IDENTIFIER_ANY_OP_P (dname))
10602 {
10603 if (typedef_p)
10604 {
10605 error ("declaration of %qD as %<typedef%>", dname);
10606 return error_mark_node;
10607 }
10608 else if (decl_context == PARM || decl_context == CATCHPARM)
10609 {
10610 error ("declaration of %qD as parameter", dname);
10611 return error_mark_node;
10612 }
10613 }
10614 }
10615
10616 /* Anything declared one level down from the top level
10617 must be one of the parameters of a function
10618 (because the body is at least two levels down). */
10619
10620 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10621 by not allowing C++ class definitions to specify their parameters
10622 with xdecls (must be spec.d in the parmlist).
10623
10624 Since we now wait to push a class scope until we are sure that
10625 we are in a legitimate method context, we must set oldcname
10626 explicitly (since current_class_name is not yet alive).
10627
10628 We also want to avoid calling this a PARM if it is in a namespace. */
10629
10630 if (decl_context == NORMAL && !toplevel_bindings_p ())
10631 {
10632 cp_binding_level *b = current_binding_level;
10633 current_binding_level = b->level_chain;
10634 if (current_binding_level != 0 && toplevel_bindings_p ())
10635 decl_context = PARM;
10636 current_binding_level = b;
10637 }
10638
10639 if (name == NULL)
10640 name = decl_context == PARM ? "parameter" : "type name";
10641
10642 if (concept_p && typedef_p)
10643 {
10644 error_at (declspecs->locations[ds_concept],
10645 "%<concept%> cannot appear in a typedef declaration");
10646 return error_mark_node;
10647 }
10648
10649 if (constexpr_p && typedef_p)
10650 {
10651 error_at (declspecs->locations[ds_constexpr],
10652 "%<constexpr%> cannot appear in a typedef declaration");
10653 return error_mark_node;
10654 }
10655
10656 /* If there were multiple types specified in the decl-specifier-seq,
10657 issue an error message. */
10658 if (declspecs->multiple_types_p)
10659 {
10660 error ("two or more data types in declaration of %qs", name);
10661 return error_mark_node;
10662 }
10663
10664 if (declspecs->conflicting_specifiers_p)
10665 {
10666 error ("conflicting specifiers in declaration of %qs", name);
10667 return error_mark_node;
10668 }
10669
10670 /* Extract the basic type from the decl-specifier-seq. */
10671 type = declspecs->type;
10672 if (type == error_mark_node)
10673 {
10674 type = NULL_TREE;
10675 type_was_error_mark_node = true;
10676 }
10677 cp_warn_deprecated_use (type);
10678 if (type && TREE_CODE (type) == TYPE_DECL)
10679 {
10680 typedef_decl = type;
10681 type = TREE_TYPE (typedef_decl);
10682 if (DECL_ARTIFICIAL (typedef_decl))
10683 cp_warn_deprecated_use (type);
10684 }
10685 /* No type at all: default to `int', and set DEFAULTED_INT
10686 because it was not a user-defined typedef. */
10687 if (type == NULL_TREE)
10688 {
10689 if (signed_p || unsigned_p || long_p || short_p)
10690 {
10691 /* These imply 'int'. */
10692 type = integer_type_node;
10693 defaulted_int = 1;
10694 }
10695 /* If we just have "complex", it is equivalent to "complex double". */
10696 else if (!longlong && !explicit_intN
10697 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10698 {
10699 type = double_type_node;
10700 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10701 "ISO C++ does not support plain %<complex%> meaning "
10702 "%<double complex%>");
10703 }
10704 }
10705 /* Gather flags. */
10706 explicit_int = declspecs->explicit_int_p;
10707 explicit_char = declspecs->explicit_char_p;
10708
10709 #if 0
10710 /* See the code below that used this. */
10711 if (typedef_decl)
10712 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10713 #endif
10714 typedef_type = type;
10715
10716 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10717 ctor_return_type = TREE_TYPE (dname);
10718 else
10719 ctor_return_type = ctype;
10720
10721 if (sfk != sfk_none)
10722 {
10723 type = check_special_function_return_type (sfk, type,
10724 ctor_return_type,
10725 type_quals,
10726 declspecs->locations);
10727 type_quals = TYPE_UNQUALIFIED;
10728 }
10729 else if (type == NULL_TREE)
10730 {
10731 int is_main;
10732
10733 explicit_int = -1;
10734
10735 /* We handle `main' specially here, because 'main () { }' is so
10736 common. With no options, it is allowed. With -Wreturn-type,
10737 it is a warning. It is only an error with -pedantic-errors. */
10738 is_main = (funcdef_flag
10739 && dname && identifier_p (dname)
10740 && MAIN_NAME_P (dname)
10741 && ctype == NULL_TREE
10742 && in_namespace == NULL_TREE
10743 && current_namespace == global_namespace);
10744
10745 if (type_was_error_mark_node)
10746 /* We've already issued an error, don't complain more. */;
10747 else if (in_system_header_at (input_location) || flag_ms_extensions)
10748 /* Allow it, sigh. */;
10749 else if (! is_main)
10750 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10751 else if (pedantic)
10752 pedwarn (input_location, OPT_Wpedantic,
10753 "ISO C++ forbids declaration of %qs with no type", name);
10754 else
10755 warning (OPT_Wreturn_type,
10756 "ISO C++ forbids declaration of %qs with no type", name);
10757
10758 if (type_was_error_mark_node && template_parm_flag)
10759 /* FIXME we should be able to propagate the error_mark_node as is
10760 for other contexts too. */
10761 type = error_mark_node;
10762 else
10763 type = integer_type_node;
10764 }
10765
10766 ctype = NULL_TREE;
10767
10768 if (explicit_intN)
10769 {
10770 if (! int_n_enabled_p[declspecs->int_n_idx])
10771 {
10772 error ("%<__int%d%> is not supported by this target",
10773 int_n_data[declspecs->int_n_idx].bitsize);
10774 explicit_intN = false;
10775 }
10776 else if (pedantic && ! in_system_header_at (input_location))
10777 pedwarn (input_location, OPT_Wpedantic,
10778 "ISO C++ does not support %<__int%d%> for %qs",
10779 int_n_data[declspecs->int_n_idx].bitsize, name);
10780 }
10781
10782 /* Now process the modifiers that were specified
10783 and check for invalid combinations. */
10784
10785 /* Long double is a special combination. */
10786 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10787 {
10788 long_p = false;
10789 type = cp_build_qualified_type (long_double_type_node,
10790 cp_type_quals (type));
10791 }
10792
10793 /* Check all other uses of type modifiers. */
10794
10795 if (unsigned_p || signed_p || long_p || short_p)
10796 {
10797 location_t loc;
10798 const char *key;
10799 if (unsigned_p)
10800 {
10801 key = "unsigned";
10802 loc = declspecs->locations[ds_unsigned];
10803 }
10804 else if (signed_p)
10805 {
10806 key = "signed";
10807 loc = declspecs->locations[ds_signed];
10808 }
10809 else if (longlong)
10810 {
10811 key = "long long";
10812 loc = declspecs->locations[ds_long_long];
10813 }
10814 else if (long_p)
10815 {
10816 key = "long";
10817 loc = declspecs->locations[ds_long];
10818 }
10819 else /* if (short_p) */
10820 {
10821 key = "short";
10822 loc = declspecs->locations[ds_short];
10823 }
10824
10825 int ok = 0;
10826
10827 if (signed_p && unsigned_p)
10828 {
10829 gcc_rich_location richloc (declspecs->locations[ds_signed]);
10830 richloc.add_range (declspecs->locations[ds_unsigned]);
10831 error_at (&richloc,
10832 "%<signed%> and %<unsigned%> specified together");
10833 }
10834 else if (long_p && short_p)
10835 {
10836 gcc_rich_location richloc (declspecs->locations[ds_long]);
10837 richloc.add_range (declspecs->locations[ds_short]);
10838 error_at (&richloc, "%<long%> and %<short%> specified together");
10839 }
10840 else if (TREE_CODE (type) != INTEGER_TYPE
10841 || type == char8_type_node
10842 || type == char16_type_node
10843 || type == char32_type_node
10844 || ((long_p || short_p)
10845 && (explicit_char || explicit_intN)))
10846 error_at (loc, "%qs specified with %qT", key, type);
10847 else if (!explicit_int && !defaulted_int
10848 && !explicit_char && !explicit_intN)
10849 {
10850 if (typedef_decl)
10851 {
10852 pedwarn (loc, OPT_Wpedantic, "%qs specified with %qT",
10853 key, type);
10854 ok = !flag_pedantic_errors;
10855 }
10856 else if (declspecs->decltype_p)
10857 error_at (loc, "%qs specified with %<decltype%>", key);
10858 else
10859 error_at (loc, "%qs specified with %<typeof%>", key);
10860 }
10861 else
10862 ok = 1;
10863
10864 /* Discard the type modifiers if they are invalid. */
10865 if (! ok)
10866 {
10867 unsigned_p = false;
10868 signed_p = false;
10869 long_p = false;
10870 short_p = false;
10871 longlong = 0;
10872 }
10873 }
10874
10875 /* Decide whether an integer type is signed or not.
10876 Optionally treat bitfields as signed by default. */
10877 if (unsigned_p
10878 /* [class.bit]
10879
10880 It is implementation-defined whether a plain (neither
10881 explicitly signed or unsigned) char, short, int, or long
10882 bit-field is signed or unsigned.
10883
10884 Naturally, we extend this to long long as well. Note that
10885 this does not include wchar_t. */
10886 || (bitfield && !flag_signed_bitfields
10887 && !signed_p
10888 /* A typedef for plain `int' without `signed' can be
10889 controlled just like plain `int', but a typedef for
10890 `signed int' cannot be so controlled. */
10891 && !(typedef_decl
10892 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10893 && TREE_CODE (type) == INTEGER_TYPE
10894 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10895 {
10896 if (explicit_intN)
10897 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10898 else if (longlong)
10899 type = long_long_unsigned_type_node;
10900 else if (long_p)
10901 type = long_unsigned_type_node;
10902 else if (short_p)
10903 type = short_unsigned_type_node;
10904 else if (type == char_type_node)
10905 type = unsigned_char_type_node;
10906 else if (typedef_decl)
10907 type = unsigned_type_for (type);
10908 else
10909 type = unsigned_type_node;
10910 }
10911 else if (signed_p && type == char_type_node)
10912 type = signed_char_type_node;
10913 else if (explicit_intN)
10914 type = int_n_trees[declspecs->int_n_idx].signed_type;
10915 else if (longlong)
10916 type = long_long_integer_type_node;
10917 else if (long_p)
10918 type = long_integer_type_node;
10919 else if (short_p)
10920 type = short_integer_type_node;
10921
10922 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10923 {
10924 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10925 error ("complex invalid for %qs", name);
10926 /* If a modifier is specified, the resulting complex is the complex
10927 form of TYPE. E.g, "complex short" is "complex short int". */
10928 else if (type == integer_type_node)
10929 type = complex_integer_type_node;
10930 else if (type == float_type_node)
10931 type = complex_float_type_node;
10932 else if (type == double_type_node)
10933 type = complex_double_type_node;
10934 else if (type == long_double_type_node)
10935 type = complex_long_double_type_node;
10936 else
10937 type = build_complex_type (type);
10938 }
10939
10940 /* If we're using the injected-class-name to form a compound type or a
10941 declaration, replace it with the underlying class so we don't get
10942 redundant typedefs in the debug output. But if we are returning the
10943 type unchanged, leave it alone so that it's available to
10944 maybe_get_template_decl_from_type_decl. */
10945 if (CLASS_TYPE_P (type)
10946 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10947 && type == TREE_TYPE (TYPE_NAME (type))
10948 && (declarator || type_quals))
10949 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10950
10951 type_quals |= cp_type_quals (type);
10952 type = cp_build_qualified_type_real
10953 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10954 || declspecs->decltype_p)
10955 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10956 /* We might have ignored or rejected some of the qualifiers. */
10957 type_quals = cp_type_quals (type);
10958
10959 if (cxx_dialect >= cxx17 && type && is_auto (type)
10960 && innermost_code != cdk_function
10961 && id_declarator && declarator != id_declarator)
10962 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10963 {
10964 error_at (typespec_loc, "template placeholder type %qT must be followed "
10965 "by a simple declarator-id", type);
10966 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10967 }
10968
10969 staticp = 0;
10970 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10971 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10972 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10973
10974 storage_class = declspecs->storage_class;
10975 if (storage_class == sc_static)
10976 staticp = 1 + (decl_context == FIELD);
10977
10978 if (virtualp)
10979 {
10980 if (staticp == 2)
10981 {
10982 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
10983 richloc.add_range (declspecs->locations[ds_storage_class]);
10984 error_at (&richloc, "member %qD cannot be declared both %<virtual%> "
10985 "and %<static%>", dname);
10986 storage_class = sc_none;
10987 staticp = 0;
10988 }
10989 if (constexpr_p && cxx_dialect < cxx2a)
10990 {
10991 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
10992 richloc.add_range (declspecs->locations[ds_constexpr]);
10993 pedwarn (&richloc, OPT_Wpedantic, "member %qD can be declared both "
10994 "%<virtual%> and %<constexpr%> only in %<-std=c++2a%> or "
10995 "%<-std=gnu++2a%>", dname);
10996 }
10997 }
10998 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10999
11000 /* Issue errors about use of storage classes for parameters. */
11001 if (decl_context == PARM)
11002 {
11003 if (typedef_p)
11004 {
11005 error_at (declspecs->locations[ds_typedef],
11006 "typedef declaration invalid in parameter declaration");
11007 return error_mark_node;
11008 }
11009 else if (template_parm_flag && storage_class != sc_none)
11010 {
11011 error_at (min_location (declspecs->locations[ds_thread],
11012 declspecs->locations[ds_storage_class]),
11013 "storage class specified for template parameter %qs",
11014 name);
11015 return error_mark_node;
11016 }
11017 else if (storage_class == sc_static
11018 || storage_class == sc_extern
11019 || thread_p)
11020 {
11021 error_at (min_location (declspecs->locations[ds_thread],
11022 declspecs->locations[ds_storage_class]),
11023 "storage class specified for parameter %qs", name);
11024 return error_mark_node;
11025 }
11026
11027 /* Function parameters cannot be concept. */
11028 if (concept_p)
11029 error_at (declspecs->locations[ds_concept],
11030 "a parameter cannot be declared %<concept%>");
11031 /* Function parameters cannot be constexpr. If we saw one, moan
11032 and pretend it wasn't there. */
11033 else if (constexpr_p)
11034 {
11035 error_at (declspecs->locations[ds_constexpr],
11036 "a parameter cannot be declared %<constexpr%>");
11037 constexpr_p = 0;
11038 }
11039 }
11040
11041 /* Give error if `virtual' is used outside of class declaration. */
11042 if (virtualp
11043 && (current_class_name == NULL_TREE || decl_context != FIELD))
11044 {
11045 error_at (declspecs->locations[ds_virtual],
11046 "%<virtual%> outside class declaration");
11047 virtualp = 0;
11048 }
11049
11050 if (innermost_code == cdk_decomp)
11051 {
11052 location_t loc = (declarator->kind == cdk_reference
11053 ? declarator->declarator->id_loc : declarator->id_loc);
11054 if (inlinep)
11055 error_at (declspecs->locations[ds_inline],
11056 "structured binding declaration cannot be %<inline%>");
11057 if (typedef_p)
11058 error_at (declspecs->locations[ds_typedef],
11059 "structured binding declaration cannot be %<typedef%>");
11060 if (constexpr_p)
11061 error_at (declspecs->locations[ds_constexpr], "structured "
11062 "binding declaration cannot be %<constexpr%>");
11063 if (thread_p)
11064 error_at (declspecs->locations[ds_thread],
11065 "structured binding declaration cannot be %qs",
11066 declspecs->gnu_thread_keyword_p
11067 ? "__thread" : "thread_local");
11068 if (concept_p)
11069 error_at (declspecs->locations[ds_concept],
11070 "structured binding declaration cannot be %<concept%>");
11071 switch (storage_class)
11072 {
11073 case sc_none:
11074 break;
11075 case sc_register:
11076 error_at (loc, "structured binding declaration cannot be "
11077 "%<register%>");
11078 break;
11079 case sc_static:
11080 error_at (loc, "structured binding declaration cannot be "
11081 "%<static%>");
11082 break;
11083 case sc_extern:
11084 error_at (loc, "structured binding declaration cannot be "
11085 "%<extern%>");
11086 break;
11087 case sc_mutable:
11088 error_at (loc, "structured binding declaration cannot be "
11089 "%<mutable%>");
11090 break;
11091 case sc_auto:
11092 error_at (loc, "structured binding declaration cannot be "
11093 "C++98 %<auto%>");
11094 break;
11095 default:
11096 gcc_unreachable ();
11097 }
11098 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
11099 || TYPE_IDENTIFIER (type) != auto_identifier)
11100 {
11101 if (type != error_mark_node)
11102 {
11103 error_at (loc, "structured binding declaration cannot have "
11104 "type %qT", type);
11105 inform (loc,
11106 "type must be cv-qualified %<auto%> or reference to "
11107 "cv-qualified %<auto%>");
11108 }
11109 type = build_qualified_type (make_auto (), type_quals);
11110 declspecs->type = type;
11111 }
11112 inlinep = 0;
11113 typedef_p = 0;
11114 constexpr_p = 0;
11115 thread_p = 0;
11116 concept_p = 0;
11117 storage_class = sc_none;
11118 staticp = 0;
11119 declspecs->storage_class = sc_none;
11120 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
11121 }
11122
11123 /* Static anonymous unions are dealt with here. */
11124 if (staticp && decl_context == TYPENAME
11125 && declspecs->type
11126 && ANON_AGGR_TYPE_P (declspecs->type))
11127 decl_context = FIELD;
11128
11129 /* Warn about storage classes that are invalid for certain
11130 kinds of declarations (parameters, typenames, etc.). */
11131 if (thread_p
11132 && ((storage_class
11133 && storage_class != sc_extern
11134 && storage_class != sc_static)
11135 || typedef_p))
11136 {
11137 error ("multiple storage classes in declaration of %qs", name);
11138 thread_p = false;
11139 }
11140 if (decl_context != NORMAL
11141 && ((storage_class != sc_none
11142 && storage_class != sc_mutable)
11143 || thread_p))
11144 {
11145 if ((decl_context == PARM || decl_context == CATCHPARM)
11146 && (storage_class == sc_register
11147 || storage_class == sc_auto))
11148 ;
11149 else if (typedef_p)
11150 ;
11151 else if (decl_context == FIELD
11152 /* C++ allows static class elements. */
11153 && storage_class == sc_static)
11154 /* C++ also allows inlines and signed and unsigned elements,
11155 but in those cases we don't come in here. */
11156 ;
11157 else
11158 {
11159 location_t loc
11160 = min_location (declspecs->locations[ds_thread],
11161 declspecs->locations[ds_storage_class]);
11162 if (decl_context == FIELD)
11163 error_at (loc, "storage class specified for %qs", name);
11164 else if (decl_context == PARM || decl_context == CATCHPARM)
11165 error_at (loc, "storage class specified for parameter %qs", name);
11166 else
11167 error_at (loc, "storage class specified for typename");
11168 if (storage_class == sc_register
11169 || storage_class == sc_auto
11170 || storage_class == sc_extern
11171 || thread_p)
11172 storage_class = sc_none;
11173 }
11174 }
11175 else if (storage_class == sc_extern && funcdef_flag
11176 && ! toplevel_bindings_p ())
11177 error ("nested function %qs declared %<extern%>", name);
11178 else if (toplevel_bindings_p ())
11179 {
11180 if (storage_class == sc_auto)
11181 error ("top-level declaration of %qs specifies %<auto%>", name);
11182 }
11183 else if (thread_p
11184 && storage_class != sc_extern
11185 && storage_class != sc_static)
11186 {
11187 if (declspecs->gnu_thread_keyword_p)
11188 pedwarn (declspecs->locations[ds_thread],
11189 0, "function-scope %qs implicitly auto and "
11190 "declared %<__thread%>", name);
11191
11192 /* When thread_local is applied to a variable of block scope the
11193 storage-class-specifier static is implied if it does not appear
11194 explicitly. */
11195 storage_class = declspecs->storage_class = sc_static;
11196 staticp = 1;
11197 }
11198
11199 if (storage_class && friendp)
11200 {
11201 error_at (min_location (declspecs->locations[ds_thread],
11202 declspecs->locations[ds_storage_class]),
11203 "storage class specifiers invalid in friend function "
11204 "declarations");
11205 storage_class = sc_none;
11206 staticp = 0;
11207 }
11208
11209 if (!id_declarator)
11210 unqualified_id = NULL_TREE;
11211 else
11212 {
11213 unqualified_id = id_declarator->u.id.unqualified_name;
11214 switch (TREE_CODE (unqualified_id))
11215 {
11216 case BIT_NOT_EXPR:
11217 unqualified_id = TREE_OPERAND (unqualified_id, 0);
11218 if (TYPE_P (unqualified_id))
11219 unqualified_id = constructor_name (unqualified_id);
11220 break;
11221
11222 case IDENTIFIER_NODE:
11223 case TEMPLATE_ID_EXPR:
11224 break;
11225
11226 default:
11227 gcc_unreachable ();
11228 }
11229 }
11230
11231 if (declspecs->std_attributes)
11232 {
11233 location_t attr_loc = declspecs->locations[ds_std_attribute];
11234 if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
11235 inform (attr_loc, "an attribute that appertains to a type-specifier "
11236 "is ignored");
11237 }
11238
11239 /* Determine the type of the entity declared by recurring on the
11240 declarator. */
11241 for (; declarator; declarator = declarator->declarator)
11242 {
11243 const cp_declarator *inner_declarator;
11244 tree attrs;
11245
11246 if (type == error_mark_node)
11247 return error_mark_node;
11248
11249 attrs = declarator->attributes;
11250 if (attrs)
11251 {
11252 int attr_flags;
11253
11254 attr_flags = 0;
11255 if (declarator == NULL || declarator->kind == cdk_id)
11256 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
11257 if (declarator->kind == cdk_function)
11258 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
11259 if (declarator->kind == cdk_array)
11260 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
11261 returned_attrs = decl_attributes (&type,
11262 chainon (returned_attrs, attrs),
11263 attr_flags);
11264 }
11265
11266 inner_declarator = declarator->declarator;
11267
11268 /* We don't want to warn in parameter context because we don't
11269 yet know if the parse will succeed, and this might turn out
11270 to be a constructor call. */
11271 if (decl_context != PARM
11272 && decl_context != TYPENAME
11273 && !typedef_p
11274 && declarator->parenthesized != UNKNOWN_LOCATION
11275 /* If the type is class-like and the inner name used a
11276 global namespace qualifier, we need the parens.
11277 Unfortunately all we can tell is whether a qualified name
11278 was used or not. */
11279 && !(inner_declarator
11280 && inner_declarator->kind == cdk_id
11281 && inner_declarator->u.id.qualifying_scope
11282 && (MAYBE_CLASS_TYPE_P (type)
11283 || TREE_CODE (type) == ENUMERAL_TYPE)))
11284 warning_at (declarator->parenthesized, OPT_Wparentheses,
11285 "unnecessary parentheses in declaration of %qs", name);
11286 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
11287 break;
11288
11289 switch (declarator->kind)
11290 {
11291 case cdk_array:
11292 type = create_array_type_for_decl (dname, type,
11293 declarator->u.array.bounds,
11294 declarator->id_loc);
11295 if (!valid_array_size_p (input_location, type, dname))
11296 type = error_mark_node;
11297
11298 if (declarator->std_attributes)
11299 /* [dcl.array]/1:
11300
11301 The optional attribute-specifier-seq appertains to the
11302 array. */
11303 returned_attrs = chainon (returned_attrs,
11304 declarator->std_attributes);
11305 break;
11306
11307 case cdk_function:
11308 {
11309 tree arg_types;
11310 int funcdecl_p;
11311
11312 /* Declaring a function type. */
11313
11314 input_location = declspecs->locations[ds_type_spec];
11315 abstract_virtuals_error (ACU_RETURN, type);
11316 input_location = saved_loc;
11317
11318 /* Pick up type qualifiers which should be applied to `this'. */
11319 memfn_quals = declarator->u.function.qualifiers;
11320 /* Pick up virt-specifiers. */
11321 virt_specifiers = declarator->u.function.virt_specifiers;
11322 /* And ref-qualifier, too */
11323 rqual = declarator->u.function.ref_qualifier;
11324 /* And tx-qualifier. */
11325 tree tx_qual = declarator->u.function.tx_qualifier;
11326 /* Pick up the exception specifications. */
11327 raises = declarator->u.function.exception_specification;
11328 /* If the exception-specification is ill-formed, let's pretend
11329 there wasn't one. */
11330 if (raises == error_mark_node)
11331 raises = NULL_TREE;
11332
11333 if (reqs)
11334 error_at (location_of (reqs), "requires-clause on return type");
11335 reqs = declarator->u.function.requires_clause;
11336
11337 /* Say it's a definition only for the CALL_EXPR
11338 closest to the identifier. */
11339 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
11340
11341 /* Handle a late-specified return type. */
11342 tree late_return_type = declarator->u.function.late_return_type;
11343 if (funcdecl_p
11344 /* This is the case e.g. for
11345 using T = auto () -> int. */
11346 || inner_declarator == NULL)
11347 {
11348 if (tree auto_node = type_uses_auto (type))
11349 {
11350 if (!late_return_type)
11351 {
11352 if (current_class_type
11353 && LAMBDA_TYPE_P (current_class_type))
11354 /* OK for C++11 lambdas. */;
11355 else if (cxx_dialect < cxx14)
11356 {
11357 error_at (typespec_loc, "%qs function uses "
11358 "%<auto%> type specifier without "
11359 "trailing return type", name);
11360 inform (typespec_loc,
11361 "deduced return type only available "
11362 "with %<-std=c++14%> or %<-std=gnu++14%>");
11363 }
11364 else if (virtualp)
11365 {
11366 error_at (typespec_loc, "virtual function "
11367 "cannot have deduced return type");
11368 virtualp = false;
11369 }
11370 }
11371 else if (!is_auto (type) && sfk != sfk_conversion)
11372 {
11373 error_at (typespec_loc, "%qs function with trailing "
11374 "return type has %qT as its type rather "
11375 "than plain %<auto%>", name, type);
11376 return error_mark_node;
11377 }
11378 else if (is_auto (type) && AUTO_IS_DECLTYPE (type))
11379 {
11380 if (funcdecl_p)
11381 error_at (typespec_loc,
11382 "%qs function with trailing return type "
11383 "has %<decltype(auto)%> as its type "
11384 "rather than plain %<auto%>", name);
11385 else
11386 error_at (typespec_loc,
11387 "invalid use of %<decltype(auto)%>");
11388 return error_mark_node;
11389 }
11390 tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
11391 if (!tmpl)
11392 if (tree late_auto = type_uses_auto (late_return_type))
11393 tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
11394 if (tmpl && funcdecl_p)
11395 {
11396 if (!dguide_name_p (unqualified_id))
11397 {
11398 error_at (declarator->id_loc, "deduced class "
11399 "type %qD in function return type",
11400 DECL_NAME (tmpl));
11401 inform (DECL_SOURCE_LOCATION (tmpl),
11402 "%qD declared here", tmpl);
11403 return error_mark_node;
11404 }
11405 else if (!late_return_type)
11406 {
11407 error_at (declarator->id_loc, "deduction guide "
11408 "for %qT must have trailing return "
11409 "type", TREE_TYPE (tmpl));
11410 inform (DECL_SOURCE_LOCATION (tmpl),
11411 "%qD declared here", tmpl);
11412 return error_mark_node;
11413 }
11414 else if (CLASS_TYPE_P (late_return_type)
11415 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11416 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11417 == tmpl))
11418 /* OK */;
11419 else
11420 error ("trailing return type %qT of deduction guide "
11421 "is not a specialization of %qT",
11422 late_return_type, TREE_TYPE (tmpl));
11423 }
11424 }
11425 else if (late_return_type
11426 && sfk != sfk_conversion)
11427 {
11428 if (cxx_dialect < cxx11)
11429 /* Not using maybe_warn_cpp0x because this should
11430 always be an error. */
11431 error_at (typespec_loc,
11432 "trailing return type only available "
11433 "with %<-std=c++11%> or %<-std=gnu++11%>");
11434 else
11435 error_at (typespec_loc, "%qs function with trailing "
11436 "return type not declared with %<auto%> "
11437 "type specifier", name);
11438 return error_mark_node;
11439 }
11440 }
11441 type = splice_late_return_type (type, late_return_type);
11442 if (type == error_mark_node)
11443 return error_mark_node;
11444
11445 if (late_return_type)
11446 {
11447 late_return_type_p = true;
11448 type_quals = cp_type_quals (type);
11449 }
11450
11451 if (type_quals != TYPE_UNQUALIFIED)
11452 {
11453 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11454 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11455 "qualifiers ignored on function return type");
11456 /* We now know that the TYPE_QUALS don't apply to the
11457 decl, but to its return type. */
11458 type_quals = TYPE_UNQUALIFIED;
11459 }
11460
11461 /* Error about some types functions can't return. */
11462
11463 if (TREE_CODE (type) == FUNCTION_TYPE)
11464 {
11465 error_at (typespec_loc, "%qs declared as function returning "
11466 "a function", name);
11467 return error_mark_node;
11468 }
11469 if (TREE_CODE (type) == ARRAY_TYPE)
11470 {
11471 error_at (typespec_loc, "%qs declared as function returning "
11472 "an array", name);
11473 return error_mark_node;
11474 }
11475
11476 if (ctype == NULL_TREE
11477 && decl_context == FIELD
11478 && funcdecl_p
11479 && friendp == 0)
11480 ctype = current_class_type;
11481
11482 if (ctype && (sfk == sfk_constructor
11483 || sfk == sfk_destructor))
11484 {
11485 /* We are within a class's scope. If our declarator name
11486 is the same as the class name, and we are defining
11487 a function, then it is a constructor/destructor, and
11488 therefore returns a void type. */
11489
11490 /* ISO C++ 12.4/2. A destructor may not be declared
11491 const or volatile. A destructor may not be static.
11492 A destructor may not be declared with ref-qualifier.
11493
11494 ISO C++ 12.1. A constructor may not be declared
11495 const or volatile. A constructor may not be
11496 virtual. A constructor may not be static.
11497 A constructor may not be declared with ref-qualifier. */
11498 if (staticp == 2)
11499 error ((flags == DTOR_FLAG)
11500 ? G_("destructor cannot be static member function")
11501 : G_("constructor cannot be static member function"));
11502 if (memfn_quals)
11503 {
11504 error ((flags == DTOR_FLAG)
11505 ? G_("destructors may not be cv-qualified")
11506 : G_("constructors may not be cv-qualified"));
11507 memfn_quals = TYPE_UNQUALIFIED;
11508 }
11509
11510 if (rqual)
11511 {
11512 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11513 error ((flags == DTOR_FLAG)
11514 ? G_("destructors may not be ref-qualified")
11515 : G_("constructors may not be ref-qualified"));
11516 rqual = REF_QUAL_NONE;
11517 }
11518
11519 if (decl_context == FIELD
11520 && !member_function_or_else (ctype,
11521 current_class_type,
11522 flags))
11523 return error_mark_node;
11524
11525 if (flags != DTOR_FLAG)
11526 {
11527 /* It's a constructor. */
11528 if (explicitp == 1)
11529 explicitp = 2;
11530 if (virtualp)
11531 {
11532 permerror (declspecs->locations[ds_virtual],
11533 "constructors cannot be declared %<virtual%>");
11534 virtualp = 0;
11535 }
11536 if (decl_context == FIELD
11537 && sfk != sfk_constructor)
11538 return error_mark_node;
11539 }
11540 if (decl_context == FIELD)
11541 staticp = 0;
11542 }
11543 else if (friendp)
11544 {
11545 if (virtualp)
11546 {
11547 /* Cannot be both friend and virtual. */
11548 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
11549 richloc.add_range (declspecs->locations[ds_friend]);
11550 error_at (&richloc, "virtual functions cannot be friends");
11551 friendp = 0;
11552 }
11553 if (decl_context == NORMAL)
11554 error ("friend declaration not in class definition");
11555 if (current_function_decl && funcdef_flag)
11556 {
11557 error ("can%'t define friend function %qs in a local "
11558 "class definition", name);
11559 friendp = 0;
11560 }
11561 }
11562 else if (ctype && sfk == sfk_conversion)
11563 {
11564 if (explicitp == 1)
11565 {
11566 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11567 explicitp = 2;
11568 }
11569 if (late_return_type_p)
11570 error ("a conversion function cannot have a trailing return type");
11571 }
11572 else if (sfk == sfk_deduction_guide)
11573 {
11574 if (explicitp == 1)
11575 explicitp = 2;
11576 }
11577
11578 tree pushed_scope = NULL_TREE;
11579 if (funcdecl_p
11580 && decl_context != FIELD
11581 && inner_declarator->u.id.qualifying_scope
11582 && CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
11583 pushed_scope
11584 = push_scope (inner_declarator->u.id.qualifying_scope);
11585
11586 arg_types = grokparms (declarator->u.function.parameters, &parms);
11587
11588 if (pushed_scope)
11589 pop_scope (pushed_scope);
11590
11591 if (inner_declarator
11592 && inner_declarator->kind == cdk_id
11593 && inner_declarator->u.id.sfk == sfk_destructor
11594 && arg_types != void_list_node)
11595 {
11596 error ("destructors may not have parameters");
11597 arg_types = void_list_node;
11598 parms = NULL_TREE;
11599 }
11600
11601 type = build_function_type (type, arg_types);
11602
11603 tree attrs = declarator->std_attributes;
11604 if (tx_qual)
11605 {
11606 tree att = build_tree_list (tx_qual, NULL_TREE);
11607 /* transaction_safe applies to the type, but
11608 transaction_safe_dynamic applies to the function. */
11609 if (is_attribute_p ("transaction_safe", tx_qual))
11610 attrs = chainon (attrs, att);
11611 else
11612 returned_attrs = chainon (returned_attrs, att);
11613 }
11614 if (attrs)
11615 /* [dcl.fct]/2:
11616
11617 The optional attribute-specifier-seq appertains to
11618 the function type. */
11619 decl_attributes (&type, attrs, 0);
11620
11621 if (raises)
11622 type = build_exception_variant (type, raises);
11623 }
11624 break;
11625
11626 case cdk_pointer:
11627 case cdk_reference:
11628 case cdk_ptrmem:
11629 /* Filter out pointers-to-references and references-to-references.
11630 We can get these if a TYPE_DECL is used. */
11631
11632 if (TYPE_REF_P (type))
11633 {
11634 if (declarator->kind != cdk_reference)
11635 {
11636 error ("cannot declare pointer to %q#T", type);
11637 type = TREE_TYPE (type);
11638 }
11639
11640 /* In C++0x, we allow reference to reference declarations
11641 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11642 and template type arguments [14.3.1/4 temp.arg.type]. The
11643 check for direct reference to reference declarations, which
11644 are still forbidden, occurs below. Reasoning behind the change
11645 can be found in DR106, DR540, and the rvalue reference
11646 proposals. */
11647 else if (cxx_dialect == cxx98)
11648 {
11649 error ("cannot declare reference to %q#T", type);
11650 type = TREE_TYPE (type);
11651 }
11652 }
11653 else if (VOID_TYPE_P (type))
11654 {
11655 if (declarator->kind == cdk_reference)
11656 error ("cannot declare reference to %q#T", type);
11657 else if (declarator->kind == cdk_ptrmem)
11658 error ("cannot declare pointer to %q#T member", type);
11659 }
11660
11661 /* We now know that the TYPE_QUALS don't apply to the decl,
11662 but to the target of the pointer. */
11663 type_quals = TYPE_UNQUALIFIED;
11664
11665 /* This code used to handle METHOD_TYPE, but I don't think it's
11666 possible to get it here anymore. */
11667 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11668 if (declarator->kind == cdk_ptrmem
11669 && TREE_CODE (type) == FUNCTION_TYPE)
11670 {
11671 memfn_quals |= type_memfn_quals (type);
11672 type = build_memfn_type (type,
11673 declarator->u.pointer.class_type,
11674 memfn_quals,
11675 rqual);
11676 if (type == error_mark_node)
11677 return error_mark_node;
11678
11679 rqual = REF_QUAL_NONE;
11680 memfn_quals = TYPE_UNQUALIFIED;
11681 }
11682
11683 if (TREE_CODE (type) == FUNCTION_TYPE
11684 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11685 || type_memfn_rqual (type) != REF_QUAL_NONE))
11686 error (declarator->kind == cdk_reference
11687 ? G_("cannot declare reference to qualified function type %qT")
11688 : G_("cannot declare pointer to qualified function type %qT"),
11689 type);
11690
11691 /* When the pointed-to type involves components of variable size,
11692 care must be taken to ensure that the size evaluation code is
11693 emitted early enough to dominate all the possible later uses
11694 and late enough for the variables on which it depends to have
11695 been assigned.
11696
11697 This is expected to happen automatically when the pointed-to
11698 type has a name/declaration of it's own, but special attention
11699 is required if the type is anonymous.
11700
11701 We handle the NORMAL and FIELD contexts here by inserting a
11702 dummy statement that just evaluates the size at a safe point
11703 and ensures it is not deferred until e.g. within a deeper
11704 conditional context (c++/43555).
11705
11706 We expect nothing to be needed here for PARM or TYPENAME.
11707 Evaluating the size at this point for TYPENAME would
11708 actually be incorrect, as we might be in the middle of an
11709 expression with side effects on the pointed-to type size
11710 "arguments" prior to the pointer declaration point and the
11711 size evaluation could end up prior to the side effects. */
11712
11713 if (!TYPE_NAME (type)
11714 && (decl_context == NORMAL || decl_context == FIELD)
11715 && at_function_scope_p ()
11716 && variably_modified_type_p (type, NULL_TREE))
11717 {
11718 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11719 NULL_TREE, type);
11720 add_decl_expr (TYPE_NAME (type));
11721 }
11722
11723 if (declarator->kind == cdk_reference)
11724 {
11725 /* In C++0x, the type we are creating a reference to might be
11726 a typedef which is itself a reference type. In that case,
11727 we follow the reference collapsing rules in
11728 [7.1.3/8 dcl.typedef] to create the final reference type:
11729
11730 "If a typedef TD names a type that is a reference to a type
11731 T, an attempt to create the type 'lvalue reference to cv TD'
11732 creates the type 'lvalue reference to T,' while an attempt
11733 to create the type "rvalue reference to cv TD' creates the
11734 type TD."
11735 */
11736 if (VOID_TYPE_P (type))
11737 /* We already gave an error. */;
11738 else if (TYPE_REF_P (type))
11739 {
11740 if (declarator->u.reference.rvalue_ref)
11741 /* Leave type alone. */;
11742 else
11743 type = cp_build_reference_type (TREE_TYPE (type), false);
11744 }
11745 else
11746 type = cp_build_reference_type
11747 (type, declarator->u.reference.rvalue_ref);
11748
11749 /* In C++0x, we need this check for direct reference to
11750 reference declarations, which are forbidden by
11751 [8.3.2/5 dcl.ref]. Reference to reference declarations
11752 are only allowed indirectly through typedefs and template
11753 type arguments. Example:
11754
11755 void foo(int & &); // invalid ref-to-ref decl
11756
11757 typedef int & int_ref;
11758 void foo(int_ref &); // valid ref-to-ref decl
11759 */
11760 if (inner_declarator && inner_declarator->kind == cdk_reference)
11761 error ("cannot declare reference to %q#T, which is not "
11762 "a typedef or a template type argument", type);
11763 }
11764 else if (TREE_CODE (type) == METHOD_TYPE)
11765 type = build_ptrmemfunc_type (build_pointer_type (type));
11766 else if (declarator->kind == cdk_ptrmem)
11767 {
11768 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11769 != NAMESPACE_DECL);
11770 if (declarator->u.pointer.class_type == error_mark_node)
11771 /* We will already have complained. */
11772 type = error_mark_node;
11773 else
11774 type = build_ptrmem_type (declarator->u.pointer.class_type,
11775 type);
11776 }
11777 else
11778 type = build_pointer_type (type);
11779
11780 /* Process a list of type modifier keywords (such as
11781 const or volatile) that were given inside the `*' or `&'. */
11782
11783 if (declarator->u.pointer.qualifiers)
11784 {
11785 type
11786 = cp_build_qualified_type (type,
11787 declarator->u.pointer.qualifiers);
11788 type_quals = cp_type_quals (type);
11789 }
11790
11791 /* Apply C++11 attributes to the pointer, and not to the
11792 type pointed to. This is unlike what is done for GNU
11793 attributes above. It is to comply with [dcl.ptr]/1:
11794
11795 [the optional attribute-specifier-seq (7.6.1) appertains
11796 to the pointer and not to the object pointed to]. */
11797 if (declarator->std_attributes)
11798 decl_attributes (&type, declarator->std_attributes,
11799 0);
11800
11801 ctype = NULL_TREE;
11802 break;
11803
11804 case cdk_error:
11805 break;
11806
11807 default:
11808 gcc_unreachable ();
11809 }
11810 }
11811
11812 /* A `constexpr' specifier used in an object declaration declares
11813 the object as `const'. */
11814 if (constexpr_p && innermost_code != cdk_function)
11815 {
11816 /* DR1688 says that a `constexpr' specifier in combination with
11817 `volatile' is valid. */
11818
11819 if (!TYPE_REF_P (type))
11820 {
11821 type_quals |= TYPE_QUAL_CONST;
11822 type = cp_build_qualified_type (type, type_quals);
11823 }
11824 }
11825
11826 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11827 && TREE_CODE (type) != FUNCTION_TYPE
11828 && TREE_CODE (type) != METHOD_TYPE
11829 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11830 {
11831 error ("template-id %qD used as a declarator",
11832 unqualified_id);
11833 unqualified_id = dname;
11834 }
11835
11836 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11837 qualified with a class-name, turn it into a METHOD_TYPE, unless
11838 we know that the function is static. We take advantage of this
11839 opportunity to do other processing that pertains to entities
11840 explicitly declared to be class members. Note that if DECLARATOR
11841 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11842 would not have exited the loop above. */
11843 if (declarator
11844 && declarator->kind == cdk_id
11845 && declarator->u.id.qualifying_scope
11846 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11847 {
11848 ctype = declarator->u.id.qualifying_scope;
11849 ctype = TYPE_MAIN_VARIANT (ctype);
11850 template_count = num_template_headers_for_class (ctype);
11851
11852 if (ctype == current_class_type)
11853 {
11854 if (friendp)
11855 {
11856 permerror (input_location, "member functions are implicitly "
11857 "friends of their class");
11858 friendp = 0;
11859 }
11860 else
11861 permerror (declarator->id_loc,
11862 "extra qualification %<%T::%> on member %qs",
11863 ctype, name);
11864 }
11865 else if (/* If the qualifying type is already complete, then we
11866 can skip the following checks. */
11867 !COMPLETE_TYPE_P (ctype)
11868 && (/* If the function is being defined, then
11869 qualifying type must certainly be complete. */
11870 funcdef_flag
11871 /* A friend declaration of "T::f" is OK, even if
11872 "T" is a template parameter. But, if this
11873 function is not a friend, the qualifying type
11874 must be a class. */
11875 || (!friendp && !CLASS_TYPE_P (ctype))
11876 /* For a declaration, the type need not be
11877 complete, if either it is dependent (since there
11878 is no meaningful definition of complete in that
11879 case) or the qualifying class is currently being
11880 defined. */
11881 || !(dependent_type_p (ctype)
11882 || currently_open_class (ctype)))
11883 /* Check that the qualifying type is complete. */
11884 && !complete_type_or_else (ctype, NULL_TREE))
11885 return error_mark_node;
11886 else if (TREE_CODE (type) == FUNCTION_TYPE)
11887 {
11888 if (current_class_type
11889 && (!friendp || funcdef_flag || initialized))
11890 {
11891 error (funcdef_flag || initialized
11892 ? G_("cannot define member function %<%T::%s%> "
11893 "within %qT")
11894 : G_("cannot declare member function %<%T::%s%> "
11895 "within %qT"),
11896 ctype, name, current_class_type);
11897 return error_mark_node;
11898 }
11899 }
11900 else if (typedef_p && current_class_type)
11901 {
11902 error ("cannot declare member %<%T::%s%> within %qT",
11903 ctype, name, current_class_type);
11904 return error_mark_node;
11905 }
11906 }
11907
11908 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11909 ctype = current_class_type;
11910
11911 /* Now TYPE has the actual type. */
11912
11913 if (returned_attrs)
11914 {
11915 if (attrlist)
11916 *attrlist = chainon (returned_attrs, *attrlist);
11917 else
11918 attrlist = &returned_attrs;
11919 }
11920
11921 if (declarator
11922 && declarator->kind == cdk_id
11923 && declarator->std_attributes
11924 && attrlist != NULL)
11925 {
11926 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11927 a declarator-id appertains to the entity that is declared. */
11928 if (declarator->std_attributes != error_mark_node)
11929 *attrlist = chainon (*attrlist, declarator->std_attributes);
11930 else
11931 /* We should have already diagnosed the issue (c++/78344). */
11932 gcc_assert (seen_error ());
11933 }
11934
11935 /* Handle parameter packs. */
11936 if (parameter_pack_p)
11937 {
11938 if (decl_context == PARM)
11939 /* Turn the type into a pack expansion.*/
11940 type = make_pack_expansion (type);
11941 else
11942 error ("non-parameter %qs cannot be a parameter pack", name);
11943 }
11944
11945 if ((decl_context == FIELD || decl_context == PARM)
11946 && !processing_template_decl
11947 && variably_modified_type_p (type, NULL_TREE))
11948 {
11949 if (decl_context == FIELD)
11950 error ("data member may not have variably modified type %qT", type);
11951 else
11952 error ("parameter may not have variably modified type %qT", type);
11953 type = error_mark_node;
11954 }
11955
11956 if (explicitp == 1 || (explicitp && friendp))
11957 {
11958 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11959 in the declaration of a constructor or conversion function within
11960 a class definition. */
11961 if (!current_class_type)
11962 error_at (declspecs->locations[ds_explicit],
11963 "%<explicit%> outside class declaration");
11964 else if (friendp)
11965 error_at (declspecs->locations[ds_explicit],
11966 "%<explicit%> in friend declaration");
11967 else
11968 error_at (declspecs->locations[ds_explicit],
11969 "only declarations of constructors and conversion operators "
11970 "can be %<explicit%>");
11971 explicitp = 0;
11972 }
11973
11974 if (storage_class == sc_mutable)
11975 {
11976 location_t sloc = declspecs->locations[ds_storage_class];
11977 if (decl_context != FIELD || friendp)
11978 {
11979 error_at (sloc, "non-member %qs cannot be declared %<mutable%>",
11980 name);
11981 storage_class = sc_none;
11982 }
11983 else if (decl_context == TYPENAME || typedef_p)
11984 {
11985 error_at (sloc,
11986 "non-object member %qs cannot be declared %<mutable%>",
11987 name);
11988 storage_class = sc_none;
11989 }
11990 else if (TREE_CODE (type) == FUNCTION_TYPE
11991 || TREE_CODE (type) == METHOD_TYPE)
11992 {
11993 error_at (sloc, "function %qs cannot be declared %<mutable%>",
11994 name);
11995 storage_class = sc_none;
11996 }
11997 else if (staticp)
11998 {
11999 error_at (sloc, "%<static%> %qs cannot be declared %<mutable%>",
12000 name);
12001 storage_class = sc_none;
12002 }
12003 else if (type_quals & TYPE_QUAL_CONST)
12004 {
12005 error_at (sloc, "%<const%> %qs cannot be declared %<mutable%>",
12006 name);
12007 storage_class = sc_none;
12008 }
12009 else if (TYPE_REF_P (type))
12010 {
12011 permerror (sloc, "reference %qs cannot be declared %<mutable%>",
12012 name);
12013 storage_class = sc_none;
12014 }
12015 }
12016
12017 location_t loc = declarator ? declarator->id_loc : input_location;
12018
12019 /* If this is declaring a typedef name, return a TYPE_DECL. */
12020 if (typedef_p && decl_context != TYPENAME)
12021 {
12022 bool alias_p = decl_spec_seq_has_spec_p (declspecs, ds_alias);
12023 tree decl;
12024
12025 /* This declaration:
12026
12027 typedef void f(int) const;
12028
12029 declares a function type which is not a member of any
12030 particular class, but which is cv-qualified; for
12031 example "f S::*" declares a pointer to a const-qualified
12032 member function of S. We record the cv-qualification in the
12033 function type. */
12034 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
12035 {
12036 type = apply_memfn_quals (type, memfn_quals, rqual);
12037
12038 /* We have now dealt with these qualifiers. */
12039 memfn_quals = TYPE_UNQUALIFIED;
12040 rqual = REF_QUAL_NONE;
12041 }
12042
12043 if (type_uses_auto (type))
12044 {
12045 if (alias_p)
12046 error_at (declspecs->locations[ds_type_spec],
12047 "%<auto%> not allowed in alias declaration");
12048 else
12049 error_at (declspecs->locations[ds_type_spec],
12050 "typedef declared %<auto%>");
12051 type = error_mark_node;
12052 }
12053
12054 if (reqs)
12055 error_at (location_of (reqs), "requires-clause on typedef");
12056
12057 if (id_declarator && declarator->u.id.qualifying_scope)
12058 {
12059 error ("typedef name may not be a nested-name-specifier");
12060 type = error_mark_node;
12061 }
12062
12063 if (decl_context == FIELD)
12064 decl = build_lang_decl_loc (loc, TYPE_DECL, unqualified_id, type);
12065 else
12066 decl = build_decl (loc, TYPE_DECL, unqualified_id, type);
12067
12068 if (decl_context != FIELD)
12069 {
12070 if (!current_function_decl)
12071 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
12072 else if (DECL_MAYBE_IN_CHARGE_CDTOR_P (current_function_decl))
12073 /* The TYPE_DECL is "abstract" because there will be
12074 clones of this constructor/destructor, and there will
12075 be copies of this TYPE_DECL generated in those
12076 clones. The decloning optimization (for space) may
12077 revert this subsequently if it determines that
12078 the clones should share a common implementation. */
12079 DECL_ABSTRACT_P (decl) = true;
12080 }
12081 else if (current_class_type
12082 && constructor_name_p (unqualified_id, current_class_type))
12083 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
12084 "as enclosing class",
12085 unqualified_id);
12086
12087 /* If the user declares "typedef struct {...} foo" then the
12088 struct will have an anonymous name. Fill that name in now.
12089 Nothing can refer to it, so nothing needs know about the name
12090 change. */
12091 if (type != error_mark_node
12092 && unqualified_id
12093 && TYPE_NAME (type)
12094 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12095 && TYPE_UNNAMED_P (type)
12096 && declspecs->type_definition_p
12097 && attributes_naming_typedef_ok (*attrlist)
12098 && cp_type_quals (type) == TYPE_UNQUALIFIED)
12099 name_unnamed_type (type, decl);
12100
12101 if (signed_p
12102 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
12103 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
12104
12105 bad_specifiers (decl, BSP_TYPE, virtualp,
12106 memfn_quals != TYPE_UNQUALIFIED,
12107 inlinep, friendp, raises != NULL_TREE,
12108 declspecs->locations);
12109
12110 if (alias_p)
12111 /* Acknowledge that this was written:
12112 `using analias = atype;'. */
12113 TYPE_DECL_ALIAS_P (decl) = 1;
12114
12115 return decl;
12116 }
12117
12118 /* Detect the case of an array type of unspecified size
12119 which came, as such, direct from a typedef name.
12120 We must copy the type, so that the array's domain can be
12121 individually set by the object's initializer. */
12122
12123 if (type && typedef_type
12124 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
12125 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
12126 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12127
12128 /* Detect where we're using a typedef of function type to declare a
12129 function. PARMS will not be set, so we must create it now. */
12130
12131 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
12132 {
12133 tree decls = NULL_TREE;
12134 tree args;
12135
12136 for (args = TYPE_ARG_TYPES (type);
12137 args && args != void_list_node;
12138 args = TREE_CHAIN (args))
12139 {
12140 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
12141 TREE_VALUE (args));
12142
12143 DECL_CHAIN (decl) = decls;
12144 decls = decl;
12145 }
12146
12147 parms = nreverse (decls);
12148
12149 if (decl_context != TYPENAME)
12150 {
12151 /* The qualifiers on the function type become the qualifiers on
12152 the non-static member function. */
12153 memfn_quals |= type_memfn_quals (type);
12154 rqual = type_memfn_rqual (type);
12155 type_quals = TYPE_UNQUALIFIED;
12156 }
12157 }
12158
12159 /* If this is a type name (such as, in a cast or sizeof),
12160 compute the type and return it now. */
12161
12162 if (decl_context == TYPENAME)
12163 {
12164 /* Note that here we don't care about type_quals. */
12165
12166 /* Special case: "friend class foo" looks like a TYPENAME context. */
12167 if (friendp)
12168 {
12169 if (inlinep)
12170 {
12171 error ("%<inline%> specified for friend class declaration");
12172 inlinep = 0;
12173 }
12174
12175 if (!current_aggr)
12176 {
12177 /* Don't allow friend declaration without a class-key. */
12178 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12179 permerror (input_location, "template parameters cannot be friends");
12180 else if (TREE_CODE (type) == TYPENAME_TYPE)
12181 permerror (input_location, "friend declaration requires class-key, "
12182 "i.e. %<friend class %T::%D%>",
12183 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
12184 else
12185 permerror (input_location, "friend declaration requires class-key, "
12186 "i.e. %<friend %#T%>",
12187 type);
12188 }
12189
12190 /* Only try to do this stuff if we didn't already give up. */
12191 if (type != integer_type_node)
12192 {
12193 /* A friendly class? */
12194 if (current_class_type)
12195 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
12196 /*complain=*/true);
12197 else
12198 error ("trying to make class %qT a friend of global scope",
12199 type);
12200
12201 type = void_type_node;
12202 }
12203 }
12204 else if (memfn_quals || rqual)
12205 {
12206 if (ctype == NULL_TREE
12207 && TREE_CODE (type) == METHOD_TYPE)
12208 ctype = TYPE_METHOD_BASETYPE (type);
12209
12210 if (ctype)
12211 type = build_memfn_type (type, ctype, memfn_quals, rqual);
12212 /* Core issue #547: need to allow this in template type args.
12213 Allow it in general in C++11 for alias-declarations. */
12214 else if ((template_type_arg || cxx_dialect >= cxx11)
12215 && TREE_CODE (type) == FUNCTION_TYPE)
12216 type = apply_memfn_quals (type, memfn_quals, rqual);
12217 else
12218 error ("invalid qualifiers on non-member function type");
12219 }
12220
12221 if (reqs)
12222 error_at (location_of (reqs), "requires-clause on type-id");
12223
12224 return type;
12225 }
12226 else if (unqualified_id == NULL_TREE && decl_context != PARM
12227 && decl_context != CATCHPARM
12228 && TREE_CODE (type) != UNION_TYPE
12229 && ! bitfield
12230 && innermost_code != cdk_decomp)
12231 {
12232 error ("abstract declarator %qT used as declaration", type);
12233 return error_mark_node;
12234 }
12235
12236 if (!FUNC_OR_METHOD_TYPE_P (type))
12237 {
12238 /* Only functions may be declared using an operator-function-id. */
12239 if (dname && IDENTIFIER_ANY_OP_P (dname))
12240 {
12241 error ("declaration of %qD as non-function", dname);
12242 return error_mark_node;
12243 }
12244
12245 if (reqs)
12246 error_at (location_of (reqs),
12247 "requires-clause on declaration of non-function type %qT",
12248 type);
12249 }
12250
12251 /* We don't check parameter types here because we can emit a better
12252 error message later. */
12253 if (decl_context != PARM)
12254 {
12255 type = check_var_type (unqualified_id, type);
12256 if (type == error_mark_node)
12257 return error_mark_node;
12258 }
12259
12260 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
12261 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
12262
12263 if (decl_context == PARM || decl_context == CATCHPARM)
12264 {
12265 if (ctype || in_namespace)
12266 error ("cannot use %<::%> in parameter declaration");
12267
12268 if (type_uses_auto (type)
12269 && !(cxx_dialect >= cxx17 && template_parm_flag))
12270 {
12271 if (cxx_dialect >= cxx14)
12272 error ("%<auto%> parameter not permitted in this context");
12273 else
12274 error ("parameter declared %<auto%>");
12275 type = error_mark_node;
12276 }
12277
12278 /* A parameter declared as an array of T is really a pointer to T.
12279 One declared as a function is really a pointer to a function.
12280 One declared as a member is really a pointer to member. */
12281
12282 if (TREE_CODE (type) == ARRAY_TYPE)
12283 {
12284 /* Transfer const-ness of array into that of type pointed to. */
12285 type = build_pointer_type (TREE_TYPE (type));
12286 type_quals = TYPE_UNQUALIFIED;
12287 array_parameter_p = true;
12288 }
12289 else if (TREE_CODE (type) == FUNCTION_TYPE)
12290 type = build_pointer_type (type);
12291 }
12292
12293 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
12294 && !(unqualified_id
12295 && identifier_p (unqualified_id)
12296 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
12297 {
12298 cp_cv_quals real_quals = memfn_quals;
12299 if (cxx_dialect < cxx14 && constexpr_p
12300 && sfk != sfk_constructor && sfk != sfk_destructor)
12301 real_quals |= TYPE_QUAL_CONST;
12302 type = build_memfn_type (type, ctype, real_quals, rqual);
12303 }
12304
12305 {
12306 tree decl = NULL_TREE;
12307
12308 if (decl_context == PARM)
12309 {
12310 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
12311 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
12312
12313 bad_specifiers (decl, BSP_PARM, virtualp,
12314 memfn_quals != TYPE_UNQUALIFIED,
12315 inlinep, friendp, raises != NULL_TREE,
12316 declspecs->locations);
12317 }
12318 else if (decl_context == FIELD)
12319 {
12320 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
12321 if (tree auto_node = type_uses_auto (type))
12322 {
12323 location_t tloc = declspecs->locations[ds_type_spec];
12324 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12325 error_at (tloc, "invalid use of template-name %qE without an "
12326 "argument list",
12327 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
12328 else
12329 error_at (tloc, "non-static data member declared with "
12330 "placeholder %qT", auto_node);
12331 type = error_mark_node;
12332 }
12333
12334 /* The C99 flexible array extension. */
12335 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
12336 && TYPE_DOMAIN (type) == NULL_TREE)
12337 {
12338 if (ctype
12339 && (TREE_CODE (ctype) == UNION_TYPE
12340 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
12341 {
12342 error ("flexible array member in union");
12343 type = error_mark_node;
12344 }
12345 else
12346 {
12347 /* Array is a flexible member. */
12348 if (in_system_header_at (input_location))
12349 /* Do not warn on flexible array members in system
12350 headers because glibc uses them. */;
12351 else if (name && declarator)
12352 pedwarn (declarator->id_loc, OPT_Wpedantic,
12353 "ISO C++ forbids flexible array member %qs", name);
12354 else
12355 pedwarn (input_location, OPT_Wpedantic,
12356 "ISO C++ forbids flexible array members");
12357
12358 /* Flexible array member has a null domain. */
12359 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12360 }
12361 }
12362
12363 if (type == error_mark_node)
12364 {
12365 /* Happens when declaring arrays of sizes which
12366 are error_mark_node, for example. */
12367 decl = NULL_TREE;
12368 }
12369 else if (in_namespace && !friendp)
12370 {
12371 /* Something like struct S { int N::j; }; */
12372 error ("invalid use of %<::%>");
12373 return error_mark_node;
12374 }
12375 else if (FUNC_OR_METHOD_TYPE_P (type) && unqualified_id)
12376 {
12377 int publicp = 0;
12378 tree function_context;
12379
12380 if (friendp == 0)
12381 {
12382 /* This should never happen in pure C++ (the check
12383 could be an assert). It could happen in
12384 Objective-C++ if someone writes invalid code that
12385 uses a function declaration for an instance
12386 variable or property (instance variables and
12387 properties are parsed as FIELD_DECLs, but they are
12388 part of an Objective-C class, not a C++ class).
12389 That code is invalid and is caught by this
12390 check. */
12391 if (!ctype)
12392 {
12393 error ("declaration of function %qD in invalid context",
12394 unqualified_id);
12395 return error_mark_node;
12396 }
12397
12398 /* ``A union may [ ... ] not [ have ] virtual functions.''
12399 ARM 9.5 */
12400 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12401 {
12402 error_at (declspecs->locations[ds_virtual],
12403 "function %qD declared %<virtual%> inside a union",
12404 unqualified_id);
12405 return error_mark_node;
12406 }
12407
12408 if (virtualp
12409 && identifier_p (unqualified_id)
12410 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
12411 {
12412 error_at (declspecs->locations[ds_virtual],
12413 "%qD cannot be declared %<virtual%>, since it "
12414 "is always static", unqualified_id);
12415 virtualp = 0;
12416 }
12417 }
12418
12419 /* Check that the name used for a destructor makes sense. */
12420 if (sfk == sfk_destructor)
12421 {
12422 tree uqname = id_declarator->u.id.unqualified_name;
12423
12424 if (!ctype)
12425 {
12426 gcc_assert (friendp);
12427 error ("expected qualified name in friend declaration "
12428 "for destructor %qD", uqname);
12429 return error_mark_node;
12430 }
12431
12432 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
12433 {
12434 error ("declaration of %qD as member of %qT",
12435 uqname, ctype);
12436 return error_mark_node;
12437 }
12438 if (concept_p)
12439 {
12440 error_at (declspecs->locations[ds_concept],
12441 "a destructor cannot be %<concept%>");
12442 return error_mark_node;
12443 }
12444 if (constexpr_p)
12445 {
12446 error_at (declspecs->locations[ds_constexpr],
12447 "a destructor cannot be %<constexpr%>");
12448 return error_mark_node;
12449 }
12450 }
12451 else if (sfk == sfk_constructor && friendp && !ctype)
12452 {
12453 error ("expected qualified name in friend declaration "
12454 "for constructor %qD",
12455 id_declarator->u.id.unqualified_name);
12456 return error_mark_node;
12457 }
12458 if (sfk == sfk_constructor)
12459 if (concept_p)
12460 {
12461 error_at (declspecs->locations[ds_concept],
12462 "a constructor cannot be %<concept%>");
12463 return error_mark_node;
12464 }
12465 if (concept_p)
12466 {
12467 error_at (declspecs->locations[ds_concept],
12468 "a concept cannot be a member function");
12469 concept_p = false;
12470 }
12471
12472 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12473 {
12474 tree tmpl = TREE_OPERAND (unqualified_id, 0);
12475 if (variable_template_p (tmpl))
12476 {
12477 error ("specialization of variable template %qD "
12478 "declared as function", tmpl);
12479 inform (DECL_SOURCE_LOCATION (tmpl),
12480 "variable template declared here");
12481 return error_mark_node;
12482 }
12483 }
12484
12485 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12486 function_context = (ctype != NULL_TREE) ?
12487 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12488 publicp = (! friendp || ! staticp)
12489 && function_context == NULL_TREE;
12490
12491 decl = grokfndecl (ctype, type,
12492 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12493 ? unqualified_id : dname,
12494 parms,
12495 unqualified_id,
12496 declspecs,
12497 reqs,
12498 virtualp, flags, memfn_quals, rqual, raises,
12499 friendp ? -1 : 0, friendp, publicp,
12500 inlinep | (2 * constexpr_p) | (4 * concept_p),
12501 initialized == SD_DELETED, sfk,
12502 funcdef_flag, late_return_type_p,
12503 template_count, in_namespace,
12504 attrlist, declarator->id_loc);
12505 decl = set_virt_specifiers (decl, virt_specifiers);
12506 if (decl == NULL_TREE)
12507 return error_mark_node;
12508 #if 0
12509 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12510 /* The decl and setting of decl_attr is also turned off. */
12511 decl = build_decl_attribute_variant (decl, decl_attr);
12512 #endif
12513
12514 /* [class.conv.ctor]
12515
12516 A constructor declared without the function-specifier
12517 explicit that can be called with a single parameter
12518 specifies a conversion from the type of its first
12519 parameter to the type of its class. Such a constructor
12520 is called a converting constructor. */
12521 if (explicitp == 2)
12522 DECL_NONCONVERTING_P (decl) = 1;
12523
12524 if (declspecs->explicit_specifier)
12525 store_explicit_specifier (decl, declspecs->explicit_specifier);
12526 }
12527 else if (!staticp && !dependent_type_p (type)
12528 && !COMPLETE_TYPE_P (complete_type (type))
12529 && (!complete_or_array_type_p (type)
12530 || initialized == 0))
12531 {
12532 if (TREE_CODE (type) != ARRAY_TYPE
12533 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12534 {
12535 if (unqualified_id)
12536 {
12537 error_at (declarator->id_loc,
12538 "field %qD has incomplete type %qT",
12539 unqualified_id, type);
12540 cxx_incomplete_type_inform (strip_array_types (type));
12541 }
12542 else
12543 error ("name %qT has incomplete type", type);
12544
12545 type = error_mark_node;
12546 decl = NULL_TREE;
12547 }
12548 }
12549 else
12550 {
12551 if (friendp)
12552 {
12553 if (unqualified_id && declarator)
12554 error_at (declarator->id_loc,
12555 "%qE is neither function nor member function; "
12556 "cannot be declared friend", unqualified_id);
12557 else
12558 error ("unnamed field is neither function nor member "
12559 "function; cannot be declared friend");
12560 return error_mark_node;
12561 }
12562 decl = NULL_TREE;
12563 }
12564
12565 if (friendp)
12566 {
12567 /* Friends are treated specially. */
12568 if (ctype == current_class_type)
12569 ; /* We already issued a permerror. */
12570 else if (decl && DECL_NAME (decl))
12571 {
12572 if (template_class_depth (current_class_type) == 0)
12573 {
12574 decl = check_explicit_specialization
12575 (unqualified_id, decl, template_count,
12576 2 * funcdef_flag + 4);
12577 if (decl == error_mark_node)
12578 return error_mark_node;
12579 }
12580
12581 decl = do_friend (ctype, unqualified_id, decl,
12582 *attrlist, flags,
12583 funcdef_flag);
12584 return decl;
12585 }
12586 else
12587 return error_mark_node;
12588 }
12589
12590 /* Structure field. It may not be a function, except for C++. */
12591
12592 if (decl == NULL_TREE)
12593 {
12594 if (staticp)
12595 {
12596 /* C++ allows static class members. All other work
12597 for this is done by grokfield. */
12598 decl = build_lang_decl_loc (loc, VAR_DECL,
12599 unqualified_id, type);
12600 set_linkage_for_static_data_member (decl);
12601 if (concept_p)
12602 error_at (declspecs->locations[ds_concept],
12603 "static data member %qE declared %<concept%>",
12604 unqualified_id);
12605 else if (constexpr_p && !initialized)
12606 {
12607 error_at (DECL_SOURCE_LOCATION (decl),
12608 "%<constexpr%> static data member %qD must "
12609 "have an initializer", decl);
12610 constexpr_p = false;
12611 }
12612
12613 if (inlinep)
12614 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12615
12616 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12617 && !(cxx_dialect >= cxx17 && constexpr_p))
12618 /* Even if there is an in-class initialization, DECL
12619 is considered undefined until an out-of-class
12620 definition is provided, unless this is an inline
12621 variable. */
12622 DECL_EXTERNAL (decl) = 1;
12623
12624 if (thread_p)
12625 {
12626 CP_DECL_THREAD_LOCAL_P (decl) = true;
12627 if (!processing_template_decl)
12628 set_decl_tls_model (decl, decl_default_tls_model (decl));
12629 if (declspecs->gnu_thread_keyword_p)
12630 SET_DECL_GNU_TLS_P (decl);
12631 }
12632 }
12633 else
12634 {
12635 if (concept_p)
12636 error_at (declspecs->locations[ds_concept],
12637 "non-static data member %qE declared %<concept%>",
12638 unqualified_id);
12639 else if (constexpr_p)
12640 {
12641 error_at (declspecs->locations[ds_constexpr],
12642 "non-static data member %qE declared %<constexpr%>",
12643 unqualified_id);
12644 constexpr_p = false;
12645 }
12646 decl = build_decl (loc, FIELD_DECL, unqualified_id, type);
12647 DECL_NONADDRESSABLE_P (decl) = bitfield;
12648 if (bitfield && !unqualified_id)
12649 {
12650 TREE_NO_WARNING (decl) = 1;
12651 DECL_PADDING_P (decl) = 1;
12652 }
12653
12654 if (storage_class == sc_mutable)
12655 {
12656 DECL_MUTABLE_P (decl) = 1;
12657 storage_class = sc_none;
12658 }
12659
12660 if (initialized)
12661 {
12662 /* An attempt is being made to initialize a non-static
12663 member. This is new in C++11. */
12664 maybe_warn_cpp0x (CPP0X_NSDMI);
12665
12666 /* If this has been parsed with static storage class, but
12667 errors forced staticp to be cleared, ensure NSDMI is
12668 not present. */
12669 if (declspecs->storage_class == sc_static)
12670 DECL_INITIAL (decl) = error_mark_node;
12671 }
12672 }
12673
12674 bad_specifiers (decl, BSP_FIELD, virtualp,
12675 memfn_quals != TYPE_UNQUALIFIED,
12676 staticp ? false : inlinep, friendp,
12677 raises != NULL_TREE,
12678 declspecs->locations);
12679 }
12680 }
12681 else if (TREE_CODE (type) == FUNCTION_TYPE
12682 || TREE_CODE (type) == METHOD_TYPE)
12683 {
12684 tree original_name;
12685 int publicp = 0;
12686
12687 if (!unqualified_id)
12688 return error_mark_node;
12689
12690 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12691 original_name = dname;
12692 else
12693 original_name = unqualified_id;
12694 // FIXME:gcc_assert (original_name == dname);
12695
12696 if (storage_class == sc_auto)
12697 error ("storage class %<auto%> invalid for function %qs", name);
12698 else if (storage_class == sc_register)
12699 error ("storage class %<register%> invalid for function %qs", name);
12700 else if (thread_p)
12701 {
12702 if (declspecs->gnu_thread_keyword_p)
12703 error_at (declspecs->locations[ds_thread],
12704 "storage class %<__thread%> invalid for function %qs",
12705 name);
12706 else
12707 error_at (declspecs->locations[ds_thread],
12708 "storage class %<thread_local%> invalid for "
12709 "function %qs", name);
12710 }
12711
12712 if (virt_specifiers)
12713 error ("virt-specifiers in %qs not allowed outside a class "
12714 "definition", name);
12715 /* Function declaration not at top level.
12716 Storage classes other than `extern' are not allowed
12717 and `extern' makes no difference. */
12718 if (! toplevel_bindings_p ()
12719 && (storage_class == sc_static
12720 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12721 && pedantic)
12722 {
12723 if (storage_class == sc_static)
12724 pedwarn (declspecs->locations[ds_storage_class], OPT_Wpedantic,
12725 "%<static%> specifier invalid for function %qs "
12726 "declared out of global scope", name);
12727 else
12728 pedwarn (declspecs->locations[ds_inline], OPT_Wpedantic,
12729 "%<inline%> specifier invalid for function %qs "
12730 "declared out of global scope", name);
12731 }
12732
12733 if (ctype == NULL_TREE)
12734 {
12735 if (virtualp)
12736 {
12737 error ("virtual non-class function %qs", name);
12738 virtualp = 0;
12739 }
12740 else if (sfk == sfk_constructor
12741 || sfk == sfk_destructor)
12742 {
12743 error (funcdef_flag
12744 ? G_("%qs defined in a non-class scope")
12745 : G_("%qs declared in a non-class scope"), name);
12746 sfk = sfk_none;
12747 }
12748 }
12749
12750 /* Record whether the function is public. */
12751 publicp = (ctype != NULL_TREE
12752 || storage_class != sc_static);
12753
12754 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12755 declspecs,
12756 reqs, virtualp, flags, memfn_quals, rqual, raises,
12757 1, friendp,
12758 publicp,
12759 inlinep | (2 * constexpr_p) | (4 * concept_p),
12760 initialized == SD_DELETED,
12761 sfk,
12762 funcdef_flag,
12763 late_return_type_p,
12764 template_count, in_namespace, attrlist,
12765 declarator->id_loc);
12766 if (decl == NULL_TREE)
12767 return error_mark_node;
12768
12769 if (explicitp == 2)
12770 DECL_NONCONVERTING_P (decl) = 1;
12771 if (staticp == 1)
12772 {
12773 int invalid_static = 0;
12774
12775 /* Don't allow a static member function in a class, and forbid
12776 declaring main to be static. */
12777 if (TREE_CODE (type) == METHOD_TYPE)
12778 {
12779 permerror (input_location, "cannot declare member function %qD to have "
12780 "static linkage", decl);
12781 invalid_static = 1;
12782 }
12783 else if (current_function_decl)
12784 {
12785 /* 7.1.1: There can be no static function declarations within a
12786 block. */
12787 error_at (declspecs->locations[ds_storage_class],
12788 "cannot declare static function inside another function");
12789 invalid_static = 1;
12790 }
12791
12792 if (invalid_static)
12793 {
12794 staticp = 0;
12795 storage_class = sc_none;
12796 }
12797 }
12798 }
12799 else
12800 {
12801 /* It's a variable. */
12802
12803 /* An uninitialized decl with `extern' is a reference. */
12804 decl = grokvardecl (type, dname, unqualified_id,
12805 declspecs,
12806 initialized,
12807 type_quals,
12808 inlinep,
12809 concept_p,
12810 template_count,
12811 ctype ? ctype : in_namespace,
12812 loc);
12813 if (decl == NULL_TREE)
12814 return error_mark_node;
12815
12816 bad_specifiers (decl, BSP_VAR, virtualp,
12817 memfn_quals != TYPE_UNQUALIFIED,
12818 inlinep, friendp, raises != NULL_TREE,
12819 declspecs->locations);
12820
12821 if (ctype)
12822 {
12823 DECL_CONTEXT (decl) = ctype;
12824 if (staticp == 1)
12825 {
12826 permerror (declspecs->locations[ds_storage_class],
12827 "%<static%> may not be used when defining "
12828 "(as opposed to declaring) a static data member");
12829 staticp = 0;
12830 storage_class = sc_none;
12831 }
12832 if (storage_class == sc_register && TREE_STATIC (decl))
12833 {
12834 error ("static member %qD declared %<register%>", decl);
12835 storage_class = sc_none;
12836 }
12837 if (storage_class == sc_extern && pedantic)
12838 {
12839 pedwarn (input_location, OPT_Wpedantic,
12840 "cannot explicitly declare member %q#D to have "
12841 "extern linkage", decl);
12842 storage_class = sc_none;
12843 }
12844 }
12845 else if (constexpr_p && DECL_EXTERNAL (decl))
12846 {
12847 error_at (DECL_SOURCE_LOCATION (decl),
12848 "declaration of %<constexpr%> variable %qD "
12849 "is not a definition", decl);
12850 constexpr_p = false;
12851 }
12852
12853 if (inlinep)
12854 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12855 if (innermost_code == cdk_decomp)
12856 {
12857 gcc_assert (declarator && declarator->kind == cdk_decomp);
12858 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12859 DECL_ARTIFICIAL (decl) = 1;
12860 fit_decomposition_lang_decl (decl, NULL_TREE);
12861 }
12862 }
12863
12864 if (VAR_P (decl) && !initialized)
12865 if (tree auto_node = type_uses_auto (type))
12866 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12867 {
12868 location_t loc = declspecs->locations[ds_type_spec];
12869 error_at (loc, "declaration of %q#D has no initializer", decl);
12870 TREE_TYPE (decl) = error_mark_node;
12871 }
12872
12873 if (storage_class == sc_extern && initialized && !funcdef_flag)
12874 {
12875 if (toplevel_bindings_p ())
12876 {
12877 /* It's common practice (and completely valid) to have a const
12878 be initialized and declared extern. */
12879 if (!(type_quals & TYPE_QUAL_CONST))
12880 warning_at (DECL_SOURCE_LOCATION (decl), 0,
12881 "%qs initialized and declared %<extern%>", name);
12882 }
12883 else
12884 {
12885 error_at (DECL_SOURCE_LOCATION (decl),
12886 "%qs has both %<extern%> and initializer", name);
12887 return error_mark_node;
12888 }
12889 }
12890
12891 /* Record `register' declaration for warnings on &
12892 and in case doing stupid register allocation. */
12893
12894 if (storage_class == sc_register)
12895 {
12896 DECL_REGISTER (decl) = 1;
12897 /* Warn about register storage specifiers on PARM_DECLs. */
12898 if (TREE_CODE (decl) == PARM_DECL)
12899 {
12900 if (cxx_dialect >= cxx17)
12901 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12902 "ISO C++17 does not allow %<register%> storage "
12903 "class specifier");
12904 else
12905 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12906 "%<register%> storage class specifier used");
12907 }
12908 }
12909 else if (storage_class == sc_extern)
12910 DECL_THIS_EXTERN (decl) = 1;
12911 else if (storage_class == sc_static)
12912 DECL_THIS_STATIC (decl) = 1;
12913
12914 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12915 if (constexpr_p && VAR_P (decl))
12916 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12917
12918 /* Record constancy and volatility on the DECL itself . There's
12919 no need to do this when processing a template; we'll do this
12920 for the instantiated declaration based on the type of DECL. */
12921 if (!processing_template_decl)
12922 cp_apply_type_quals_to_decl (type_quals, decl);
12923
12924 return decl;
12925 }
12926 }
12927 \f
12928 /* Subroutine of start_function. Ensure that each of the parameter
12929 types (as listed in PARMS) is complete, as is required for a
12930 function definition. */
12931
12932 static void
12933 require_complete_types_for_parms (tree parms)
12934 {
12935 for (; parms; parms = DECL_CHAIN (parms))
12936 {
12937 if (dependent_type_p (TREE_TYPE (parms)))
12938 continue;
12939 if (!VOID_TYPE_P (TREE_TYPE (parms))
12940 && complete_type_or_else (TREE_TYPE (parms), parms))
12941 {
12942 relayout_decl (parms);
12943 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12944
12945 maybe_warn_parm_abi (TREE_TYPE (parms),
12946 DECL_SOURCE_LOCATION (parms));
12947 }
12948 else
12949 /* grokparms or complete_type_or_else will have already issued
12950 an error. */
12951 TREE_TYPE (parms) = error_mark_node;
12952 }
12953 }
12954
12955 /* Returns nonzero if T is a local variable. */
12956
12957 int
12958 local_variable_p (const_tree t)
12959 {
12960 if ((VAR_P (t)
12961 /* A VAR_DECL with a context that is a _TYPE is a static data
12962 member. */
12963 && !TYPE_P (CP_DECL_CONTEXT (t))
12964 /* Any other non-local variable must be at namespace scope. */
12965 && !DECL_NAMESPACE_SCOPE_P (t))
12966 || (TREE_CODE (t) == PARM_DECL))
12967 return 1;
12968
12969 return 0;
12970 }
12971
12972 /* Like local_variable_p, but suitable for use as a tree-walking
12973 function. */
12974
12975 static tree
12976 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12977 void * /*data*/)
12978 {
12979 if (local_variable_p (*tp)
12980 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12981 return *tp;
12982 else if (TYPE_P (*tp))
12983 *walk_subtrees = 0;
12984
12985 return NULL_TREE;
12986 }
12987
12988 /* Check that ARG, which is a default-argument expression for a
12989 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12990 something goes wrong. DECL may also be a _TYPE node, rather than a
12991 DECL, if there is no DECL available. */
12992
12993 tree
12994 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12995 {
12996 tree var;
12997 tree decl_type;
12998
12999 if (TREE_CODE (arg) == DEFAULT_ARG)
13000 /* We get a DEFAULT_ARG when looking at an in-class declaration
13001 with a default argument. Ignore the argument for now; we'll
13002 deal with it after the class is complete. */
13003 return arg;
13004
13005 if (TYPE_P (decl))
13006 {
13007 decl_type = decl;
13008 decl = NULL_TREE;
13009 }
13010 else
13011 decl_type = TREE_TYPE (decl);
13012
13013 if (arg == error_mark_node
13014 || decl == error_mark_node
13015 || TREE_TYPE (arg) == error_mark_node
13016 || decl_type == error_mark_node)
13017 /* Something already went wrong. There's no need to check
13018 further. */
13019 return error_mark_node;
13020
13021 /* [dcl.fct.default]
13022
13023 A default argument expression is implicitly converted to the
13024 parameter type. */
13025 ++cp_unevaluated_operand;
13026 /* Avoid digest_init clobbering the initializer. */
13027 tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
13028 perform_implicit_conversion_flags (decl_type, carg, complain,
13029 LOOKUP_IMPLICIT);
13030 --cp_unevaluated_operand;
13031
13032 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
13033 the call sites. */
13034 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
13035 && null_ptr_cst_p (arg))
13036 return nullptr_node;
13037
13038 /* [dcl.fct.default]
13039
13040 Local variables shall not be used in default argument
13041 expressions.
13042
13043 The keyword `this' shall not be used in a default argument of a
13044 member function. */
13045 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
13046 if (var)
13047 {
13048 if (complain & tf_warning_or_error)
13049 {
13050 if (DECL_NAME (var) == this_identifier)
13051 permerror (input_location, "default argument %qE uses %qD",
13052 arg, var);
13053 else
13054 error ("default argument %qE uses local variable %qD", arg, var);
13055 }
13056 return error_mark_node;
13057 }
13058
13059 /* All is well. */
13060 return arg;
13061 }
13062
13063 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
13064
13065 static tree
13066 type_is_deprecated (tree type)
13067 {
13068 enum tree_code code;
13069 if (TREE_DEPRECATED (type))
13070 return type;
13071 if (TYPE_NAME (type))
13072 {
13073 if (TREE_DEPRECATED (TYPE_NAME (type)))
13074 return type;
13075 else
13076 return NULL_TREE;
13077 }
13078
13079 /* Do warn about using typedefs to a deprecated class. */
13080 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
13081 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
13082
13083 code = TREE_CODE (type);
13084
13085 if (code == POINTER_TYPE || code == REFERENCE_TYPE
13086 || code == OFFSET_TYPE || code == FUNCTION_TYPE
13087 || code == METHOD_TYPE || code == ARRAY_TYPE)
13088 return type_is_deprecated (TREE_TYPE (type));
13089
13090 if (TYPE_PTRMEMFUNC_P (type))
13091 return type_is_deprecated
13092 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
13093
13094 return NULL_TREE;
13095 }
13096
13097 /* Decode the list of parameter types for a function type.
13098 Given the list of things declared inside the parens,
13099 return a list of types.
13100
13101 If this parameter does not end with an ellipsis, we append
13102 void_list_node.
13103
13104 *PARMS is set to the chain of PARM_DECLs created. */
13105
13106 tree
13107 grokparms (tree parmlist, tree *parms)
13108 {
13109 tree result = NULL_TREE;
13110 tree decls = NULL_TREE;
13111 tree parm;
13112 int any_error = 0;
13113
13114 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
13115 {
13116 tree type = NULL_TREE;
13117 tree init = TREE_PURPOSE (parm);
13118 tree decl = TREE_VALUE (parm);
13119
13120 if (parm == void_list_node)
13121 break;
13122
13123 if (! decl || TREE_TYPE (decl) == error_mark_node)
13124 continue;
13125
13126 type = TREE_TYPE (decl);
13127 if (VOID_TYPE_P (type))
13128 {
13129 if (same_type_p (type, void_type_node)
13130 && !init
13131 && !DECL_NAME (decl) && !result
13132 && TREE_CHAIN (parm) == void_list_node)
13133 /* DR 577: A parameter list consisting of a single
13134 unnamed parameter of non-dependent type 'void'. */
13135 break;
13136 else if (cv_qualified_p (type))
13137 error_at (DECL_SOURCE_LOCATION (decl),
13138 "invalid use of cv-qualified type %qT in "
13139 "parameter declaration", type);
13140 else
13141 error_at (DECL_SOURCE_LOCATION (decl),
13142 "invalid use of type %<void%> in parameter "
13143 "declaration");
13144 /* It's not a good idea to actually create parameters of
13145 type `void'; other parts of the compiler assume that a
13146 void type terminates the parameter list. */
13147 type = error_mark_node;
13148 TREE_TYPE (decl) = error_mark_node;
13149 }
13150
13151 if (type != error_mark_node)
13152 {
13153 if (deprecated_state != DEPRECATED_SUPPRESS)
13154 {
13155 tree deptype = type_is_deprecated (type);
13156 if (deptype)
13157 cp_warn_deprecated_use (deptype);
13158 }
13159
13160 /* Top-level qualifiers on the parameters are
13161 ignored for function types. */
13162 type = cp_build_qualified_type (type, 0);
13163 if (TREE_CODE (type) == METHOD_TYPE)
13164 {
13165 error ("parameter %qD invalidly declared method type", decl);
13166 type = build_pointer_type (type);
13167 TREE_TYPE (decl) = type;
13168 }
13169 else if (abstract_virtuals_error (decl, type))
13170 any_error = 1; /* Seems like a good idea. */
13171 else if (cxx_dialect < cxx17 && INDIRECT_TYPE_P (type))
13172 {
13173 /* Before C++17 DR 393:
13174 [dcl.fct]/6, parameter types cannot contain pointers
13175 (references) to arrays of unknown bound. */
13176 tree t = TREE_TYPE (type);
13177 int ptr = TYPE_PTR_P (type);
13178
13179 while (1)
13180 {
13181 if (TYPE_PTR_P (t))
13182 ptr = 1;
13183 else if (TREE_CODE (t) != ARRAY_TYPE)
13184 break;
13185 else if (!TYPE_DOMAIN (t))
13186 break;
13187 t = TREE_TYPE (t);
13188 }
13189 if (TREE_CODE (t) == ARRAY_TYPE)
13190 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
13191 ptr
13192 ? G_("parameter %qD includes pointer to array of "
13193 "unknown bound %qT")
13194 : G_("parameter %qD includes reference to array of "
13195 "unknown bound %qT"),
13196 decl, t);
13197 }
13198
13199 if (any_error)
13200 init = NULL_TREE;
13201 else if (init && !processing_template_decl)
13202 init = check_default_argument (decl, init, tf_warning_or_error);
13203 }
13204
13205 DECL_CHAIN (decl) = decls;
13206 decls = decl;
13207 result = tree_cons (init, type, result);
13208 }
13209 decls = nreverse (decls);
13210 result = nreverse (result);
13211 if (parm)
13212 result = chainon (result, void_list_node);
13213 *parms = decls;
13214
13215 return result;
13216 }
13217
13218 \f
13219 /* D is a constructor or overloaded `operator='.
13220
13221 Let T be the class in which D is declared. Then, this function
13222 returns:
13223
13224 -1 if D's is an ill-formed constructor or copy assignment operator
13225 whose first parameter is of type `T'.
13226 0 if D is not a copy constructor or copy assignment
13227 operator.
13228 1 if D is a copy constructor or copy assignment operator whose
13229 first parameter is a reference to non-const qualified T.
13230 2 if D is a copy constructor or copy assignment operator whose
13231 first parameter is a reference to const qualified T.
13232
13233 This function can be used as a predicate. Positive values indicate
13234 a copy constructor and nonzero values indicate a copy assignment
13235 operator. */
13236
13237 int
13238 copy_fn_p (const_tree d)
13239 {
13240 tree args;
13241 tree arg_type;
13242 int result = 1;
13243
13244 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13245
13246 if (TREE_CODE (d) == TEMPLATE_DECL
13247 || (DECL_TEMPLATE_INFO (d)
13248 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13249 /* Instantiations of template member functions are never copy
13250 functions. Note that member functions of templated classes are
13251 represented as template functions internally, and we must
13252 accept those as copy functions. */
13253 return 0;
13254
13255 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13256 if (!args)
13257 return 0;
13258
13259 arg_type = TREE_VALUE (args);
13260 if (arg_type == error_mark_node)
13261 return 0;
13262
13263 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
13264 {
13265 /* Pass by value copy assignment operator. */
13266 result = -1;
13267 }
13268 else if (TYPE_REF_P (arg_type)
13269 && !TYPE_REF_IS_RVALUE (arg_type)
13270 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
13271 {
13272 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
13273 result = 2;
13274 }
13275 else
13276 return 0;
13277
13278 args = TREE_CHAIN (args);
13279
13280 if (args && args != void_list_node && !TREE_PURPOSE (args))
13281 /* There are more non-optional args. */
13282 return 0;
13283
13284 return result;
13285 }
13286
13287 /* D is a constructor or overloaded `operator='.
13288
13289 Let T be the class in which D is declared. Then, this function
13290 returns true when D is a move constructor or move assignment
13291 operator, false otherwise. */
13292
13293 bool
13294 move_fn_p (const_tree d)
13295 {
13296 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13297
13298 if (cxx_dialect == cxx98)
13299 /* There are no move constructors if we are in C++98 mode. */
13300 return false;
13301
13302 if (TREE_CODE (d) == TEMPLATE_DECL
13303 || (DECL_TEMPLATE_INFO (d)
13304 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13305 /* Instantiations of template member functions are never move
13306 functions. Note that member functions of templated classes are
13307 represented as template functions internally, and we must
13308 accept those as move functions. */
13309 return 0;
13310
13311 return move_signature_fn_p (d);
13312 }
13313
13314 /* D is a constructor or overloaded `operator='.
13315
13316 Then, this function returns true when D has the same signature as a move
13317 constructor or move assignment operator (because either it is such a
13318 ctor/op= or it is a template specialization with the same signature),
13319 false otherwise. */
13320
13321 bool
13322 move_signature_fn_p (const_tree d)
13323 {
13324 tree args;
13325 tree arg_type;
13326 bool result = false;
13327
13328 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13329 if (!args)
13330 return 0;
13331
13332 arg_type = TREE_VALUE (args);
13333 if (arg_type == error_mark_node)
13334 return 0;
13335
13336 if (TYPE_REF_P (arg_type)
13337 && TYPE_REF_IS_RVALUE (arg_type)
13338 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
13339 DECL_CONTEXT (d)))
13340 result = true;
13341
13342 args = TREE_CHAIN (args);
13343
13344 if (args && args != void_list_node && !TREE_PURPOSE (args))
13345 /* There are more non-optional args. */
13346 return false;
13347
13348 return result;
13349 }
13350
13351 /* Remember any special properties of member function DECL. */
13352
13353 void
13354 grok_special_member_properties (tree decl)
13355 {
13356 tree class_type;
13357
13358 if (TREE_CODE (decl) == USING_DECL
13359 || !DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
13360 return;
13361
13362 class_type = DECL_CONTEXT (decl);
13363 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
13364 {
13365 int ctor = copy_fn_p (decl);
13366
13367 if (!DECL_ARTIFICIAL (decl))
13368 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
13369
13370 if (ctor > 0)
13371 {
13372 /* [class.copy]
13373
13374 A non-template constructor for class X is a copy
13375 constructor if its first parameter is of type X&, const
13376 X&, volatile X& or const volatile X&, and either there
13377 are no other parameters or else all other parameters have
13378 default arguments. */
13379 TYPE_HAS_COPY_CTOR (class_type) = 1;
13380 if (user_provided_p (decl))
13381 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
13382 if (ctor > 1)
13383 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
13384 }
13385 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
13386 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
13387 else if (move_fn_p (decl) && user_provided_p (decl))
13388 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
13389 else if (is_list_ctor (decl))
13390 TYPE_HAS_LIST_CTOR (class_type) = 1;
13391
13392 if (DECL_DECLARED_CONSTEXPR_P (decl)
13393 && !ctor && !move_fn_p (decl))
13394 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
13395 }
13396 else if (DECL_NAME (decl) == assign_op_identifier)
13397 {
13398 /* [class.copy]
13399
13400 A non-template assignment operator for class X is a copy
13401 assignment operator if its parameter is of type X, X&, const
13402 X&, volatile X& or const volatile X&. */
13403
13404 int assop = copy_fn_p (decl);
13405
13406 if (assop)
13407 {
13408 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
13409 if (user_provided_p (decl))
13410 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
13411 if (assop != 1)
13412 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
13413 }
13414 else if (move_fn_p (decl) && user_provided_p (decl))
13415 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
13416 }
13417 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
13418 TYPE_HAS_CONVERSION (class_type) = true;
13419
13420 /* Destructors are handled in check_methods. */
13421 }
13422
13423 /* Check a constructor DECL has the correct form. Complains
13424 if the class has a constructor of the form X(X). */
13425
13426 bool
13427 grok_ctor_properties (const_tree ctype, const_tree decl)
13428 {
13429 int ctor_parm = copy_fn_p (decl);
13430
13431 if (ctor_parm < 0)
13432 {
13433 /* [class.copy]
13434
13435 A declaration of a constructor for a class X is ill-formed if
13436 its first parameter is of type (optionally cv-qualified) X
13437 and either there are no other parameters or else all other
13438 parameters have default arguments.
13439
13440 We *don't* complain about member template instantiations that
13441 have this form, though; they can occur as we try to decide
13442 what constructor to use during overload resolution. Since
13443 overload resolution will never prefer such a constructor to
13444 the non-template copy constructor (which is either explicitly
13445 or implicitly defined), there's no need to worry about their
13446 existence. Theoretically, they should never even be
13447 instantiated, but that's hard to forestall. */
13448 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
13449 ctype, ctype);
13450 return false;
13451 }
13452
13453 return true;
13454 }
13455
13456 /* DECL is a declaration for an overloaded or conversion operator. If
13457 COMPLAIN is true, errors are issued for invalid declarations. */
13458
13459 bool
13460 grok_op_properties (tree decl, bool complain)
13461 {
13462 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13463 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
13464 tree name = DECL_NAME (decl);
13465 location_t loc = DECL_SOURCE_LOCATION (decl);
13466
13467 tree class_type = DECL_CONTEXT (decl);
13468 if (class_type && !CLASS_TYPE_P (class_type))
13469 class_type = NULL_TREE;
13470
13471 tree_code operator_code;
13472 unsigned op_flags;
13473 if (IDENTIFIER_CONV_OP_P (name))
13474 {
13475 /* Conversion operators are TYPE_EXPR for the purposes of this
13476 function. */
13477 operator_code = TYPE_EXPR;
13478 op_flags = OVL_OP_FLAG_UNARY;
13479 }
13480 else
13481 {
13482 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13483
13484 operator_code = ovl_op->tree_code;
13485 op_flags = ovl_op->flags;
13486 gcc_checking_assert (operator_code != ERROR_MARK);
13487 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13488 }
13489
13490 if (op_flags & OVL_OP_FLAG_ALLOC)
13491 {
13492 /* operator new and operator delete are quite special. */
13493 if (class_type)
13494 switch (op_flags)
13495 {
13496 case OVL_OP_FLAG_ALLOC:
13497 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13498 break;
13499
13500 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13501 TYPE_GETS_DELETE (class_type) |= 1;
13502 break;
13503
13504 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13505 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13506 break;
13507
13508 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13509 TYPE_GETS_DELETE (class_type) |= 2;
13510 break;
13511
13512 default:
13513 gcc_unreachable ();
13514 }
13515
13516 /* [basic.std.dynamic.allocation]/1:
13517
13518 A program is ill-formed if an allocation function is declared
13519 in a namespace scope other than global scope or declared
13520 static in global scope.
13521
13522 The same also holds true for deallocation functions. */
13523 if (DECL_NAMESPACE_SCOPE_P (decl))
13524 {
13525 if (CP_DECL_CONTEXT (decl) != global_namespace)
13526 {
13527 error_at (loc, "%qD may not be declared within a namespace",
13528 decl);
13529 return false;
13530 }
13531
13532 if (!TREE_PUBLIC (decl))
13533 {
13534 error_at (loc, "%qD may not be declared as static", decl);
13535 return false;
13536 }
13537 }
13538
13539 if (op_flags & OVL_OP_FLAG_DELETE)
13540 coerce_delete_type (decl, loc);
13541 else
13542 {
13543 DECL_IS_OPERATOR_NEW (decl) = 1;
13544 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl), loc);
13545 }
13546
13547 return true;
13548 }
13549
13550 /* An operator function must either be a non-static member function
13551 or have at least one parameter of a class, a reference to a class,
13552 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13553 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13554 {
13555 if (operator_code == TYPE_EXPR
13556 || operator_code == CALL_EXPR
13557 || operator_code == COMPONENT_REF
13558 || operator_code == ARRAY_REF
13559 || operator_code == NOP_EXPR)
13560 {
13561 error_at (loc, "%qD must be a nonstatic member function", decl);
13562 return false;
13563 }
13564
13565 if (DECL_STATIC_FUNCTION_P (decl))
13566 {
13567 error_at (loc, "%qD must be either a non-static member "
13568 "function or a non-member function", decl);
13569 return false;
13570 }
13571
13572 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13573 {
13574 if (!arg || arg == void_list_node)
13575 {
13576 if (complain)
13577 error_at(loc, "%qD must have an argument of class or "
13578 "enumerated type", decl);
13579 return false;
13580 }
13581
13582 tree type = non_reference (TREE_VALUE (arg));
13583 if (type == error_mark_node)
13584 return false;
13585
13586 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13587 because these checks are performed even on template
13588 functions. */
13589 if (MAYBE_CLASS_TYPE_P (type)
13590 || TREE_CODE (type) == ENUMERAL_TYPE)
13591 break;
13592 }
13593 }
13594
13595 if (operator_code == CALL_EXPR)
13596 /* There are no further restrictions on the arguments to an overloaded
13597 "operator ()". */
13598 return true;
13599
13600 if (operator_code == COND_EXPR)
13601 {
13602 /* 13.4.0.3 */
13603 error_at (loc, "ISO C++ prohibits overloading operator ?:");
13604 return false;
13605 }
13606
13607 /* Count the number of arguments and check for ellipsis. */
13608 int arity = 0;
13609 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13610 {
13611 if (!arg)
13612 {
13613 /* Variadic. */
13614 error_at (loc, "%qD must not have variable number of arguments",
13615 decl);
13616 return false;
13617 }
13618 ++arity;
13619 }
13620
13621 /* Verify correct number of arguments. */
13622 switch (op_flags)
13623 {
13624 case OVL_OP_FLAG_AMBIARY:
13625 if (arity == 1)
13626 {
13627 /* We have a unary instance of an ambi-ary op. Remap to the
13628 unary one. */
13629 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13630 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13631 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13632 operator_code = ovl_op->tree_code;
13633 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13634 }
13635 else if (arity != 2)
13636 {
13637 /* This was an ambiguous operator but is invalid. */
13638 error_at (loc,
13639 methodp
13640 ? G_("%qD must have either zero or one argument")
13641 : G_("%qD must have either one or two arguments"), decl);
13642 return false;
13643 }
13644 else if ((operator_code == POSTINCREMENT_EXPR
13645 || operator_code == POSTDECREMENT_EXPR)
13646 && ! processing_template_decl
13647 /* x++ and x--'s second argument must be an int. */
13648 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13649 integer_type_node))
13650 {
13651 error_at (loc,
13652 methodp
13653 ? G_("postfix %qD must have %<int%> as its argument")
13654 : G_("postfix %qD must have %<int%> as its second argument"),
13655 decl);
13656 return false;
13657 }
13658 break;
13659
13660 case OVL_OP_FLAG_UNARY:
13661 if (arity != 1)
13662 {
13663 error_at (loc,
13664 methodp
13665 ? G_("%qD must have no arguments")
13666 : G_("%qD must have exactly one argument"), decl);
13667 return false;
13668 }
13669 break;
13670
13671 case OVL_OP_FLAG_BINARY:
13672 if (arity != 2)
13673 {
13674 error_at (loc,
13675 methodp
13676 ? G_("%qD must have exactly one argument")
13677 : G_("%qD must have exactly two arguments"), decl);
13678 return false;
13679 }
13680 break;
13681
13682 default:
13683 gcc_unreachable ();
13684 }
13685
13686 /* There can be no default arguments. */
13687 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13688 if (TREE_PURPOSE (arg))
13689 {
13690 TREE_PURPOSE (arg) = NULL_TREE;
13691 error_at (loc, "%qD cannot have default arguments", decl);
13692 return false;
13693 }
13694
13695 /* At this point the declaration is well-formed. It may not be
13696 sensible though. */
13697
13698 /* Check member function warnings only on the in-class declaration.
13699 There's no point warning on an out-of-class definition. */
13700 if (class_type && class_type != current_class_type)
13701 return true;
13702
13703 /* Warn about conversion operators that will never be used. */
13704 if (IDENTIFIER_CONV_OP_P (name)
13705 && ! DECL_TEMPLATE_INFO (decl)
13706 && warn_class_conversion)
13707 {
13708 tree t = TREE_TYPE (name);
13709 int ref = TYPE_REF_P (t);
13710
13711 if (ref)
13712 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13713
13714 if (VOID_TYPE_P (t))
13715 warning_at (loc, OPT_Wclass_conversion, "converting %qT to %<void%> "
13716 "will never use a type conversion operator", class_type);
13717 else if (class_type)
13718 {
13719 if (same_type_ignoring_top_level_qualifiers_p (t, class_type))
13720 warning_at (loc, OPT_Wclass_conversion,
13721 ref
13722 ? G_("converting %qT to a reference to the same type "
13723 "will never use a type conversion operator")
13724 : G_("converting %qT to the same type "
13725 "will never use a type conversion operator"),
13726 class_type);
13727 /* Don't force t to be complete here. */
13728 else if (MAYBE_CLASS_TYPE_P (t)
13729 && COMPLETE_TYPE_P (t)
13730 && DERIVED_FROM_P (t, class_type))
13731 warning_at (loc, OPT_Wclass_conversion,
13732 ref
13733 ? G_("converting %qT to a reference to a base class "
13734 "%qT will never use a type conversion operator")
13735 : G_("converting %qT to a base class %qT "
13736 "will never use a type conversion operator"),
13737 class_type, t);
13738 }
13739 }
13740
13741 if (!warn_ecpp)
13742 return true;
13743
13744 /* Effective C++ rules below. */
13745
13746 /* More Effective C++ rule 7. */
13747 if (operator_code == TRUTH_ANDIF_EXPR
13748 || operator_code == TRUTH_ORIF_EXPR
13749 || operator_code == COMPOUND_EXPR)
13750 warning_at (loc, OPT_Weffc__,
13751 "user-defined %qD always evaluates both arguments", decl);
13752
13753 /* More Effective C++ rule 6. */
13754 if (operator_code == POSTINCREMENT_EXPR
13755 || operator_code == POSTDECREMENT_EXPR
13756 || operator_code == PREINCREMENT_EXPR
13757 || operator_code == PREDECREMENT_EXPR)
13758 {
13759 tree arg = TREE_VALUE (argtypes);
13760 tree ret = TREE_TYPE (TREE_TYPE (decl));
13761 if (methodp || TYPE_REF_P (arg))
13762 arg = TREE_TYPE (arg);
13763 arg = TYPE_MAIN_VARIANT (arg);
13764
13765 if (operator_code == PREINCREMENT_EXPR
13766 || operator_code == PREDECREMENT_EXPR)
13767 {
13768 if (!TYPE_REF_P (ret)
13769 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13770 warning_at (loc, OPT_Weffc__, "prefix %qD should return %qT", decl,
13771 build_reference_type (arg));
13772 }
13773 else
13774 {
13775 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13776 warning_at (loc, OPT_Weffc__,
13777 "postfix %qD should return %qT", decl, arg);
13778 }
13779 }
13780
13781 /* Effective C++ rule 23. */
13782 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13783 && (operator_code == PLUS_EXPR
13784 || operator_code == MINUS_EXPR
13785 || operator_code == TRUNC_DIV_EXPR
13786 || operator_code == MULT_EXPR
13787 || operator_code == TRUNC_MOD_EXPR)
13788 && TYPE_REF_P (TREE_TYPE (TREE_TYPE (decl))))
13789 warning_at (loc, OPT_Weffc__, "%qD should return by value", decl);
13790
13791 return true;
13792 }
13793 \f
13794 /* Return a string giving the keyword associate with CODE. */
13795
13796 static const char *
13797 tag_name (enum tag_types code)
13798 {
13799 switch (code)
13800 {
13801 case record_type:
13802 return "struct";
13803 case class_type:
13804 return "class";
13805 case union_type:
13806 return "union";
13807 case enum_type:
13808 return "enum";
13809 case typename_type:
13810 return "typename";
13811 default:
13812 gcc_unreachable ();
13813 }
13814 }
13815
13816 /* Name lookup in an elaborated-type-specifier (after the keyword
13817 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13818 elaborated-type-specifier is invalid, issue a diagnostic and return
13819 error_mark_node; otherwise, return the *_TYPE to which it referred.
13820 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13821
13822 tree
13823 check_elaborated_type_specifier (enum tag_types tag_code,
13824 tree decl,
13825 bool allow_template_p)
13826 {
13827 tree type;
13828
13829 /* In the case of:
13830
13831 struct S { struct S *p; };
13832
13833 name lookup will find the TYPE_DECL for the implicit "S::S"
13834 typedef. Adjust for that here. */
13835 if (DECL_SELF_REFERENCE_P (decl))
13836 decl = TYPE_NAME (TREE_TYPE (decl));
13837
13838 type = TREE_TYPE (decl);
13839
13840 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13841 is false for this case as well. */
13842 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13843 {
13844 error ("using template type parameter %qT after %qs",
13845 type, tag_name (tag_code));
13846 return error_mark_node;
13847 }
13848 /* Accept template template parameters. */
13849 else if (allow_template_p
13850 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13851 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13852 ;
13853 /* [dcl.type.elab]
13854
13855 If the identifier resolves to a typedef-name or the
13856 simple-template-id resolves to an alias template
13857 specialization, the elaborated-type-specifier is ill-formed.
13858
13859 In other words, the only legitimate declaration to use in the
13860 elaborated type specifier is the implicit typedef created when
13861 the type is declared. */
13862 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13863 && !DECL_SELF_REFERENCE_P (decl)
13864 && tag_code != typename_type)
13865 {
13866 if (alias_template_specialization_p (type))
13867 error ("using alias template specialization %qT after %qs",
13868 type, tag_name (tag_code));
13869 else
13870 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13871 inform (DECL_SOURCE_LOCATION (decl),
13872 "%qD has a previous declaration here", decl);
13873 return error_mark_node;
13874 }
13875 else if (TREE_CODE (type) != RECORD_TYPE
13876 && TREE_CODE (type) != UNION_TYPE
13877 && tag_code != enum_type
13878 && tag_code != typename_type)
13879 {
13880 error ("%qT referred to as %qs", type, tag_name (tag_code));
13881 inform (location_of (type), "%qT has a previous declaration here", type);
13882 return error_mark_node;
13883 }
13884 else if (TREE_CODE (type) != ENUMERAL_TYPE
13885 && tag_code == enum_type)
13886 {
13887 error ("%qT referred to as enum", type);
13888 inform (location_of (type), "%qT has a previous declaration here", type);
13889 return error_mark_node;
13890 }
13891 else if (!allow_template_p
13892 && TREE_CODE (type) == RECORD_TYPE
13893 && CLASSTYPE_IS_TEMPLATE (type))
13894 {
13895 /* If a class template appears as elaborated type specifier
13896 without a template header such as:
13897
13898 template <class T> class C {};
13899 void f(class C); // No template header here
13900
13901 then the required template argument is missing. */
13902 error ("template argument required for %<%s %T%>",
13903 tag_name (tag_code),
13904 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13905 return error_mark_node;
13906 }
13907
13908 return type;
13909 }
13910
13911 /* Lookup NAME in elaborate type specifier in scope according to
13912 SCOPE and issue diagnostics if necessary.
13913 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13914 found, and ERROR_MARK_NODE for type error. */
13915
13916 static tree
13917 lookup_and_check_tag (enum tag_types tag_code, tree name,
13918 tag_scope scope, bool template_header_p)
13919 {
13920 tree t;
13921 tree decl;
13922 if (scope == ts_global)
13923 {
13924 /* First try ordinary name lookup, ignoring hidden class name
13925 injected via friend declaration. */
13926 decl = lookup_name_prefer_type (name, 2);
13927 decl = strip_using_decl (decl);
13928 /* If that fails, the name will be placed in the smallest
13929 non-class, non-function-prototype scope according to 3.3.1/5.
13930 We may already have a hidden name declared as friend in this
13931 scope. So lookup again but not ignoring hidden names.
13932 If we find one, that name will be made visible rather than
13933 creating a new tag. */
13934 if (!decl)
13935 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13936 }
13937 else
13938 decl = lookup_type_scope (name, scope);
13939
13940 if (decl
13941 && (DECL_CLASS_TEMPLATE_P (decl)
13942 /* If scope is ts_current we're defining a class, so ignore a
13943 template template parameter. */
13944 || (scope != ts_current
13945 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13946 decl = DECL_TEMPLATE_RESULT (decl);
13947
13948 if (decl && TREE_CODE (decl) == TYPE_DECL)
13949 {
13950 /* Look for invalid nested type:
13951 class C {
13952 class C {};
13953 }; */
13954 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13955 {
13956 error ("%qD has the same name as the class in which it is "
13957 "declared",
13958 decl);
13959 return error_mark_node;
13960 }
13961
13962 /* Two cases we need to consider when deciding if a class
13963 template is allowed as an elaborated type specifier:
13964 1. It is a self reference to its own class.
13965 2. It comes with a template header.
13966
13967 For example:
13968
13969 template <class T> class C {
13970 class C *c1; // DECL_SELF_REFERENCE_P is true
13971 class D;
13972 };
13973 template <class U> class C; // template_header_p is true
13974 template <class T> class C<T>::D {
13975 class C *c2; // DECL_SELF_REFERENCE_P is true
13976 }; */
13977
13978 t = check_elaborated_type_specifier (tag_code,
13979 decl,
13980 template_header_p
13981 | DECL_SELF_REFERENCE_P (decl));
13982 if (template_header_p && t && CLASS_TYPE_P (t)
13983 && (!CLASSTYPE_TEMPLATE_INFO (t)
13984 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13985 {
13986 error ("%qT is not a template", t);
13987 inform (location_of (t), "previous declaration here");
13988 if (TYPE_CLASS_SCOPE_P (t)
13989 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13990 inform (input_location,
13991 "perhaps you want to explicitly add %<%T::%>",
13992 TYPE_CONTEXT (t));
13993 t = error_mark_node;
13994 }
13995
13996 return t;
13997 }
13998 else if (decl && TREE_CODE (decl) == TREE_LIST)
13999 {
14000 error ("reference to %qD is ambiguous", name);
14001 print_candidates (decl);
14002 return error_mark_node;
14003 }
14004 else
14005 return NULL_TREE;
14006 }
14007
14008 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
14009 Define the tag as a forward-reference if it is not defined.
14010
14011 If a declaration is given, process it here, and report an error if
14012 multiple declarations are not identical.
14013
14014 SCOPE is TS_CURRENT when this is also a definition. Only look in
14015 the current frame for the name (since C++ allows new names in any
14016 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
14017 declaration. Only look beginning from the current scope outward up
14018 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
14019
14020 TEMPLATE_HEADER_P is true when this declaration is preceded by
14021 a set of template parameters. */
14022
14023 static tree
14024 xref_tag_1 (enum tag_types tag_code, tree name,
14025 tag_scope scope, bool template_header_p)
14026 {
14027 enum tree_code code;
14028 tree context = NULL_TREE;
14029
14030 gcc_assert (identifier_p (name));
14031
14032 switch (tag_code)
14033 {
14034 case record_type:
14035 case class_type:
14036 code = RECORD_TYPE;
14037 break;
14038 case union_type:
14039 code = UNION_TYPE;
14040 break;
14041 case enum_type:
14042 code = ENUMERAL_TYPE;
14043 break;
14044 default:
14045 gcc_unreachable ();
14046 }
14047
14048 /* In case of anonymous name, xref_tag is only called to
14049 make type node and push name. Name lookup is not required. */
14050 tree t = NULL_TREE;
14051 if (scope != ts_lambda && !anon_aggrname_p (name))
14052 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
14053
14054 if (t == error_mark_node)
14055 return error_mark_node;
14056
14057 if (scope != ts_current && t && current_class_type
14058 && template_class_depth (current_class_type)
14059 && template_header_p)
14060 {
14061 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
14062 return t;
14063
14064 /* Since SCOPE is not TS_CURRENT, we are not looking at a
14065 definition of this tag. Since, in addition, we are currently
14066 processing a (member) template declaration of a template
14067 class, we must be very careful; consider:
14068
14069 template <class X> struct S1
14070
14071 template <class U> struct S2
14072 {
14073 template <class V> friend struct S1;
14074 };
14075
14076 Here, the S2::S1 declaration should not be confused with the
14077 outer declaration. In particular, the inner version should
14078 have a template parameter of level 2, not level 1.
14079
14080 On the other hand, when presented with:
14081
14082 template <class T> struct S1
14083 {
14084 template <class U> struct S2 {};
14085 template <class U> friend struct S2;
14086 };
14087
14088 the friend must find S1::S2 eventually. We accomplish this
14089 by making sure that the new type we create to represent this
14090 declaration has the right TYPE_CONTEXT. */
14091 context = TYPE_CONTEXT (t);
14092 t = NULL_TREE;
14093 }
14094
14095 if (! t)
14096 {
14097 /* If no such tag is yet defined, create a forward-reference node
14098 and record it as the "definition".
14099 When a real declaration of this type is found,
14100 the forward-reference will be altered into a real type. */
14101 if (code == ENUMERAL_TYPE)
14102 {
14103 error ("use of enum %q#D without previous declaration", name);
14104 return error_mark_node;
14105 }
14106 else
14107 {
14108 t = make_class_type (code);
14109 TYPE_CONTEXT (t) = context;
14110 if (scope == ts_lambda)
14111 {
14112 /* Mark it as a lambda type. */
14113 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
14114 /* And push it into current scope. */
14115 scope = ts_current;
14116 }
14117 t = pushtag (name, t, scope);
14118 }
14119 }
14120 else
14121 {
14122 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
14123 {
14124 /* Check that we aren't trying to overload a class with different
14125 constraints. */
14126 tree constr = NULL_TREE;
14127 if (current_template_parms)
14128 {
14129 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
14130 constr = build_constraints (reqs, NULL_TREE);
14131 }
14132 if (!redeclare_class_template (t, current_template_parms, constr))
14133 return error_mark_node;
14134 }
14135 else if (!processing_template_decl
14136 && CLASS_TYPE_P (t)
14137 && CLASSTYPE_IS_TEMPLATE (t))
14138 {
14139 error ("redeclaration of %qT as a non-template", t);
14140 inform (location_of (t), "previous declaration %qD", t);
14141 return error_mark_node;
14142 }
14143
14144 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
14145 {
14146 /* This is no longer an invisible friend. Make it
14147 visible. */
14148 tree decl = TYPE_NAME (t);
14149
14150 DECL_ANTICIPATED (decl) = false;
14151 DECL_FRIEND_P (decl) = false;
14152
14153 if (TYPE_TEMPLATE_INFO (t))
14154 {
14155 tree tmpl = TYPE_TI_TEMPLATE (t);
14156 DECL_ANTICIPATED (tmpl) = false;
14157 DECL_FRIEND_P (tmpl) = false;
14158 }
14159 }
14160 }
14161
14162 return t;
14163 }
14164
14165 /* Wrapper for xref_tag_1. */
14166
14167 tree
14168 xref_tag (enum tag_types tag_code, tree name,
14169 tag_scope scope, bool template_header_p)
14170 {
14171 tree ret;
14172 bool subtime;
14173 subtime = timevar_cond_start (TV_NAME_LOOKUP);
14174 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
14175 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
14176 return ret;
14177 }
14178
14179
14180 tree
14181 xref_tag_from_type (tree old, tree id, tag_scope scope)
14182 {
14183 enum tag_types tag_kind;
14184
14185 if (TREE_CODE (old) == RECORD_TYPE)
14186 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
14187 else
14188 tag_kind = union_type;
14189
14190 if (id == NULL_TREE)
14191 id = TYPE_IDENTIFIER (old);
14192
14193 return xref_tag (tag_kind, id, scope, false);
14194 }
14195
14196 /* Create the binfo hierarchy for REF with (possibly NULL) base list
14197 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
14198 access_* node, and the TREE_VALUE is the type of the base-class.
14199 Non-NULL TREE_TYPE indicates virtual inheritance. */
14200
14201 void
14202 xref_basetypes (tree ref, tree base_list)
14203 {
14204 tree *basep;
14205 tree binfo, base_binfo;
14206 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
14207 unsigned max_bases = 0; /* Maximum direct bases. */
14208 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
14209 int i;
14210 tree default_access;
14211 tree igo_prev; /* Track Inheritance Graph Order. */
14212
14213 if (ref == error_mark_node)
14214 return;
14215
14216 /* The base of a derived class is private by default, all others are
14217 public. */
14218 default_access = (TREE_CODE (ref) == RECORD_TYPE
14219 && CLASSTYPE_DECLARED_CLASS (ref)
14220 ? access_private_node : access_public_node);
14221
14222 /* First, make sure that any templates in base-classes are
14223 instantiated. This ensures that if we call ourselves recursively
14224 we do not get confused about which classes are marked and which
14225 are not. */
14226 basep = &base_list;
14227 while (*basep)
14228 {
14229 tree basetype = TREE_VALUE (*basep);
14230
14231 /* The dependent_type_p call below should really be dependent_scope_p
14232 so that we give a hard error about using an incomplete type as a
14233 base, but we allow it with a pedwarn for backward
14234 compatibility. */
14235 if (processing_template_decl
14236 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
14237 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
14238 if (!dependent_type_p (basetype)
14239 && !complete_type_or_else (basetype, NULL))
14240 /* An incomplete type. Remove it from the list. */
14241 *basep = TREE_CHAIN (*basep);
14242 else
14243 {
14244 max_bases++;
14245 if (TREE_TYPE (*basep))
14246 max_dvbases++;
14247 if (CLASS_TYPE_P (basetype))
14248 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14249 basep = &TREE_CHAIN (*basep);
14250 }
14251 }
14252 max_vbases += max_dvbases;
14253
14254 TYPE_MARKED_P (ref) = 1;
14255
14256 /* The binfo slot should be empty, unless this is an (ill-formed)
14257 redefinition. */
14258 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
14259
14260 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
14261
14262 binfo = make_tree_binfo (max_bases);
14263
14264 TYPE_BINFO (ref) = binfo;
14265 BINFO_OFFSET (binfo) = size_zero_node;
14266 BINFO_TYPE (binfo) = ref;
14267
14268 /* Apply base-class info set up to the variants of this type. */
14269 fixup_type_variants (ref);
14270
14271 if (max_bases)
14272 {
14273 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
14274 /* A C++98 POD cannot have base classes. */
14275 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
14276
14277 if (TREE_CODE (ref) == UNION_TYPE)
14278 {
14279 error ("derived union %qT invalid", ref);
14280 return;
14281 }
14282 }
14283
14284 if (max_bases > 1)
14285 warning (OPT_Wmultiple_inheritance,
14286 "%qT defined with multiple direct bases", ref);
14287
14288 if (max_vbases)
14289 {
14290 /* An aggregate can't have virtual base classes. */
14291 CLASSTYPE_NON_AGGREGATE (ref) = true;
14292
14293 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
14294
14295 if (max_dvbases)
14296 warning (OPT_Wvirtual_inheritance,
14297 "%qT defined with direct virtual base", ref);
14298 }
14299
14300 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
14301 {
14302 tree access = TREE_PURPOSE (base_list);
14303 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
14304 tree basetype = TREE_VALUE (base_list);
14305
14306 if (access == access_default_node)
14307 access = default_access;
14308
14309 /* Before C++17, an aggregate cannot have base classes. In C++17, an
14310 aggregate can't have virtual, private, or protected base classes. */
14311 if (cxx_dialect < cxx17
14312 || access != access_public_node
14313 || via_virtual)
14314 CLASSTYPE_NON_AGGREGATE (ref) = true;
14315
14316 if (PACK_EXPANSION_P (basetype))
14317 basetype = PACK_EXPANSION_PATTERN (basetype);
14318 if (TREE_CODE (basetype) == TYPE_DECL)
14319 basetype = TREE_TYPE (basetype);
14320 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
14321 {
14322 error ("base type %qT fails to be a struct or class type",
14323 basetype);
14324 goto dropped_base;
14325 }
14326
14327 base_binfo = NULL_TREE;
14328 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
14329 {
14330 base_binfo = TYPE_BINFO (basetype);
14331 /* The original basetype could have been a typedef'd type. */
14332 basetype = BINFO_TYPE (base_binfo);
14333
14334 /* Inherit flags from the base. */
14335 TYPE_HAS_NEW_OPERATOR (ref)
14336 |= TYPE_HAS_NEW_OPERATOR (basetype);
14337 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
14338 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
14339 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
14340 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
14341 CLASSTYPE_DIAMOND_SHAPED_P (ref)
14342 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
14343 CLASSTYPE_REPEATED_BASE_P (ref)
14344 |= CLASSTYPE_REPEATED_BASE_P (basetype);
14345 }
14346
14347 /* We must do this test after we've seen through a typedef
14348 type. */
14349 if (TYPE_MARKED_P (basetype))
14350 {
14351 if (basetype == ref)
14352 error ("recursive type %qT undefined", basetype);
14353 else
14354 error ("duplicate base type %qT invalid", basetype);
14355 goto dropped_base;
14356 }
14357
14358 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
14359 /* Regenerate the pack expansion for the bases. */
14360 basetype = make_pack_expansion (basetype);
14361
14362 TYPE_MARKED_P (basetype) = 1;
14363
14364 base_binfo = copy_binfo (base_binfo, basetype, ref,
14365 &igo_prev, via_virtual);
14366 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
14367 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
14368
14369 BINFO_BASE_APPEND (binfo, base_binfo);
14370 BINFO_BASE_ACCESS_APPEND (binfo, access);
14371 continue;
14372
14373 dropped_base:
14374 /* Update max_vbases to reflect the reality that we are dropping
14375 this base: if it reaches zero we want to undo the vec_alloc
14376 above to avoid inconsistencies during error-recovery: eg, in
14377 build_special_member_call, CLASSTYPE_VBASECLASSES non null
14378 and vtt null (c++/27952). */
14379 if (via_virtual)
14380 max_vbases--;
14381 if (CLASS_TYPE_P (basetype))
14382 max_vbases
14383 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14384 }
14385
14386 if (CLASSTYPE_VBASECLASSES (ref)
14387 && max_vbases == 0)
14388 vec_free (CLASSTYPE_VBASECLASSES (ref));
14389
14390 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
14391 /* If we didn't get max_vbases vbases, we must have shared at
14392 least one of them, and are therefore diamond shaped. */
14393 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
14394
14395 /* Unmark all the types. */
14396 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
14397 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14398 TYPE_MARKED_P (ref) = 0;
14399
14400 /* Now see if we have a repeated base type. */
14401 if (!CLASSTYPE_REPEATED_BASE_P (ref))
14402 {
14403 for (base_binfo = binfo; base_binfo;
14404 base_binfo = TREE_CHAIN (base_binfo))
14405 {
14406 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14407 {
14408 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
14409 break;
14410 }
14411 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
14412 }
14413 for (base_binfo = binfo; base_binfo;
14414 base_binfo = TREE_CHAIN (base_binfo))
14415 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14416 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14417 else
14418 break;
14419 }
14420 }
14421
14422 \f
14423 /* Copies the enum-related properties from type SRC to type DST.
14424 Used with the underlying type of an enum and the enum itself. */
14425 static void
14426 copy_type_enum (tree dst, tree src)
14427 {
14428 tree t;
14429 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
14430 {
14431 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
14432 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
14433 TYPE_SIZE (t) = TYPE_SIZE (src);
14434 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
14435 SET_TYPE_MODE (dst, TYPE_MODE (src));
14436 TYPE_PRECISION (t) = TYPE_PRECISION (src);
14437 unsigned valign = TYPE_ALIGN (src);
14438 if (TYPE_USER_ALIGN (t))
14439 valign = MAX (valign, TYPE_ALIGN (t));
14440 else
14441 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
14442 SET_TYPE_ALIGN (t, valign);
14443 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
14444 }
14445 }
14446
14447 /* Begin compiling the definition of an enumeration type.
14448 NAME is its name,
14449
14450 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
14451
14452 UNDERLYING_TYPE is the type that will be used as the storage for
14453 the enumeration type. This should be NULL_TREE if no storage type
14454 was specified.
14455
14456 ATTRIBUTES are any attributes specified after the enum-key.
14457
14458 SCOPED_ENUM_P is true if this is a scoped enumeration type.
14459
14460 if IS_NEW is not NULL, gets TRUE iff a new type is created.
14461
14462 Returns the type object, as yet incomplete.
14463 Also records info about it so that build_enumerator
14464 may be used to declare the individual values as they are read. */
14465
14466 tree
14467 start_enum (tree name, tree enumtype, tree underlying_type,
14468 tree attributes, bool scoped_enum_p, bool *is_new)
14469 {
14470 tree prevtype = NULL_TREE;
14471 gcc_assert (identifier_p (name));
14472
14473 if (is_new)
14474 *is_new = false;
14475 /* [C++0x dcl.enum]p5:
14476
14477 If not explicitly specified, the underlying type of a scoped
14478 enumeration type is int. */
14479 if (!underlying_type && scoped_enum_p)
14480 underlying_type = integer_type_node;
14481
14482 if (underlying_type)
14483 underlying_type = cv_unqualified (underlying_type);
14484
14485 /* If this is the real definition for a previous forward reference,
14486 fill in the contents in the same object that used to be the
14487 forward reference. */
14488 if (!enumtype)
14489 enumtype = lookup_and_check_tag (enum_type, name,
14490 /*tag_scope=*/ts_current,
14491 /*template_header_p=*/false);
14492
14493 /* In case of a template_decl, the only check that should be deferred
14494 to instantiation time is the comparison of underlying types. */
14495 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14496 {
14497 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14498 {
14499 error_at (input_location, "scoped/unscoped mismatch "
14500 "in enum %q#T", enumtype);
14501 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14502 "previous definition here");
14503 enumtype = error_mark_node;
14504 }
14505 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14506 {
14507 error_at (input_location, "underlying type mismatch "
14508 "in enum %q#T", enumtype);
14509 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14510 "previous definition here");
14511 enumtype = error_mark_node;
14512 }
14513 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14514 && !same_type_p (underlying_type,
14515 ENUM_UNDERLYING_TYPE (enumtype)))
14516 {
14517 error_at (input_location, "different underlying type "
14518 "in enum %q#T", enumtype);
14519 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14520 "previous definition here");
14521 underlying_type = NULL_TREE;
14522 }
14523 }
14524
14525 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14526 || processing_template_decl)
14527 {
14528 /* In case of error, make a dummy enum to allow parsing to
14529 continue. */
14530 if (enumtype == error_mark_node)
14531 {
14532 name = make_anon_name ();
14533 enumtype = NULL_TREE;
14534 }
14535
14536 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14537 of an opaque enum, or an opaque enum of an already defined
14538 enumeration (C++11).
14539 In any other case, it'll be NULL_TREE. */
14540 if (!enumtype)
14541 {
14542 if (is_new)
14543 *is_new = true;
14544 }
14545 prevtype = enumtype;
14546
14547 /* Do not push the decl more than once. */
14548 if (!enumtype
14549 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
14550 {
14551 enumtype = cxx_make_type (ENUMERAL_TYPE);
14552 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14553
14554 /* std::byte aliases anything. */
14555 if (enumtype != error_mark_node
14556 && TYPE_CONTEXT (enumtype) == std_node
14557 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14558 TYPE_ALIAS_SET (enumtype) = 0;
14559 }
14560 else
14561 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14562 false);
14563
14564 if (enumtype == error_mark_node)
14565 return error_mark_node;
14566
14567 /* The enum is considered opaque until the opening '{' of the
14568 enumerator list. */
14569 SET_OPAQUE_ENUM_P (enumtype, true);
14570 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14571 }
14572
14573 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14574
14575 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14576
14577 if (underlying_type)
14578 {
14579 if (ENUM_UNDERLYING_TYPE (enumtype))
14580 /* We already checked that it matches, don't change it to a different
14581 typedef variant. */;
14582 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14583 {
14584 copy_type_enum (enumtype, underlying_type);
14585 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14586 }
14587 else if (dependent_type_p (underlying_type))
14588 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14589 else
14590 error ("underlying type %qT of %qT must be an integral type",
14591 underlying_type, enumtype);
14592 }
14593
14594 /* If into a template class, the returned enum is always the first
14595 declaration (opaque or not) seen. This way all the references to
14596 this type will be to the same declaration. The following ones are used
14597 only to check for definition errors. */
14598 if (prevtype && processing_template_decl)
14599 return prevtype;
14600 else
14601 return enumtype;
14602 }
14603
14604 /* After processing and defining all the values of an enumeration type,
14605 install their decls in the enumeration type.
14606 ENUMTYPE is the type object. */
14607
14608 void
14609 finish_enum_value_list (tree enumtype)
14610 {
14611 tree values;
14612 tree underlying_type;
14613 tree decl;
14614 tree value;
14615 tree minnode, maxnode;
14616 tree t;
14617
14618 bool fixed_underlying_type_p
14619 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14620
14621 /* We built up the VALUES in reverse order. */
14622 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14623
14624 /* For an enum defined in a template, just set the type of the values;
14625 all further processing is postponed until the template is
14626 instantiated. We need to set the type so that tsubst of a CONST_DECL
14627 works. */
14628 if (processing_template_decl)
14629 {
14630 for (values = TYPE_VALUES (enumtype);
14631 values;
14632 values = TREE_CHAIN (values))
14633 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14634 return;
14635 }
14636
14637 /* Determine the minimum and maximum values of the enumerators. */
14638 if (TYPE_VALUES (enumtype))
14639 {
14640 minnode = maxnode = NULL_TREE;
14641
14642 for (values = TYPE_VALUES (enumtype);
14643 values;
14644 values = TREE_CHAIN (values))
14645 {
14646 decl = TREE_VALUE (values);
14647
14648 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14649 each enumerator has the type of its enumeration. Prior to the
14650 closing brace, the type of each enumerator is the type of its
14651 initializing value. */
14652 TREE_TYPE (decl) = enumtype;
14653
14654 /* Update the minimum and maximum values, if appropriate. */
14655 value = DECL_INITIAL (decl);
14656 if (value == error_mark_node)
14657 value = integer_zero_node;
14658 /* Figure out what the minimum and maximum values of the
14659 enumerators are. */
14660 if (!minnode)
14661 minnode = maxnode = value;
14662 else if (tree_int_cst_lt (maxnode, value))
14663 maxnode = value;
14664 else if (tree_int_cst_lt (value, minnode))
14665 minnode = value;
14666 }
14667 }
14668 else
14669 /* [dcl.enum]
14670
14671 If the enumerator-list is empty, the underlying type is as if
14672 the enumeration had a single enumerator with value 0. */
14673 minnode = maxnode = integer_zero_node;
14674
14675 if (!fixed_underlying_type_p)
14676 {
14677 /* Compute the number of bits require to represent all values of the
14678 enumeration. We must do this before the type of MINNODE and
14679 MAXNODE are transformed, since tree_int_cst_min_precision relies
14680 on the TREE_TYPE of the value it is passed. */
14681 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14682 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14683 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14684 int precision = MAX (lowprec, highprec);
14685 unsigned int itk;
14686 bool use_short_enum;
14687
14688 /* Determine the underlying type of the enumeration.
14689
14690 [dcl.enum]
14691
14692 The underlying type of an enumeration is an integral type that
14693 can represent all the enumerator values defined in the
14694 enumeration. It is implementation-defined which integral type is
14695 used as the underlying type for an enumeration except that the
14696 underlying type shall not be larger than int unless the value of
14697 an enumerator cannot fit in an int or unsigned int.
14698
14699 We use "int" or an "unsigned int" as the underlying type, even if
14700 a smaller integral type would work, unless the user has
14701 explicitly requested that we use the smallest possible type. The
14702 user can request that for all enumerations with a command line
14703 flag, or for just one enumeration with an attribute. */
14704
14705 use_short_enum = flag_short_enums
14706 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14707
14708 /* If the precision of the type was specified with an attribute and it
14709 was too small, give an error. Otherwise, use it. */
14710 if (TYPE_PRECISION (enumtype))
14711 {
14712 if (precision > TYPE_PRECISION (enumtype))
14713 error ("specified mode too small for enumeral values");
14714 else
14715 {
14716 use_short_enum = true;
14717 precision = TYPE_PRECISION (enumtype);
14718 }
14719 }
14720
14721 for (itk = (use_short_enum ? itk_char : itk_int);
14722 itk != itk_none;
14723 itk++)
14724 {
14725 underlying_type = integer_types[itk];
14726 if (underlying_type != NULL_TREE
14727 && TYPE_PRECISION (underlying_type) >= precision
14728 && TYPE_SIGN (underlying_type) == sgn)
14729 break;
14730 }
14731 if (itk == itk_none)
14732 {
14733 /* DR 377
14734
14735 IF no integral type can represent all the enumerator values, the
14736 enumeration is ill-formed. */
14737 error ("no integral type can represent all of the enumerator values "
14738 "for %qT", enumtype);
14739 precision = TYPE_PRECISION (long_long_integer_type_node);
14740 underlying_type = integer_types[itk_unsigned_long_long];
14741 }
14742
14743 /* [dcl.enum]
14744
14745 The value of sizeof() applied to an enumeration type, an object
14746 of an enumeration type, or an enumerator, is the value of sizeof()
14747 applied to the underlying type. */
14748 copy_type_enum (enumtype, underlying_type);
14749
14750 /* Compute the minimum and maximum values for the type.
14751
14752 [dcl.enum]
14753
14754 For an enumeration where emin is the smallest enumerator and emax
14755 is the largest, the values of the enumeration are the values of the
14756 underlying type in the range bmin to bmax, where bmin and bmax are,
14757 respectively, the smallest and largest values of the smallest bit-
14758 field that can store emin and emax. */
14759
14760 /* The middle-end currently assumes that types with TYPE_PRECISION
14761 narrower than their underlying type are suitably zero or sign
14762 extended to fill their mode. Similarly, it assumes that the front
14763 end assures that a value of a particular type must be within
14764 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14765
14766 We used to set these fields based on bmin and bmax, but that led
14767 to invalid assumptions like optimizing away bounds checking. So
14768 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14769 TYPE_MAX_VALUE to the values for the mode above and only restrict
14770 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14771 ENUM_UNDERLYING_TYPE (enumtype)
14772 = build_distinct_type_copy (underlying_type);
14773 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14774 set_min_and_max_values_for_integral_type
14775 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14776
14777 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14778 if (flag_strict_enums)
14779 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14780 }
14781 else
14782 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14783
14784 /* Convert each of the enumerators to the type of the underlying
14785 type of the enumeration. */
14786 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14787 {
14788 location_t saved_location;
14789
14790 decl = TREE_VALUE (values);
14791 saved_location = input_location;
14792 input_location = DECL_SOURCE_LOCATION (decl);
14793 if (fixed_underlying_type_p)
14794 /* If the enumeration type has a fixed underlying type, we
14795 already checked all of the enumerator values. */
14796 value = DECL_INITIAL (decl);
14797 else
14798 value = perform_implicit_conversion (underlying_type,
14799 DECL_INITIAL (decl),
14800 tf_warning_or_error);
14801 input_location = saved_location;
14802
14803 /* Do not clobber shared ints. */
14804 if (value != error_mark_node)
14805 {
14806 value = copy_node (value);
14807
14808 TREE_TYPE (value) = enumtype;
14809 }
14810 DECL_INITIAL (decl) = value;
14811 }
14812
14813 /* Fix up all variant types of this enum type. */
14814 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14815 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14816
14817 if (at_class_scope_p ()
14818 && COMPLETE_TYPE_P (current_class_type)
14819 && UNSCOPED_ENUM_P (enumtype))
14820 {
14821 insert_late_enum_def_bindings (current_class_type, enumtype);
14822 /* TYPE_FIELDS needs fixup. */
14823 fixup_type_variants (current_class_type);
14824 }
14825
14826 /* Finish debugging output for this type. */
14827 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14828
14829 /* Each enumerator now has the type of its enumeration. Clear the cache
14830 so that this change in types doesn't confuse us later on. */
14831 clear_cv_and_fold_caches ();
14832 }
14833
14834 /* Finishes the enum type. This is called only the first time an
14835 enumeration is seen, be it opaque or odinary.
14836 ENUMTYPE is the type object. */
14837
14838 void
14839 finish_enum (tree enumtype)
14840 {
14841 if (processing_template_decl)
14842 {
14843 if (at_function_scope_p ())
14844 add_stmt (build_min (TAG_DEFN, enumtype));
14845 return;
14846 }
14847
14848 /* If this is a forward declaration, there should not be any variants,
14849 though we can get a variant in the middle of an enum-specifier with
14850 wacky code like 'enum E { e = sizeof(const E*) };' */
14851 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14852 && (TYPE_VALUES (enumtype)
14853 || !TYPE_NEXT_VARIANT (enumtype)));
14854 }
14855
14856 /* Build and install a CONST_DECL for an enumeration constant of the
14857 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14858 Apply ATTRIBUTES if available. LOC is the location of NAME.
14859 Assignment of sequential values by default is handled here. */
14860
14861 void
14862 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14863 location_t loc)
14864 {
14865 tree decl;
14866 tree context;
14867 tree type;
14868
14869 /* scalar_constant_value will pull out this expression, so make sure
14870 it's folded as appropriate. */
14871 if (processing_template_decl)
14872 value = fold_non_dependent_expr (value);
14873
14874 /* If the VALUE was erroneous, pretend it wasn't there; that will
14875 result in the enum being assigned the next value in sequence. */
14876 if (value == error_mark_node)
14877 value = NULL_TREE;
14878
14879 /* Remove no-op casts from the value. */
14880 if (value)
14881 STRIP_TYPE_NOPS (value);
14882
14883 if (! processing_template_decl)
14884 {
14885 /* Validate and default VALUE. */
14886 if (value != NULL_TREE)
14887 {
14888 if (!ENUM_UNDERLYING_TYPE (enumtype))
14889 {
14890 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14891 value, true);
14892 if (tmp_value)
14893 value = tmp_value;
14894 }
14895 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14896 (TREE_TYPE (value)))
14897 value = perform_implicit_conversion_flags
14898 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14899 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14900
14901 if (value == error_mark_node)
14902 value = NULL_TREE;
14903
14904 if (value != NULL_TREE)
14905 {
14906 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14907 (TREE_TYPE (value)))
14908 {
14909 error ("enumerator value for %qD must have integral or "
14910 "unscoped enumeration type", name);
14911 value = NULL_TREE;
14912 }
14913 else
14914 {
14915 value = cxx_constant_value (value);
14916
14917 if (TREE_CODE (value) != INTEGER_CST)
14918 {
14919 error ("enumerator value for %qD is not an integer "
14920 "constant", name);
14921 value = NULL_TREE;
14922 }
14923 }
14924 }
14925 }
14926
14927 /* Default based on previous value. */
14928 if (value == NULL_TREE)
14929 {
14930 if (TYPE_VALUES (enumtype))
14931 {
14932 tree prev_value;
14933
14934 /* C++03 7.2/4: If no initializer is specified for the first
14935 enumerator, the type is an unspecified integral
14936 type. Otherwise the type is the same as the type of the
14937 initializing value of the preceding enumerator unless the
14938 incremented value is not representable in that type, in
14939 which case the type is an unspecified integral type
14940 sufficient to contain the incremented value. */
14941 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14942 if (error_operand_p (prev_value))
14943 value = error_mark_node;
14944 else
14945 {
14946 wi::overflow_type overflowed;
14947 tree type = TREE_TYPE (prev_value);
14948 signop sgn = TYPE_SIGN (type);
14949 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14950 &overflowed);
14951 if (!overflowed)
14952 {
14953 bool pos = !wi::neg_p (wi, sgn);
14954 if (!wi::fits_to_tree_p (wi, type))
14955 {
14956 unsigned int itk;
14957 for (itk = itk_int; itk != itk_none; itk++)
14958 {
14959 type = integer_types[itk];
14960 if (type != NULL_TREE
14961 && (pos || !TYPE_UNSIGNED (type))
14962 && wi::fits_to_tree_p (wi, type))
14963 break;
14964 }
14965 if (type && cxx_dialect < cxx11
14966 && itk > itk_unsigned_long)
14967 pedwarn (input_location, OPT_Wlong_long,
14968 pos ? G_("\
14969 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14970 incremented enumerator value is too large for %<long%>"));
14971 }
14972 if (type == NULL_TREE)
14973 overflowed = wi::OVF_UNKNOWN;
14974 else
14975 value = wide_int_to_tree (type, wi);
14976 }
14977
14978 if (overflowed)
14979 {
14980 error ("overflow in enumeration values at %qD", name);
14981 value = error_mark_node;
14982 }
14983 }
14984 }
14985 else
14986 value = integer_zero_node;
14987 }
14988
14989 /* Remove no-op casts from the value. */
14990 STRIP_TYPE_NOPS (value);
14991
14992 /* If the underlying type of the enum is fixed, check whether
14993 the enumerator values fits in the underlying type. If it
14994 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14995 if (ENUM_UNDERLYING_TYPE (enumtype)
14996 && value
14997 && TREE_CODE (value) == INTEGER_CST)
14998 {
14999 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
15000 error ("enumerator value %qE is outside the range of underlying "
15001 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
15002
15003 /* Convert the value to the appropriate type. */
15004 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
15005 }
15006 }
15007
15008 /* C++ associates enums with global, function, or class declarations. */
15009 context = current_scope ();
15010
15011 /* Build the actual enumeration constant. Note that the enumeration
15012 constants have the underlying type of the enum (if it is fixed)
15013 or the type of their initializer (if the underlying type of the
15014 enum is not fixed):
15015
15016 [ C++0x dcl.enum ]
15017
15018 If the underlying type is fixed, the type of each enumerator
15019 prior to the closing brace is the underlying type; if the
15020 initializing value of an enumerator cannot be represented by
15021 the underlying type, the program is ill-formed. If the
15022 underlying type is not fixed, the type of each enumerator is
15023 the type of its initializing value.
15024
15025 If the underlying type is not fixed, it will be computed by
15026 finish_enum and we will reset the type of this enumerator. Of
15027 course, if we're processing a template, there may be no value. */
15028 type = value ? TREE_TYPE (value) : NULL_TREE;
15029
15030 decl = build_decl (loc, CONST_DECL, name, type);
15031
15032 DECL_CONTEXT (decl) = enumtype;
15033 TREE_CONSTANT (decl) = 1;
15034 TREE_READONLY (decl) = 1;
15035 DECL_INITIAL (decl) = value;
15036
15037 if (attributes)
15038 cplus_decl_attributes (&decl, attributes, 0);
15039
15040 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
15041 {
15042 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
15043 on the TYPE_FIELDS list for `S'. (That's so that you can say
15044 things like `S::i' later.) */
15045
15046 /* The enumerator may be getting declared outside of its enclosing
15047 class, like so:
15048
15049 class S { public: enum E : int; }; enum S::E : int { i = 7; };
15050
15051 For which case we need to make sure that the access of `S::i'
15052 matches the access of `S::E'. */
15053 tree saved_cas = current_access_specifier;
15054 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
15055 current_access_specifier = access_private_node;
15056 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
15057 current_access_specifier = access_protected_node;
15058 else
15059 current_access_specifier = access_public_node;
15060
15061 finish_member_declaration (decl);
15062
15063 current_access_specifier = saved_cas;
15064 }
15065 else
15066 pushdecl (decl);
15067
15068 /* Add this enumeration constant to the list for this type. */
15069 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
15070 }
15071
15072 /* Look for an enumerator with the given NAME within the enumeration
15073 type ENUMTYPE. This routine is used primarily for qualified name
15074 lookup into an enumerator in C++0x, e.g.,
15075
15076 enum class Color { Red, Green, Blue };
15077
15078 Color color = Color::Red;
15079
15080 Returns the value corresponding to the enumerator, or
15081 NULL_TREE if no such enumerator was found. */
15082 tree
15083 lookup_enumerator (tree enumtype, tree name)
15084 {
15085 tree e;
15086 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
15087
15088 e = purpose_member (name, TYPE_VALUES (enumtype));
15089 return e? TREE_VALUE (e) : NULL_TREE;
15090 }
15091
15092 \f
15093 /* We're defining DECL. Make sure that its type is OK. */
15094
15095 static void
15096 check_function_type (tree decl, tree current_function_parms)
15097 {
15098 tree fntype = TREE_TYPE (decl);
15099 tree return_type = complete_type (TREE_TYPE (fntype));
15100
15101 /* In a function definition, arg types must be complete. */
15102 require_complete_types_for_parms (current_function_parms);
15103
15104 if (dependent_type_p (return_type)
15105 || type_uses_auto (return_type))
15106 return;
15107 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
15108 {
15109 tree args = TYPE_ARG_TYPES (fntype);
15110
15111 error ("return type %q#T is incomplete", return_type);
15112
15113 /* Make it return void instead. */
15114 if (TREE_CODE (fntype) == METHOD_TYPE)
15115 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
15116 void_type_node,
15117 TREE_CHAIN (args));
15118 else
15119 fntype = build_function_type (void_type_node, args);
15120 fntype = (cp_build_type_attribute_variant
15121 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
15122 fntype = cxx_copy_lang_qualifiers (fntype, TREE_TYPE (decl));
15123 TREE_TYPE (decl) = fntype;
15124 }
15125 else
15126 {
15127 abstract_virtuals_error (decl, TREE_TYPE (fntype));
15128 maybe_warn_parm_abi (TREE_TYPE (fntype),
15129 DECL_SOURCE_LOCATION (decl));
15130 }
15131 }
15132
15133 /* True iff FN is an implicitly-defined default constructor. */
15134
15135 static bool
15136 implicit_default_ctor_p (tree fn)
15137 {
15138 return (DECL_CONSTRUCTOR_P (fn)
15139 && !user_provided_p (fn)
15140 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
15141 }
15142
15143 /* Clobber the contents of *this to let the back end know that the object
15144 storage is dead when we enter the constructor or leave the destructor. */
15145
15146 static tree
15147 build_clobber_this ()
15148 {
15149 /* Clobbering an empty base is pointless, and harmful if its one byte
15150 TYPE_SIZE overlays real data. */
15151 if (is_empty_class (current_class_type))
15152 return void_node;
15153
15154 /* If we have virtual bases, clobber the whole object, but only if we're in
15155 charge. If we don't have virtual bases, clobber the as-base type so we
15156 don't mess with tail padding. */
15157 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
15158
15159 tree ctype = current_class_type;
15160 if (!vbases)
15161 ctype = CLASSTYPE_AS_BASE (ctype);
15162
15163 tree clobber = build_clobber (ctype);
15164
15165 tree thisref = current_class_ref;
15166 if (ctype != current_class_type)
15167 {
15168 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
15169 thisref = convert_from_reference (thisref);
15170 }
15171
15172 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
15173 if (vbases)
15174 exprstmt = build_if_in_charge (exprstmt);
15175
15176 return exprstmt;
15177 }
15178
15179 /* Create the FUNCTION_DECL for a function definition.
15180 DECLSPECS and DECLARATOR are the parts of the declaration;
15181 they describe the function's name and the type it returns,
15182 but twisted together in a fashion that parallels the syntax of C.
15183
15184 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
15185 DECLARATOR is really the DECL for the function we are about to
15186 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
15187 indicating that the function is an inline defined in-class.
15188
15189 This function creates a binding context for the function body
15190 as well as setting up the FUNCTION_DECL in current_function_decl.
15191
15192 For C++, we must first check whether that datum makes any sense.
15193 For example, "class A local_a(1,2);" means that variable local_a
15194 is an aggregate of type A, which should have a constructor
15195 applied to it with the argument list [1, 2].
15196
15197 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
15198 or may be a BLOCK if the function has been defined previously
15199 in this translation unit. On exit, DECL_INITIAL (decl1) will be
15200 error_mark_node if the function has never been defined, or
15201 a BLOCK if the function has been defined somewhere. */
15202
15203 bool
15204 start_preparsed_function (tree decl1, tree attrs, int flags)
15205 {
15206 tree ctype = NULL_TREE;
15207 tree fntype;
15208 tree restype;
15209 int doing_friend = 0;
15210 cp_binding_level *bl;
15211 tree current_function_parms;
15212 struct c_fileinfo *finfo
15213 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
15214 bool honor_interface;
15215
15216 /* Sanity check. */
15217 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
15218 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
15219
15220 fntype = TREE_TYPE (decl1);
15221 if (TREE_CODE (fntype) == METHOD_TYPE)
15222 ctype = TYPE_METHOD_BASETYPE (fntype);
15223
15224 /* ISO C++ 11.4/5. A friend function defined in a class is in
15225 the (lexical) scope of the class in which it is defined. */
15226 if (!ctype && DECL_FRIEND_P (decl1))
15227 {
15228 ctype = DECL_FRIEND_CONTEXT (decl1);
15229
15230 /* CTYPE could be null here if we're dealing with a template;
15231 for example, `inline friend float foo()' inside a template
15232 will have no CTYPE set. */
15233 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
15234 ctype = NULL_TREE;
15235 else
15236 doing_friend = 1;
15237 }
15238
15239 if (DECL_DECLARED_INLINE_P (decl1)
15240 && lookup_attribute ("noinline", attrs))
15241 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
15242 "inline function %qD given attribute noinline", decl1);
15243
15244 /* Handle gnu_inline attribute. */
15245 if (GNU_INLINE_P (decl1))
15246 {
15247 DECL_EXTERNAL (decl1) = 1;
15248 DECL_NOT_REALLY_EXTERN (decl1) = 0;
15249 DECL_INTERFACE_KNOWN (decl1) = 1;
15250 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
15251 }
15252
15253 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
15254 /* This is a constructor, we must ensure that any default args
15255 introduced by this definition are propagated to the clones
15256 now. The clones are used directly in overload resolution. */
15257 adjust_clone_args (decl1);
15258
15259 /* Sometimes we don't notice that a function is a static member, and
15260 build a METHOD_TYPE for it. Fix that up now. */
15261 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
15262 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
15263
15264 /* Set up current_class_type, and enter the scope of the class, if
15265 appropriate. */
15266 if (ctype)
15267 push_nested_class (ctype);
15268 else if (DECL_STATIC_FUNCTION_P (decl1))
15269 push_nested_class (DECL_CONTEXT (decl1));
15270
15271 /* Now that we have entered the scope of the class, we must restore
15272 the bindings for any template parameters surrounding DECL1, if it
15273 is an inline member template. (Order is important; consider the
15274 case where a template parameter has the same name as a field of
15275 the class.) It is not until after this point that
15276 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
15277 if (flags & SF_INCLASS_INLINE)
15278 maybe_begin_member_template_processing (decl1);
15279
15280 /* Effective C++ rule 15. */
15281 if (warn_ecpp
15282 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
15283 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
15284 && VOID_TYPE_P (TREE_TYPE (fntype)))
15285 warning (OPT_Weffc__,
15286 "%<operator=%> should return a reference to %<*this%>");
15287
15288 /* Make the init_value nonzero so pushdecl knows this is not tentative.
15289 error_mark_node is replaced below (in poplevel) with the BLOCK. */
15290 if (!DECL_INITIAL (decl1))
15291 DECL_INITIAL (decl1) = error_mark_node;
15292
15293 /* This function exists in static storage.
15294 (This does not mean `static' in the C sense!) */
15295 TREE_STATIC (decl1) = 1;
15296
15297 /* We must call push_template_decl after current_class_type is set
15298 up. (If we are processing inline definitions after exiting a
15299 class scope, current_class_type will be NULL_TREE until set above
15300 by push_nested_class.) */
15301 if (processing_template_decl)
15302 {
15303 tree newdecl1 = push_template_decl (decl1);
15304 if (newdecl1 == error_mark_node)
15305 {
15306 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
15307 pop_nested_class ();
15308 return false;
15309 }
15310 decl1 = newdecl1;
15311 }
15312
15313 /* Make sure the parameter and return types are reasonable. When
15314 you declare a function, these types can be incomplete, but they
15315 must be complete when you define the function. */
15316 check_function_type (decl1, DECL_ARGUMENTS (decl1));
15317
15318 /* Build the return declaration for the function. */
15319 restype = TREE_TYPE (fntype);
15320
15321 if (DECL_RESULT (decl1) == NULL_TREE)
15322 {
15323 tree resdecl;
15324
15325 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
15326 DECL_ARTIFICIAL (resdecl) = 1;
15327 DECL_IGNORED_P (resdecl) = 1;
15328 DECL_RESULT (decl1) = resdecl;
15329
15330 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
15331 }
15332
15333 /* Record the decl so that the function name is defined.
15334 If we already have a decl for this name, and it is a FUNCTION_DECL,
15335 use the old decl. */
15336 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
15337 {
15338 /* A specialization is not used to guide overload resolution. */
15339 if (!DECL_FUNCTION_MEMBER_P (decl1)
15340 && !(DECL_USE_TEMPLATE (decl1) &&
15341 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
15342 {
15343 tree olddecl = pushdecl (decl1);
15344
15345 if (olddecl == error_mark_node)
15346 /* If something went wrong when registering the declaration,
15347 use DECL1; we have to have a FUNCTION_DECL to use when
15348 parsing the body of the function. */
15349 ;
15350 else
15351 {
15352 /* Otherwise, OLDDECL is either a previous declaration
15353 of the same function or DECL1 itself. */
15354
15355 if (warn_missing_declarations
15356 && olddecl == decl1
15357 && !DECL_MAIN_P (decl1)
15358 && TREE_PUBLIC (decl1)
15359 && !DECL_DECLARED_INLINE_P (decl1))
15360 {
15361 tree context;
15362
15363 /* Check whether DECL1 is in an anonymous
15364 namespace. */
15365 for (context = DECL_CONTEXT (decl1);
15366 context;
15367 context = DECL_CONTEXT (context))
15368 {
15369 if (TREE_CODE (context) == NAMESPACE_DECL
15370 && DECL_NAME (context) == NULL_TREE)
15371 break;
15372 }
15373
15374 if (context == NULL)
15375 warning_at (DECL_SOURCE_LOCATION (decl1),
15376 OPT_Wmissing_declarations,
15377 "no previous declaration for %qD", decl1);
15378 }
15379
15380 decl1 = olddecl;
15381 }
15382 }
15383 else
15384 {
15385 /* We need to set the DECL_CONTEXT. */
15386 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
15387 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
15388 }
15389 fntype = TREE_TYPE (decl1);
15390 restype = TREE_TYPE (fntype);
15391
15392 /* If #pragma weak applies, mark the decl appropriately now.
15393 The pragma only applies to global functions. Because
15394 determining whether or not the #pragma applies involves
15395 computing the mangled name for the declaration, we cannot
15396 apply the pragma until after we have merged this declaration
15397 with any previous declarations; if the original declaration
15398 has a linkage specification, that specification applies to
15399 the definition as well, and may affect the mangled name. */
15400 if (DECL_FILE_SCOPE_P (decl1))
15401 maybe_apply_pragma_weak (decl1);
15402 }
15403
15404 /* We are now in the scope of the function being defined. */
15405 current_function_decl = decl1;
15406
15407 /* Save the parm names or decls from this function's declarator
15408 where store_parm_decls will find them. */
15409 current_function_parms = DECL_ARGUMENTS (decl1);
15410
15411 /* Let the user know we're compiling this function. */
15412 announce_function (decl1);
15413
15414 gcc_assert (DECL_INITIAL (decl1));
15415
15416 /* This function may already have been parsed, in which case just
15417 return; our caller will skip over the body without parsing. */
15418 if (DECL_INITIAL (decl1) != error_mark_node)
15419 return true;
15420
15421 /* Initialize RTL machinery. We cannot do this until
15422 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
15423 even when processing a template; this is how we get
15424 CFUN set up, and our per-function variables initialized.
15425 FIXME factor out the non-RTL stuff. */
15426 bl = current_binding_level;
15427 allocate_struct_function (decl1, processing_template_decl);
15428
15429 /* Initialize the language data structures. Whenever we start
15430 a new function, we destroy temporaries in the usual way. */
15431 cfun->language = ggc_cleared_alloc<language_function> ();
15432 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15433 current_binding_level = bl;
15434
15435 if (!processing_template_decl && type_uses_auto (restype))
15436 {
15437 FNDECL_USED_AUTO (decl1) = true;
15438 current_function_auto_return_pattern = restype;
15439 }
15440
15441 /* Start the statement-tree, start the tree now. */
15442 DECL_SAVED_TREE (decl1) = push_stmt_list ();
15443
15444 /* If we are (erroneously) defining a function that we have already
15445 defined before, wipe out what we knew before. */
15446 if (!DECL_PENDING_INLINE_P (decl1))
15447 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
15448
15449 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
15450 {
15451 /* We know that this was set up by `grokclassfn'. We do not
15452 wait until `store_parm_decls', since evil parse errors may
15453 never get us to that point. Here we keep the consistency
15454 between `current_class_type' and `current_class_ptr'. */
15455 tree t = DECL_ARGUMENTS (decl1);
15456
15457 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
15458 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
15459
15460 cp_function_chain->x_current_class_ref
15461 = cp_build_fold_indirect_ref (t);
15462 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
15463 cp_function_chain->x_current_class_ptr = t;
15464
15465 /* Constructors and destructors need to know whether they're "in
15466 charge" of initializing virtual base classes. */
15467 t = DECL_CHAIN (t);
15468 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15469 {
15470 current_in_charge_parm = t;
15471 t = DECL_CHAIN (t);
15472 }
15473 if (DECL_HAS_VTT_PARM_P (decl1))
15474 {
15475 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15476 current_vtt_parm = t;
15477 }
15478 }
15479
15480 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15481 /* Implicitly-defined methods (like the
15482 destructor for a class in which no destructor
15483 is explicitly declared) must not be defined
15484 until their definition is needed. So, we
15485 ignore interface specifications for
15486 compiler-generated functions. */
15487 && !DECL_ARTIFICIAL (decl1));
15488
15489 if (processing_template_decl)
15490 /* Don't mess with interface flags. */;
15491 else if (DECL_INTERFACE_KNOWN (decl1))
15492 {
15493 tree ctx = decl_function_context (decl1);
15494
15495 if (DECL_NOT_REALLY_EXTERN (decl1))
15496 DECL_EXTERNAL (decl1) = 0;
15497
15498 if (ctx != NULL_TREE && vague_linkage_p (ctx))
15499 /* This is a function in a local class in an extern inline
15500 or template function. */
15501 comdat_linkage (decl1);
15502 }
15503 /* If this function belongs to an interface, it is public.
15504 If it belongs to someone else's interface, it is also external.
15505 This only affects inlines and template instantiations. */
15506 else if (!finfo->interface_unknown && honor_interface)
15507 {
15508 if (DECL_DECLARED_INLINE_P (decl1)
15509 || DECL_TEMPLATE_INSTANTIATION (decl1))
15510 {
15511 DECL_EXTERNAL (decl1)
15512 = (finfo->interface_only
15513 || (DECL_DECLARED_INLINE_P (decl1)
15514 && ! flag_implement_inlines
15515 && !DECL_VINDEX (decl1)));
15516
15517 /* For WIN32 we also want to put these in linkonce sections. */
15518 maybe_make_one_only (decl1);
15519 }
15520 else
15521 DECL_EXTERNAL (decl1) = 0;
15522 DECL_INTERFACE_KNOWN (decl1) = 1;
15523 /* If this function is in an interface implemented in this file,
15524 make sure that the back end knows to emit this function
15525 here. */
15526 if (!DECL_EXTERNAL (decl1))
15527 mark_needed (decl1);
15528 }
15529 else if (finfo->interface_unknown && finfo->interface_only
15530 && honor_interface)
15531 {
15532 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15533 interface, we will have both finfo->interface_unknown and
15534 finfo->interface_only set. In that case, we don't want to
15535 use the normal heuristics because someone will supply a
15536 #pragma implementation elsewhere, and deducing it here would
15537 produce a conflict. */
15538 comdat_linkage (decl1);
15539 DECL_EXTERNAL (decl1) = 0;
15540 DECL_INTERFACE_KNOWN (decl1) = 1;
15541 DECL_DEFER_OUTPUT (decl1) = 1;
15542 }
15543 else
15544 {
15545 /* This is a definition, not a reference.
15546 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15547 if (!GNU_INLINE_P (decl1))
15548 DECL_EXTERNAL (decl1) = 0;
15549
15550 if ((DECL_DECLARED_INLINE_P (decl1)
15551 || DECL_TEMPLATE_INSTANTIATION (decl1))
15552 && ! DECL_INTERFACE_KNOWN (decl1))
15553 DECL_DEFER_OUTPUT (decl1) = 1;
15554 else
15555 DECL_INTERFACE_KNOWN (decl1) = 1;
15556 }
15557
15558 /* Determine the ELF visibility attribute for the function. We must not
15559 do this before calling "pushdecl", as we must allow "duplicate_decls"
15560 to merge any attributes appropriately. We also need to wait until
15561 linkage is set. */
15562 if (!DECL_CLONED_FUNCTION_P (decl1))
15563 determine_visibility (decl1);
15564
15565 if (!processing_template_decl)
15566 maybe_instantiate_noexcept (decl1);
15567
15568 begin_scope (sk_function_parms, decl1);
15569
15570 ++function_depth;
15571
15572 if (DECL_DESTRUCTOR_P (decl1)
15573 || (DECL_CONSTRUCTOR_P (decl1)
15574 && targetm.cxx.cdtor_returns_this ()))
15575 {
15576 cdtor_label = create_artificial_label (input_location);
15577 LABEL_DECL_CDTOR (cdtor_label) = true;
15578 }
15579
15580 start_fname_decls ();
15581
15582 store_parm_decls (current_function_parms);
15583
15584 push_operator_bindings ();
15585
15586 if (!processing_template_decl
15587 && (flag_lifetime_dse > 1)
15588 && DECL_CONSTRUCTOR_P (decl1)
15589 && !DECL_CLONED_FUNCTION_P (decl1)
15590 /* Clobbering an empty base is harmful if it overlays real data. */
15591 && !is_empty_class (current_class_type)
15592 /* We can't clobber safely for an implicitly-defined default constructor
15593 because part of the initialization might happen before we enter the
15594 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15595 && !implicit_default_ctor_p (decl1))
15596 finish_expr_stmt (build_clobber_this ());
15597
15598 if (!processing_template_decl
15599 && DECL_CONSTRUCTOR_P (decl1)
15600 && sanitize_flags_p (SANITIZE_VPTR)
15601 && !DECL_CLONED_FUNCTION_P (decl1)
15602 && !implicit_default_ctor_p (decl1))
15603 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15604
15605 start_lambda_scope (decl1);
15606
15607 return true;
15608 }
15609
15610
15611 /* Like start_preparsed_function, except that instead of a
15612 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15613
15614 Returns true on success. If the DECLARATOR is not suitable
15615 for a function, we return false, which tells the parser to
15616 skip the entire function. */
15617
15618 bool
15619 start_function (cp_decl_specifier_seq *declspecs,
15620 const cp_declarator *declarator,
15621 tree attrs)
15622 {
15623 tree decl1;
15624
15625 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15626 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15627 if (decl1 == error_mark_node)
15628 return false;
15629 /* If the declarator is not suitable for a function definition,
15630 cause a syntax error. */
15631 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15632 {
15633 error ("invalid function declaration");
15634 return false;
15635 }
15636
15637 if (DECL_MAIN_P (decl1))
15638 /* main must return int. grokfndecl should have corrected it
15639 (and issued a diagnostic) if the user got it wrong. */
15640 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15641 integer_type_node));
15642
15643 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15644 }
15645 \f
15646 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15647 FN. */
15648
15649 static bool
15650 use_eh_spec_block (tree fn)
15651 {
15652 return (flag_exceptions && flag_enforce_eh_specs
15653 && !processing_template_decl
15654 && !type_throw_all_p (TREE_TYPE (fn))
15655 /* We insert the EH_SPEC_BLOCK only in the original
15656 function; then, it is copied automatically to the
15657 clones. */
15658 && !DECL_CLONED_FUNCTION_P (fn)
15659 /* Implicitly-generated constructors and destructors have
15660 exception specifications. However, those specifications
15661 are the union of the possible exceptions specified by the
15662 constructors/destructors for bases and members, so no
15663 unallowed exception will ever reach this function. By
15664 not creating the EH_SPEC_BLOCK we save a little memory,
15665 and we avoid spurious warnings about unreachable
15666 code. */
15667 && !DECL_DEFAULTED_FN (fn));
15668 }
15669
15670 /* Store the parameter declarations into the current function declaration.
15671 This is called after parsing the parameter declarations, before
15672 digesting the body of the function.
15673
15674 Also install to binding contour return value identifier, if any. */
15675
15676 static void
15677 store_parm_decls (tree current_function_parms)
15678 {
15679 tree fndecl = current_function_decl;
15680 tree parm;
15681
15682 /* This is a chain of any other decls that came in among the parm
15683 declarations. If a parm is declared with enum {foo, bar} x;
15684 then CONST_DECLs for foo and bar are put here. */
15685 tree nonparms = NULL_TREE;
15686
15687 if (current_function_parms)
15688 {
15689 /* This case is when the function was defined with an ANSI prototype.
15690 The parms already have decls, so we need not do anything here
15691 except record them as in effect
15692 and complain if any redundant old-style parm decls were written. */
15693
15694 tree specparms = current_function_parms;
15695 tree next;
15696
15697 /* Must clear this because it might contain TYPE_DECLs declared
15698 at class level. */
15699 current_binding_level->names = NULL;
15700
15701 /* If we're doing semantic analysis, then we'll call pushdecl
15702 for each of these. We must do them in reverse order so that
15703 they end in the correct forward order. */
15704 specparms = nreverse (specparms);
15705
15706 for (parm = specparms; parm; parm = next)
15707 {
15708 next = DECL_CHAIN (parm);
15709 if (TREE_CODE (parm) == PARM_DECL)
15710 pushdecl (parm);
15711 else
15712 {
15713 /* If we find an enum constant or a type tag,
15714 put it aside for the moment. */
15715 TREE_CHAIN (parm) = NULL_TREE;
15716 nonparms = chainon (nonparms, parm);
15717 }
15718 }
15719
15720 /* Get the decls in their original chain order and record in the
15721 function. This is all and only the PARM_DECLs that were
15722 pushed into scope by the loop above. */
15723 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15724 }
15725 else
15726 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15727
15728 /* Now store the final chain of decls for the arguments
15729 as the decl-chain of the current lexical scope.
15730 Put the enumerators in as well, at the front so that
15731 DECL_ARGUMENTS is not modified. */
15732 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15733
15734 if (use_eh_spec_block (current_function_decl))
15735 current_eh_spec_block = begin_eh_spec_block ();
15736 }
15737
15738 \f
15739 /* We have finished doing semantic analysis on DECL, but have not yet
15740 generated RTL for its body. Save away our current state, so that
15741 when we want to generate RTL later we know what to do. */
15742
15743 static void
15744 save_function_data (tree decl)
15745 {
15746 struct language_function *f;
15747
15748 /* Save the language-specific per-function data so that we can
15749 get it back when we really expand this function. */
15750 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15751
15752 /* Make a copy. */
15753 f = ggc_alloc<language_function> ();
15754 memcpy (f, cp_function_chain, sizeof (struct language_function));
15755 DECL_SAVED_FUNCTION_DATA (decl) = f;
15756
15757 /* Clear out the bits we don't need. */
15758 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15759 f->bindings = NULL;
15760 f->base.local_typedefs = NULL;
15761 }
15762
15763
15764 /* Set the return value of the constructor (if present). */
15765
15766 static void
15767 finish_constructor_body (void)
15768 {
15769 tree val;
15770 tree exprstmt;
15771
15772 if (targetm.cxx.cdtor_returns_this ())
15773 {
15774 /* Any return from a constructor will end up here. */
15775 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15776
15777 val = DECL_ARGUMENTS (current_function_decl);
15778 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15779 DECL_RESULT (current_function_decl), val);
15780 /* Return the address of the object. */
15781 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15782 add_stmt (exprstmt);
15783 }
15784 }
15785
15786 /* Do all the processing for the beginning of a destructor; set up the
15787 vtable pointers and cleanups for bases and members. */
15788
15789 static void
15790 begin_destructor_body (void)
15791 {
15792 tree compound_stmt;
15793
15794 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15795 issued an error message. We still want to try to process the
15796 body of the function, but initialize_vtbl_ptrs will crash if
15797 TYPE_BINFO is NULL. */
15798 if (COMPLETE_TYPE_P (current_class_type))
15799 {
15800 compound_stmt = begin_compound_stmt (0);
15801 /* Make all virtual function table pointers in non-virtual base
15802 classes point to CURRENT_CLASS_TYPE's virtual function
15803 tables. */
15804 initialize_vtbl_ptrs (current_class_ptr);
15805 finish_compound_stmt (compound_stmt);
15806
15807 if (flag_lifetime_dse
15808 /* Clobbering an empty base is harmful if it overlays real data. */
15809 && !is_empty_class (current_class_type))
15810 {
15811 if (sanitize_flags_p (SANITIZE_VPTR)
15812 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15813 && TYPE_CONTAINS_VPTR_P (current_class_type))
15814 {
15815 tree binfo = TYPE_BINFO (current_class_type);
15816 tree ref
15817 = cp_build_fold_indirect_ref (current_class_ptr);
15818
15819 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15820 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15821 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15822 NOP_EXPR, vtbl,
15823 tf_warning_or_error);
15824 /* If the vptr is shared with some virtual nearly empty base,
15825 don't clear it if not in charge, the dtor of the virtual
15826 nearly empty base will do that later. */
15827 if (CLASSTYPE_VBASECLASSES (current_class_type)
15828 && CLASSTYPE_PRIMARY_BINFO (current_class_type)
15829 && BINFO_VIRTUAL_P
15830 (CLASSTYPE_PRIMARY_BINFO (current_class_type)))
15831 {
15832 stmt = convert_to_void (stmt, ICV_STATEMENT,
15833 tf_warning_or_error);
15834 stmt = build_if_in_charge (stmt);
15835 }
15836 finish_decl_cleanup (NULL_TREE, stmt);
15837 }
15838 else
15839 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15840 }
15841
15842 /* And insert cleanups for our bases and members so that they
15843 will be properly destroyed if we throw. */
15844 push_base_cleanups ();
15845 }
15846 }
15847
15848 /* At the end of every destructor we generate code to delete the object if
15849 necessary. Do that now. */
15850
15851 static void
15852 finish_destructor_body (void)
15853 {
15854 tree exprstmt;
15855
15856 /* Any return from a destructor will end up here; that way all base
15857 and member cleanups will be run when the function returns. */
15858 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15859
15860 if (targetm.cxx.cdtor_returns_this ())
15861 {
15862 tree val;
15863
15864 val = DECL_ARGUMENTS (current_function_decl);
15865 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15866 DECL_RESULT (current_function_decl), val);
15867 /* Return the address of the object. */
15868 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15869 add_stmt (exprstmt);
15870 }
15871 }
15872
15873 /* Do the necessary processing for the beginning of a function body, which
15874 in this case includes member-initializers, but not the catch clauses of
15875 a function-try-block. Currently, this means opening a binding level
15876 for the member-initializers (in a ctor), member cleanups (in a dtor),
15877 and capture proxies (in a lambda operator()). */
15878
15879 tree
15880 begin_function_body (void)
15881 {
15882 tree stmt;
15883
15884 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15885 return NULL_TREE;
15886
15887 if (processing_template_decl)
15888 /* Do nothing now. */;
15889 else
15890 /* Always keep the BLOCK node associated with the outermost pair of
15891 curly braces of a function. These are needed for correct
15892 operation of dwarfout.c. */
15893 keep_next_level (true);
15894
15895 stmt = begin_compound_stmt (BCS_FN_BODY);
15896
15897 if (processing_template_decl)
15898 /* Do nothing now. */;
15899 else if (DECL_DESTRUCTOR_P (current_function_decl))
15900 begin_destructor_body ();
15901
15902 return stmt;
15903 }
15904
15905 /* Do the processing for the end of a function body. Currently, this means
15906 closing out the cleanups for fully-constructed bases and members, and in
15907 the case of the destructor, deleting the object if desired. Again, this
15908 is only meaningful for [cd]tors, since they are the only functions where
15909 there is a significant distinction between the main body and any
15910 function catch clauses. Handling, say, main() return semantics here
15911 would be wrong, as flowing off the end of a function catch clause for
15912 main() would also need to return 0. */
15913
15914 void
15915 finish_function_body (tree compstmt)
15916 {
15917 if (compstmt == NULL_TREE)
15918 return;
15919
15920 /* Close the block. */
15921 finish_compound_stmt (compstmt);
15922
15923 if (processing_template_decl)
15924 /* Do nothing now. */;
15925 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15926 finish_constructor_body ();
15927 else if (DECL_DESTRUCTOR_P (current_function_decl))
15928 finish_destructor_body ();
15929 }
15930
15931 /* Given a function, returns the BLOCK corresponding to the outermost level
15932 of curly braces, skipping the artificial block created for constructor
15933 initializers. */
15934
15935 tree
15936 outer_curly_brace_block (tree fndecl)
15937 {
15938 tree block = DECL_INITIAL (fndecl);
15939 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15940 return block;
15941 block = BLOCK_SUBBLOCKS (block);
15942 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15943 return block;
15944 block = BLOCK_SUBBLOCKS (block);
15945 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15946 return block;
15947 }
15948
15949 /* If FNDECL is a class's key method, add the class to the list of
15950 keyed classes that should be emitted. */
15951
15952 static void
15953 record_key_method_defined (tree fndecl)
15954 {
15955 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15956 && DECL_VIRTUAL_P (fndecl)
15957 && !processing_template_decl)
15958 {
15959 tree fnclass = DECL_CONTEXT (fndecl);
15960 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15961 vec_safe_push (keyed_classes, fnclass);
15962 }
15963 }
15964
15965 /* Subroutine of finish_function.
15966 Save the body of constexpr functions for possible
15967 future compile time evaluation. */
15968
15969 static void
15970 maybe_save_function_definition (tree fun)
15971 {
15972 if (!processing_template_decl
15973 && DECL_DECLARED_CONSTEXPR_P (fun)
15974 && !cp_function_chain->invalid_constexpr
15975 && !DECL_CLONED_FUNCTION_P (fun))
15976 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15977 }
15978
15979 /* Attempt to add a fix-it hint to RICHLOC suggesting the insertion
15980 of "return *this;" immediately before its location, using FNDECL's
15981 first statement (if any) to give the indentation, if appropriate. */
15982
15983 static void
15984 add_return_star_this_fixit (gcc_rich_location *richloc, tree fndecl)
15985 {
15986 location_t indent = UNKNOWN_LOCATION;
15987 tree stmts = expr_first (DECL_SAVED_TREE (fndecl));
15988 if (stmts)
15989 indent = EXPR_LOCATION (stmts);
15990 richloc->add_fixit_insert_formatted ("return *this;",
15991 richloc->get_loc (),
15992 indent);
15993 }
15994
15995 /* Finish up a function declaration and compile that function
15996 all the way to assembler language output. The free the storage
15997 for the function definition. INLINE_P is TRUE if we just
15998 finished processing the body of an in-class inline function
15999 definition. (This processing will have taken place after the
16000 class definition is complete.) */
16001
16002 tree
16003 finish_function (bool inline_p)
16004 {
16005 tree fndecl = current_function_decl;
16006 tree fntype, ctype = NULL_TREE;
16007
16008 /* When we get some parse errors, we can end up without a
16009 current_function_decl, so cope. */
16010 if (fndecl == NULL_TREE)
16011 return error_mark_node;
16012
16013 finish_lambda_scope ();
16014
16015 if (c_dialect_objc ())
16016 objc_finish_function ();
16017
16018 record_key_method_defined (fndecl);
16019
16020 fntype = TREE_TYPE (fndecl);
16021
16022 /* TREE_READONLY (fndecl) = 1;
16023 This caused &foo to be of type ptr-to-const-function
16024 which then got a warning when stored in a ptr-to-function variable. */
16025
16026 gcc_assert (building_stmt_list_p ());
16027 /* The current function is being defined, so its DECL_INITIAL should
16028 be set, and unless there's a multiple definition, it should be
16029 error_mark_node. */
16030 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
16031
16032 /* For a cloned function, we've already got all the code we need;
16033 there's no need to add any extra bits. */
16034 if (!DECL_CLONED_FUNCTION_P (fndecl))
16035 {
16036 /* Make it so that `main' always returns 0 by default. */
16037 if (DECL_MAIN_P (current_function_decl))
16038 finish_return_stmt (integer_zero_node);
16039
16040 if (use_eh_spec_block (current_function_decl))
16041 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
16042 (TREE_TYPE (current_function_decl)),
16043 current_eh_spec_block);
16044 }
16045
16046 /* If we're saving up tree structure, tie off the function now. */
16047 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
16048
16049 finish_fname_decls ();
16050
16051 /* If this function can't throw any exceptions, remember that. */
16052 if (!processing_template_decl
16053 && !cp_function_chain->can_throw
16054 && !flag_non_call_exceptions
16055 && !decl_replaceable_p (fndecl))
16056 TREE_NOTHROW (fndecl) = 1;
16057
16058 /* This must come after expand_function_end because cleanups might
16059 have declarations (from inline functions) that need to go into
16060 this function's blocks. */
16061
16062 /* If the current binding level isn't the outermost binding level
16063 for this function, either there is a bug, or we have experienced
16064 syntax errors and the statement tree is malformed. */
16065 if (current_binding_level->kind != sk_function_parms)
16066 {
16067 /* Make sure we have already experienced errors. */
16068 gcc_assert (errorcount);
16069
16070 /* Throw away the broken statement tree and extra binding
16071 levels. */
16072 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
16073
16074 while (current_binding_level->kind != sk_function_parms)
16075 {
16076 if (current_binding_level->kind == sk_class)
16077 pop_nested_class ();
16078 else
16079 poplevel (0, 0, 0);
16080 }
16081 }
16082 poplevel (1, 0, 1);
16083
16084 /* Statements should always be full-expressions at the outermost set
16085 of curly braces for a function. */
16086 gcc_assert (stmts_are_full_exprs_p ());
16087
16088 /* If there are no return statements in a function with auto return type,
16089 the return type is void. But if the declared type is something like
16090 auto*, this is an error. */
16091 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
16092 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
16093 {
16094 if (is_auto (current_function_auto_return_pattern))
16095 {
16096 apply_deduced_return_type (fndecl, void_type_node);
16097 fntype = TREE_TYPE (fndecl);
16098 }
16099 else if (!current_function_returns_value
16100 && !current_function_returns_null)
16101 {
16102 error ("no return statements in function returning %qT",
16103 current_function_auto_return_pattern);
16104 inform (input_location, "only plain %<auto%> return type can be "
16105 "deduced to %<void%>");
16106 }
16107 }
16108
16109 // If this is a concept, check that the definition is reasonable.
16110 if (DECL_DECLARED_CONCEPT_P (fndecl))
16111 check_function_concept (fndecl);
16112
16113 /* Lambda closure members are implicitly constexpr if possible. */
16114 if (cxx_dialect >= cxx17
16115 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
16116 DECL_DECLARED_CONSTEXPR_P (fndecl)
16117 = ((processing_template_decl
16118 || is_valid_constexpr_fn (fndecl, /*complain*/false))
16119 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
16120
16121 /* Save constexpr function body before it gets munged by
16122 the NRV transformation. */
16123 maybe_save_function_definition (fndecl);
16124
16125 /* Invoke the pre-genericize plugin before we start munging things. */
16126 if (!processing_template_decl)
16127 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
16128
16129 /* Perform delayed folding before NRV transformation. */
16130 if (!processing_template_decl)
16131 cp_fold_function (fndecl);
16132
16133 /* Set up the named return value optimization, if we can. Candidate
16134 variables are selected in check_return_expr. */
16135 if (current_function_return_value)
16136 {
16137 tree r = current_function_return_value;
16138 tree outer;
16139
16140 if (r != error_mark_node
16141 /* This is only worth doing for fns that return in memory--and
16142 simpler, since we don't have to worry about promoted modes. */
16143 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
16144 /* Only allow this for variables declared in the outer scope of
16145 the function so we know that their lifetime always ends with a
16146 return; see g++.dg/opt/nrv6.C. We could be more flexible if
16147 we were to do this optimization in tree-ssa. */
16148 && (outer = outer_curly_brace_block (fndecl))
16149 && chain_member (r, BLOCK_VARS (outer)))
16150 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
16151
16152 current_function_return_value = NULL_TREE;
16153 }
16154
16155 /* Remember that we were in class scope. */
16156 if (current_class_name)
16157 ctype = current_class_type;
16158
16159 /* Must mark the RESULT_DECL as being in this function. */
16160 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
16161
16162 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
16163 to the FUNCTION_DECL node itself. */
16164 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
16165
16166 /* Save away current state, if appropriate. */
16167 if (!processing_template_decl)
16168 save_function_data (fndecl);
16169
16170 /* Complain if there's just no return statement. */
16171 if (warn_return_type
16172 && !VOID_TYPE_P (TREE_TYPE (fntype))
16173 && !dependent_type_p (TREE_TYPE (fntype))
16174 && !current_function_returns_value && !current_function_returns_null
16175 /* Don't complain if we abort or throw. */
16176 && !current_function_returns_abnormally
16177 /* Don't complain if there's an infinite loop. */
16178 && !current_function_infinite_loop
16179 /* Don't complain if we are declared noreturn. */
16180 && !TREE_THIS_VOLATILE (fndecl)
16181 && !DECL_NAME (DECL_RESULT (fndecl))
16182 && !TREE_NO_WARNING (fndecl)
16183 /* Structor return values (if any) are set by the compiler. */
16184 && !DECL_CONSTRUCTOR_P (fndecl)
16185 && !DECL_DESTRUCTOR_P (fndecl)
16186 && targetm.warn_func_return (fndecl))
16187 {
16188 gcc_rich_location richloc (input_location);
16189 /* Potentially add a "return *this;" fix-it hint for
16190 assignment operators. */
16191 if (IDENTIFIER_ASSIGN_OP_P (DECL_NAME (fndecl)))
16192 {
16193 tree valtype = TREE_TYPE (DECL_RESULT (fndecl));
16194 if (TREE_CODE (valtype) == REFERENCE_TYPE
16195 && current_class_ref
16196 && same_type_ignoring_top_level_qualifiers_p
16197 (TREE_TYPE (valtype), TREE_TYPE (current_class_ref))
16198 && global_dc->option_enabled (OPT_Wreturn_type,
16199 global_dc->option_state))
16200 add_return_star_this_fixit (&richloc, fndecl);
16201 }
16202 if (warning_at (&richloc, OPT_Wreturn_type,
16203 "no return statement in function returning non-void"))
16204 TREE_NO_WARNING (fndecl) = 1;
16205 }
16206
16207 /* Store the end of the function, so that we get good line number
16208 info for the epilogue. */
16209 cfun->function_end_locus = input_location;
16210
16211 /* Complain about parameters that are only set, but never otherwise used. */
16212 if (warn_unused_but_set_parameter
16213 && !processing_template_decl
16214 && errorcount == unused_but_set_errorcount
16215 && !DECL_CLONED_FUNCTION_P (fndecl))
16216 {
16217 tree decl;
16218
16219 for (decl = DECL_ARGUMENTS (fndecl);
16220 decl;
16221 decl = DECL_CHAIN (decl))
16222 if (TREE_USED (decl)
16223 && TREE_CODE (decl) == PARM_DECL
16224 && !DECL_READ_P (decl)
16225 && DECL_NAME (decl)
16226 && !DECL_ARTIFICIAL (decl)
16227 && !TREE_NO_WARNING (decl)
16228 && !DECL_IN_SYSTEM_HEADER (decl)
16229 && TREE_TYPE (decl) != error_mark_node
16230 && !TYPE_REF_P (TREE_TYPE (decl))
16231 && (!CLASS_TYPE_P (TREE_TYPE (decl))
16232 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
16233 warning_at (DECL_SOURCE_LOCATION (decl),
16234 OPT_Wunused_but_set_parameter,
16235 "parameter %qD set but not used", decl);
16236 unused_but_set_errorcount = errorcount;
16237 }
16238
16239 /* Complain about locally defined typedefs that are not used in this
16240 function. */
16241 maybe_warn_unused_local_typedefs ();
16242
16243 /* Possibly warn about unused parameters. */
16244 if (warn_unused_parameter
16245 && !processing_template_decl
16246 && !DECL_CLONED_FUNCTION_P (fndecl))
16247 do_warn_unused_parameter (fndecl);
16248
16249 /* Genericize before inlining. */
16250 if (!processing_template_decl)
16251 {
16252 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
16253 cp_genericize (fndecl);
16254 /* Clear out the bits we don't need. */
16255 f->x_current_class_ptr = NULL;
16256 f->x_current_class_ref = NULL;
16257 f->x_eh_spec_block = NULL;
16258 f->x_in_charge_parm = NULL;
16259 f->x_vtt_parm = NULL;
16260 f->x_return_value = NULL;
16261 f->bindings = NULL;
16262 f->extern_decl_map = NULL;
16263 f->infinite_loops = NULL;
16264 }
16265
16266 /* We're leaving the context of this function, so zap cfun. It's still in
16267 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
16268 set_cfun (NULL);
16269 current_function_decl = NULL;
16270
16271 /* If this is an in-class inline definition, we may have to pop the
16272 bindings for the template parameters that we added in
16273 maybe_begin_member_template_processing when start_function was
16274 called. */
16275 if (inline_p)
16276 maybe_end_member_template_processing ();
16277
16278 /* Leave the scope of the class. */
16279 if (ctype)
16280 pop_nested_class ();
16281
16282 --function_depth;
16283
16284 /* Clean up. */
16285 current_function_decl = NULL_TREE;
16286
16287 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
16288 return fndecl;
16289 }
16290 \f
16291 /* Create the FUNCTION_DECL for a function definition.
16292 DECLSPECS and DECLARATOR are the parts of the declaration;
16293 they describe the return type and the name of the function,
16294 but twisted together in a fashion that parallels the syntax of C.
16295
16296 This function creates a binding context for the function body
16297 as well as setting up the FUNCTION_DECL in current_function_decl.
16298
16299 Returns a FUNCTION_DECL on success.
16300
16301 If the DECLARATOR is not suitable for a function (it defines a datum
16302 instead), we return 0, which tells yyparse to report a parse error.
16303
16304 May return void_type_node indicating that this method is actually
16305 a friend. See grokfield for more details.
16306
16307 Came here with a `.pushlevel' .
16308
16309 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
16310 CHANGES TO CODE IN `grokfield'. */
16311
16312 tree
16313 grokmethod (cp_decl_specifier_seq *declspecs,
16314 const cp_declarator *declarator, tree attrlist)
16315 {
16316 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
16317 &attrlist);
16318
16319 if (fndecl == error_mark_node)
16320 return error_mark_node;
16321
16322 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
16323 {
16324 error ("invalid member function declaration");
16325 return error_mark_node;
16326 }
16327
16328 if (attrlist)
16329 cplus_decl_attributes (&fndecl, attrlist, 0);
16330
16331 /* Pass friends other than inline friend functions back. */
16332 if (fndecl == void_type_node)
16333 return fndecl;
16334
16335 if (DECL_IN_AGGR_P (fndecl))
16336 {
16337 if (DECL_CLASS_SCOPE_P (fndecl))
16338 error ("%qD is already defined in class %qT", fndecl,
16339 DECL_CONTEXT (fndecl));
16340 return error_mark_node;
16341 }
16342
16343 check_template_shadow (fndecl);
16344
16345 if (TREE_PUBLIC (fndecl))
16346 DECL_COMDAT (fndecl) = 1;
16347 DECL_DECLARED_INLINE_P (fndecl) = 1;
16348 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
16349
16350 /* We process method specializations in finish_struct_1. */
16351 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
16352 {
16353 fndecl = push_template_decl (fndecl);
16354 if (fndecl == error_mark_node)
16355 return fndecl;
16356 }
16357
16358 if (! DECL_FRIEND_P (fndecl))
16359 {
16360 if (DECL_CHAIN (fndecl))
16361 {
16362 fndecl = copy_node (fndecl);
16363 TREE_CHAIN (fndecl) = NULL_TREE;
16364 }
16365 }
16366
16367 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
16368
16369 DECL_IN_AGGR_P (fndecl) = 1;
16370 return fndecl;
16371 }
16372 \f
16373
16374 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
16375 we can lay it out later, when and if its type becomes complete.
16376
16377 Also handle constexpr variables where the initializer involves
16378 an unlowered PTRMEM_CST because the class isn't complete yet. */
16379
16380 void
16381 maybe_register_incomplete_var (tree var)
16382 {
16383 gcc_assert (VAR_P (var));
16384
16385 /* Keep track of variables with incomplete types. */
16386 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
16387 && DECL_EXTERNAL (var))
16388 {
16389 tree inner_type = TREE_TYPE (var);
16390
16391 while (TREE_CODE (inner_type) == ARRAY_TYPE)
16392 inner_type = TREE_TYPE (inner_type);
16393 inner_type = TYPE_MAIN_VARIANT (inner_type);
16394
16395 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
16396 /* RTTI TD entries are created while defining the type_info. */
16397 || (TYPE_LANG_SPECIFIC (inner_type)
16398 && TYPE_BEING_DEFINED (inner_type)))
16399 {
16400 incomplete_var iv = {var, inner_type};
16401 vec_safe_push (incomplete_vars, iv);
16402 }
16403 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
16404 && decl_constant_var_p (var)
16405 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
16406 {
16407 /* When the outermost open class is complete we can resolve any
16408 pointers-to-members. */
16409 tree context = outermost_open_class ();
16410 incomplete_var iv = {var, context};
16411 vec_safe_push (incomplete_vars, iv);
16412 }
16413 }
16414 }
16415
16416 /* Called when a class type (given by TYPE) is defined. If there are
16417 any existing VAR_DECLs whose type has been completed by this
16418 declaration, update them now. */
16419
16420 void
16421 complete_vars (tree type)
16422 {
16423 unsigned ix;
16424 incomplete_var *iv;
16425
16426 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
16427 {
16428 if (same_type_p (type, iv->incomplete_type))
16429 {
16430 tree var = iv->decl;
16431 tree type = TREE_TYPE (var);
16432
16433 if (type != error_mark_node
16434 && (TYPE_MAIN_VARIANT (strip_array_types (type))
16435 == iv->incomplete_type))
16436 {
16437 /* Complete the type of the variable. The VAR_DECL itself
16438 will be laid out in expand_expr. */
16439 complete_type (type);
16440 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
16441 }
16442
16443 /* Remove this entry from the list. */
16444 incomplete_vars->unordered_remove (ix);
16445 }
16446 else
16447 ix++;
16448 }
16449
16450 /* Check for pending declarations which may have abstract type. */
16451 complete_type_check_abstract (type);
16452 }
16453
16454 /* If DECL is of a type which needs a cleanup, build and return an
16455 expression to perform that cleanup here. Return NULL_TREE if no
16456 cleanup need be done. DECL can also be a _REF when called from
16457 split_nonconstant_init_1. */
16458
16459 tree
16460 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
16461 {
16462 tree type;
16463 tree attr;
16464 tree cleanup;
16465
16466 /* Assume no cleanup is required. */
16467 cleanup = NULL_TREE;
16468
16469 if (error_operand_p (decl))
16470 return cleanup;
16471
16472 /* Handle "__attribute__((cleanup))". We run the cleanup function
16473 before the destructor since the destructor is what actually
16474 terminates the lifetime of the object. */
16475 if (DECL_P (decl))
16476 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
16477 else
16478 attr = NULL_TREE;
16479 if (attr)
16480 {
16481 tree id;
16482 tree fn;
16483 tree arg;
16484
16485 /* Get the name specified by the user for the cleanup function. */
16486 id = TREE_VALUE (TREE_VALUE (attr));
16487 /* Look up the name to find the cleanup function to call. It is
16488 important to use lookup_name here because that is what is
16489 used in c-common.c:handle_cleanup_attribute when performing
16490 initial checks on the attribute. Note that those checks
16491 include ensuring that the function found is not an overloaded
16492 function, or an object with an overloaded call operator,
16493 etc.; we can rely on the fact that the function found is an
16494 ordinary FUNCTION_DECL. */
16495 fn = lookup_name (id);
16496 arg = build_address (decl);
16497 if (!mark_used (decl, complain) && !(complain & tf_error))
16498 return error_mark_node;
16499 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
16500 if (cleanup == error_mark_node)
16501 return error_mark_node;
16502 }
16503 /* Handle ordinary C++ destructors. */
16504 type = TREE_TYPE (decl);
16505 if (type_build_dtor_call (type))
16506 {
16507 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16508 tree addr;
16509 tree call;
16510
16511 if (TREE_CODE (type) == ARRAY_TYPE)
16512 addr = decl;
16513 else
16514 addr = build_address (decl);
16515
16516 call = build_delete (TREE_TYPE (addr), addr,
16517 sfk_complete_destructor, flags, 0, complain);
16518 if (call == error_mark_node)
16519 cleanup = error_mark_node;
16520 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16521 /* Discard the call. */;
16522 else if (cleanup)
16523 cleanup = cp_build_compound_expr (cleanup, call, complain);
16524 else
16525 cleanup = call;
16526 }
16527
16528 /* build_delete sets the location of the destructor call to the
16529 current location, even though the destructor is going to be
16530 called later, at the end of the current scope. This can lead to
16531 a "jumpy" behavior for users of debuggers when they step around
16532 the end of the block. So let's unset the location of the
16533 destructor call instead. */
16534 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16535
16536 if (cleanup
16537 && DECL_P (decl)
16538 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16539 /* Treat objects with destructors as used; the destructor may do
16540 something substantive. */
16541 && !mark_used (decl, complain) && !(complain & tf_error))
16542 return error_mark_node;
16543
16544 return cleanup;
16545 }
16546
16547 \f
16548 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16549 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16550 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16551
16552 tree
16553 static_fn_type (tree memfntype)
16554 {
16555 tree fntype;
16556 tree args;
16557
16558 if (TYPE_PTRMEMFUNC_P (memfntype))
16559 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16560 if (INDIRECT_TYPE_P (memfntype)
16561 || TREE_CODE (memfntype) == FUNCTION_DECL)
16562 memfntype = TREE_TYPE (memfntype);
16563 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16564 return memfntype;
16565 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16566 args = TYPE_ARG_TYPES (memfntype);
16567 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16568 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
16569 fntype = (cp_build_type_attribute_variant
16570 (fntype, TYPE_ATTRIBUTES (memfntype)));
16571 fntype = cxx_copy_lang_qualifiers (fntype, memfntype);
16572 return fntype;
16573 }
16574
16575 /* DECL was originally constructed as a non-static member function,
16576 but turned out to be static. Update it accordingly. */
16577
16578 void
16579 revert_static_member_fn (tree decl)
16580 {
16581 tree stype = static_fn_type (decl);
16582 cp_cv_quals quals = type_memfn_quals (stype);
16583 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16584
16585 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16586 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16587
16588 TREE_TYPE (decl) = stype;
16589
16590 if (DECL_ARGUMENTS (decl))
16591 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16592 DECL_STATIC_FUNCTION_P (decl) = 1;
16593 }
16594
16595 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16596 one of the language-independent trees. */
16597
16598 enum cp_tree_node_structure_enum
16599 cp_tree_node_structure (union lang_tree_node * t)
16600 {
16601 switch (TREE_CODE (&t->generic))
16602 {
16603 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16604 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16605 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16606 case OVERLOAD: return TS_CP_OVERLOAD;
16607 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16608 case PTRMEM_CST: return TS_CP_PTRMEM;
16609 case BASELINK: return TS_CP_BASELINK;
16610 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16611 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16612 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16613 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16614 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16615 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16616 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16617 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16618 default: return TS_CP_GENERIC;
16619 }
16620 }
16621
16622 /* Build the void_list_node (void_type_node having been created). */
16623 tree
16624 build_void_list_node (void)
16625 {
16626 tree t = build_tree_list (NULL_TREE, void_type_node);
16627 return t;
16628 }
16629
16630 bool
16631 cp_missing_noreturn_ok_p (tree decl)
16632 {
16633 /* A missing noreturn is ok for the `main' function. */
16634 return DECL_MAIN_P (decl);
16635 }
16636
16637 /* Return the decl used to identify the COMDAT group into which DECL should
16638 be placed. */
16639
16640 tree
16641 cxx_comdat_group (tree decl)
16642 {
16643 /* Virtual tables, construction virtual tables, and virtual table
16644 tables all go in a single COMDAT group, named after the primary
16645 virtual table. */
16646 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16647 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16648 /* For all other DECLs, the COMDAT group is the mangled name of the
16649 declaration itself. */
16650 else
16651 {
16652 while (DECL_THUNK_P (decl))
16653 {
16654 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16655 into the same section as the target function. In that case
16656 we must return target's name. */
16657 tree target = THUNK_TARGET (decl);
16658 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16659 && DECL_SECTION_NAME (target) != NULL
16660 && DECL_ONE_ONLY (target))
16661 decl = target;
16662 else
16663 break;
16664 }
16665 }
16666
16667 return decl;
16668 }
16669
16670 /* Returns the return type for FN as written by the user, which may include
16671 a placeholder for a deduced return type. */
16672
16673 tree
16674 fndecl_declared_return_type (tree fn)
16675 {
16676 fn = STRIP_TEMPLATE (fn);
16677 if (FNDECL_USED_AUTO (fn))
16678 {
16679 struct language_function *f = NULL;
16680 if (DECL_STRUCT_FUNCTION (fn))
16681 f = DECL_STRUCT_FUNCTION (fn)->language;
16682 if (f == NULL)
16683 f = DECL_SAVED_FUNCTION_DATA (fn);
16684 return f->x_auto_return_pattern;
16685 }
16686 return TREE_TYPE (TREE_TYPE (fn));
16687 }
16688
16689 /* Returns true iff DECL is a variable or function declared with an auto type
16690 that has not yet been deduced to a real type. */
16691
16692 bool
16693 undeduced_auto_decl (tree decl)
16694 {
16695 if (cxx_dialect < cxx11)
16696 return false;
16697 STRIP_ANY_LOCATION_WRAPPER (decl);
16698 return ((VAR_OR_FUNCTION_DECL_P (decl)
16699 || TREE_CODE (decl) == TEMPLATE_DECL)
16700 && type_uses_auto (TREE_TYPE (decl)));
16701 }
16702
16703 /* Complain if DECL has an undeduced return type. */
16704
16705 bool
16706 require_deduced_type (tree decl, tsubst_flags_t complain)
16707 {
16708 if (undeduced_auto_decl (decl))
16709 {
16710 if (complain & tf_error)
16711 error ("use of %qD before deduction of %<auto%>", decl);
16712 return false;
16713 }
16714 return true;
16715 }
16716
16717 /* Create a representation of the explicit-specifier with
16718 constant-expression of EXPR. COMPLAIN is as for tsubst. */
16719
16720 tree
16721 build_explicit_specifier (tree expr, tsubst_flags_t complain)
16722 {
16723 if (instantiation_dependent_expression_p (expr))
16724 /* Wait for instantiation, tsubst_function_decl will handle it. */
16725 return expr;
16726
16727 expr = instantiate_non_dependent_expr_sfinae (expr, complain);
16728 /* Don't let convert_like_real create more template codes. */
16729 processing_template_decl_sentinel s;
16730 expr = build_converted_constant_bool_expr (expr, complain);
16731 expr = cxx_constant_value (expr);
16732 return expr;
16733 }
16734
16735 #include "gt-cp-decl.h"