]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/cp/decl.c
ca248111eb55628ddecce6afb1856c3f207db328
[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 copy_type_enum (tree , tree);
84 static void check_function_type (tree, tree);
85 static void finish_constructor_body (void);
86 static void begin_destructor_body (void);
87 static void finish_destructor_body (void);
88 static void record_key_method_defined (tree);
89 static tree create_array_type_for_decl (tree, tree, tree, location_t);
90 static tree get_atexit_node (void);
91 static tree get_dso_handle_node (void);
92 static tree start_cleanup_fn (void);
93 static void end_cleanup_fn (void);
94 static tree cp_make_fname_decl (location_t, tree, int);
95 static void initialize_predefined_identifiers (void);
96 static tree check_special_function_return_type
97 (special_function_kind, tree, tree, int, const location_t*);
98 static tree push_cp_library_fn (enum tree_code, tree, int);
99 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
100 static void store_parm_decls (tree);
101 static void initialize_local_var (tree, tree);
102 static void expand_static_init (tree, tree);
103
104 /* The following symbols are subsumed in the cp_global_trees array, and
105 listed here individually for documentation purposes.
106
107 C++ extensions
108 tree wchar_decl_node;
109
110 tree vtable_entry_type;
111 tree delta_type_node;
112 tree __t_desc_type_node;
113
114 tree class_type_node;
115 tree unknown_type_node;
116
117 Array type `vtable_entry_type[]'
118
119 tree vtbl_type_node;
120 tree vtbl_ptr_type_node;
121
122 Namespaces,
123
124 tree std_node;
125 tree abi_node;
126
127 A FUNCTION_DECL which can call `abort'. Not necessarily the
128 one that the user will declare, but sufficient to be called
129 by routines that want to abort the program.
130
131 tree abort_fndecl;
132
133 Used by RTTI
134 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
135 tree tinfo_var_id; */
136
137 tree cp_global_trees[CPTI_MAX];
138
139 /* A list of objects which have constructors or destructors
140 which reside in the global scope. The decl is stored in
141 the TREE_VALUE slot and the initializer is stored
142 in the TREE_PURPOSE slot. */
143 tree static_aggregates;
144
145 /* Like static_aggregates, but for thread_local variables. */
146 tree tls_aggregates;
147
148 /* -- end of C++ */
149
150 /* A node for the integer constant 2. */
151
152 tree integer_two_node;
153
154 /* vector of static decls. */
155 vec<tree, va_gc> *static_decls;
156
157 /* vector of keyed classes. */
158 vec<tree, va_gc> *keyed_classes;
159
160 /* Used only for jumps to as-yet undefined labels, since jumps to
161 defined labels can have their validity checked immediately. */
162
163 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
164 struct named_label_use_entry *next;
165 /* The binding level to which this entry is *currently* attached.
166 This is initially the binding level in which the goto appeared,
167 but is modified as scopes are closed. */
168 cp_binding_level *binding_level;
169 /* The head of the names list that was current when the goto appeared,
170 or the inner scope popped. These are the decls that will *not* be
171 skipped when jumping to the label. */
172 tree names_in_scope;
173 /* The location of the goto, for error reporting. */
174 location_t o_goto_locus;
175 /* True if an OpenMP structured block scope has been closed since
176 the goto appeared. This means that the branch from the label will
177 illegally exit an OpenMP scope. */
178 bool in_omp_scope;
179 };
180
181 /* A list of all LABEL_DECLs in the function that have names. Here so
182 we can clear out their names' definitions at the end of the
183 function, and so we can check the validity of jumps to these labels. */
184
185 struct GTY((for_user)) named_label_entry {
186
187 tree name; /* Name of decl. */
188
189 tree label_decl; /* LABEL_DECL, unless deleted local label. */
190
191 named_label_entry *outer; /* Outer shadowed chain. */
192
193 /* The binding level to which the label is *currently* attached.
194 This is initially set to the binding level in which the label
195 is defined, but is modified as scopes are closed. */
196 cp_binding_level *binding_level;
197
198 /* The head of the names list that was current when the label was
199 defined, or the inner scope popped. These are the decls that will
200 be skipped when jumping to the label. */
201 tree names_in_scope;
202
203 /* A vector of all decls from all binding levels that would be
204 crossed by a backward branch to the label. */
205 vec<tree, va_gc> *bad_decls;
206
207 /* A list of uses of the label, before the label is defined. */
208 named_label_use_entry *uses;
209
210 /* The following bits are set after the label is defined, and are
211 updated as scopes are popped. They indicate that a jump to the
212 label will illegally enter a scope of the given flavor. */
213 bool in_try_scope;
214 bool in_catch_scope;
215 bool in_omp_scope;
216 bool in_transaction_scope;
217 bool in_constexpr_if;
218 };
219
220 #define named_labels cp_function_chain->x_named_labels
221 \f
222 /* The number of function bodies which we are currently processing.
223 (Zero if we are at namespace scope, one inside the body of a
224 function, two inside the body of a function in a local class, etc.) */
225 int function_depth;
226
227 /* Whether the exception-specifier is part of a function type (i.e. C++17). */
228 bool flag_noexcept_type;
229
230 /* States indicating how grokdeclarator() should handle declspecs marked
231 with __attribute__((deprecated)). An object declared as
232 __attribute__((deprecated)) suppresses warnings of uses of other
233 deprecated items. */
234 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
235
236 \f
237 /* A list of VAR_DECLs whose type was incomplete at the time the
238 variable was declared. */
239
240 struct GTY(()) incomplete_var {
241 tree decl;
242 tree incomplete_type;
243 };
244
245
246 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
247 \f
248 /* Returns the kind of template specialization we are currently
249 processing, given that it's declaration contained N_CLASS_SCOPES
250 explicit scope qualifications. */
251
252 tmpl_spec_kind
253 current_tmpl_spec_kind (int n_class_scopes)
254 {
255 int n_template_parm_scopes = 0;
256 int seen_specialization_p = 0;
257 int innermost_specialization_p = 0;
258 cp_binding_level *b;
259
260 /* Scan through the template parameter scopes. */
261 for (b = current_binding_level;
262 b->kind == sk_template_parms;
263 b = b->level_chain)
264 {
265 /* If we see a specialization scope inside a parameter scope,
266 then something is wrong. That corresponds to a declaration
267 like:
268
269 template <class T> template <> ...
270
271 which is always invalid since [temp.expl.spec] forbids the
272 specialization of a class member template if the enclosing
273 class templates are not explicitly specialized as well. */
274 if (b->explicit_spec_p)
275 {
276 if (n_template_parm_scopes == 0)
277 innermost_specialization_p = 1;
278 else
279 seen_specialization_p = 1;
280 }
281 else if (seen_specialization_p == 1)
282 return tsk_invalid_member_spec;
283
284 ++n_template_parm_scopes;
285 }
286
287 /* Handle explicit instantiations. */
288 if (processing_explicit_instantiation)
289 {
290 if (n_template_parm_scopes != 0)
291 /* We've seen a template parameter list during an explicit
292 instantiation. For example:
293
294 template <class T> template void f(int);
295
296 This is erroneous. */
297 return tsk_invalid_expl_inst;
298 else
299 return tsk_expl_inst;
300 }
301
302 if (n_template_parm_scopes < n_class_scopes)
303 /* We've not seen enough template headers to match all the
304 specialized classes present. For example:
305
306 template <class T> void R<T>::S<T>::f(int);
307
308 This is invalid; there needs to be one set of template
309 parameters for each class. */
310 return tsk_insufficient_parms;
311 else if (n_template_parm_scopes == n_class_scopes)
312 /* We're processing a non-template declaration (even though it may
313 be a member of a template class.) For example:
314
315 template <class T> void S<T>::f(int);
316
317 The `class T' matches the `S<T>', leaving no template headers
318 corresponding to the `f'. */
319 return tsk_none;
320 else if (n_template_parm_scopes > n_class_scopes + 1)
321 /* We've got too many template headers. For example:
322
323 template <> template <class T> void f (T);
324
325 There need to be more enclosing classes. */
326 return tsk_excessive_parms;
327 else
328 /* This must be a template. It's of the form:
329
330 template <class T> template <class U> void S<T>::f(U);
331
332 This is a specialization if the innermost level was a
333 specialization; otherwise it's just a definition of the
334 template. */
335 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
336 }
337
338 /* Exit the current scope. */
339
340 void
341 finish_scope (void)
342 {
343 poplevel (0, 0, 0);
344 }
345
346 /* When a label goes out of scope, check to see if that label was used
347 in a valid manner, and issue any appropriate warnings or errors. */
348
349 static void
350 check_label_used (tree label)
351 {
352 if (!processing_template_decl)
353 {
354 if (DECL_INITIAL (label) == NULL_TREE)
355 {
356 location_t location;
357
358 error ("label %q+D used but not defined", label);
359 location = input_location;
360 /* FIXME want (LOCATION_FILE (input_location), (line)0) */
361 /* Avoid crashing later. */
362 define_label (location, DECL_NAME (label));
363 }
364 else
365 warn_for_unused_label (label);
366 }
367 }
368
369 /* Helper function to sort named label entries in a vector by DECL_UID. */
370
371 static int
372 sort_labels (const void *a, const void *b)
373 {
374 tree label1 = *(tree const *) a;
375 tree label2 = *(tree const *) b;
376
377 /* DECL_UIDs can never be equal. */
378 return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1;
379 }
380
381 /* At the end of a function, all labels declared within the function
382 go out of scope. BLOCK is the top-level block for the
383 function. */
384
385 static void
386 pop_labels (tree block)
387 {
388 if (!named_labels)
389 return;
390
391 /* We need to add the labels to the block chain, so debug
392 information is emitted. But, we want the order to be stable so
393 need to sort them first. Otherwise the debug output could be
394 randomly ordered. I guess it's mostly stable, unless the hash
395 table implementation changes. */
396 auto_vec<tree, 32> labels (named_labels->elements ());
397 hash_table<named_label_hash>::iterator end (named_labels->end ());
398 for (hash_table<named_label_hash>::iterator iter
399 (named_labels->begin ()); iter != end; ++iter)
400 {
401 named_label_entry *ent = *iter;
402
403 gcc_checking_assert (!ent->outer);
404 if (ent->label_decl)
405 labels.quick_push (ent->label_decl);
406 ggc_free (ent);
407 }
408 named_labels = NULL;
409 labels.qsort (sort_labels);
410
411 while (labels.length ())
412 {
413 tree label = labels.pop ();
414
415 DECL_CHAIN (label) = BLOCK_VARS (block);
416 BLOCK_VARS (block) = label;
417
418 check_label_used (label);
419 }
420 }
421
422 /* At the end of a block with local labels, restore the outer definition. */
423
424 static void
425 pop_local_label (tree id, tree label)
426 {
427 check_label_used (label);
428 named_label_entry **slot = named_labels->find_slot_with_hash
429 (id, IDENTIFIER_HASH_VALUE (id), NO_INSERT);
430 named_label_entry *ent = *slot;
431
432 if (ent->outer)
433 ent = ent->outer;
434 else
435 {
436 ent = ggc_cleared_alloc<named_label_entry> ();
437 ent->name = id;
438 }
439 *slot = ent;
440 }
441
442 /* The following two routines are used to interface to Objective-C++.
443 The binding level is purposely treated as an opaque type. */
444
445 void *
446 objc_get_current_scope (void)
447 {
448 return current_binding_level;
449 }
450
451 /* The following routine is used by the NeXT-style SJLJ exceptions;
452 variables get marked 'volatile' so as to not be clobbered by
453 _setjmp()/_longjmp() calls. All variables in the current scope,
454 as well as parent scopes up to (but not including) ENCLOSING_BLK
455 shall be thusly marked. */
456
457 void
458 objc_mark_locals_volatile (void *enclosing_blk)
459 {
460 cp_binding_level *scope;
461
462 for (scope = current_binding_level;
463 scope && scope != enclosing_blk;
464 scope = scope->level_chain)
465 {
466 tree decl;
467
468 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
469 objc_volatilize_decl (decl);
470
471 /* Do not climb up past the current function. */
472 if (scope->kind == sk_function_parms)
473 break;
474 }
475 }
476
477 /* True if B is the level for the condition of a constexpr if. */
478
479 static bool
480 level_for_constexpr_if (cp_binding_level *b)
481 {
482 return (b->kind == sk_cond && b->this_entity
483 && TREE_CODE (b->this_entity) == IF_STMT
484 && IF_STMT_CONSTEXPR_P (b->this_entity));
485 }
486
487 /* Update data for defined and undefined labels when leaving a scope. */
488
489 int
490 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
491 {
492 named_label_entry *ent = *slot;
493 cp_binding_level *obl = bl->level_chain;
494
495 if (ent->binding_level == bl)
496 {
497 tree decl;
498
499 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
500 TREE_LISTs representing OVERLOADs, so be careful. */
501 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
502 ? DECL_CHAIN (decl)
503 : TREE_CHAIN (decl)))
504 if (decl_jump_unsafe (decl))
505 vec_safe_push (ent->bad_decls, decl);
506
507 ent->binding_level = obl;
508 ent->names_in_scope = obl->names;
509 switch (bl->kind)
510 {
511 case sk_try:
512 ent->in_try_scope = true;
513 break;
514 case sk_catch:
515 ent->in_catch_scope = true;
516 break;
517 case sk_omp:
518 ent->in_omp_scope = true;
519 break;
520 case sk_transaction:
521 ent->in_transaction_scope = true;
522 break;
523 case sk_block:
524 if (level_for_constexpr_if (bl->level_chain))
525 ent->in_constexpr_if = true;
526 break;
527 default:
528 break;
529 }
530 }
531 else if (ent->uses)
532 {
533 struct named_label_use_entry *use;
534
535 for (use = ent->uses; use ; use = use->next)
536 if (use->binding_level == bl)
537 {
538 use->binding_level = obl;
539 use->names_in_scope = obl->names;
540 if (bl->kind == sk_omp)
541 use->in_omp_scope = true;
542 }
543 }
544
545 return 1;
546 }
547
548 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
549 when errors were reported, except for -Werror-unused-but-set-*. */
550 static int unused_but_set_errorcount;
551
552 /* Exit a binding level.
553 Pop the level off, and restore the state of the identifier-decl mappings
554 that were in effect when this level was entered.
555
556 If KEEP == 1, this level had explicit declarations, so
557 and create a "block" (a BLOCK node) for the level
558 to record its declarations and subblocks for symbol table output.
559
560 If FUNCTIONBODY is nonzero, this level is the body of a function,
561 so create a block as if KEEP were set and also clear out all
562 label names.
563
564 If REVERSE is nonzero, reverse the order of decls before putting
565 them into the BLOCK. */
566
567 tree
568 poplevel (int keep, int reverse, int functionbody)
569 {
570 tree link;
571 /* The chain of decls was accumulated in reverse order.
572 Put it into forward order, just for cleanliness. */
573 tree decls;
574 tree subblocks;
575 tree block;
576 tree decl;
577 scope_kind kind;
578
579 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
580 restart:
581
582 block = NULL_TREE;
583
584 gcc_assert (current_binding_level->kind != sk_class
585 && current_binding_level->kind != sk_namespace);
586
587 if (current_binding_level->kind == sk_cleanup)
588 functionbody = 0;
589 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
590
591 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
592
593 /* We used to use KEEP == 2 to indicate that the new block should go
594 at the beginning of the list of blocks at this binding level,
595 rather than the end. This hack is no longer used. */
596 gcc_assert (keep == 0 || keep == 1);
597
598 if (current_binding_level->keep)
599 keep = 1;
600
601 /* Any uses of undefined labels, and any defined labels, now operate
602 under constraints of next binding contour. */
603 if (cfun && !functionbody && named_labels)
604 named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
605 (current_binding_level);
606
607 /* Get the decls in the order they were written.
608 Usually current_binding_level->names is in reverse order.
609 But parameter decls were previously put in forward order. */
610
611 decls = current_binding_level->names;
612 if (reverse)
613 {
614 decls = nreverse (decls);
615 current_binding_level->names = decls;
616 }
617
618 /* If there were any declarations or structure tags in that level,
619 or if this level is a function body,
620 create a BLOCK to record them for the life of this function. */
621 block = NULL_TREE;
622 /* Avoid function body block if possible. */
623 if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
624 keep = 0;
625 else if (keep == 1 || functionbody)
626 block = make_node (BLOCK);
627 if (block != NULL_TREE)
628 {
629 BLOCK_VARS (block) = decls;
630 BLOCK_SUBBLOCKS (block) = subblocks;
631 }
632
633 /* In each subblock, record that this is its superior. */
634 if (keep >= 0)
635 for (link = subblocks; link; link = BLOCK_CHAIN (link))
636 BLOCK_SUPERCONTEXT (link) = block;
637
638 /* Before we remove the declarations first check for unused variables. */
639 if ((warn_unused_variable || warn_unused_but_set_variable)
640 && current_binding_level->kind != sk_template_parms
641 && !processing_template_decl)
642 for (tree d = get_local_decls (); d; d = TREE_CHAIN (d))
643 {
644 /* There are cases where D itself is a TREE_LIST. See in
645 push_local_binding where the list of decls returned by
646 getdecls is built. */
647 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
648
649 tree type = TREE_TYPE (decl);
650 if (VAR_P (decl)
651 && (! TREE_USED (decl) || !DECL_READ_P (decl))
652 && ! DECL_IN_SYSTEM_HEADER (decl)
653 /* For structured bindings, consider only real variables, not
654 subobjects. */
655 && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl)
656 : (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)))
657 && type != error_mark_node
658 && (!CLASS_TYPE_P (type)
659 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
660 || lookup_attribute ("warn_unused",
661 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
662 {
663 if (! TREE_USED (decl))
664 {
665 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
666 warning_at (DECL_SOURCE_LOCATION (decl),
667 OPT_Wunused_variable,
668 "unused structured binding declaration");
669 else
670 warning_at (DECL_SOURCE_LOCATION (decl),
671 OPT_Wunused_variable, "unused variable %qD", decl);
672 }
673 else if (DECL_CONTEXT (decl) == current_function_decl
674 // For -Wunused-but-set-variable leave references alone.
675 && !TYPE_REF_P (TREE_TYPE (decl))
676 && errorcount == unused_but_set_errorcount)
677 {
678 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
679 warning_at (DECL_SOURCE_LOCATION (decl),
680 OPT_Wunused_but_set_variable, "structured "
681 "binding declaration set but not used");
682 else
683 warning_at (DECL_SOURCE_LOCATION (decl),
684 OPT_Wunused_but_set_variable,
685 "variable %qD set but not used", decl);
686 unused_but_set_errorcount = errorcount;
687 }
688 }
689 }
690
691 /* Remove declarations for all the DECLs in this level. */
692 for (link = decls; link; link = TREE_CHAIN (link))
693 {
694 decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link;
695 tree name = OVL_NAME (decl);
696
697 /* Remove the binding. */
698 if (TREE_CODE (decl) == LABEL_DECL)
699 pop_local_label (name, decl);
700 else
701 pop_local_binding (name, decl);
702 }
703
704 /* Restore the IDENTIFIER_TYPE_VALUEs. */
705 for (link = current_binding_level->type_shadowed;
706 link; link = TREE_CHAIN (link))
707 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
708
709 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
710 list if a `using' declaration put them there. The debugging
711 back ends won't understand OVERLOAD, so we remove them here.
712 Because the BLOCK_VARS are (temporarily) shared with
713 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
714 popped all the bindings. Also remove undeduced 'auto' decls,
715 which LTO doesn't understand, and can't have been used by anything. */
716 if (block)
717 {
718 tree* d;
719
720 for (d = &BLOCK_VARS (block); *d; )
721 {
722 if (TREE_CODE (*d) == TREE_LIST
723 || (!processing_template_decl
724 && undeduced_auto_decl (*d)))
725 *d = TREE_CHAIN (*d);
726 else
727 d = &DECL_CHAIN (*d);
728 }
729 }
730
731 /* If the level being exited is the top level of a function,
732 check over all the labels. */
733 if (functionbody)
734 {
735 if (block)
736 {
737 /* Since this is the top level block of a function, the vars are
738 the function's parameters. Don't leave them in the BLOCK
739 because they are found in the FUNCTION_DECL instead. */
740 BLOCK_VARS (block) = 0;
741 pop_labels (block);
742 }
743 else
744 pop_labels (subblocks);
745 }
746
747 kind = current_binding_level->kind;
748 if (kind == sk_cleanup)
749 {
750 tree stmt;
751
752 /* If this is a temporary binding created for a cleanup, then we'll
753 have pushed a statement list level. Pop that, create a new
754 BIND_EXPR for the block, and insert it into the stream. */
755 stmt = pop_stmt_list (current_binding_level->statement_list);
756 stmt = c_build_bind_expr (input_location, block, stmt);
757 add_stmt (stmt);
758 }
759
760 leave_scope ();
761 if (functionbody)
762 {
763 /* The current function is being defined, so its DECL_INITIAL
764 should be error_mark_node. */
765 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
766 DECL_INITIAL (current_function_decl) = block ? block : subblocks;
767 if (subblocks)
768 {
769 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
770 {
771 if (BLOCK_SUBBLOCKS (subblocks))
772 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
773 }
774 else
775 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
776 }
777 }
778 else if (block)
779 current_binding_level->blocks
780 = block_chainon (current_binding_level->blocks, block);
781
782 /* If we did not make a block for the level just exited,
783 any blocks made for inner levels
784 (since they cannot be recorded as subblocks in that level)
785 must be carried forward so they will later become subblocks
786 of something else. */
787 else if (subblocks)
788 current_binding_level->blocks
789 = block_chainon (current_binding_level->blocks, subblocks);
790
791 /* Each and every BLOCK node created here in `poplevel' is important
792 (e.g. for proper debugging information) so if we created one
793 earlier, mark it as "used". */
794 if (block)
795 TREE_USED (block) = 1;
796
797 /* All temporary bindings created for cleanups are popped silently. */
798 if (kind == sk_cleanup)
799 goto restart;
800
801 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
802 return block;
803 }
804
805 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
806 /* Diagnose odr-used extern inline variables without definitions
807 in the current TU. */
808
809 int
810 wrapup_namespace_globals ()
811 {
812 if (vec<tree, va_gc> *statics = static_decls)
813 {
814 tree decl;
815 unsigned int i;
816 FOR_EACH_VEC_ELT (*statics, i, decl)
817 {
818 if (warn_unused_function
819 && TREE_CODE (decl) == FUNCTION_DECL
820 && DECL_INITIAL (decl) == 0
821 && DECL_EXTERNAL (decl)
822 && !TREE_PUBLIC (decl)
823 && !DECL_ARTIFICIAL (decl)
824 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
825 && !TREE_NO_WARNING (decl))
826 warning_at (DECL_SOURCE_LOCATION (decl),
827 OPT_Wunused_function,
828 "%qF declared %<static%> but never defined", decl);
829
830 if (VAR_P (decl)
831 && DECL_EXTERNAL (decl)
832 && DECL_INLINE_VAR_P (decl)
833 && DECL_ODR_USED (decl))
834 error_at (DECL_SOURCE_LOCATION (decl),
835 "odr-used inline variable %qD is not defined", decl);
836 }
837
838 /* Clear out the list, so we don't rescan next time. */
839 static_decls = NULL;
840
841 /* Write out any globals that need to be output. */
842 return wrapup_global_declarations (statics->address (),
843 statics->length ());
844 }
845 return 0;
846 }
847 \f
848 /* In C++, you don't have to write `struct S' to refer to `S'; you
849 can just use `S'. We accomplish this by creating a TYPE_DECL as
850 if the user had written `typedef struct S S'. Create and return
851 the TYPE_DECL for TYPE. */
852
853 tree
854 create_implicit_typedef (tree name, tree type)
855 {
856 tree decl;
857
858 decl = build_decl (input_location, TYPE_DECL, name, type);
859 DECL_ARTIFICIAL (decl) = 1;
860 /* There are other implicit type declarations, like the one *within*
861 a class that allows you to write `S::S'. We must distinguish
862 amongst these. */
863 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
864 TYPE_NAME (type) = decl;
865 TYPE_STUB_DECL (type) = decl;
866
867 return decl;
868 }
869
870 /* Function-scope local entities that need discriminators. Each entry
871 is a {decl,name} pair. VAR_DECLs for anon unions get their name
872 smashed, so we cannot rely on DECL_NAME. */
873
874 static GTY((deletable)) vec<tree, va_gc> *local_entities;
875
876 /* Determine the mangling discriminator of local DECL. There are
877 generally very few of these in any particular function. */
878
879 void
880 determine_local_discriminator (tree decl)
881 {
882 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
883 retrofit_lang_decl (decl);
884 tree ctx = DECL_CONTEXT (decl);
885 tree name = (TREE_CODE (decl) == TYPE_DECL
886 && TYPE_UNNAMED_P (TREE_TYPE (decl))
887 ? NULL_TREE : DECL_NAME (decl));
888 size_t nelts = vec_safe_length (local_entities);
889 for (size_t i = 0; i < nelts; i += 2)
890 {
891 tree *pair = &(*local_entities)[i];
892 tree d = pair[0];
893 tree n = pair[1];
894 gcc_checking_assert (d != decl);
895 if (name == n
896 && TREE_CODE (decl) == TREE_CODE (d)
897 && ctx == DECL_CONTEXT (d))
898 {
899 tree disc = integer_one_node;
900 if (DECL_DISCRIMINATOR (d))
901 disc = build_int_cst (TREE_TYPE (disc),
902 TREE_INT_CST_LOW (DECL_DISCRIMINATOR (d)) + 1);
903 DECL_DISCRIMINATOR (decl) = disc;
904 /* Replace the saved decl. */
905 pair[0] = decl;
906 decl = NULL_TREE;
907 break;
908 }
909 }
910
911 if (decl)
912 {
913 vec_safe_reserve (local_entities, 2);
914 local_entities->quick_push (decl);
915 local_entities->quick_push (name);
916 }
917
918 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
919 }
920
921 \f
922 /* Subroutine of duplicate_decls: return truthvalue of whether
923 or not types of these decls match.
924
925 For C++, we must compare the parameter list so that `int' can match
926 `int&' in a parameter position, but `int&' is not confused with
927 `const int&'. */
928
929 int
930 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
931 {
932 int types_match;
933
934 if (newdecl == olddecl)
935 return 1;
936
937 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
938 /* If the two DECLs are not even the same kind of thing, we're not
939 interested in their types. */
940 return 0;
941
942 gcc_assert (DECL_P (newdecl));
943
944 if (TREE_CODE (newdecl) == FUNCTION_DECL)
945 {
946 tree f1 = TREE_TYPE (newdecl);
947 tree f2 = TREE_TYPE (olddecl);
948 tree p1 = TYPE_ARG_TYPES (f1);
949 tree p2 = TYPE_ARG_TYPES (f2);
950 tree r2;
951
952 /* Specializations of different templates are different functions
953 even if they have the same type. */
954 tree t1 = (DECL_USE_TEMPLATE (newdecl)
955 ? DECL_TI_TEMPLATE (newdecl)
956 : NULL_TREE);
957 tree t2 = (DECL_USE_TEMPLATE (olddecl)
958 ? DECL_TI_TEMPLATE (olddecl)
959 : NULL_TREE);
960 if (t1 != t2)
961 return 0;
962
963 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
964 && ! (DECL_EXTERN_C_P (newdecl)
965 && DECL_EXTERN_C_P (olddecl)))
966 return 0;
967
968 /* A new declaration doesn't match a built-in one unless it
969 is also extern "C". */
970 if (DECL_IS_BUILTIN (olddecl)
971 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
972 return 0;
973
974 if (TREE_CODE (f1) != TREE_CODE (f2))
975 return 0;
976
977 /* A declaration with deduced return type should use its pre-deduction
978 type for declaration matching. */
979 r2 = fndecl_declared_return_type (olddecl);
980
981 if (same_type_p (TREE_TYPE (f1), r2))
982 {
983 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
984 && fndecl_built_in_p (olddecl))
985 {
986 types_match = self_promoting_args_p (p1);
987 if (p1 == void_list_node)
988 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
989 }
990 else
991 types_match =
992 compparms (p1, p2)
993 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
994 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
995 || comp_type_attributes (TREE_TYPE (newdecl),
996 TREE_TYPE (olddecl)) != 0);
997 }
998 else
999 types_match = 0;
1000
1001 /* The decls dont match if they correspond to two different versions
1002 of the same function. Disallow extern "C" functions to be
1003 versions for now. */
1004 if (types_match
1005 && !DECL_EXTERN_C_P (newdecl)
1006 && !DECL_EXTERN_C_P (olddecl)
1007 && record_versions
1008 && maybe_version_functions (newdecl, olddecl,
1009 (!DECL_FUNCTION_VERSIONED (newdecl)
1010 || !DECL_FUNCTION_VERSIONED (olddecl))))
1011 return 0;
1012 }
1013 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1014 {
1015 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1016 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1017
1018 if (TREE_CODE (newres) != TREE_CODE (oldres))
1019 return 0;
1020
1021 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1022 DECL_TEMPLATE_PARMS (olddecl)))
1023 return 0;
1024
1025 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1026 types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres))
1027 && equivalently_constrained (olddecl, newdecl));
1028 else
1029 // We don't need to check equivalently_constrained for variable and
1030 // function templates because we check it on the results.
1031 types_match = decls_match (oldres, newres);
1032 }
1033 else
1034 {
1035 /* Need to check scope for variable declaration (VAR_DECL).
1036 For typedef (TYPE_DECL), scope is ignored. */
1037 if (VAR_P (newdecl)
1038 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1039 /* [dcl.link]
1040 Two declarations for an object with C language linkage
1041 with the same name (ignoring the namespace that qualify
1042 it) that appear in different namespace scopes refer to
1043 the same object. */
1044 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1045 return 0;
1046
1047 if (TREE_TYPE (newdecl) == error_mark_node)
1048 types_match = TREE_TYPE (olddecl) == error_mark_node;
1049 else if (TREE_TYPE (olddecl) == NULL_TREE)
1050 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1051 else if (TREE_TYPE (newdecl) == NULL_TREE)
1052 types_match = 0;
1053 else
1054 types_match = comptypes (TREE_TYPE (newdecl),
1055 TREE_TYPE (olddecl),
1056 COMPARE_REDECLARATION);
1057 }
1058
1059 // Normal functions can be constrained, as can variable partial
1060 // specializations.
1061 if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl))
1062 types_match = equivalently_constrained (newdecl, olddecl);
1063
1064 return types_match;
1065 }
1066
1067 /* NEWDECL and OLDDECL have identical signatures. If they are
1068 different versions adjust them and return true.
1069 If RECORD is set to true, record function versions. */
1070
1071 bool
1072 maybe_version_functions (tree newdecl, tree olddecl, bool record)
1073 {
1074 if (!targetm.target_option.function_versions (newdecl, olddecl))
1075 return false;
1076
1077 if (!DECL_FUNCTION_VERSIONED (olddecl))
1078 {
1079 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1080 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1081 mangle_decl (olddecl);
1082 }
1083
1084 if (!DECL_FUNCTION_VERSIONED (newdecl))
1085 {
1086 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1087 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1088 mangle_decl (newdecl);
1089 }
1090
1091 if (record)
1092 cgraph_node::record_function_versions (olddecl, newdecl);
1093
1094 return true;
1095 }
1096
1097 /* If NEWDECL is `static' and an `extern' was seen previously,
1098 warn about it. OLDDECL is the previous declaration.
1099
1100 Note that this does not apply to the C++ case of declaring
1101 a variable `extern const' and then later `const'.
1102
1103 Don't complain about built-in functions, since they are beyond
1104 the user's control. */
1105
1106 void
1107 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1108 {
1109 if (TREE_CODE (newdecl) == TYPE_DECL
1110 || TREE_CODE (newdecl) == TEMPLATE_DECL
1111 || TREE_CODE (newdecl) == CONST_DECL
1112 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1113 return;
1114
1115 /* Don't get confused by static member functions; that's a different
1116 use of `static'. */
1117 if (TREE_CODE (newdecl) == FUNCTION_DECL
1118 && DECL_STATIC_FUNCTION_P (newdecl))
1119 return;
1120
1121 /* If the old declaration was `static', or the new one isn't, then
1122 everything is OK. */
1123 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1124 return;
1125
1126 /* It's OK to declare a builtin function as `static'. */
1127 if (TREE_CODE (olddecl) == FUNCTION_DECL
1128 && DECL_ARTIFICIAL (olddecl))
1129 return;
1130
1131 auto_diagnostic_group d;
1132 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1133 "%qD was declared %<extern%> and later %<static%>", newdecl))
1134 inform (DECL_SOURCE_LOCATION (olddecl),
1135 "previous declaration of %qD", olddecl);
1136 }
1137
1138 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1139 function templates. If their exception specifications do not
1140 match, issue a diagnostic. */
1141
1142 static void
1143 check_redeclaration_exception_specification (tree new_decl,
1144 tree old_decl)
1145 {
1146 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1147 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1148
1149 /* Two default specs are equivalent, don't force evaluation. */
1150 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1151 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1152 return;
1153
1154 if (!type_dependent_expression_p (old_decl))
1155 {
1156 maybe_instantiate_noexcept (new_decl);
1157 maybe_instantiate_noexcept (old_decl);
1158 }
1159 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1160 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1161
1162 /* [except.spec]
1163
1164 If any declaration of a function has an exception-specification,
1165 all declarations, including the definition and an explicit
1166 specialization, of that function shall have an
1167 exception-specification with the same set of type-ids. */
1168 if (! DECL_IS_BUILTIN (old_decl)
1169 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1170 {
1171 const char *const msg
1172 = G_("declaration of %qF has a different exception specifier");
1173 bool complained = true;
1174 location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1175 auto_diagnostic_group d;
1176 if (DECL_IN_SYSTEM_HEADER (old_decl))
1177 complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl);
1178 else if (!flag_exceptions)
1179 /* We used to silently permit mismatched eh specs with
1180 -fno-exceptions, so make them a pedwarn now. */
1181 complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl);
1182 else
1183 error_at (new_loc, msg, new_decl);
1184 if (complained)
1185 inform (DECL_SOURCE_LOCATION (old_decl),
1186 "from previous declaration %qF", old_decl);
1187 }
1188 }
1189
1190 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1191 Otherwise issue diagnostics. */
1192
1193 static bool
1194 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1195 {
1196 old_decl = STRIP_TEMPLATE (old_decl);
1197 new_decl = STRIP_TEMPLATE (new_decl);
1198 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1199 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1200 return true;
1201 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1202 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1203 return true;
1204 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1205 {
1206 if (fndecl_built_in_p (old_decl))
1207 {
1208 /* Hide a built-in declaration. */
1209 DECL_DECLARED_CONSTEXPR_P (old_decl)
1210 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1211 return true;
1212 }
1213 /* 7.1.5 [dcl.constexpr]
1214 Note: An explicit specialization can differ from the template
1215 declaration with respect to the constexpr specifier. */
1216 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1217 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1218 return true;
1219
1220 error_at (DECL_SOURCE_LOCATION (new_decl),
1221 "redeclaration %qD differs in %<constexpr%> "
1222 "from previous declaration", new_decl);
1223 inform (DECL_SOURCE_LOCATION (old_decl),
1224 "previous declaration %qD", old_decl);
1225 return false;
1226 }
1227 return true;
1228 }
1229
1230 // If OLDDECL and NEWDECL are concept declarations with the same type
1231 // (i.e., and template parameters), but different requirements,
1232 // emit diagnostics and return true. Otherwise, return false.
1233 static inline bool
1234 check_concept_refinement (tree olddecl, tree newdecl)
1235 {
1236 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1237 return false;
1238
1239 tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1240 tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1241 if (TREE_CODE (d1) != TREE_CODE (d2))
1242 return false;
1243
1244 tree t1 = TREE_TYPE (d1);
1245 tree t2 = TREE_TYPE (d2);
1246 if (TREE_CODE (d1) == FUNCTION_DECL)
1247 {
1248 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1249 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1250 DECL_TEMPLATE_PARMS (newdecl))
1251 && !equivalently_constrained (olddecl, newdecl))
1252 {
1253 error ("cannot specialize concept %q#D", olddecl);
1254 return true;
1255 }
1256 }
1257 return false;
1258 }
1259
1260 /* DECL is a redeclaration of a function or function template. If
1261 it does have default arguments issue a diagnostic. Note: this
1262 function is used to enforce the requirements in C++11 8.3.6 about
1263 no default arguments in redeclarations. */
1264
1265 static void
1266 check_redeclaration_no_default_args (tree decl)
1267 {
1268 gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1269
1270 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1271 t && t != void_list_node; t = TREE_CHAIN (t))
1272 if (TREE_PURPOSE (t))
1273 {
1274 permerror (DECL_SOURCE_LOCATION (decl),
1275 "redeclaration of %q#D may not have default "
1276 "arguments", decl);
1277 return;
1278 }
1279 }
1280
1281 /* NEWDECL is a redeclaration of a function or function template OLDDECL,
1282 in any case represented as FUNCTION_DECLs (the DECL_TEMPLATE_RESULTs of
1283 the TEMPLATE_DECLs in case of function templates). This function is used
1284 to enforce the final part of C++17 11.3.6/4, about a single declaration:
1285 "If a friend declaration specifies a default argument expression, that
1286 declaration shall be a definition and shall be the only declaration of
1287 the function or function template in the translation unit." */
1288
1289 static void
1290 check_no_redeclaration_friend_default_args (tree olddecl, tree newdecl,
1291 bool olddecl_hidden_friend_p)
1292 {
1293 if (!olddecl_hidden_friend_p && !DECL_FRIEND_P (newdecl))
1294 return;
1295
1296 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1297 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1298
1299 for (; t1 && t1 != void_list_node;
1300 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1301 if ((olddecl_hidden_friend_p && TREE_PURPOSE (t1))
1302 || (DECL_FRIEND_P (newdecl) && TREE_PURPOSE (t2)))
1303 {
1304 auto_diagnostic_group d;
1305 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1306 "friend declaration of %q#D specifies default "
1307 "arguments and isn%'t the only declaration", newdecl))
1308 inform (DECL_SOURCE_LOCATION (olddecl),
1309 "previous declaration of %q#D", olddecl);
1310 return;
1311 }
1312 }
1313
1314 /* Merge tree bits that correspond to attributes noreturn, nothrow,
1315 const, malloc, and pure from NEWDECL with those of OLDDECL. */
1316
1317 static void
1318 merge_attribute_bits (tree newdecl, tree olddecl)
1319 {
1320 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1321 TREE_THIS_VOLATILE (olddecl) |= TREE_THIS_VOLATILE (newdecl);
1322 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1323 TREE_NOTHROW (olddecl) |= TREE_NOTHROW (newdecl);
1324 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1325 TREE_READONLY (olddecl) |= TREE_READONLY (newdecl);
1326 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1327 DECL_IS_MALLOC (olddecl) |= DECL_IS_MALLOC (newdecl);
1328 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1329 DECL_PURE_P (olddecl) |= DECL_PURE_P (newdecl);
1330 DECL_UNINLINABLE (newdecl) |= DECL_UNINLINABLE (olddecl);
1331 DECL_UNINLINABLE (olddecl) |= DECL_UNINLINABLE (newdecl);
1332 }
1333
1334 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1335 && lookup_attribute ("gnu_inline", \
1336 DECL_ATTRIBUTES (fn)))
1337
1338 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1339 If the redeclaration is invalid, a diagnostic is issued, and the
1340 error_mark_node is returned. Otherwise, OLDDECL is returned.
1341
1342 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1343 returned.
1344
1345 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1346
1347 tree
1348 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1349 {
1350 unsigned olddecl_uid = DECL_UID (olddecl);
1351 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1352 int olddecl_hidden_friend = 0;
1353 int new_defines_function = 0;
1354 tree new_template_info;
1355 location_t olddecl_loc = DECL_SOURCE_LOCATION (olddecl);
1356 location_t newdecl_loc = DECL_SOURCE_LOCATION (newdecl);
1357
1358 if (newdecl == olddecl)
1359 return olddecl;
1360
1361 types_match = decls_match (newdecl, olddecl);
1362
1363 /* If either the type of the new decl or the type of the old decl is an
1364 error_mark_node, then that implies that we have already issued an
1365 error (earlier) for some bogus type specification, and in that case,
1366 it is rather pointless to harass the user with yet more error message
1367 about the same declaration, so just pretend the types match here. */
1368 if (TREE_TYPE (newdecl) == error_mark_node
1369 || TREE_TYPE (olddecl) == error_mark_node)
1370 return error_mark_node;
1371
1372 /* Check for redeclaration and other discrepancies. */
1373 if (TREE_CODE (olddecl) == FUNCTION_DECL
1374 && DECL_ARTIFICIAL (olddecl))
1375 {
1376 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1377 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1378 {
1379 /* Avoid warnings redeclaring built-ins which have not been
1380 explicitly declared. */
1381 if (DECL_ANTICIPATED (olddecl))
1382 {
1383 if (TREE_PUBLIC (newdecl)
1384 && CP_DECL_CONTEXT (newdecl) == global_namespace)
1385 warning_at (newdecl_loc,
1386 OPT_Wbuiltin_declaration_mismatch,
1387 "built-in function %qD declared as non-function",
1388 newdecl);
1389 return NULL_TREE;
1390 }
1391
1392 /* If you declare a built-in or predefined function name as static,
1393 the old definition is overridden, but optionally warn this was a
1394 bad choice of name. */
1395 if (! TREE_PUBLIC (newdecl))
1396 {
1397 warning_at (newdecl_loc,
1398 OPT_Wshadow,
1399 fndecl_built_in_p (olddecl)
1400 ? G_("shadowing built-in function %q#D")
1401 : G_("shadowing library function %q#D"), olddecl);
1402 /* Discard the old built-in function. */
1403 return NULL_TREE;
1404 }
1405 /* If the built-in is not ansi, then programs can override
1406 it even globally without an error. */
1407 else if (! fndecl_built_in_p (olddecl))
1408 warning_at (newdecl_loc, 0,
1409 "library function %q#D redeclared as non-function %q#D",
1410 olddecl, newdecl);
1411 else
1412 error_at (newdecl_loc,
1413 "declaration of %q#D conflicts with built-in "
1414 "declaration %q#D", newdecl, olddecl);
1415 return NULL_TREE;
1416 }
1417 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1418 {
1419 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1420 error_at (newdecl_loc,
1421 "redeclaration of %<pragma omp declare reduction%>");
1422 inform (olddecl_loc,
1423 "previous %<pragma omp declare reduction%> declaration");
1424 return error_mark_node;
1425 }
1426 else if (!types_match)
1427 {
1428 /* Avoid warnings redeclaring built-ins which have not been
1429 explicitly declared. */
1430 if (DECL_ANTICIPATED (olddecl))
1431 {
1432 tree t1, t2;
1433
1434 /* A new declaration doesn't match a built-in one unless it
1435 is also extern "C". */
1436 gcc_assert (DECL_IS_BUILTIN (olddecl));
1437 gcc_assert (DECL_EXTERN_C_P (olddecl));
1438 if (!DECL_EXTERN_C_P (newdecl))
1439 return NULL_TREE;
1440
1441 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1442 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1443 t1 || t2;
1444 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1445 {
1446 if (!t1 || !t2)
1447 break;
1448 /* FILE, tm types are not known at the time
1449 we create the builtins. */
1450 for (unsigned i = 0;
1451 i < sizeof (builtin_structptr_types)
1452 / sizeof (builtin_structptr_type);
1453 ++i)
1454 if (TREE_VALUE (t2) == builtin_structptr_types[i].node)
1455 {
1456 tree t = TREE_VALUE (t1);
1457
1458 if (TYPE_PTR_P (t)
1459 && TYPE_IDENTIFIER (TREE_TYPE (t))
1460 == get_identifier (builtin_structptr_types[i].str)
1461 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1462 {
1463 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1464
1465 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1466 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1467 types_match = decls_match (newdecl, olddecl);
1468 if (types_match)
1469 return duplicate_decls (newdecl, olddecl,
1470 newdecl_is_friend);
1471 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1472 }
1473 goto next_arg;
1474 }
1475
1476 if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1477 break;
1478 next_arg:;
1479 }
1480
1481 warning_at (newdecl_loc,
1482 OPT_Wbuiltin_declaration_mismatch,
1483 "declaration of %q#D conflicts with built-in "
1484 "declaration %q#D", newdecl, olddecl);
1485 }
1486 else if ((DECL_EXTERN_C_P (newdecl)
1487 && DECL_EXTERN_C_P (olddecl))
1488 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1489 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1490 {
1491 /* Don't really override olddecl for __* prefixed builtins
1492 except for __[^b]*_chk, the compiler might be using those
1493 explicitly. */
1494 if (fndecl_built_in_p (olddecl))
1495 {
1496 tree id = DECL_NAME (olddecl);
1497 const char *name = IDENTIFIER_POINTER (id);
1498 size_t len;
1499
1500 if (name[0] == '_'
1501 && name[1] == '_'
1502 && (strncmp (name + 2, "builtin_",
1503 strlen ("builtin_")) == 0
1504 || (len = strlen (name)) <= strlen ("___chk")
1505 || memcmp (name + len - strlen ("_chk"),
1506 "_chk", strlen ("_chk") + 1) != 0))
1507 {
1508 if (DECL_INITIAL (newdecl))
1509 {
1510 error_at (newdecl_loc,
1511 "definition of %q#D ambiguates built-in "
1512 "declaration %q#D", newdecl, olddecl);
1513 return error_mark_node;
1514 }
1515 auto_diagnostic_group d;
1516 if (permerror (newdecl_loc,
1517 "new declaration %q#D ambiguates built-in"
1518 " declaration %q#D", newdecl, olddecl)
1519 && flag_permissive)
1520 inform (newdecl_loc,
1521 "ignoring the %q#D declaration", newdecl);
1522 return flag_permissive ? olddecl : error_mark_node;
1523 }
1524 }
1525
1526 /* A near match; override the builtin. */
1527
1528 if (TREE_PUBLIC (newdecl))
1529 warning_at (newdecl_loc,
1530 OPT_Wbuiltin_declaration_mismatch,
1531 "new declaration %q#D ambiguates built-in "
1532 "declaration %q#D", newdecl, olddecl);
1533 else
1534 warning (OPT_Wshadow,
1535 fndecl_built_in_p (olddecl)
1536 ? G_("shadowing built-in function %q#D")
1537 : G_("shadowing library function %q#D"), olddecl);
1538 }
1539 else
1540 /* Discard the old built-in function. */
1541 return NULL_TREE;
1542
1543 /* Replace the old RTL to avoid problems with inlining. */
1544 COPY_DECL_RTL (newdecl, olddecl);
1545 }
1546 /* Even if the types match, prefer the new declarations type for
1547 built-ins which have not been explicitly declared, for
1548 exception lists, etc... */
1549 else if (DECL_IS_BUILTIN (olddecl))
1550 {
1551 tree type = TREE_TYPE (newdecl);
1552 tree attribs = (*targetm.merge_type_attributes)
1553 (TREE_TYPE (olddecl), type);
1554
1555 type = cp_build_type_attribute_variant (type, attribs);
1556 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1557 }
1558
1559 /* If a function is explicitly declared "throw ()", propagate that to
1560 the corresponding builtin. */
1561 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1562 && DECL_ANTICIPATED (olddecl)
1563 && TREE_NOTHROW (newdecl)
1564 && !TREE_NOTHROW (olddecl))
1565 {
1566 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1567 tree tmpdecl = builtin_decl_explicit (fncode);
1568 if (tmpdecl && tmpdecl != olddecl && types_match)
1569 TREE_NOTHROW (tmpdecl) = 1;
1570 }
1571
1572 /* Whether or not the builtin can throw exceptions has no
1573 bearing on this declarator. */
1574 TREE_NOTHROW (olddecl) = 0;
1575
1576 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1577 {
1578 /* If a builtin function is redeclared as `static', merge
1579 the declarations, but make the original one static. */
1580 DECL_THIS_STATIC (olddecl) = 1;
1581 TREE_PUBLIC (olddecl) = 0;
1582
1583 /* Make the old declaration consistent with the new one so
1584 that all remnants of the builtin-ness of this function
1585 will be banished. */
1586 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1587 COPY_DECL_RTL (newdecl, olddecl);
1588 }
1589 }
1590 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1591 {
1592 /* C++ Standard, 3.3, clause 4:
1593 "[Note: a namespace name or a class template name must be unique
1594 in its declarative region (7.3.2, clause 14). ]" */
1595 if (TREE_CODE (olddecl) == NAMESPACE_DECL
1596 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1597 /* Namespace conflicts with not namespace. */;
1598 else if (DECL_TYPE_TEMPLATE_P (olddecl)
1599 || DECL_TYPE_TEMPLATE_P (newdecl))
1600 /* Class template conflicts. */;
1601 else if ((TREE_CODE (newdecl) == FUNCTION_DECL
1602 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1603 || (TREE_CODE (olddecl) == FUNCTION_DECL
1604 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1605 {
1606 /* One is a function and the other is a template
1607 function. */
1608 if (!UDLIT_OPER_P (DECL_NAME (newdecl)))
1609 return NULL_TREE;
1610
1611 /* There can only be one! */
1612 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1613 && check_raw_literal_operator (olddecl))
1614 error_at (newdecl_loc,
1615 "literal operator %q#D conflicts with"
1616 " raw literal operator", newdecl);
1617 else if (check_raw_literal_operator (newdecl))
1618 error_at (newdecl_loc,
1619 "raw literal operator %q#D conflicts with"
1620 " literal operator template", newdecl);
1621 else
1622 return NULL_TREE;
1623
1624 inform (olddecl_loc, "previous declaration %q#D", olddecl);
1625 return error_mark_node;
1626 }
1627 else if (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1628 || DECL_IMPLICIT_TYPEDEF_P (newdecl))
1629 /* One is an implicit typedef, that's ok. */
1630 return NULL_TREE;
1631
1632 error ("%q#D redeclared as different kind of entity", newdecl);
1633 inform (olddecl_loc, "previous declaration %q#D", olddecl);
1634
1635 return error_mark_node;
1636 }
1637 else if (!types_match)
1638 {
1639 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1640 /* These are certainly not duplicate declarations; they're
1641 from different scopes. */
1642 return NULL_TREE;
1643
1644 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1645 {
1646 /* The name of a class template may not be declared to refer to
1647 any other template, class, function, object, namespace, value,
1648 or type in the same scope. */
1649 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1650 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1651 {
1652 error_at (newdecl_loc,
1653 "conflicting declaration of template %q#D", newdecl);
1654 inform (olddecl_loc,
1655 "previous declaration %q#D", olddecl);
1656 return error_mark_node;
1657 }
1658 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1659 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1660 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1661 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1662 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1663 DECL_TEMPLATE_PARMS (olddecl))
1664 /* Template functions can be disambiguated by
1665 return type. */
1666 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1667 TREE_TYPE (TREE_TYPE (olddecl)))
1668 /* Template functions can also be disambiguated by
1669 constraints. */
1670 && equivalently_constrained (olddecl, newdecl))
1671 {
1672 error_at (newdecl_loc, "ambiguating new declaration %q#D",
1673 newdecl);
1674 inform (olddecl_loc,
1675 "old declaration %q#D", olddecl);
1676 }
1677 else if (check_concept_refinement (olddecl, newdecl))
1678 return error_mark_node;
1679 return NULL_TREE;
1680 }
1681 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1682 {
1683 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1684 {
1685 error_at (newdecl_loc,
1686 "conflicting declaration of C function %q#D",
1687 newdecl);
1688 inform (olddecl_loc,
1689 "previous declaration %q#D", olddecl);
1690 return NULL_TREE;
1691 }
1692 /* For function versions, params and types match, but they
1693 are not ambiguous. */
1694 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1695 && !DECL_FUNCTION_VERSIONED (olddecl))
1696 // The functions have the same parameter types.
1697 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1698 TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1699 // And the same constraints.
1700 && equivalently_constrained (newdecl, olddecl))
1701 {
1702 error_at (newdecl_loc,
1703 "ambiguating new declaration of %q#D", newdecl);
1704 inform (olddecl_loc,
1705 "old declaration %q#D", olddecl);
1706 return error_mark_node;
1707 }
1708 else
1709 return NULL_TREE;
1710 }
1711 else
1712 {
1713 error_at (newdecl_loc, "conflicting declaration %q#D", newdecl);
1714 inform (olddecl_loc,
1715 "previous declaration as %q#D", olddecl);
1716 return error_mark_node;
1717 }
1718 }
1719 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1720 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1721 && (!DECL_TEMPLATE_INFO (newdecl)
1722 || (DECL_TI_TEMPLATE (newdecl)
1723 != DECL_TI_TEMPLATE (olddecl))))
1724 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1725 && (!DECL_TEMPLATE_INFO (olddecl)
1726 || (DECL_TI_TEMPLATE (olddecl)
1727 != DECL_TI_TEMPLATE (newdecl))))))
1728 /* It's OK to have a template specialization and a non-template
1729 with the same type, or to have specializations of two
1730 different templates with the same type. Note that if one is a
1731 specialization, and the other is an instantiation of the same
1732 template, that we do not exit at this point. That situation
1733 can occur if we instantiate a template class, and then
1734 specialize one of its methods. This situation is valid, but
1735 the declarations must be merged in the usual way. */
1736 return NULL_TREE;
1737 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1738 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1739 && !DECL_USE_TEMPLATE (newdecl))
1740 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1741 && !DECL_USE_TEMPLATE (olddecl))))
1742 /* One of the declarations is a template instantiation, and the
1743 other is not a template at all. That's OK. */
1744 return NULL_TREE;
1745 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1746 {
1747 /* In [namespace.alias] we have:
1748
1749 In a declarative region, a namespace-alias-definition can be
1750 used to redefine a namespace-alias declared in that declarative
1751 region to refer only to the namespace to which it already
1752 refers.
1753
1754 Therefore, if we encounter a second alias directive for the same
1755 alias, we can just ignore the second directive. */
1756 if (DECL_NAMESPACE_ALIAS (newdecl)
1757 && (DECL_NAMESPACE_ALIAS (newdecl)
1758 == DECL_NAMESPACE_ALIAS (olddecl)))
1759 return olddecl;
1760
1761 /* Leave it to update_binding to merge or report error. */
1762 return NULL_TREE;
1763 }
1764 else
1765 {
1766 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1767 if (errmsg)
1768 {
1769 auto_diagnostic_group d;
1770 error_at (newdecl_loc, errmsg, newdecl);
1771 if (DECL_NAME (olddecl) != NULL_TREE)
1772 inform (olddecl_loc,
1773 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1774 ? G_("%q#D previously defined here")
1775 : G_("%q#D previously declared here"), olddecl);
1776 return error_mark_node;
1777 }
1778 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1779 && DECL_INITIAL (olddecl) != NULL_TREE
1780 && !prototype_p (TREE_TYPE (olddecl))
1781 && prototype_p (TREE_TYPE (newdecl)))
1782 {
1783 /* Prototype decl follows defn w/o prototype. */
1784 auto_diagnostic_group d;
1785 if (warning_at (newdecl_loc, 0,
1786 "prototype specified for %q#D", newdecl))
1787 inform (olddecl_loc,
1788 "previous non-prototype definition here");
1789 }
1790 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1791 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1792 {
1793 /* [dcl.link]
1794 If two declarations of the same function or object
1795 specify different linkage-specifications ..., the program
1796 is ill-formed.... Except for functions with C++ linkage,
1797 a function declaration without a linkage specification
1798 shall not precede the first linkage specification for
1799 that function. A function can be declared without a
1800 linkage specification after an explicit linkage
1801 specification has been seen; the linkage explicitly
1802 specified in the earlier declaration is not affected by
1803 such a function declaration.
1804
1805 DR 563 raises the question why the restrictions on
1806 functions should not also apply to objects. Older
1807 versions of G++ silently ignore the linkage-specification
1808 for this example:
1809
1810 namespace N {
1811 extern int i;
1812 extern "C" int i;
1813 }
1814
1815 which is clearly wrong. Therefore, we now treat objects
1816 like functions. */
1817 if (current_lang_depth () == 0)
1818 {
1819 /* There is no explicit linkage-specification, so we use
1820 the linkage from the previous declaration. */
1821 retrofit_lang_decl (newdecl);
1822 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1823 }
1824 else
1825 {
1826 auto_diagnostic_group d;
1827 error_at (newdecl_loc,
1828 "conflicting declaration of %q#D with %qL linkage",
1829 newdecl, DECL_LANGUAGE (newdecl));
1830 inform (olddecl_loc,
1831 "previous declaration with %qL linkage",
1832 DECL_LANGUAGE (olddecl));
1833 }
1834 }
1835
1836 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1837 ;
1838 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1839 {
1840 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */
1841 if (DECL_FUNCTION_MEMBER_P (olddecl)
1842 && (/* grokfndecl passes member function templates too
1843 as FUNCTION_DECLs. */
1844 DECL_TEMPLATE_INFO (olddecl)
1845 /* C++11 8.3.6/6.
1846 Default arguments for a member function of a class
1847 template shall be specified on the initial declaration
1848 of the member function within the class template. */
1849 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1850 check_redeclaration_no_default_args (newdecl);
1851 else
1852 {
1853 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1854 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1855 int i = 1;
1856
1857 for (; t1 && t1 != void_list_node;
1858 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1859 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1860 {
1861 if (simple_cst_equal (TREE_PURPOSE (t1),
1862 TREE_PURPOSE (t2)) == 1)
1863 {
1864 auto_diagnostic_group d;
1865 if (permerror (newdecl_loc,
1866 "default argument given for parameter "
1867 "%d of %q#D", i, newdecl))
1868 inform (olddecl_loc,
1869 "previous specification in %q#D here",
1870 olddecl);
1871 }
1872 else
1873 {
1874 auto_diagnostic_group d;
1875 error_at (newdecl_loc,
1876 "default argument given for parameter %d "
1877 "of %q#D", i, newdecl);
1878 inform (olddecl_loc,
1879 "previous specification in %q#D here",
1880 olddecl);
1881 }
1882 }
1883
1884 /* C++17 11.3.6/4: "If a friend declaration specifies a default
1885 argument expression, that declaration... shall be the only
1886 declaration of the function or function template in the
1887 translation unit." */
1888 check_no_redeclaration_friend_default_args
1889 (olddecl, newdecl, DECL_HIDDEN_FRIEND_P (olddecl));
1890 }
1891 }
1892 }
1893
1894 /* Do not merge an implicit typedef with an explicit one. In:
1895
1896 class A;
1897 ...
1898 typedef class A A __attribute__ ((foo));
1899
1900 the attribute should apply only to the typedef. */
1901 if (TREE_CODE (olddecl) == TYPE_DECL
1902 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1903 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1904 return NULL_TREE;
1905
1906 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1907 return error_mark_node;
1908
1909 /* We have committed to returning OLDDECL at this point. */
1910
1911 /* If new decl is `static' and an `extern' was seen previously,
1912 warn about it. */
1913 warn_extern_redeclared_static (newdecl, olddecl);
1914
1915 /* True to merge attributes between the declarations, false to
1916 set OLDDECL's attributes to those of NEWDECL (for template
1917 explicit specializations that specify their own attributes
1918 independent of those specified for the primary template). */
1919 const bool merge_attr = (TREE_CODE (newdecl) != FUNCTION_DECL
1920 || !DECL_TEMPLATE_SPECIALIZATION (newdecl)
1921 || DECL_TEMPLATE_SPECIALIZATION (olddecl));
1922
1923 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1924 {
1925 if (merge_attr && diagnose_mismatched_attributes (olddecl, newdecl))
1926 inform (olddecl_loc, DECL_INITIAL (olddecl)
1927 ? G_("previous definition of %qD here")
1928 : G_("previous declaration of %qD here"), olddecl);
1929
1930 /* Now that functions must hold information normally held
1931 by field decls, there is extra work to do so that
1932 declaration information does not get destroyed during
1933 definition. */
1934 if (DECL_VINDEX (olddecl))
1935 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1936 if (DECL_CONTEXT (olddecl))
1937 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1938 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1939 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1940 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1941 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1942 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1943 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1944 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1945 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1946 if (DECL_OVERLOADED_OPERATOR_P (olddecl))
1947 DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
1948 = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
1949 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1950
1951 /* Optionally warn about more than one declaration for the same
1952 name, but don't warn about a function declaration followed by a
1953 definition. */
1954 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1955 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1956 /* Don't warn about extern decl followed by definition. */
1957 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1958 /* Don't warn about friends, let add_friend take care of it. */
1959 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1960 /* Don't warn about declaration followed by specialization. */
1961 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1962 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1963 {
1964 auto_diagnostic_group d;
1965 if (warning_at (newdecl_loc,
1966 OPT_Wredundant_decls,
1967 "redundant redeclaration of %qD in same scope",
1968 newdecl))
1969 inform (olddecl_loc,
1970 "previous declaration of %qD", olddecl);
1971 }
1972
1973 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1974 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
1975 {
1976 if (DECL_DELETED_FN (newdecl))
1977 {
1978 auto_diagnostic_group d;
1979 error_at (newdecl_loc, "deleted definition of %qD", newdecl);
1980 inform (olddecl_loc,
1981 "previous declaration of %qD", olddecl);
1982 }
1983 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
1984 }
1985 }
1986
1987 /* Deal with C++: must preserve virtual function table size. */
1988 if (TREE_CODE (olddecl) == TYPE_DECL)
1989 {
1990 tree newtype = TREE_TYPE (newdecl);
1991 tree oldtype = TREE_TYPE (olddecl);
1992
1993 if (newtype != error_mark_node && oldtype != error_mark_node
1994 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
1995 CLASSTYPE_FRIEND_CLASSES (newtype)
1996 = CLASSTYPE_FRIEND_CLASSES (oldtype);
1997
1998 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
1999 }
2000
2001 /* Copy all the DECL_... slots specified in the new decl except for
2002 any that we copy here from the old type. */
2003 if (merge_attr)
2004 DECL_ATTRIBUTES (newdecl)
2005 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
2006 else
2007 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2008
2009 if (DECL_DECLARES_FUNCTION_P (olddecl))
2010 {
2011 olddecl_friend = DECL_FRIEND_P (olddecl);
2012 olddecl_hidden_friend = DECL_HIDDEN_FRIEND_P (olddecl);
2013 hidden_friend = (DECL_ANTICIPATED (olddecl)
2014 && DECL_HIDDEN_FRIEND_P (olddecl)
2015 && newdecl_is_friend);
2016 if (!hidden_friend)
2017 {
2018 DECL_ANTICIPATED (olddecl) = 0;
2019 DECL_HIDDEN_FRIEND_P (olddecl) = 0;
2020 }
2021 }
2022
2023 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2024 {
2025 tree old_result = DECL_TEMPLATE_RESULT (olddecl);
2026 tree new_result = DECL_TEMPLATE_RESULT (newdecl);
2027 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2028
2029 /* The new decl should not already have gathered any
2030 specializations. */
2031 gcc_assert (!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 {
2137 gcc_assert (TYPE_NEXT_VARIANT (remove) == NULL_TREE);
2138 /* If remove is the main variant, no need to remove that
2139 from the list. One of the DECL_ORIGINAL_TYPE
2140 variants, e.g. created for aligned attribute, might still
2141 refer to the newdecl TYPE_DECL though, so remove that one
2142 in that case. */
2143 if (tree orig = DECL_ORIGINAL_TYPE (newdecl))
2144 if (orig != remove)
2145 for (tree t = TYPE_MAIN_VARIANT (orig); t;
2146 t = TYPE_MAIN_VARIANT (t))
2147 if (TYPE_NAME (TYPE_NEXT_VARIANT (t)) == newdecl)
2148 {
2149 TYPE_NEXT_VARIANT (t)
2150 = TYPE_NEXT_VARIANT (TYPE_NEXT_VARIANT (t));
2151 break;
2152 }
2153 }
2154 else
2155 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2156 t = TYPE_NEXT_VARIANT (t))
2157 if (TYPE_NEXT_VARIANT (t) == remove)
2158 {
2159 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2160 break;
2161 }
2162 }
2163 }
2164 else if (merge_attr)
2165 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2166 else
2167 newtype = TREE_TYPE (newdecl);
2168
2169 if (VAR_P (newdecl))
2170 {
2171 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2172 /* For already initialized vars, TREE_READONLY could have been
2173 cleared in cp_finish_decl, because the var needs runtime
2174 initialization or destruction. Make sure not to set
2175 TREE_READONLY on it again. */
2176 if (DECL_INITIALIZED_P (olddecl)
2177 && !DECL_EXTERNAL (olddecl)
2178 && !TREE_READONLY (olddecl))
2179 TREE_READONLY (newdecl) = 0;
2180 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2181 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2182 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2183 if (DECL_DEPENDENT_INIT_P (olddecl))
2184 SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2185 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2186 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2187 if (DECL_CLASS_SCOPE_P (olddecl))
2188 DECL_DECLARED_CONSTEXPR_P (newdecl)
2189 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2190
2191 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2192 if (DECL_LANG_SPECIFIC (olddecl)
2193 && CP_DECL_THREADPRIVATE_P (olddecl))
2194 {
2195 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2196 retrofit_lang_decl (newdecl);
2197 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2198 }
2199 }
2200
2201 /* An explicit specialization of a function template or of a member
2202 function of a class template can be declared transaction_safe
2203 independently of whether the corresponding template entity is declared
2204 transaction_safe. */
2205 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2206 && DECL_TEMPLATE_INSTANTIATION (olddecl)
2207 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2208 && tx_safe_fn_type_p (newtype)
2209 && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2210 newtype = tx_unsafe_fn_variant (newtype);
2211
2212 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2213
2214 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2215 check_default_args (newdecl);
2216
2217 /* Lay the type out, unless already done. */
2218 if (! same_type_p (newtype, oldtype)
2219 && TREE_TYPE (newdecl) != error_mark_node
2220 && !(processing_template_decl && uses_template_parms (newdecl)))
2221 layout_type (TREE_TYPE (newdecl));
2222
2223 if ((VAR_P (newdecl)
2224 || TREE_CODE (newdecl) == PARM_DECL
2225 || TREE_CODE (newdecl) == RESULT_DECL
2226 || TREE_CODE (newdecl) == FIELD_DECL
2227 || TREE_CODE (newdecl) == TYPE_DECL)
2228 && !(processing_template_decl && uses_template_parms (newdecl)))
2229 layout_decl (newdecl, 0);
2230
2231 /* Merge deprecatedness. */
2232 if (TREE_DEPRECATED (newdecl))
2233 TREE_DEPRECATED (olddecl) = 1;
2234
2235 /* Preserve function specific target and optimization options */
2236 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2237 {
2238 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2239 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2240 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2241 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2242
2243 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2244 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2245 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2246 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2247 }
2248 else
2249 {
2250 /* Merge the const type qualifier. */
2251 if (TREE_READONLY (newdecl))
2252 TREE_READONLY (olddecl) = 1;
2253 /* Merge the volatile type qualifier. */
2254 if (TREE_THIS_VOLATILE (newdecl))
2255 TREE_THIS_VOLATILE (olddecl) = 1;
2256 }
2257
2258 /* Merge the initialization information. */
2259 if (DECL_INITIAL (newdecl) == NULL_TREE
2260 && DECL_INITIAL (olddecl) != NULL_TREE)
2261 {
2262 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2263 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2264 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2265 {
2266 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2267 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2268 }
2269 }
2270
2271 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2272 {
2273 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2274 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2275 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2276 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2277 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2278 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2279
2280 if (merge_attr)
2281 merge_attribute_bits (newdecl, olddecl);
2282 else
2283 {
2284 /* Merge the noreturn bit. */
2285 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2286 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2287 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2288 DECL_IS_MALLOC (olddecl) = DECL_IS_MALLOC (newdecl);
2289 DECL_PURE_P (olddecl) = DECL_PURE_P (newdecl);
2290 }
2291 /* Keep the old RTL. */
2292 COPY_DECL_RTL (olddecl, newdecl);
2293 }
2294 else if (VAR_P (newdecl)
2295 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2296 {
2297 /* Keep the old RTL. We cannot keep the old RTL if the old
2298 declaration was for an incomplete object and the new
2299 declaration is not since many attributes of the RTL will
2300 change. */
2301 COPY_DECL_RTL (olddecl, newdecl);
2302 }
2303 }
2304 /* If cannot merge, then use the new type and qualifiers,
2305 and don't preserve the old rtl. */
2306 else
2307 {
2308 /* Clean out any memory we had of the old declaration. */
2309 tree oldstatic = value_member (olddecl, static_aggregates);
2310 if (oldstatic)
2311 TREE_VALUE (oldstatic) = error_mark_node;
2312
2313 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2314 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2315 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2316 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2317 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2318 }
2319
2320 /* Merge the storage class information. */
2321 merge_weak (newdecl, olddecl);
2322
2323 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2324 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2325 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2326 if (! DECL_EXTERNAL (olddecl))
2327 DECL_EXTERNAL (newdecl) = 0;
2328 if (! DECL_COMDAT (olddecl))
2329 DECL_COMDAT (newdecl) = 0;
2330
2331 new_template_info = NULL_TREE;
2332 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2333 {
2334 bool new_redefines_gnu_inline = false;
2335
2336 if (new_defines_function
2337 && ((DECL_INTERFACE_KNOWN (olddecl)
2338 && TREE_CODE (olddecl) == FUNCTION_DECL)
2339 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2340 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2341 == FUNCTION_DECL))))
2342 {
2343 tree fn = olddecl;
2344
2345 if (TREE_CODE (fn) == TEMPLATE_DECL)
2346 fn = DECL_TEMPLATE_RESULT (olddecl);
2347
2348 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2349 }
2350
2351 if (!new_redefines_gnu_inline)
2352 {
2353 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2354 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2355 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2356 }
2357 DECL_TEMPLATE_INSTANTIATED (newdecl)
2358 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2359 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2360
2361 /* If the OLDDECL is an instantiation and/or specialization,
2362 then the NEWDECL must be too. But, it may not yet be marked
2363 as such if the caller has created NEWDECL, but has not yet
2364 figured out that it is a redeclaration. */
2365 if (!DECL_USE_TEMPLATE (newdecl))
2366 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2367
2368 /* Don't really know how much of the language-specific
2369 values we should copy from old to new. */
2370 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2371 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2372 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2373 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2374
2375 if (LANG_DECL_HAS_MIN (newdecl))
2376 {
2377 DECL_ACCESS (newdecl) = DECL_ACCESS (olddecl);
2378 if (DECL_TEMPLATE_INFO (newdecl))
2379 {
2380 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2381 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2382 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2383 /* Remember the presence of explicit specialization args. */
2384 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2385 = TINFO_USED_TEMPLATE_ID (new_template_info);
2386 }
2387 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2388 }
2389
2390 if (DECL_DECLARES_FUNCTION_P (newdecl))
2391 {
2392 /* Only functions have these fields. */
2393 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2394 DECL_BEFRIENDING_CLASSES (newdecl)
2395 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2396 DECL_BEFRIENDING_CLASSES (olddecl));
2397 /* DECL_THUNKS is only valid for virtual functions,
2398 otherwise it is a DECL_FRIEND_CONTEXT. */
2399 if (DECL_VIRTUAL_P (newdecl))
2400 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2401 }
2402 else if (VAR_P (newdecl))
2403 {
2404 /* Only variables have this field. */
2405 if (VAR_HAD_UNKNOWN_BOUND (olddecl))
2406 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2407 }
2408 }
2409
2410 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2411 {
2412 tree parm;
2413
2414 /* Merge parameter attributes. */
2415 tree oldarg, newarg;
2416 for (oldarg = DECL_ARGUMENTS(olddecl), newarg = DECL_ARGUMENTS(newdecl);
2417 oldarg && newarg;
2418 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg))
2419 {
2420 DECL_ATTRIBUTES (newarg)
2421 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2422 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2423 }
2424
2425 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2426 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2427 {
2428 /* If newdecl is not a specialization, then it is not a
2429 template-related function at all. And that means that we
2430 should have exited above, returning 0. */
2431 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2432
2433 if (DECL_ODR_USED (olddecl))
2434 /* From [temp.expl.spec]:
2435
2436 If a template, a member template or the member of a class
2437 template is explicitly specialized then that
2438 specialization shall be declared before the first use of
2439 that specialization that would cause an implicit
2440 instantiation to take place, in every translation unit in
2441 which such a use occurs. */
2442 error ("explicit specialization of %qD after first use",
2443 olddecl);
2444
2445 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2446 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2447 && DECL_DECLARED_INLINE_P (newdecl));
2448
2449 /* Don't propagate visibility from the template to the
2450 specialization here. We'll do that in determine_visibility if
2451 appropriate. */
2452 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2453
2454 /* [temp.expl.spec/14] We don't inline explicit specialization
2455 just because the primary template says so. */
2456 gcc_assert (!merge_attr);
2457
2458 DECL_DECLARED_INLINE_P (olddecl)
2459 = DECL_DECLARED_INLINE_P (newdecl);
2460
2461 DECL_DISREGARD_INLINE_LIMITS (olddecl)
2462 = DECL_DISREGARD_INLINE_LIMITS (newdecl);
2463
2464 DECL_UNINLINABLE (olddecl) = DECL_UNINLINABLE (newdecl);
2465 }
2466 else if (new_defines_function && DECL_INITIAL (olddecl))
2467 {
2468 /* Never inline re-defined extern inline functions.
2469 FIXME: this could be better handled by keeping both
2470 function as separate declarations. */
2471 DECL_UNINLINABLE (newdecl) = 1;
2472 }
2473 else
2474 {
2475 if (DECL_PENDING_INLINE_P (olddecl))
2476 {
2477 DECL_PENDING_INLINE_P (newdecl) = 1;
2478 DECL_PENDING_INLINE_INFO (newdecl)
2479 = DECL_PENDING_INLINE_INFO (olddecl);
2480 }
2481 else if (DECL_PENDING_INLINE_P (newdecl))
2482 ;
2483 else if (DECL_SAVED_AUTO_RETURN_TYPE (newdecl) == NULL)
2484 DECL_SAVED_AUTO_RETURN_TYPE (newdecl)
2485 = DECL_SAVED_AUTO_RETURN_TYPE (olddecl);
2486
2487 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2488
2489 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2490 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2491
2492 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2493 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2494 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2495 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2496 }
2497
2498 /* Preserve abstractness on cloned [cd]tors. */
2499 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2500
2501 /* Update newdecl's parms to point at olddecl. */
2502 for (parm = DECL_ARGUMENTS (newdecl); parm;
2503 parm = DECL_CHAIN (parm))
2504 DECL_CONTEXT (parm) = olddecl;
2505
2506 if (! types_match)
2507 {
2508 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2509 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2510 COPY_DECL_RTL (newdecl, olddecl);
2511 }
2512 if (! types_match || new_defines_function)
2513 {
2514 /* These need to be copied so that the names are available.
2515 Note that if the types do match, we'll preserve inline
2516 info and other bits, but if not, we won't. */
2517 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2518 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2519 }
2520 /* If redeclaring a builtin function, it stays built in
2521 if newdecl is a gnu_inline definition, or if newdecl is just
2522 a declaration. */
2523 if (fndecl_built_in_p (olddecl)
2524 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2525 {
2526 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2527 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2528 /* If we're keeping the built-in definition, keep the rtl,
2529 regardless of declaration matches. */
2530 COPY_DECL_RTL (olddecl, newdecl);
2531 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2532 {
2533 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2534 switch (fncode)
2535 {
2536 /* If a compatible prototype of these builtin functions
2537 is seen, assume the runtime implements it with the
2538 expected semantics. */
2539 case BUILT_IN_STPCPY:
2540 if (builtin_decl_explicit_p (fncode))
2541 set_builtin_decl_implicit_p (fncode, true);
2542 break;
2543 default:
2544 if (builtin_decl_explicit_p (fncode))
2545 set_builtin_decl_declared_p (fncode, true);
2546 break;
2547 }
2548 }
2549
2550 copy_attributes_to_builtin (newdecl);
2551 }
2552 if (new_defines_function)
2553 /* If defining a function declared with other language
2554 linkage, use the previously declared language linkage. */
2555 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2556 else if (types_match)
2557 {
2558 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2559 /* Don't clear out the arguments if we're just redeclaring a
2560 function. */
2561 if (DECL_ARGUMENTS (olddecl))
2562 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2563 }
2564 }
2565 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2566 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2567
2568 /* Now preserve various other info from the definition. */
2569 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2570 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2571 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2572 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2573
2574 /* Warn about conflicting visibility specifications. */
2575 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2576 && DECL_VISIBILITY_SPECIFIED (newdecl)
2577 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2578 {
2579 auto_diagnostic_group d;
2580 if (warning_at (newdecl_loc, OPT_Wattributes,
2581 "%qD: visibility attribute ignored because it "
2582 "conflicts with previous declaration", newdecl))
2583 inform (olddecl_loc,
2584 "previous declaration of %qD", olddecl);
2585 }
2586 /* Choose the declaration which specified visibility. */
2587 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2588 {
2589 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2590 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2591 }
2592 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2593 so keep this behavior. */
2594 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2595 {
2596 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2597 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2598 }
2599 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2600 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2601 {
2602 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2603 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2604 }
2605 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2606 if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2607 > DECL_WARN_IF_NOT_ALIGN (newdecl))
2608 SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2609 DECL_WARN_IF_NOT_ALIGN (olddecl));
2610 if (TREE_CODE (newdecl) == FIELD_DECL)
2611 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2612
2613 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2614 with that from NEWDECL below. */
2615 if (DECL_LANG_SPECIFIC (olddecl))
2616 {
2617 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2618 != DECL_LANG_SPECIFIC (newdecl));
2619 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2620 }
2621
2622 /* Merge the USED information. */
2623 if (TREE_USED (olddecl))
2624 TREE_USED (newdecl) = 1;
2625 else if (TREE_USED (newdecl))
2626 TREE_USED (olddecl) = 1;
2627 if (VAR_P (newdecl))
2628 {
2629 if (DECL_READ_P (olddecl))
2630 DECL_READ_P (newdecl) = 1;
2631 else if (DECL_READ_P (newdecl))
2632 DECL_READ_P (olddecl) = 1;
2633 }
2634 if (DECL_PRESERVE_P (olddecl))
2635 DECL_PRESERVE_P (newdecl) = 1;
2636 else if (DECL_PRESERVE_P (newdecl))
2637 DECL_PRESERVE_P (olddecl) = 1;
2638
2639 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2640 to olddecl and deleted. */
2641 if (TREE_CODE (newdecl) == FUNCTION_DECL
2642 && DECL_FUNCTION_VERSIONED (olddecl))
2643 {
2644 /* Set the flag for newdecl so that it gets copied to olddecl. */
2645 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2646 /* newdecl will be purged after copying to olddecl and is no longer
2647 a version. */
2648 cgraph_node::delete_function_version_by_decl (newdecl);
2649 }
2650
2651 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2652 {
2653 int function_size;
2654 struct symtab_node *snode = symtab_node::get (olddecl);
2655
2656 function_size = sizeof (struct tree_decl_common);
2657
2658 memcpy ((char *) olddecl + sizeof (struct tree_common),
2659 (char *) newdecl + sizeof (struct tree_common),
2660 function_size - sizeof (struct tree_common));
2661
2662 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2663 (char *) newdecl + sizeof (struct tree_decl_common),
2664 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2665
2666 /* Preserve symtab node mapping. */
2667 olddecl->decl_with_vis.symtab_node = snode;
2668
2669 if (new_template_info)
2670 /* If newdecl is a template instantiation, it is possible that
2671 the following sequence of events has occurred:
2672
2673 o A friend function was declared in a class template. The
2674 class template was instantiated.
2675
2676 o The instantiation of the friend declaration was
2677 recorded on the instantiation list, and is newdecl.
2678
2679 o Later, however, instantiate_class_template called pushdecl
2680 on the newdecl to perform name injection. But, pushdecl in
2681 turn called duplicate_decls when it discovered that another
2682 declaration of a global function with the same name already
2683 existed.
2684
2685 o Here, in duplicate_decls, we decided to clobber newdecl.
2686
2687 If we're going to do that, we'd better make sure that
2688 olddecl, and not newdecl, is on the list of
2689 instantiations so that if we try to do the instantiation
2690 again we won't get the clobbered declaration. */
2691 reregister_specialization (newdecl,
2692 new_template_info,
2693 olddecl);
2694 }
2695 else
2696 {
2697 size_t size = tree_code_size (TREE_CODE (newdecl));
2698
2699 memcpy ((char *) olddecl + sizeof (struct tree_common),
2700 (char *) newdecl + sizeof (struct tree_common),
2701 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2702 switch (TREE_CODE (newdecl))
2703 {
2704 case LABEL_DECL:
2705 case VAR_DECL:
2706 case RESULT_DECL:
2707 case PARM_DECL:
2708 case FIELD_DECL:
2709 case TYPE_DECL:
2710 case CONST_DECL:
2711 {
2712 struct symtab_node *snode = NULL;
2713
2714 if (VAR_P (newdecl)
2715 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2716 || DECL_EXTERNAL (olddecl)))
2717 snode = symtab_node::get (olddecl);
2718 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2719 (char *) newdecl + sizeof (struct tree_decl_common),
2720 size - sizeof (struct tree_decl_common)
2721 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2722 if (VAR_P (newdecl))
2723 olddecl->decl_with_vis.symtab_node = snode;
2724 }
2725 break;
2726 default:
2727 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2728 (char *) newdecl + sizeof (struct tree_decl_common),
2729 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2730 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2731 break;
2732 }
2733 }
2734
2735 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2736 {
2737 if (DECL_EXTERNAL (olddecl)
2738 || TREE_PUBLIC (olddecl)
2739 || TREE_STATIC (olddecl))
2740 {
2741 /* Merge the section attribute.
2742 We want to issue an error if the sections conflict but that must be
2743 done later in decl_attributes since we are called before attributes
2744 are assigned. */
2745 if (DECL_SECTION_NAME (newdecl) != NULL)
2746 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2747
2748 if (DECL_ONE_ONLY (newdecl))
2749 {
2750 struct symtab_node *oldsym, *newsym;
2751 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2752 oldsym = cgraph_node::get_create (olddecl);
2753 else
2754 oldsym = varpool_node::get_create (olddecl);
2755 newsym = symtab_node::get (newdecl);
2756 oldsym->set_comdat_group (newsym->get_comdat_group ());
2757 }
2758 }
2759
2760 if (VAR_P (newdecl)
2761 && CP_DECL_THREAD_LOCAL_P (newdecl))
2762 {
2763 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2764 if (!processing_template_decl)
2765 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2766 }
2767 }
2768
2769 DECL_UID (olddecl) = olddecl_uid;
2770 if (olddecl_friend)
2771 DECL_FRIEND_P (olddecl) = 1;
2772 if (hidden_friend)
2773 {
2774 DECL_ANTICIPATED (olddecl) = 1;
2775 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2776 }
2777
2778 /* NEWDECL contains the merged attribute lists.
2779 Update OLDDECL to be the same. */
2780 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2781
2782 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2783 so that encode_section_info has a chance to look at the new decl
2784 flags and attributes. */
2785 if (DECL_RTL_SET_P (olddecl)
2786 && (TREE_CODE (olddecl) == FUNCTION_DECL
2787 || (VAR_P (olddecl)
2788 && TREE_STATIC (olddecl))))
2789 make_decl_rtl (olddecl);
2790
2791 /* The NEWDECL will no longer be needed. Because every out-of-class
2792 declaration of a member results in a call to duplicate_decls,
2793 freeing these nodes represents in a significant savings.
2794
2795 Before releasing the node, be sore to remove function from symbol
2796 table that might have been inserted there to record comdat group.
2797 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2798 structure is shared in between newdecl and oldecl. */
2799 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2800 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2801 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2802 {
2803 struct symtab_node *snode = symtab_node::get (newdecl);
2804 if (snode)
2805 snode->remove ();
2806 }
2807
2808 /* Remove the associated constraints for newdecl, if any, before
2809 reclaiming memory. */
2810 if (flag_concepts)
2811 remove_constraints (newdecl);
2812
2813 ggc_free (newdecl);
2814
2815 return olddecl;
2816 }
2817 \f
2818 /* Return zero if the declaration NEWDECL is valid
2819 when the declaration OLDDECL (assumed to be for the same name)
2820 has already been seen.
2821 Otherwise return an error message format string with a %s
2822 where the identifier should go. */
2823
2824 static const char *
2825 redeclaration_error_message (tree newdecl, tree olddecl)
2826 {
2827 if (TREE_CODE (newdecl) == TYPE_DECL)
2828 {
2829 /* Because C++ can put things into name space for free,
2830 constructs like "typedef struct foo { ... } foo"
2831 would look like an erroneous redeclaration. */
2832 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2833 return NULL;
2834 else
2835 return G_("redefinition of %q#D");
2836 }
2837 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2838 {
2839 /* If this is a pure function, its olddecl will actually be
2840 the original initialization to `0' (which we force to call
2841 abort()). Don't complain about redefinition in this case. */
2842 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2843 && DECL_INITIAL (olddecl) == NULL_TREE)
2844 return NULL;
2845
2846 /* If both functions come from different namespaces, this is not
2847 a redeclaration - this is a conflict with a used function. */
2848 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2849 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2850 && ! decls_match (olddecl, newdecl))
2851 return G_("%qD conflicts with used function");
2852
2853 /* We'll complain about linkage mismatches in
2854 warn_extern_redeclared_static. */
2855
2856 /* Defining the same name twice is no good. */
2857 if (decl_defined_p (olddecl)
2858 && decl_defined_p (newdecl))
2859 {
2860 if (DECL_NAME (olddecl) == NULL_TREE)
2861 return G_("%q#D not declared in class");
2862 else if (!GNU_INLINE_P (olddecl)
2863 || GNU_INLINE_P (newdecl))
2864 return G_("redefinition of %q#D");
2865 }
2866
2867 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2868 {
2869 bool olda = GNU_INLINE_P (olddecl);
2870 bool newa = GNU_INLINE_P (newdecl);
2871
2872 if (olda != newa)
2873 {
2874 if (newa)
2875 return G_("%q+D redeclared inline with "
2876 "%<gnu_inline%> attribute");
2877 else
2878 return G_("%q+D redeclared inline without "
2879 "%<gnu_inline%> attribute");
2880 }
2881 }
2882
2883 check_abi_tag_redeclaration
2884 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2885 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2886
2887 return NULL;
2888 }
2889 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2890 {
2891 tree nt, ot;
2892
2893 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2894 {
2895 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2896 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2897 return G_("redefinition of %q#D");
2898 return NULL;
2899 }
2900
2901 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2902 || (DECL_TEMPLATE_RESULT (newdecl)
2903 == DECL_TEMPLATE_RESULT (olddecl)))
2904 return NULL;
2905
2906 nt = DECL_TEMPLATE_RESULT (newdecl);
2907 if (DECL_TEMPLATE_INFO (nt))
2908 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2909 ot = DECL_TEMPLATE_RESULT (olddecl);
2910 if (DECL_TEMPLATE_INFO (ot))
2911 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2912 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2913 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2914 return G_("redefinition of %q#D");
2915
2916 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2917 {
2918 bool olda = GNU_INLINE_P (ot);
2919 bool newa = GNU_INLINE_P (nt);
2920
2921 if (olda != newa)
2922 {
2923 if (newa)
2924 return G_("%q+D redeclared inline with "
2925 "%<gnu_inline%> attribute");
2926 else
2927 return G_("%q+D redeclared inline without "
2928 "%<gnu_inline%> attribute");
2929 }
2930 }
2931
2932 /* Core issue #226 (C++0x):
2933
2934 If a friend function template declaration specifies a
2935 default template-argument, that declaration shall be a
2936 definition and shall be the only declaration of the
2937 function template in the translation unit. */
2938 if ((cxx_dialect != cxx98)
2939 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2940 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2941 /*is_primary=*/true,
2942 /*is_partial=*/false,
2943 /*is_friend_decl=*/2))
2944 return G_("redeclaration of friend %q#D "
2945 "may not have default template arguments");
2946
2947 return NULL;
2948 }
2949 else if (VAR_P (newdecl)
2950 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2951 && (! DECL_LANG_SPECIFIC (olddecl)
2952 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2953 || CP_DECL_THREAD_LOCAL_P (newdecl)))
2954 {
2955 /* Only variables can be thread-local, and all declarations must
2956 agree on this property. */
2957 if (CP_DECL_THREAD_LOCAL_P (newdecl))
2958 return G_("thread-local declaration of %q#D follows "
2959 "non-thread-local declaration");
2960 else
2961 return G_("non-thread-local declaration of %q#D follows "
2962 "thread-local declaration");
2963 }
2964 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2965 {
2966 /* The objects have been declared at namespace scope. If either
2967 is a member of an anonymous union, then this is an invalid
2968 redeclaration. For example:
2969
2970 int i;
2971 union { int i; };
2972
2973 is invalid. */
2974 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2975 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2976 return G_("redeclaration of %q#D");
2977 /* If at least one declaration is a reference, there is no
2978 conflict. For example:
2979
2980 int i = 3;
2981 extern int i;
2982
2983 is valid. */
2984 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2985 return NULL;
2986
2987 /* Static data member declared outside a class definition
2988 if the variable is defined within the class with constexpr
2989 specifier is declaration rather than definition (and
2990 deprecated). */
2991 if (cxx_dialect >= cxx17
2992 && VAR_P (olddecl)
2993 && DECL_CLASS_SCOPE_P (olddecl)
2994 && DECL_DECLARED_CONSTEXPR_P (olddecl)
2995 && !DECL_INITIAL (newdecl))
2996 {
2997 DECL_EXTERNAL (newdecl) = 1;
2998 /* For now, only warn with explicit -Wdeprecated. */
2999 if (global_options_set.x_warn_deprecated)
3000 {
3001 auto_diagnostic_group d;
3002 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
3003 "redundant redeclaration of %<constexpr%> "
3004 "static data member %qD", newdecl))
3005 inform (DECL_SOURCE_LOCATION (olddecl),
3006 "previous declaration of %qD", olddecl);
3007 }
3008 return NULL;
3009 }
3010
3011 /* Reject two definitions. */
3012 return G_("redefinition of %q#D");
3013 }
3014 else
3015 {
3016 /* Objects declared with block scope: */
3017 /* Reject two definitions, and reject a definition
3018 together with an external reference. */
3019 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3020 return G_("redeclaration of %q#D");
3021 return NULL;
3022 }
3023 }
3024 \f
3025
3026 /* Hash and equality functions for the named_label table. */
3027
3028 hashval_t
3029 named_label_hash::hash (const value_type entry)
3030 {
3031 return IDENTIFIER_HASH_VALUE (entry->name);
3032 }
3033
3034 bool
3035 named_label_hash::equal (const value_type entry, compare_type name)
3036 {
3037 return name == entry->name;
3038 }
3039
3040 /* Look for a label named ID in the current function. If one cannot
3041 be found, create one. Return the named_label_entry, or NULL on
3042 failure. */
3043
3044 static named_label_entry *
3045 lookup_label_1 (tree id, bool making_local_p)
3046 {
3047 /* You can't use labels at global scope. */
3048 if (current_function_decl == NULL_TREE)
3049 {
3050 error ("label %qE referenced outside of any function", id);
3051 return NULL;
3052 }
3053
3054 if (!named_labels)
3055 named_labels = hash_table<named_label_hash>::create_ggc (13);
3056
3057 hashval_t hash = IDENTIFIER_HASH_VALUE (id);
3058 named_label_entry **slot
3059 = named_labels->find_slot_with_hash (id, hash, INSERT);
3060 named_label_entry *old = *slot;
3061
3062 if (old && old->label_decl)
3063 {
3064 if (!making_local_p)
3065 return old;
3066
3067 if (old->binding_level == current_binding_level)
3068 {
3069 error ("local label %qE conflicts with existing label", id);
3070 inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
3071 return NULL;
3072 }
3073 }
3074
3075 /* We are making a new decl, create or reuse the named_label_entry */
3076 named_label_entry *ent = NULL;
3077 if (old && !old->label_decl)
3078 ent = old;
3079 else
3080 {
3081 ent = ggc_cleared_alloc<named_label_entry> ();
3082 ent->name = id;
3083 ent->outer = old;
3084 *slot = ent;
3085 }
3086
3087 /* Now create the LABEL_DECL. */
3088 tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3089
3090 DECL_CONTEXT (decl) = current_function_decl;
3091 SET_DECL_MODE (decl, VOIDmode);
3092 if (making_local_p)
3093 {
3094 C_DECLARED_LABEL_FLAG (decl) = true;
3095 DECL_CHAIN (decl) = current_binding_level->names;
3096 current_binding_level->names = decl;
3097 }
3098
3099 ent->label_decl = decl;
3100
3101 return ent;
3102 }
3103
3104 /* Wrapper for lookup_label_1. */
3105
3106 tree
3107 lookup_label (tree id)
3108 {
3109 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3110 named_label_entry *ent = lookup_label_1 (id, false);
3111 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3112 return ent ? ent->label_decl : NULL_TREE;
3113 }
3114
3115 tree
3116 declare_local_label (tree id)
3117 {
3118 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3119 named_label_entry *ent = lookup_label_1 (id, true);
3120 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3121 return ent ? ent->label_decl : NULL_TREE;
3122 }
3123
3124 /* Returns nonzero if it is ill-formed to jump past the declaration of
3125 DECL. Returns 2 if it's also a real problem. */
3126
3127 static int
3128 decl_jump_unsafe (tree decl)
3129 {
3130 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3131 with automatic storage duration is not in scope to a point where it is
3132 in scope is ill-formed unless the variable has scalar type, class type
3133 with a trivial default constructor and a trivial destructor, a
3134 cv-qualified version of one of these types, or an array of one of the
3135 preceding types and is declared without an initializer (8.5). */
3136 tree type = TREE_TYPE (decl);
3137
3138 if (!VAR_P (decl) || TREE_STATIC (decl)
3139 || type == error_mark_node)
3140 return 0;
3141
3142 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3143 || variably_modified_type_p (type, NULL_TREE))
3144 return 2;
3145
3146 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3147 return 1;
3148
3149 return 0;
3150 }
3151
3152 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3153 to the user. */
3154
3155 static bool
3156 identify_goto (tree decl, location_t loc, const location_t *locus,
3157 diagnostic_t diag_kind)
3158 {
3159 bool complained
3160 = emit_diagnostic (diag_kind, loc, 0,
3161 decl ? N_("jump to label %qD")
3162 : N_("jump to case label"), decl);
3163 if (complained && locus)
3164 inform (*locus, " from here");
3165 return complained;
3166 }
3167
3168 /* Check that a single previously seen jump to a newly defined label
3169 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3170 the jump context; NAMES are the names in scope in LEVEL at the jump
3171 context; LOCUS is the source position of the jump or 0. Returns
3172 true if all is well. */
3173
3174 static bool
3175 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3176 bool exited_omp, const location_t *locus)
3177 {
3178 cp_binding_level *b;
3179 bool complained = false;
3180 int identified = 0;
3181 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3182
3183 if (exited_omp)
3184 {
3185 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3186 if (complained)
3187 inform (input_location, " exits OpenMP structured block");
3188 saw_omp = true;
3189 identified = 2;
3190 }
3191
3192 for (b = current_binding_level; b ; b = b->level_chain)
3193 {
3194 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3195
3196 for (new_decls = b->names; new_decls != old_decls;
3197 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3198 : TREE_CHAIN (new_decls)))
3199 {
3200 int problem = decl_jump_unsafe (new_decls);
3201 if (! problem)
3202 continue;
3203
3204 if (!identified)
3205 {
3206 complained = identify_goto (decl, input_location, locus,
3207 problem > 1
3208 ? DK_ERROR : DK_PERMERROR);
3209 identified = 1;
3210 }
3211 if (complained)
3212 {
3213 if (problem > 1)
3214 inform (DECL_SOURCE_LOCATION (new_decls),
3215 " crosses initialization of %q#D", new_decls);
3216 else
3217 inform (DECL_SOURCE_LOCATION (new_decls),
3218 " enters scope of %q#D, which has "
3219 "non-trivial destructor", new_decls);
3220 }
3221 }
3222
3223 if (b == level)
3224 break;
3225
3226 const char *inf = NULL;
3227 location_t loc = input_location;
3228 switch (b->kind)
3229 {
3230 case sk_try:
3231 if (!saw_eh)
3232 inf = G_(" enters %<try%> block");
3233 saw_eh = true;
3234 break;
3235
3236 case sk_catch:
3237 if (!saw_eh)
3238 inf = G_(" enters %<catch%> block");
3239 saw_eh = true;
3240 break;
3241
3242 case sk_omp:
3243 if (!saw_omp)
3244 inf = G_(" enters OpenMP structured block");
3245 saw_omp = true;
3246 break;
3247
3248 case sk_transaction:
3249 if (!saw_tm)
3250 inf = G_(" enters synchronized or atomic statement");
3251 saw_tm = true;
3252 break;
3253
3254 case sk_block:
3255 if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3256 {
3257 inf = G_(" enters %<constexpr if%> statement");
3258 loc = EXPR_LOCATION (b->level_chain->this_entity);
3259 saw_cxif = true;
3260 }
3261 break;
3262
3263 default:
3264 break;
3265 }
3266
3267 if (inf)
3268 {
3269 if (identified < 2)
3270 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3271 identified = 2;
3272 if (complained)
3273 inform (loc, inf);
3274 }
3275 }
3276
3277 return !identified;
3278 }
3279
3280 static void
3281 check_previous_goto (tree decl, struct named_label_use_entry *use)
3282 {
3283 check_previous_goto_1 (decl, use->binding_level,
3284 use->names_in_scope, use->in_omp_scope,
3285 &use->o_goto_locus);
3286 }
3287
3288 static bool
3289 check_switch_goto (cp_binding_level* level)
3290 {
3291 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3292 }
3293
3294 /* Check that a new jump to a label DECL is OK. Called by
3295 finish_goto_stmt. */
3296
3297 void
3298 check_goto (tree decl)
3299 {
3300 /* We can't know where a computed goto is jumping.
3301 So we assume that it's OK. */
3302 if (TREE_CODE (decl) != LABEL_DECL)
3303 return;
3304
3305 /* We didn't record any information about this label when we created it,
3306 and there's not much point since it's trivial to analyze as a return. */
3307 if (decl == cdtor_label)
3308 return;
3309
3310 hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3311 named_label_entry **slot
3312 = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3313 named_label_entry *ent = *slot;
3314
3315 /* If the label hasn't been defined yet, defer checking. */
3316 if (! DECL_INITIAL (decl))
3317 {
3318 /* Don't bother creating another use if the last goto had the
3319 same data, and will therefore create the same set of errors. */
3320 if (ent->uses
3321 && ent->uses->names_in_scope == current_binding_level->names)
3322 return;
3323
3324 named_label_use_entry *new_use
3325 = ggc_alloc<named_label_use_entry> ();
3326 new_use->binding_level = current_binding_level;
3327 new_use->names_in_scope = current_binding_level->names;
3328 new_use->o_goto_locus = input_location;
3329 new_use->in_omp_scope = false;
3330
3331 new_use->next = ent->uses;
3332 ent->uses = new_use;
3333 return;
3334 }
3335
3336 bool saw_catch = false, complained = false;
3337 int identified = 0;
3338 tree bad;
3339 unsigned ix;
3340
3341 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3342 || ent->in_constexpr_if
3343 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3344 {
3345 diagnostic_t diag_kind = DK_PERMERROR;
3346 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3347 || ent->in_transaction_scope || ent->in_omp_scope)
3348 diag_kind = DK_ERROR;
3349 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3350 &input_location, diag_kind);
3351 identified = 1 + (diag_kind == DK_ERROR);
3352 }
3353
3354 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3355 {
3356 int u = decl_jump_unsafe (bad);
3357
3358 if (u > 1 && DECL_ARTIFICIAL (bad))
3359 {
3360 /* Can't skip init of __exception_info. */
3361 if (identified == 1)
3362 {
3363 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3364 &input_location, DK_ERROR);
3365 identified = 2;
3366 }
3367 if (complained)
3368 inform (DECL_SOURCE_LOCATION (bad), " enters %<catch%> block");
3369 saw_catch = true;
3370 }
3371 else if (complained)
3372 {
3373 if (u > 1)
3374 inform (DECL_SOURCE_LOCATION (bad),
3375 " skips initialization of %q#D", bad);
3376 else
3377 inform (DECL_SOURCE_LOCATION (bad),
3378 " enters scope of %q#D which has "
3379 "non-trivial destructor", bad);
3380 }
3381 }
3382
3383 if (complained)
3384 {
3385 if (ent->in_try_scope)
3386 inform (input_location, " enters %<try%> block");
3387 else if (ent->in_catch_scope && !saw_catch)
3388 inform (input_location, " enters %<catch%> block");
3389 else if (ent->in_transaction_scope)
3390 inform (input_location, " enters synchronized or atomic statement");
3391 else if (ent->in_constexpr_if)
3392 inform (input_location, " enters %<constexpr if%> statement");
3393 }
3394
3395 if (ent->in_omp_scope)
3396 {
3397 if (complained)
3398 inform (input_location, " enters OpenMP structured block");
3399 }
3400 else if (flag_openmp)
3401 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3402 {
3403 if (b == ent->binding_level)
3404 break;
3405 if (b->kind == sk_omp)
3406 {
3407 if (identified < 2)
3408 {
3409 complained = identify_goto (decl,
3410 DECL_SOURCE_LOCATION (decl),
3411 &input_location, DK_ERROR);
3412 identified = 2;
3413 }
3414 if (complained)
3415 inform (input_location, " exits OpenMP structured block");
3416 break;
3417 }
3418 }
3419 }
3420
3421 /* Check that a return is ok wrt OpenMP structured blocks.
3422 Called by finish_return_stmt. Returns true if all is well. */
3423
3424 bool
3425 check_omp_return (void)
3426 {
3427 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3428 if (b->kind == sk_omp)
3429 {
3430 error ("invalid exit from OpenMP structured block");
3431 return false;
3432 }
3433 else if (b->kind == sk_function_parms)
3434 break;
3435 return true;
3436 }
3437
3438 /* Define a label, specifying the location in the source file.
3439 Return the LABEL_DECL node for the label. */
3440
3441 static tree
3442 define_label_1 (location_t location, tree name)
3443 {
3444 /* After labels, make any new cleanups in the function go into their
3445 own new (temporary) binding contour. */
3446 for (cp_binding_level *p = current_binding_level;
3447 p->kind != sk_function_parms;
3448 p = p->level_chain)
3449 p->more_cleanups_ok = 0;
3450
3451 named_label_entry *ent = lookup_label_1 (name, false);
3452 tree decl = ent->label_decl;
3453
3454 if (DECL_INITIAL (decl) != NULL_TREE)
3455 {
3456 error ("duplicate label %qD", decl);
3457 return error_mark_node;
3458 }
3459 else
3460 {
3461 /* Mark label as having been defined. */
3462 DECL_INITIAL (decl) = error_mark_node;
3463 /* Say where in the source. */
3464 DECL_SOURCE_LOCATION (decl) = location;
3465
3466 ent->binding_level = current_binding_level;
3467 ent->names_in_scope = current_binding_level->names;
3468
3469 for (named_label_use_entry *use = ent->uses; use; use = use->next)
3470 check_previous_goto (decl, use);
3471 ent->uses = NULL;
3472 }
3473
3474 return decl;
3475 }
3476
3477 /* Wrapper for define_label_1. */
3478
3479 tree
3480 define_label (location_t location, tree name)
3481 {
3482 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3483 tree ret = define_label_1 (location, name);
3484 timevar_cond_stop (TV_NAME_LOOKUP, running);
3485 return ret;
3486 }
3487
3488
3489 struct cp_switch
3490 {
3491 cp_binding_level *level;
3492 struct cp_switch *next;
3493 /* The SWITCH_STMT being built. */
3494 tree switch_stmt;
3495 /* A splay-tree mapping the low element of a case range to the high
3496 element, or NULL_TREE if there is no high element. Used to
3497 determine whether or not a new case label duplicates an old case
3498 label. We need a tree, rather than simply a hash table, because
3499 of the GNU case range extension. */
3500 splay_tree cases;
3501 /* Remember whether a default: case label has been seen. */
3502 bool has_default_p;
3503 /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT. */
3504 bool break_stmt_seen_p;
3505 /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3506 where BREAK_STMT doesn't belong to the SWITCH_STMT. */
3507 bool in_loop_body_p;
3508 };
3509
3510 /* A stack of the currently active switch statements. The innermost
3511 switch statement is on the top of the stack. There is no need to
3512 mark the stack for garbage collection because it is only active
3513 during the processing of the body of a function, and we never
3514 collect at that point. */
3515
3516 static struct cp_switch *switch_stack;
3517
3518 /* Called right after a switch-statement condition is parsed.
3519 SWITCH_STMT is the switch statement being parsed. */
3520
3521 void
3522 push_switch (tree switch_stmt)
3523 {
3524 struct cp_switch *p = XNEW (struct cp_switch);
3525 p->level = current_binding_level;
3526 p->next = switch_stack;
3527 p->switch_stmt = switch_stmt;
3528 p->cases = splay_tree_new (case_compare, NULL, NULL);
3529 p->has_default_p = false;
3530 p->break_stmt_seen_p = false;
3531 p->in_loop_body_p = false;
3532 switch_stack = p;
3533 }
3534
3535 void
3536 pop_switch (void)
3537 {
3538 struct cp_switch *cs = switch_stack;
3539 location_t switch_location;
3540
3541 /* Emit warnings as needed. */
3542 switch_location = cp_expr_loc_or_loc (cs->switch_stmt, input_location);
3543 const bool bool_cond_p
3544 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3545 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3546 if (!processing_template_decl)
3547 c_do_switch_warnings (cs->cases, switch_location,
3548 SWITCH_STMT_TYPE (cs->switch_stmt),
3549 SWITCH_STMT_COND (cs->switch_stmt), bool_cond_p);
3550
3551 /* For the benefit of block_may_fallthru remember if the switch body
3552 case labels cover all possible values and if there are break; stmts. */
3553 if (cs->has_default_p
3554 || (!processing_template_decl
3555 && c_switch_covers_all_cases_p (cs->cases,
3556 SWITCH_STMT_TYPE (cs->switch_stmt))))
3557 SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3558 if (!cs->break_stmt_seen_p)
3559 SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3560 gcc_assert (!cs->in_loop_body_p);
3561 splay_tree_delete (cs->cases);
3562 switch_stack = switch_stack->next;
3563 free (cs);
3564 }
3565
3566 /* Note that a BREAK_STMT is about to be added. If it is inside of
3567 a SWITCH_STMT and not inside of a loop body inside of it, note
3568 in switch_stack we've seen a BREAK_STMT. */
3569
3570 void
3571 note_break_stmt (void)
3572 {
3573 if (switch_stack && !switch_stack->in_loop_body_p)
3574 switch_stack->break_stmt_seen_p = true;
3575 }
3576
3577 /* Note the start of processing of an iteration statement's body.
3578 The note_break_stmt function will do nothing while processing it.
3579 Return a flag that should be passed to note_iteration_stmt_body_end. */
3580
3581 bool
3582 note_iteration_stmt_body_start (void)
3583 {
3584 if (!switch_stack)
3585 return false;
3586 bool ret = switch_stack->in_loop_body_p;
3587 switch_stack->in_loop_body_p = true;
3588 return ret;
3589 }
3590
3591 /* Note the end of processing of an iteration statement's body. */
3592
3593 void
3594 note_iteration_stmt_body_end (bool prev)
3595 {
3596 if (switch_stack)
3597 switch_stack->in_loop_body_p = prev;
3598 }
3599
3600 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3601 condition. Note that if TYPE and VALUE are already integral we don't
3602 really do the conversion because the language-independent
3603 warning/optimization code will work better that way. */
3604
3605 static tree
3606 case_conversion (tree type, tree value)
3607 {
3608 if (value == NULL_TREE)
3609 return value;
3610
3611 value = mark_rvalue_use (value);
3612
3613 if (cxx_dialect >= cxx11
3614 && (SCOPED_ENUM_P (type)
3615 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3616 {
3617 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3618 type = type_promotes_to (type);
3619 value = (perform_implicit_conversion_flags
3620 (type, value, tf_warning_or_error,
3621 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3622 }
3623 return cxx_constant_value (value);
3624 }
3625
3626 /* Note that we've seen a definition of a case label, and complain if this
3627 is a bad place for one. */
3628
3629 tree
3630 finish_case_label (location_t loc, tree low_value, tree high_value)
3631 {
3632 tree cond, r;
3633 cp_binding_level *p;
3634 tree type;
3635
3636 if (low_value == NULL_TREE && high_value == NULL_TREE)
3637 switch_stack->has_default_p = true;
3638
3639 if (processing_template_decl)
3640 {
3641 tree label;
3642
3643 /* For templates, just add the case label; we'll do semantic
3644 analysis at instantiation-time. */
3645 label = build_decl (loc, LABEL_DECL, NULL_TREE, void_type_node);
3646 return add_stmt (build_case_label (low_value, high_value, label));
3647 }
3648
3649 /* Find the condition on which this switch statement depends. */
3650 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3651 if (cond && TREE_CODE (cond) == TREE_LIST)
3652 cond = TREE_VALUE (cond);
3653
3654 if (!check_switch_goto (switch_stack->level))
3655 return error_mark_node;
3656
3657 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3658 if (type == error_mark_node)
3659 return error_mark_node;
3660
3661 low_value = case_conversion (type, low_value);
3662 high_value = case_conversion (type, high_value);
3663
3664 r = c_add_case_label (loc, switch_stack->cases, cond, low_value, high_value);
3665
3666 /* After labels, make any new cleanups in the function go into their
3667 own new (temporary) binding contour. */
3668 for (p = current_binding_level;
3669 p->kind != sk_function_parms;
3670 p = p->level_chain)
3671 p->more_cleanups_ok = 0;
3672
3673 return r;
3674 }
3675 \f
3676 struct typename_info {
3677 tree scope;
3678 tree name;
3679 tree template_id;
3680 bool enum_p;
3681 bool class_p;
3682 };
3683
3684 struct typename_hasher : ggc_ptr_hash<tree_node>
3685 {
3686 typedef typename_info *compare_type;
3687
3688 /* Hash a TYPENAME_TYPE. */
3689
3690 static hashval_t
3691 hash (tree t)
3692 {
3693 hashval_t hash;
3694
3695 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3696 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3697
3698 return hash;
3699 }
3700
3701 /* Compare two TYPENAME_TYPEs. */
3702
3703 static bool
3704 equal (tree t1, const typename_info *t2)
3705 {
3706 return (TYPE_IDENTIFIER (t1) == t2->name
3707 && TYPE_CONTEXT (t1) == t2->scope
3708 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3709 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3710 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3711 }
3712 };
3713
3714 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3715 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3716
3717 Returns the new TYPENAME_TYPE. */
3718
3719 static GTY (()) hash_table<typename_hasher> *typename_htab;
3720
3721 tree
3722 build_typename_type (tree context, tree name, tree fullname,
3723 enum tag_types tag_type)
3724 {
3725 tree t;
3726 tree d;
3727 typename_info ti;
3728 tree *e;
3729 hashval_t hash;
3730
3731 if (typename_htab == NULL)
3732 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3733
3734 ti.scope = FROB_CONTEXT (context);
3735 ti.name = name;
3736 ti.template_id = fullname;
3737 ti.enum_p = tag_type == enum_type;
3738 ti.class_p = (tag_type == class_type
3739 || tag_type == record_type
3740 || tag_type == union_type);
3741 hash = (htab_hash_pointer (ti.scope)
3742 ^ htab_hash_pointer (ti.name));
3743
3744 /* See if we already have this type. */
3745 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3746 if (*e)
3747 t = *e;
3748 else
3749 {
3750 /* Build the TYPENAME_TYPE. */
3751 t = cxx_make_type (TYPENAME_TYPE);
3752 TYPE_CONTEXT (t) = ti.scope;
3753 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3754 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3755 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3756
3757 /* Build the corresponding TYPE_DECL. */
3758 d = build_decl (input_location, TYPE_DECL, name, t);
3759 TYPE_NAME (TREE_TYPE (d)) = d;
3760 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3761 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3762 DECL_ARTIFICIAL (d) = 1;
3763
3764 /* Store it in the hash table. */
3765 *e = t;
3766
3767 /* TYPENAME_TYPEs must always be compared structurally, because
3768 they may or may not resolve down to another type depending on
3769 the currently open classes. */
3770 SET_TYPE_STRUCTURAL_EQUALITY (t);
3771 }
3772
3773 return t;
3774 }
3775
3776 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3777 provided to name the type. Returns an appropriate type, unless an
3778 error occurs, in which case error_mark_node is returned. If we
3779 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3780 return that, rather than the _TYPE it corresponds to, in other
3781 cases we look through the type decl. If TF_ERROR is set, complain
3782 about errors, otherwise be quiet. */
3783
3784 tree
3785 make_typename_type (tree context, tree name, enum tag_types tag_type,
3786 tsubst_flags_t complain)
3787 {
3788 tree fullname;
3789 tree t;
3790 bool want_template;
3791
3792 if (name == error_mark_node
3793 || context == NULL_TREE
3794 || context == error_mark_node)
3795 return error_mark_node;
3796
3797 if (TYPE_P (name))
3798 {
3799 if (!(TYPE_LANG_SPECIFIC (name)
3800 && (CLASSTYPE_IS_TEMPLATE (name)
3801 || CLASSTYPE_USE_TEMPLATE (name))))
3802 name = TYPE_IDENTIFIER (name);
3803 else
3804 /* Create a TEMPLATE_ID_EXPR for the type. */
3805 name = build_nt (TEMPLATE_ID_EXPR,
3806 CLASSTYPE_TI_TEMPLATE (name),
3807 CLASSTYPE_TI_ARGS (name));
3808 }
3809 else if (TREE_CODE (name) == TYPE_DECL)
3810 name = DECL_NAME (name);
3811
3812 fullname = name;
3813
3814 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3815 {
3816 name = TREE_OPERAND (name, 0);
3817 if (DECL_TYPE_TEMPLATE_P (name))
3818 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3819 if (TREE_CODE (name) != IDENTIFIER_NODE)
3820 {
3821 if (complain & tf_error)
3822 error ("%qD is not a type", name);
3823 return error_mark_node;
3824 }
3825 }
3826 if (TREE_CODE (name) == TEMPLATE_DECL)
3827 {
3828 if (complain & tf_error)
3829 error ("%qD used without template arguments", name);
3830 return error_mark_node;
3831 }
3832 gcc_assert (identifier_p (name));
3833 gcc_assert (TYPE_P (context));
3834
3835 if (TREE_CODE (context) == TYPE_PACK_EXPANSION)
3836 /* This can happen for C++17 variadic using (c++/88986). */;
3837 else if (!MAYBE_CLASS_TYPE_P (context))
3838 {
3839 if (complain & tf_error)
3840 error ("%q#T is not a class", context);
3841 return error_mark_node;
3842 }
3843
3844 /* When the CONTEXT is a dependent type, NAME could refer to a
3845 dependent base class of CONTEXT. But look inside it anyway
3846 if CONTEXT is a currently open scope, in case it refers to a
3847 member of the current instantiation or a non-dependent base;
3848 lookup will stop when we hit a dependent base. */
3849 if (!dependent_scope_p (context))
3850 /* We should only set WANT_TYPE when we're a nested typename type.
3851 Then we can give better diagnostics if we find a non-type. */
3852 t = lookup_field (context, name, 2, /*want_type=*/true);
3853 else
3854 t = NULL_TREE;
3855
3856 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3857 return build_typename_type (context, name, fullname, tag_type);
3858
3859 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3860
3861 if (!t)
3862 {
3863 if (complain & tf_error)
3864 {
3865 if (!COMPLETE_TYPE_P (context))
3866 cxx_incomplete_type_error (NULL_TREE, context);
3867 else
3868 error (want_template ? G_("no class template named %q#T in %q#T")
3869 : G_("no type named %q#T in %q#T"), name, context);
3870 }
3871 return error_mark_node;
3872 }
3873
3874 /* Pull out the template from an injected-class-name (or multiple). */
3875 if (want_template)
3876 t = maybe_get_template_decl_from_type_decl (t);
3877
3878 if (TREE_CODE (t) == TREE_LIST)
3879 {
3880 if (complain & tf_error)
3881 {
3882 error ("lookup of %qT in %qT is ambiguous", name, context);
3883 print_candidates (t);
3884 }
3885 return error_mark_node;
3886 }
3887
3888 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3889 {
3890 if (complain & tf_error)
3891 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3892 context, name, t);
3893 return error_mark_node;
3894 }
3895 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3896 {
3897 if (complain & tf_error)
3898 error ("%<typename %T::%D%> names %q#T, which is not a type",
3899 context, name, t);
3900 return error_mark_node;
3901 }
3902
3903 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3904 return error_mark_node;
3905
3906 /* If we are currently parsing a template and if T is a typedef accessed
3907 through CONTEXT then we need to remember and check access of T at
3908 template instantiation time. */
3909 add_typedef_to_current_template_for_access_check (t, context, input_location);
3910
3911 if (want_template)
3912 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3913 NULL_TREE, context,
3914 /*entering_scope=*/0,
3915 complain | tf_user);
3916
3917 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3918 t = TREE_TYPE (t);
3919
3920 maybe_record_typedef_use (t);
3921
3922 return t;
3923 }
3924
3925 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3926 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3927 in which case error_mark_node is returned.
3928
3929 If PARM_LIST is non-NULL, also make sure that the template parameter
3930 list of TEMPLATE_DECL matches.
3931
3932 If COMPLAIN zero, don't complain about any errors that occur. */
3933
3934 tree
3935 make_unbound_class_template (tree context, tree name, tree parm_list,
3936 tsubst_flags_t complain)
3937 {
3938 tree t;
3939 tree d;
3940
3941 if (TYPE_P (name))
3942 name = TYPE_IDENTIFIER (name);
3943 else if (DECL_P (name))
3944 name = DECL_NAME (name);
3945 gcc_assert (identifier_p (name));
3946
3947 if (!dependent_type_p (context)
3948 || currently_open_class (context))
3949 {
3950 tree tmpl = NULL_TREE;
3951
3952 if (MAYBE_CLASS_TYPE_P (context))
3953 tmpl = lookup_field (context, name, 0, false);
3954
3955 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3956 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3957
3958 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3959 {
3960 if (complain & tf_error)
3961 error ("no class template named %q#T in %q#T", name, context);
3962 return error_mark_node;
3963 }
3964
3965 if (parm_list
3966 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3967 {
3968 if (complain & tf_error)
3969 {
3970 error ("template parameters do not match template %qD", tmpl);
3971 inform (DECL_SOURCE_LOCATION (tmpl),
3972 "%qD declared here", tmpl);
3973 }
3974 return error_mark_node;
3975 }
3976
3977 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3978 complain))
3979 return error_mark_node;
3980
3981 return tmpl;
3982 }
3983
3984 /* Build the UNBOUND_CLASS_TEMPLATE. */
3985 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3986 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3987 TREE_TYPE (t) = NULL_TREE;
3988 SET_TYPE_STRUCTURAL_EQUALITY (t);
3989
3990 /* Build the corresponding TEMPLATE_DECL. */
3991 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3992 TYPE_NAME (TREE_TYPE (d)) = d;
3993 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3994 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3995 DECL_ARTIFICIAL (d) = 1;
3996 DECL_TEMPLATE_PARMS (d) = parm_list;
3997
3998 return t;
3999 }
4000
4001 \f
4002
4003 /* Push the declarations of builtin types into the global namespace.
4004 RID_INDEX is the index of the builtin type in the array
4005 RID_POINTERS. NAME is the name used when looking up the builtin
4006 type. TYPE is the _TYPE node for the builtin type.
4007
4008 The calls to set_global_binding below should be
4009 eliminated. Built-in types should not be looked up name; their
4010 names are keywords that the parser can recognize. However, there
4011 is code in c-common.c that uses identifier_global_value to look up
4012 built-in types by name. */
4013
4014 void
4015 record_builtin_type (enum rid rid_index,
4016 const char* name,
4017 tree type)
4018 {
4019 tree decl = NULL_TREE;
4020
4021 if (name)
4022 {
4023 tree tname = get_identifier (name);
4024 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
4025 DECL_ARTIFICIAL (tdecl) = 1;
4026 set_global_binding (tdecl);
4027 decl = tdecl;
4028 }
4029
4030 if ((int) rid_index < (int) RID_MAX)
4031 if (tree rname = ridpointers[(int) rid_index])
4032 if (!decl || DECL_NAME (decl) != rname)
4033 {
4034 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
4035 DECL_ARTIFICIAL (rdecl) = 1;
4036 set_global_binding (rdecl);
4037 if (!decl)
4038 decl = rdecl;
4039 }
4040
4041 if (decl)
4042 {
4043 if (!TYPE_NAME (type))
4044 TYPE_NAME (type) = decl;
4045 debug_hooks->type_decl (decl, 0);
4046 }
4047 }
4048
4049 /* Push a type into the namespace so that the back ends ignore it. */
4050
4051 static void
4052 record_unknown_type (tree type, const char* name)
4053 {
4054 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
4055 TYPE_DECL, get_identifier (name), type));
4056 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
4057 DECL_IGNORED_P (decl) = 1;
4058 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4059 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
4060 SET_TYPE_ALIGN (type, 1);
4061 TYPE_USER_ALIGN (type) = 0;
4062 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
4063 }
4064
4065 /* Create all the predefined identifiers. */
4066
4067 static void
4068 initialize_predefined_identifiers (void)
4069 {
4070 struct predefined_identifier
4071 {
4072 const char *name; /* Name. */
4073 tree *node; /* Node to store it in. */
4074 cp_identifier_kind kind; /* Kind of identifier. */
4075 };
4076
4077 /* A table of identifiers to create at startup. */
4078 static const predefined_identifier predefined_identifiers[] = {
4079 {"C++", &lang_name_cplusplus, cik_normal},
4080 {"C", &lang_name_c, cik_normal},
4081 /* Some of these names have a trailing space so that it is
4082 impossible for them to conflict with names written by users. */
4083 {"__ct ", &ctor_identifier, cik_ctor},
4084 {"__ct_base ", &base_ctor_identifier, cik_ctor},
4085 {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4086 {"__dt ", &dtor_identifier, cik_dtor},
4087 {"__dt_base ", &base_dtor_identifier, cik_dtor},
4088 {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4089 {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4090 {"__conv_op ", &conv_op_identifier, cik_conv_op},
4091 {"__in_chrg", &in_charge_identifier, cik_normal},
4092 {"this", &this_identifier, cik_normal},
4093 {"__delta", &delta_identifier, cik_normal},
4094 {"__pfn", &pfn_identifier, cik_normal},
4095 {"_vptr", &vptr_identifier, cik_normal},
4096 {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4097 {"::", &global_identifier, cik_normal},
4098 {"std", &std_identifier, cik_normal},
4099 /* The demangler expects anonymous namespaces to be called
4100 something starting with '_GLOBAL__N_'. It no longer needs
4101 to be unique to the TU. */
4102 {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4103 {"auto", &auto_identifier, cik_normal},
4104 {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4105 {"initializer_list", &init_list_identifier, cik_normal},
4106 {"__for_range ", &for_range__identifier, cik_normal},
4107 {"__for_begin ", &for_begin__identifier, cik_normal},
4108 {"__for_end ", &for_end__identifier, cik_normal},
4109 {"__for_range", &for_range_identifier, cik_normal},
4110 {"__for_begin", &for_begin_identifier, cik_normal},
4111 {"__for_end", &for_end_identifier, cik_normal},
4112 {"abi_tag", &abi_tag_identifier, cik_normal},
4113 {"aligned", &aligned_identifier, cik_normal},
4114 {"begin", &begin_identifier, cik_normal},
4115 {"end", &end_identifier, cik_normal},
4116 {"get", &get__identifier, cik_normal},
4117 {"gnu", &gnu_identifier, cik_normal},
4118 {"tuple_element", &tuple_element_identifier, cik_normal},
4119 {"tuple_size", &tuple_size_identifier, cik_normal},
4120 {"type", &type_identifier, cik_normal},
4121 {"value", &value_identifier, cik_normal},
4122 {"_FUN", &fun_identifier, cik_normal},
4123 {"__closure", &closure_identifier, cik_normal},
4124 {NULL, NULL, cik_normal}
4125 };
4126
4127 for (const predefined_identifier *pid = predefined_identifiers;
4128 pid->name; ++pid)
4129 {
4130 *pid->node = get_identifier (pid->name);
4131 /* Some of these identifiers already have a special kind. */
4132 if (pid->kind != cik_normal)
4133 set_identifier_kind (*pid->node, pid->kind);
4134 }
4135 }
4136
4137 /* Create the predefined scalar types of C,
4138 and some nodes representing standard constants (0, 1, (void *)0).
4139 Initialize the global binding level.
4140 Make definitions for built-in primitive functions. */
4141
4142 void
4143 cxx_init_decl_processing (void)
4144 {
4145 tree void_ftype;
4146 tree void_ftype_ptr;
4147
4148 /* Create all the identifiers we need. */
4149 initialize_predefined_identifiers ();
4150
4151 /* Create the global variables. */
4152 push_to_top_level ();
4153
4154 current_function_decl = NULL_TREE;
4155 current_binding_level = NULL;
4156 /* Enter the global namespace. */
4157 gcc_assert (global_namespace == NULL_TREE);
4158 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4159 void_type_node);
4160 TREE_PUBLIC (global_namespace) = 1;
4161 DECL_CONTEXT (global_namespace)
4162 = build_translation_unit_decl (get_identifier (main_input_filename));
4163 /* Remember whether we want the empty class passing ABI change warning
4164 in this TU. */
4165 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4166 = warn_abi && abi_version_crosses (12);
4167 debug_hooks->register_main_translation_unit
4168 (DECL_CONTEXT (global_namespace));
4169 begin_scope (sk_namespace, global_namespace);
4170 current_namespace = global_namespace;
4171
4172 if (flag_visibility_ms_compat)
4173 default_visibility = VISIBILITY_HIDDEN;
4174
4175 /* Initially, C. */
4176 current_lang_name = lang_name_c;
4177
4178 /* Create the `std' namespace. */
4179 push_namespace (std_identifier);
4180 std_node = current_namespace;
4181 pop_namespace ();
4182
4183 flag_noexcept_type = (cxx_dialect >= cxx17);
4184
4185 c_common_nodes_and_builtins ();
4186
4187 tree bool_ftype = build_function_type_list (boolean_type_node, NULL_TREE);
4188 tree decl
4189 = add_builtin_function ("__builtin_is_constant_evaluated",
4190 bool_ftype, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
4191 BUILT_IN_FRONTEND, NULL, NULL_TREE);
4192 set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4193
4194 integer_two_node = build_int_cst (NULL_TREE, 2);
4195
4196 /* Guess at the initial static decls size. */
4197 vec_alloc (static_decls, 500);
4198
4199 /* ... and keyed classes. */
4200 vec_alloc (keyed_classes, 100);
4201
4202 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4203 truthvalue_type_node = boolean_type_node;
4204 truthvalue_false_node = boolean_false_node;
4205 truthvalue_true_node = boolean_true_node;
4206
4207 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4208 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4209 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4210 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4211 NULL_TREE);
4212
4213 #if 0
4214 record_builtin_type (RID_MAX, NULL, string_type_node);
4215 #endif
4216
4217 delta_type_node = ptrdiff_type_node;
4218 vtable_index_type = ptrdiff_type_node;
4219
4220 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4221 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4222 void_ftype_ptr = build_function_type_list (void_type_node,
4223 ptr_type_node, NULL_TREE);
4224 void_ftype_ptr
4225 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4226
4227 /* Create the conversion operator marker. This operator's DECL_NAME
4228 is in the identifier table, so we can use identifier equality to
4229 find it. */
4230 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4231 void_ftype);
4232
4233 /* C++ extensions */
4234
4235 unknown_type_node = make_node (LANG_TYPE);
4236 record_unknown_type (unknown_type_node, "unknown type");
4237
4238 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4239 TREE_TYPE (unknown_type_node) = unknown_type_node;
4240
4241 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4242 result. */
4243 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4244 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4245
4246 init_list_type_node = make_node (LANG_TYPE);
4247 record_unknown_type (init_list_type_node, "init list");
4248
4249 {
4250 /* Make sure we get a unique function type, so we can give
4251 its pointer type a name. (This wins for gdb.) */
4252 tree vfunc_type = make_node (FUNCTION_TYPE);
4253 TREE_TYPE (vfunc_type) = integer_type_node;
4254 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4255 layout_type (vfunc_type);
4256
4257 vtable_entry_type = build_pointer_type (vfunc_type);
4258 }
4259 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4260
4261 vtbl_type_node
4262 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4263 layout_type (vtbl_type_node);
4264 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4265 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4266 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4267 layout_type (vtbl_ptr_type_node);
4268 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4269
4270 push_namespace (get_identifier ("__cxxabiv1"));
4271 abi_node = current_namespace;
4272 pop_namespace ();
4273
4274 global_type_node = make_node (LANG_TYPE);
4275 record_unknown_type (global_type_node, "global type");
4276
4277 any_targ_node = make_node (LANG_TYPE);
4278 record_unknown_type (any_targ_node, "any type");
4279
4280 /* Now, C++. */
4281 current_lang_name = lang_name_cplusplus;
4282
4283 if (aligned_new_threshold > 1
4284 && !pow2p_hwi (aligned_new_threshold))
4285 {
4286 error ("%<-faligned-new=%d%> is not a power of two",
4287 aligned_new_threshold);
4288 aligned_new_threshold = 1;
4289 }
4290 if (aligned_new_threshold == -1)
4291 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4292 if (aligned_new_threshold == 1)
4293 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4294
4295 {
4296 tree newattrs, extvisattr;
4297 tree newtype, deltype;
4298 tree ptr_ftype_sizetype;
4299 tree new_eh_spec;
4300
4301 ptr_ftype_sizetype
4302 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4303 if (cxx_dialect == cxx98)
4304 {
4305 tree bad_alloc_id;
4306 tree bad_alloc_type_node;
4307 tree bad_alloc_decl;
4308
4309 push_namespace (std_identifier);
4310 bad_alloc_id = get_identifier ("bad_alloc");
4311 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4312 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4313 bad_alloc_decl
4314 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4315 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4316 pop_namespace ();
4317
4318 new_eh_spec
4319 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4320 }
4321 else
4322 new_eh_spec = noexcept_false_spec;
4323
4324 /* Ensure attribs.c is initialized. */
4325 init_attributes ();
4326
4327 /* Ensure constraint.cc is initialized. */
4328 init_constraint_processing ();
4329
4330 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4331 NULL_TREE);
4332 newattrs = tree_cons (get_identifier ("alloc_size"),
4333 build_tree_list (NULL_TREE, integer_one_node),
4334 extvisattr);
4335 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4336 newtype = build_exception_variant (newtype, new_eh_spec);
4337 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4338 deltype = build_exception_variant (deltype, empty_except_spec);
4339 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4340 DECL_IS_MALLOC (opnew) = 1;
4341 DECL_IS_OPERATOR_NEW (opnew) = 1;
4342 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4343 DECL_IS_MALLOC (opnew) = 1;
4344 DECL_IS_OPERATOR_NEW (opnew) = 1;
4345 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4346 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4347 if (flag_sized_deallocation)
4348 {
4349 /* Also push the sized deallocation variants:
4350 void operator delete(void*, std::size_t) throw();
4351 void operator delete[](void*, std::size_t) throw(); */
4352 tree void_ftype_ptr_size
4353 = build_function_type_list (void_type_node, ptr_type_node,
4354 size_type_node, NULL_TREE);
4355 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4356 extvisattr);
4357 deltype = build_exception_variant (deltype, empty_except_spec);
4358 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4359 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4360 }
4361
4362 if (aligned_new_threshold)
4363 {
4364 push_namespace (std_identifier);
4365 tree align_id = get_identifier ("align_val_t");
4366 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4367 NULL_TREE, /*scoped*/true, NULL);
4368 pop_namespace ();
4369
4370 /* operator new (size_t, align_val_t); */
4371 newtype = build_function_type_list (ptr_type_node, size_type_node,
4372 align_type_node, NULL_TREE);
4373 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4374 newtype = build_exception_variant (newtype, new_eh_spec);
4375 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4376 DECL_IS_MALLOC (opnew) = 1;
4377 DECL_IS_OPERATOR_NEW (opnew) = 1;
4378 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4379 DECL_IS_MALLOC (opnew) = 1;
4380 DECL_IS_OPERATOR_NEW (opnew) = 1;
4381
4382 /* operator delete (void *, align_val_t); */
4383 deltype = build_function_type_list (void_type_node, ptr_type_node,
4384 align_type_node, NULL_TREE);
4385 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4386 deltype = build_exception_variant (deltype, empty_except_spec);
4387 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4388 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4389
4390 if (flag_sized_deallocation)
4391 {
4392 /* operator delete (void *, size_t, align_val_t); */
4393 deltype = build_function_type_list (void_type_node, ptr_type_node,
4394 size_type_node, align_type_node,
4395 NULL_TREE);
4396 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4397 deltype = build_exception_variant (deltype, empty_except_spec);
4398 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4399 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4400 }
4401 }
4402
4403 nullptr_type_node = make_node (NULLPTR_TYPE);
4404 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4405 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4406 TYPE_UNSIGNED (nullptr_type_node) = 1;
4407 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4408 if (abi_version_at_least (9))
4409 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4410 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4411 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4412 nullptr_node = build_int_cst (nullptr_type_node, 0);
4413 }
4414
4415 abort_fndecl
4416 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4417 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4418
4419 /* Perform other language dependent initializations. */
4420 init_class_processing ();
4421 init_rtti_processing ();
4422 init_template_processing ();
4423
4424 if (flag_exceptions)
4425 init_exception_processing ();
4426
4427 if (! supports_one_only ())
4428 flag_weak = 0;
4429
4430 make_fname_decl = cp_make_fname_decl;
4431 start_fname_decls ();
4432
4433 /* Show we use EH for cleanups. */
4434 if (flag_exceptions)
4435 using_eh_for_cleanups ();
4436 }
4437
4438 /* Generate an initializer for a function naming variable from
4439 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4440 filled in with the type of the init. */
4441
4442 tree
4443 cp_fname_init (const char* name, tree *type_p)
4444 {
4445 tree domain = NULL_TREE;
4446 tree type;
4447 tree init = NULL_TREE;
4448 size_t length = 0;
4449
4450 if (name)
4451 {
4452 length = strlen (name);
4453 domain = build_index_type (size_int (length));
4454 init = build_string (length + 1, name);
4455 }
4456
4457 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4458 type = build_cplus_array_type (type, domain);
4459
4460 *type_p = type;
4461
4462 if (init)
4463 TREE_TYPE (init) = type;
4464 else
4465 init = error_mark_node;
4466
4467 return init;
4468 }
4469
4470 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4471 the decl, LOC is the location to give the decl, NAME is the
4472 initialization string and TYPE_DEP indicates whether NAME depended
4473 on the type of the function. We make use of that to detect
4474 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4475 at the point of first use, so we mustn't push the decl now. */
4476
4477 static tree
4478 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4479 {
4480 const char *const name = (type_dep && in_template_function ()
4481 ? NULL : fname_as_string (type_dep));
4482 tree type;
4483 tree init = cp_fname_init (name, &type);
4484 tree decl = build_decl (loc, VAR_DECL, id, type);
4485
4486 if (name)
4487 free (CONST_CAST (char *, name));
4488
4489 /* As we're using pushdecl_with_scope, we must set the context. */
4490 DECL_CONTEXT (decl) = current_function_decl;
4491
4492 TREE_READONLY (decl) = 1;
4493 DECL_ARTIFICIAL (decl) = 1;
4494 DECL_DECLARED_CONSTEXPR_P (decl) = 1;
4495 TREE_STATIC (decl) = 1;
4496
4497 TREE_USED (decl) = 1;
4498
4499 if (init)
4500 {
4501 SET_DECL_VALUE_EXPR (decl, init);
4502 DECL_HAS_VALUE_EXPR_P (decl) = 1;
4503 /* For decl_constant_var_p. */
4504 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
4505 }
4506
4507 if (current_function_decl)
4508 {
4509 DECL_CONTEXT (decl) = current_function_decl;
4510 decl = pushdecl_outermost_localscope (decl);
4511 if (decl != error_mark_node)
4512 add_decl_expr (decl);
4513 }
4514 else
4515 {
4516 DECL_THIS_STATIC (decl) = true;
4517 pushdecl_top_level_and_finish (decl, NULL_TREE);
4518 }
4519
4520 return decl;
4521 }
4522
4523 static tree
4524 builtin_function_1 (tree decl, tree context, bool is_global)
4525 {
4526 tree id = DECL_NAME (decl);
4527 const char *name = IDENTIFIER_POINTER (id);
4528
4529 retrofit_lang_decl (decl);
4530
4531 DECL_ARTIFICIAL (decl) = 1;
4532 SET_DECL_LANGUAGE (decl, lang_c);
4533 /* Runtime library routines are, by definition, available in an
4534 external shared object. */
4535 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4536 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4537
4538 DECL_CONTEXT (decl) = context;
4539
4540 /* A function in the user's namespace should have an explicit
4541 declaration before it is used. Mark the built-in function as
4542 anticipated but not actually declared. */
4543 if (name[0] != '_' || name[1] != '_')
4544 DECL_ANTICIPATED (decl) = 1;
4545 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4546 {
4547 size_t len = strlen (name);
4548
4549 /* Treat __*_chk fortification functions as anticipated as well,
4550 unless they are __builtin_*. */
4551 if (len > strlen ("___chk")
4552 && memcmp (name + len - strlen ("_chk"),
4553 "_chk", strlen ("_chk") + 1) == 0)
4554 DECL_ANTICIPATED (decl) = 1;
4555 }
4556
4557 if (is_global)
4558 return pushdecl_top_level (decl);
4559 else
4560 return pushdecl (decl);
4561 }
4562
4563 tree
4564 cxx_builtin_function (tree decl)
4565 {
4566 tree id = DECL_NAME (decl);
4567 const char *name = IDENTIFIER_POINTER (id);
4568 /* All builtins that don't begin with an '_' should additionally
4569 go in the 'std' namespace. */
4570 if (name[0] != '_')
4571 {
4572 tree decl2 = copy_node(decl);
4573 push_namespace (std_identifier);
4574 builtin_function_1 (decl2, std_node, false);
4575 pop_namespace ();
4576 }
4577
4578 return builtin_function_1 (decl, NULL_TREE, false);
4579 }
4580
4581 /* Like cxx_builtin_function, but guarantee the function is added to the global
4582 scope. This is to allow function specific options to add new machine
4583 dependent builtins when the target ISA changes via attribute((target(...)))
4584 which saves space on program startup if the program does not use non-generic
4585 ISAs. */
4586
4587 tree
4588 cxx_builtin_function_ext_scope (tree decl)
4589 {
4590
4591 tree id = DECL_NAME (decl);
4592 const char *name = IDENTIFIER_POINTER (id);
4593 /* All builtins that don't begin with an '_' should additionally
4594 go in the 'std' namespace. */
4595 if (name[0] != '_')
4596 {
4597 tree decl2 = copy_node(decl);
4598 push_namespace (std_identifier);
4599 builtin_function_1 (decl2, std_node, true);
4600 pop_namespace ();
4601 }
4602
4603 return builtin_function_1 (decl, NULL_TREE, true);
4604 }
4605
4606 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4607 function. Not called directly. */
4608
4609 static tree
4610 build_library_fn (tree name, enum tree_code operator_code, tree type,
4611 int ecf_flags)
4612 {
4613 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4614 DECL_EXTERNAL (fn) = 1;
4615 TREE_PUBLIC (fn) = 1;
4616 DECL_ARTIFICIAL (fn) = 1;
4617 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4618 = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4619 SET_DECL_LANGUAGE (fn, lang_c);
4620 /* Runtime library routines are, by definition, available in an
4621 external shared object. */
4622 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4623 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4624 set_call_expr_flags (fn, ecf_flags);
4625 return fn;
4626 }
4627
4628 /* Returns the _DECL for a library function with C++ linkage. */
4629
4630 static tree
4631 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4632 int ecf_flags)
4633 {
4634 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4635 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4636 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4637 return fn;
4638 }
4639
4640 /* Like build_library_fn, but takes a C string instead of an
4641 IDENTIFIER_NODE. */
4642
4643 tree
4644 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4645 {
4646 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4647 }
4648
4649 /* Like build_cp_library_fn, but takes a C string instead of an
4650 IDENTIFIER_NODE. */
4651
4652 tree
4653 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4654 {
4655 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4656 ecf_flags);
4657 }
4658
4659 /* Like build_library_fn, but also pushes the function so that we will
4660 be able to find it via get_global_binding. Also, the function
4661 may throw exceptions listed in RAISES. */
4662
4663 tree
4664 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4665 {
4666 tree fn;
4667
4668 if (raises)
4669 type = build_exception_variant (type, raises);
4670
4671 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4672 pushdecl_top_level (fn);
4673 return fn;
4674 }
4675
4676 /* Like build_cp_library_fn, but also pushes the function so that it
4677 will be found by normal lookup. */
4678
4679 static tree
4680 push_cp_library_fn (enum tree_code operator_code, tree type,
4681 int ecf_flags)
4682 {
4683 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4684 operator_code, type, ecf_flags);
4685 pushdecl (fn);
4686 if (flag_tm)
4687 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4688 return fn;
4689 }
4690
4691 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4692 a FUNCTION_TYPE. */
4693
4694 tree
4695 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4696 {
4697 tree type = build_function_type (void_type_node, parmtypes);
4698 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4699 }
4700
4701 /* Like push_library_fn, but also note that this function throws
4702 and does not return. Used for __throw_foo and the like. */
4703
4704 tree
4705 push_throw_library_fn (tree name, tree type)
4706 {
4707 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4708 return fn;
4709 }
4710 \f
4711 /* When we call finish_struct for an anonymous union, we create
4712 default copy constructors and such. But, an anonymous union
4713 shouldn't have such things; this function undoes the damage to the
4714 anonymous union type T.
4715
4716 (The reason that we create the synthesized methods is that we don't
4717 distinguish `union { int i; }' from `typedef union { int i; } U'.
4718 The first is an anonymous union; the second is just an ordinary
4719 union type.) */
4720
4721 void
4722 fixup_anonymous_aggr (tree t)
4723 {
4724 /* Wipe out memory of synthesized methods. */
4725 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4726 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4727 TYPE_HAS_COPY_CTOR (t) = 0;
4728 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4729 TYPE_HAS_COPY_ASSIGN (t) = 0;
4730 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4731
4732 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4733 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4734 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4735 *prev_p = DECL_CHAIN (probe);
4736 else
4737 prev_p = &DECL_CHAIN (probe);
4738
4739 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4740 assignment operators (because they cannot have these methods themselves).
4741 For anonymous unions this is already checked because they are not allowed
4742 in any union, otherwise we have to check it. */
4743 if (TREE_CODE (t) != UNION_TYPE)
4744 {
4745 tree field, type;
4746
4747 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4748 if (TREE_CODE (field) == FIELD_DECL)
4749 {
4750 type = TREE_TYPE (field);
4751 if (CLASS_TYPE_P (type))
4752 {
4753 if (TYPE_NEEDS_CONSTRUCTING (type))
4754 error ("member %q+#D with constructor not allowed "
4755 "in anonymous aggregate", field);
4756 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4757 error ("member %q+#D with destructor not allowed "
4758 "in anonymous aggregate", field);
4759 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4760 error ("member %q+#D with copy assignment operator "
4761 "not allowed in anonymous aggregate", field);
4762 }
4763 }
4764 }
4765 }
4766
4767 /* Warn for an attribute located at LOCATION that appertains to the
4768 class type CLASS_TYPE that has not been properly placed after its
4769 class-key, in it class-specifier. */
4770
4771 void
4772 warn_misplaced_attr_for_class_type (location_t location,
4773 tree class_type)
4774 {
4775 gcc_assert (OVERLOAD_TYPE_P (class_type));
4776
4777 auto_diagnostic_group d;
4778 if (warning_at (location, OPT_Wattributes,
4779 "attribute ignored in declaration "
4780 "of %q#T", class_type))
4781 inform (location,
4782 "attribute for %q#T must follow the %qs keyword",
4783 class_type, class_key_or_enum_as_string (class_type));
4784 }
4785
4786 /* Make sure that a declaration with no declarator is well-formed, i.e.
4787 just declares a tagged type or anonymous union.
4788
4789 Returns the type declared; or NULL_TREE if none. */
4790
4791 tree
4792 check_tag_decl (cp_decl_specifier_seq *declspecs,
4793 bool explicit_type_instantiation_p)
4794 {
4795 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4796 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4797 /* If a class, struct, or enum type is declared by the DECLSPECS
4798 (i.e, if a class-specifier, enum-specifier, or non-typename
4799 elaborated-type-specifier appears in the DECLSPECS),
4800 DECLARED_TYPE is set to the corresponding type. */
4801 tree declared_type = NULL_TREE;
4802 bool error_p = false;
4803
4804 if (declspecs->multiple_types_p)
4805 error ("multiple types in one declaration");
4806 else if (declspecs->redefined_builtin_type)
4807 {
4808 if (!in_system_header_at (input_location))
4809 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4810 "redeclaration of C++ built-in type %qT",
4811 declspecs->redefined_builtin_type);
4812 return NULL_TREE;
4813 }
4814
4815 if (declspecs->type
4816 && TYPE_P (declspecs->type)
4817 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4818 && MAYBE_CLASS_TYPE_P (declspecs->type))
4819 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4820 declared_type = declspecs->type;
4821 else if (declspecs->type == error_mark_node)
4822 error_p = true;
4823
4824 if (type_uses_auto (declared_type))
4825 {
4826 error_at (declspecs->locations[ds_type_spec],
4827 "%<auto%> can only be specified for variables "
4828 "or function declarations");
4829 return error_mark_node;
4830 }
4831
4832 if (declared_type && !OVERLOAD_TYPE_P (declared_type))
4833 declared_type = NULL_TREE;
4834
4835 if (!declared_type && !saw_friend && !error_p)
4836 permerror (input_location, "declaration does not declare anything");
4837 /* Check for an anonymous union. */
4838 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4839 && TYPE_UNNAMED_P (declared_type))
4840 {
4841 /* 7/3 In a simple-declaration, the optional init-declarator-list
4842 can be omitted only when declaring a class (clause 9) or
4843 enumeration (7.2), that is, when the decl-specifier-seq contains
4844 either a class-specifier, an elaborated-type-specifier with
4845 a class-key (9.1), or an enum-specifier. In these cases and
4846 whenever a class-specifier or enum-specifier is present in the
4847 decl-specifier-seq, the identifiers in these specifiers are among
4848 the names being declared by the declaration (as class-name,
4849 enum-names, or enumerators, depending on the syntax). In such
4850 cases, and except for the declaration of an unnamed bit-field (9.6),
4851 the decl-specifier-seq shall introduce one or more names into the
4852 program, or shall redeclare a name introduced by a previous
4853 declaration. [Example:
4854 enum { }; // ill-formed
4855 typedef class { }; // ill-formed
4856 --end example] */
4857 if (saw_typedef)
4858 {
4859 error ("missing type-name in typedef-declaration");
4860 return NULL_TREE;
4861 }
4862 /* Anonymous unions are objects, so they can have specifiers. */;
4863 SET_ANON_AGGR_TYPE_P (declared_type);
4864
4865 if (TREE_CODE (declared_type) != UNION_TYPE
4866 && !in_system_header_at (input_location))
4867 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4868 }
4869
4870 else
4871 {
4872 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4873 error_at (declspecs->locations[ds_inline],
4874 "%<inline%> can only be specified for functions");
4875 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4876 error_at (declspecs->locations[ds_virtual],
4877 "%<virtual%> can only be specified for functions");
4878 else if (saw_friend
4879 && (!current_class_type
4880 || current_scope () != current_class_type))
4881 error_at (declspecs->locations[ds_friend],
4882 "%<friend%> can only be specified inside a class");
4883 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4884 error_at (declspecs->locations[ds_explicit],
4885 "%<explicit%> can only be specified for constructors");
4886 else if (declspecs->storage_class)
4887 error_at (declspecs->locations[ds_storage_class],
4888 "a storage class can only be specified for objects "
4889 "and functions");
4890 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4891 error_at (declspecs->locations[ds_const],
4892 "%<const%> can only be specified for objects and "
4893 "functions");
4894 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4895 error_at (declspecs->locations[ds_volatile],
4896 "%<volatile%> can only be specified for objects and "
4897 "functions");
4898 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4899 error_at (declspecs->locations[ds_restrict],
4900 "%<__restrict%> can only be specified for objects and "
4901 "functions");
4902 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4903 error_at (declspecs->locations[ds_thread],
4904 "%<__thread%> can only be specified for objects "
4905 "and functions");
4906 else if (saw_typedef)
4907 warning_at (declspecs->locations[ds_typedef], 0,
4908 "%<typedef%> was ignored in this declaration");
4909 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4910 error_at (declspecs->locations[ds_constexpr],
4911 "%<constexpr%> cannot be used for type declarations");
4912 }
4913
4914 if (declspecs->attributes && warn_attributes && declared_type)
4915 {
4916 location_t loc;
4917 if (!CLASS_TYPE_P (declared_type)
4918 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4919 /* For a non-template class, use the name location. */
4920 loc = location_of (declared_type);
4921 else
4922 /* For a template class (an explicit instantiation), use the
4923 current location. */
4924 loc = input_location;
4925
4926 if (explicit_type_instantiation_p)
4927 /* [dcl.attr.grammar]/4:
4928
4929 No attribute-specifier-seq shall appertain to an explicit
4930 instantiation. */
4931 {
4932 if (warning_at (loc, OPT_Wattributes,
4933 "attribute ignored in explicit instantiation %q#T",
4934 declared_type))
4935 inform (loc,
4936 "no attribute can be applied to "
4937 "an explicit instantiation");
4938 }
4939 else
4940 warn_misplaced_attr_for_class_type (loc, declared_type);
4941 }
4942
4943 return declared_type;
4944 }
4945
4946 /* Called when a declaration is seen that contains no names to declare.
4947 If its type is a reference to a structure, union or enum inherited
4948 from a containing scope, shadow that tag name for the current scope
4949 with a forward reference.
4950 If its type defines a new named structure or union
4951 or defines an enum, it is valid but we need not do anything here.
4952 Otherwise, it is an error.
4953
4954 C++: may have to grok the declspecs to learn about static,
4955 complain for anonymous unions.
4956
4957 Returns the TYPE declared -- or NULL_TREE if none. */
4958
4959 tree
4960 shadow_tag (cp_decl_specifier_seq *declspecs)
4961 {
4962 tree t = check_tag_decl (declspecs,
4963 /*explicit_type_instantiation_p=*/false);
4964
4965 if (!t)
4966 return NULL_TREE;
4967
4968 if (maybe_process_partial_specialization (t) == error_mark_node)
4969 return NULL_TREE;
4970
4971 /* This is where the variables in an anonymous union are
4972 declared. An anonymous union declaration looks like:
4973 union { ... } ;
4974 because there is no declarator after the union, the parser
4975 sends that declaration here. */
4976 if (ANON_AGGR_TYPE_P (t))
4977 {
4978 fixup_anonymous_aggr (t);
4979
4980 if (TYPE_FIELDS (t))
4981 {
4982 tree decl = grokdeclarator (/*declarator=*/NULL,
4983 declspecs, NORMAL, 0, NULL);
4984 finish_anon_union (decl);
4985 }
4986 }
4987
4988 return t;
4989 }
4990 \f
4991 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4992
4993 tree
4994 groktypename (cp_decl_specifier_seq *type_specifiers,
4995 const cp_declarator *declarator,
4996 bool is_template_arg)
4997 {
4998 tree attrs;
4999 tree type;
5000 enum decl_context context
5001 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
5002 attrs = type_specifiers->attributes;
5003 type_specifiers->attributes = NULL_TREE;
5004 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
5005 if (attrs && type != error_mark_node)
5006 {
5007 if (CLASS_TYPE_P (type))
5008 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
5009 "outside of definition", type);
5010 else if (MAYBE_CLASS_TYPE_P (type))
5011 /* A template type parameter or other dependent type. */
5012 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
5013 "type %qT without an associated declaration", type);
5014 else
5015 cplus_decl_attributes (&type, attrs, 0);
5016 }
5017 return type;
5018 }
5019
5020 /* Process a DECLARATOR for a function-scope variable declaration,
5021 namespace-scope variable declaration, or function declaration.
5022 (Function definitions go through start_function; class member
5023 declarations appearing in the body of the class go through
5024 grokfield.) The DECL corresponding to the DECLARATOR is returned.
5025 If an error occurs, the error_mark_node is returned instead.
5026
5027 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
5028 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
5029 for an explicitly defaulted function, or SD_DELETED for an explicitly
5030 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
5031 implicitly initialized via a default constructor. ATTRIBUTES and
5032 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
5033
5034 The scope represented by the context of the returned DECL is pushed
5035 (if it is not the global namespace) and is assigned to
5036 *PUSHED_SCOPE_P. The caller is then responsible for calling
5037 pop_scope on *PUSHED_SCOPE_P if it is set. */
5038
5039 tree
5040 start_decl (const cp_declarator *declarator,
5041 cp_decl_specifier_seq *declspecs,
5042 int initialized,
5043 tree attributes,
5044 tree prefix_attributes,
5045 tree *pushed_scope_p)
5046 {
5047 tree decl;
5048 tree context;
5049 bool was_public;
5050 int flags;
5051 bool alias;
5052
5053 *pushed_scope_p = NULL_TREE;
5054
5055 /* An object declared as __attribute__((deprecated)) suppresses
5056 warnings of uses of other deprecated items. */
5057 if (lookup_attribute ("deprecated", attributes))
5058 deprecated_state = DEPRECATED_SUPPRESS;
5059
5060 attributes = chainon (attributes, prefix_attributes);
5061
5062 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5063 &attributes);
5064
5065 deprecated_state = DEPRECATED_NORMAL;
5066
5067 if (decl == NULL_TREE || VOID_TYPE_P (decl)
5068 || decl == error_mark_node)
5069 return error_mark_node;
5070
5071 context = CP_DECL_CONTEXT (decl);
5072 if (context != global_namespace)
5073 *pushed_scope_p = push_scope (context);
5074
5075 /* Is it valid for this decl to have an initializer at all?
5076 If not, set INITIALIZED to zero, which will indirectly
5077 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
5078 if (initialized
5079 && TREE_CODE (decl) == TYPE_DECL)
5080 {
5081 error_at (DECL_SOURCE_LOCATION (decl),
5082 "typedef %qD is initialized (use %qs instead)",
5083 decl, "decltype");
5084 return error_mark_node;
5085 }
5086
5087 if (initialized)
5088 {
5089 if (! toplevel_bindings_p ()
5090 && DECL_EXTERNAL (decl))
5091 warning (0, "declaration of %q#D has %<extern%> and is initialized",
5092 decl);
5093 DECL_EXTERNAL (decl) = 0;
5094 if (toplevel_bindings_p ())
5095 TREE_STATIC (decl) = 1;
5096 }
5097 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
5098
5099 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
5100 record_key_method_defined (decl);
5101
5102 /* If this is a typedef that names the class for linkage purposes
5103 (7.1.3p8), apply any attributes directly to the type. */
5104 if (TREE_CODE (decl) == TYPE_DECL
5105 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
5106 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
5107 flags = ATTR_FLAG_TYPE_IN_PLACE;
5108 else
5109 flags = 0;
5110
5111 /* Set attributes here so if duplicate decl, will have proper attributes. */
5112 cplus_decl_attributes (&decl, attributes, flags);
5113
5114 /* Dllimported symbols cannot be defined. Static data members (which
5115 can be initialized in-class and dllimported) go through grokfield,
5116 not here, so we don't need to exclude those decls when checking for
5117 a definition. */
5118 if (initialized && DECL_DLLIMPORT_P (decl))
5119 {
5120 error_at (DECL_SOURCE_LOCATION (decl),
5121 "definition of %q#D is marked %<dllimport%>", decl);
5122 DECL_DLLIMPORT_P (decl) = 0;
5123 }
5124
5125 /* If #pragma weak was used, mark the decl weak now. */
5126 if (!processing_template_decl && !DECL_DECOMPOSITION_P (decl))
5127 maybe_apply_pragma_weak (decl);
5128
5129 if (TREE_CODE (decl) == FUNCTION_DECL
5130 && DECL_DECLARED_INLINE_P (decl)
5131 && DECL_UNINLINABLE (decl)
5132 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5133 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5134 "inline function %qD given attribute %qs", decl, "noinline");
5135
5136 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5137 {
5138 bool this_tmpl = (processing_template_decl
5139 > template_class_depth (context));
5140 if (VAR_P (decl))
5141 {
5142 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5143 if (field == NULL_TREE
5144 || !(VAR_P (field) || variable_template_p (field)))
5145 error ("%q+#D is not a static data member of %q#T", decl, context);
5146 else if (variable_template_p (field)
5147 && (DECL_LANG_SPECIFIC (decl)
5148 && DECL_TEMPLATE_SPECIALIZATION (decl)))
5149 /* OK, specialization was already checked. */;
5150 else if (variable_template_p (field) && !this_tmpl)
5151 {
5152 error_at (DECL_SOURCE_LOCATION (decl),
5153 "non-member-template declaration of %qD", decl);
5154 inform (DECL_SOURCE_LOCATION (field), "does not match "
5155 "member template declaration here");
5156 return error_mark_node;
5157 }
5158 else
5159 {
5160 if (variable_template_p (field))
5161 field = DECL_TEMPLATE_RESULT (field);
5162
5163 if (DECL_CONTEXT (field) != context)
5164 {
5165 if (!same_type_p (DECL_CONTEXT (field), context))
5166 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5167 "to be defined as %<%T::%D%>",
5168 DECL_CONTEXT (field), DECL_NAME (decl),
5169 context, DECL_NAME (decl));
5170 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5171 }
5172 /* Static data member are tricky; an in-class initialization
5173 still doesn't provide a definition, so the in-class
5174 declaration will have DECL_EXTERNAL set, but will have an
5175 initialization. Thus, duplicate_decls won't warn
5176 about this situation, and so we check here. */
5177 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5178 error ("duplicate initialization of %qD", decl);
5179 field = duplicate_decls (decl, field,
5180 /*newdecl_is_friend=*/false);
5181 if (field == error_mark_node)
5182 return error_mark_node;
5183 else if (field)
5184 decl = field;
5185 }
5186 }
5187 else
5188 {
5189 tree field = check_classfn (context, decl,
5190 this_tmpl
5191 ? current_template_parms
5192 : NULL_TREE);
5193 if (field && field != error_mark_node
5194 && duplicate_decls (decl, field,
5195 /*newdecl_is_friend=*/false))
5196 decl = field;
5197 }
5198
5199 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5200 DECL_IN_AGGR_P (decl) = 0;
5201 /* Do not mark DECL as an explicit specialization if it was not
5202 already marked as an instantiation; a declaration should
5203 never be marked as a specialization unless we know what
5204 template is being specialized. */
5205 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5206 {
5207 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5208 if (TREE_CODE (decl) == FUNCTION_DECL)
5209 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5210 && DECL_DECLARED_INLINE_P (decl));
5211 else
5212 DECL_COMDAT (decl) = false;
5213
5214 /* [temp.expl.spec] An explicit specialization of a static data
5215 member of a template is a definition if the declaration
5216 includes an initializer; otherwise, it is a declaration.
5217
5218 We check for processing_specialization so this only applies
5219 to the new specialization syntax. */
5220 if (!initialized && processing_specialization)
5221 DECL_EXTERNAL (decl) = 1;
5222 }
5223
5224 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5225 /* Aliases are definitions. */
5226 && !alias)
5227 permerror (declarator->id_loc,
5228 "declaration of %q#D outside of class is not definition",
5229 decl);
5230 }
5231
5232 was_public = TREE_PUBLIC (decl);
5233
5234 /* Enter this declaration into the symbol table. Don't push the plain
5235 VAR_DECL for a variable template. */
5236 if (!template_parm_scope_p ()
5237 || !VAR_P (decl))
5238 decl = maybe_push_decl (decl);
5239
5240 if (processing_template_decl)
5241 decl = push_template_decl (decl);
5242 if (decl == error_mark_node)
5243 return error_mark_node;
5244
5245 if (VAR_P (decl)
5246 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5247 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5248 {
5249 /* This is a const variable with implicit 'static'. Set
5250 DECL_THIS_STATIC so we can tell it from variables that are
5251 !TREE_PUBLIC because of the anonymous namespace. */
5252 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5253 DECL_THIS_STATIC (decl) = 1;
5254 }
5255
5256 if (current_function_decl && VAR_P (decl)
5257 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5258 {
5259 bool ok = false;
5260 if (CP_DECL_THREAD_LOCAL_P (decl))
5261 error_at (DECL_SOURCE_LOCATION (decl),
5262 "%qD declared %<thread_local%> in %<constexpr%> function",
5263 decl);
5264 else if (TREE_STATIC (decl))
5265 error_at (DECL_SOURCE_LOCATION (decl),
5266 "%qD declared %<static%> in %<constexpr%> function", decl);
5267 else
5268 ok = true;
5269 if (!ok)
5270 cp_function_chain->invalid_constexpr = true;
5271 }
5272
5273 if (!processing_template_decl && VAR_P (decl))
5274 start_decl_1 (decl, initialized);
5275
5276 return decl;
5277 }
5278
5279 /* Process the declaration of a variable DECL. INITIALIZED is true
5280 iff DECL is explicitly initialized. (INITIALIZED is false if the
5281 variable is initialized via an implicitly-called constructor.)
5282 This function must be called for ordinary variables (including, for
5283 example, implicit instantiations of templates), but must not be
5284 called for template declarations. */
5285
5286 void
5287 start_decl_1 (tree decl, bool initialized)
5288 {
5289 tree type;
5290 bool complete_p;
5291 bool aggregate_definition_p;
5292
5293 gcc_assert (!processing_template_decl);
5294
5295 if (error_operand_p (decl))
5296 return;
5297
5298 gcc_assert (VAR_P (decl));
5299
5300 type = TREE_TYPE (decl);
5301 complete_p = COMPLETE_TYPE_P (type);
5302 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5303
5304 /* If an explicit initializer is present, or if this is a definition
5305 of an aggregate, then we need a complete type at this point.
5306 (Scalars are always complete types, so there is nothing to
5307 check.) This code just sets COMPLETE_P; errors (if necessary)
5308 are issued below. */
5309 if ((initialized || aggregate_definition_p)
5310 && !complete_p
5311 && COMPLETE_TYPE_P (complete_type (type)))
5312 {
5313 complete_p = true;
5314 /* We will not yet have set TREE_READONLY on DECL if the type
5315 was "const", but incomplete, before this point. But, now, we
5316 have a complete type, so we can try again. */
5317 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5318 }
5319
5320 if (initialized)
5321 /* Is it valid for this decl to have an initializer at all? */
5322 {
5323 /* Don't allow initializations for incomplete types except for
5324 arrays which might be completed by the initialization. */
5325 if (complete_p)
5326 ; /* A complete type is ok. */
5327 else if (type_uses_auto (type))
5328 ; /* An auto type is ok. */
5329 else if (TREE_CODE (type) != ARRAY_TYPE)
5330 {
5331 error ("variable %q#D has initializer but incomplete type", decl);
5332 type = TREE_TYPE (decl) = error_mark_node;
5333 }
5334 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5335 {
5336 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5337 error ("elements of array %q#D have incomplete type", decl);
5338 /* else we already gave an error in start_decl. */
5339 }
5340 }
5341 else if (aggregate_definition_p && !complete_p)
5342 {
5343 if (type_uses_auto (type))
5344 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5345 else
5346 {
5347 error ("aggregate %q#D has incomplete type and cannot be defined",
5348 decl);
5349 /* Change the type so that assemble_variable will give
5350 DECL an rtl we can live with: (mem (const_int 0)). */
5351 type = TREE_TYPE (decl) = error_mark_node;
5352 }
5353 }
5354
5355 /* Create a new scope to hold this declaration if necessary.
5356 Whether or not a new scope is necessary cannot be determined
5357 until after the type has been completed; if the type is a
5358 specialization of a class template it is not until after
5359 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5360 will be set correctly. */
5361 maybe_push_cleanup_level (type);
5362 }
5363
5364 /* Handle initialization of references. DECL, TYPE, and INIT have the
5365 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5366 but will be set to a new CLEANUP_STMT if a temporary is created
5367 that must be destroyed subsequently.
5368
5369 Returns an initializer expression to use to initialize DECL, or
5370 NULL if the initialization can be performed statically.
5371
5372 Quotes on semantics can be found in ARM 8.4.3. */
5373
5374 static tree
5375 grok_reference_init (tree decl, tree type, tree init, int flags)
5376 {
5377 if (init == NULL_TREE)
5378 {
5379 if ((DECL_LANG_SPECIFIC (decl) == 0
5380 || DECL_IN_AGGR_P (decl) == 0)
5381 && ! DECL_THIS_EXTERN (decl))
5382 error_at (DECL_SOURCE_LOCATION (decl),
5383 "%qD declared as reference but not initialized", decl);
5384 return NULL_TREE;
5385 }
5386
5387 if (TREE_CODE (init) == TREE_LIST)
5388 init = build_x_compound_expr_from_list (init, ELK_INIT,
5389 tf_warning_or_error);
5390
5391 tree ttype = TREE_TYPE (type);
5392 if (TREE_CODE (ttype) != ARRAY_TYPE
5393 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5394 /* Note: default conversion is only called in very special cases. */
5395 init = decay_conversion (init, tf_warning_or_error);
5396
5397 /* check_initializer handles this for non-reference variables, but for
5398 references we need to do it here or the initializer will get the
5399 incomplete array type and confuse later calls to
5400 cp_complete_array_type. */
5401 if (TREE_CODE (ttype) == ARRAY_TYPE
5402 && TYPE_DOMAIN (ttype) == NULL_TREE
5403 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5404 || TREE_CODE (init) == STRING_CST))
5405 {
5406 cp_complete_array_type (&ttype, init, false);
5407 if (ttype != TREE_TYPE (type))
5408 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5409 }
5410
5411 /* Convert INIT to the reference type TYPE. This may involve the
5412 creation of a temporary, whose lifetime must be the same as that
5413 of the reference. If so, a DECL_EXPR for the temporary will be
5414 added just after the DECL_EXPR for DECL. That's why we don't set
5415 DECL_INITIAL for local references (instead assigning to them
5416 explicitly); we need to allow the temporary to be initialized
5417 first. */
5418 return initialize_reference (type, init, flags,
5419 tf_warning_or_error);
5420 }
5421
5422 /* Designated initializers in arrays are not supported in GNU C++.
5423 The parser cannot detect this error since it does not know whether
5424 a given brace-enclosed initializer is for a class type or for an
5425 array. This function checks that CE does not use a designated
5426 initializer. If it does, an error is issued. Returns true if CE
5427 is valid, i.e., does not have a designated initializer. */
5428
5429 bool
5430 check_array_designated_initializer (constructor_elt *ce,
5431 unsigned HOST_WIDE_INT index)
5432 {
5433 /* Designated initializers for array elements are not supported. */
5434 if (ce->index)
5435 {
5436 /* The parser only allows identifiers as designated
5437 initializers. */
5438 if (ce->index == error_mark_node)
5439 {
5440 error ("name used in a GNU-style designated "
5441 "initializer for an array");
5442 return false;
5443 }
5444 else if (identifier_p (ce->index))
5445 {
5446 error ("name %qD used in a GNU-style designated "
5447 "initializer for an array", ce->index);
5448 return false;
5449 }
5450
5451 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5452 ce->index, true);
5453 if (ce_index
5454 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5455 && (TREE_CODE (ce_index = fold_non_dependent_expr (ce_index))
5456 == INTEGER_CST))
5457 {
5458 /* A C99 designator is OK if it matches the current index. */
5459 if (wi::to_wide (ce_index) == index)
5460 {
5461 ce->index = ce_index;
5462 return true;
5463 }
5464 else
5465 sorry ("non-trivial designated initializers not supported");
5466 }
5467 else
5468 error ("C99 designator %qE is not an integral constant-expression",
5469 ce->index);
5470
5471 return false;
5472 }
5473
5474 return true;
5475 }
5476
5477 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5478 array until we finish parsing the initializer. If that's the
5479 situation we're in, update DECL accordingly. */
5480
5481 static void
5482 maybe_deduce_size_from_array_init (tree decl, tree init)
5483 {
5484 tree type = TREE_TYPE (decl);
5485
5486 if (TREE_CODE (type) == ARRAY_TYPE
5487 && TYPE_DOMAIN (type) == NULL_TREE
5488 && TREE_CODE (decl) != TYPE_DECL)
5489 {
5490 /* do_default is really a C-ism to deal with tentative definitions.
5491 But let's leave it here to ease the eventual merge. */
5492 int do_default = !DECL_EXTERNAL (decl);
5493 tree initializer = init ? init : DECL_INITIAL (decl);
5494 int failure = 0;
5495
5496 /* Check that there are no designated initializers in INIT, as
5497 those are not supported in GNU C++, and as the middle-end
5498 will crash if presented with a non-numeric designated
5499 initializer. */
5500 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5501 {
5502 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5503 constructor_elt *ce;
5504 HOST_WIDE_INT i;
5505 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5506 {
5507 if (instantiation_dependent_expression_p (ce->index))
5508 return;
5509 if (!check_array_designated_initializer (ce, i))
5510 failure = 1;
5511 }
5512 }
5513
5514 if (failure)
5515 TREE_TYPE (decl) = error_mark_node;
5516 else
5517 {
5518 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5519 do_default);
5520 if (failure == 1)
5521 {
5522 error_at (cp_expr_loc_or_loc (initializer,
5523 DECL_SOURCE_LOCATION (decl)),
5524 "initializer fails to determine size of %qD", decl);
5525 }
5526 else if (failure == 2)
5527 {
5528 if (do_default)
5529 {
5530 error_at (DECL_SOURCE_LOCATION (decl),
5531 "array size missing in %qD", decl);
5532 }
5533 /* If a `static' var's size isn't known, make it extern as
5534 well as static, so it does not get allocated. If it's not
5535 `static', then don't mark it extern; finish_incomplete_decl
5536 will give it a default size and it will get allocated. */
5537 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5538 DECL_EXTERNAL (decl) = 1;
5539 }
5540 else if (failure == 3)
5541 {
5542 error_at (DECL_SOURCE_LOCATION (decl),
5543 "zero-size array %qD", decl);
5544 }
5545 }
5546
5547 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5548
5549 relayout_decl (decl);
5550 }
5551 }
5552
5553 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5554 any appropriate error messages regarding the layout. */
5555
5556 static void
5557 layout_var_decl (tree decl)
5558 {
5559 tree type;
5560
5561 type = TREE_TYPE (decl);
5562 if (type == error_mark_node)
5563 return;
5564
5565 /* If we haven't already laid out this declaration, do so now.
5566 Note that we must not call complete type for an external object
5567 because it's type might involve templates that we are not
5568 supposed to instantiate yet. (And it's perfectly valid to say
5569 `extern X x' for some incomplete type `X'.) */
5570 if (!DECL_EXTERNAL (decl))
5571 complete_type (type);
5572 if (!DECL_SIZE (decl)
5573 && TREE_TYPE (decl) != error_mark_node
5574 && complete_or_array_type_p (type))
5575 layout_decl (decl, 0);
5576
5577 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5578 {
5579 /* An automatic variable with an incomplete type: that is an error.
5580 Don't talk about array types here, since we took care of that
5581 message in grokdeclarator. */
5582 error_at (DECL_SOURCE_LOCATION (decl),
5583 "storage size of %qD isn%'t known", decl);
5584 TREE_TYPE (decl) = error_mark_node;
5585 }
5586 #if 0
5587 /* Keep this code around in case we later want to control debug info
5588 based on whether a type is "used". (jason 1999-11-11) */
5589
5590 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5591 /* Let debugger know it should output info for this type. */
5592 note_debug_info_needed (ttype);
5593
5594 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5595 note_debug_info_needed (DECL_CONTEXT (decl));
5596 #endif
5597
5598 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5599 && DECL_SIZE (decl) != NULL_TREE
5600 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5601 {
5602 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5603 constant_expression_warning (DECL_SIZE (decl));
5604 else
5605 {
5606 error_at (DECL_SOURCE_LOCATION (decl),
5607 "storage size of %qD isn%'t constant", decl);
5608 TREE_TYPE (decl) = error_mark_node;
5609 }
5610 }
5611 }
5612
5613 /* If a local static variable is declared in an inline function, or if
5614 we have a weak definition, we must endeavor to create only one
5615 instance of the variable at link-time. */
5616
5617 void
5618 maybe_commonize_var (tree decl)
5619 {
5620 /* Don't mess with __FUNCTION__ and similar. */
5621 if (DECL_ARTIFICIAL (decl))
5622 return;
5623
5624 /* Static data in a function with comdat linkage also has comdat
5625 linkage. */
5626 if ((TREE_STATIC (decl)
5627 && DECL_FUNCTION_SCOPE_P (decl)
5628 && vague_linkage_p (DECL_CONTEXT (decl)))
5629 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5630 {
5631 if (flag_weak)
5632 {
5633 /* With weak symbols, we simply make the variable COMDAT;
5634 that will cause copies in multiple translations units to
5635 be merged. */
5636 comdat_linkage (decl);
5637 }
5638 else
5639 {
5640 if (DECL_INITIAL (decl) == NULL_TREE
5641 || DECL_INITIAL (decl) == error_mark_node)
5642 {
5643 /* Without weak symbols, we can use COMMON to merge
5644 uninitialized variables. */
5645 TREE_PUBLIC (decl) = 1;
5646 DECL_COMMON (decl) = 1;
5647 }
5648 else
5649 {
5650 /* While for initialized variables, we must use internal
5651 linkage -- which means that multiple copies will not
5652 be merged. */
5653 TREE_PUBLIC (decl) = 0;
5654 DECL_COMMON (decl) = 0;
5655 DECL_INTERFACE_KNOWN (decl) = 1;
5656 const char *msg;
5657 if (DECL_INLINE_VAR_P (decl))
5658 msg = G_("sorry: semantics of inline variable "
5659 "%q#D are wrong (you%'ll wind up with "
5660 "multiple copies)");
5661 else
5662 msg = G_("sorry: semantics of inline function "
5663 "static data %q#D are wrong (you%'ll wind "
5664 "up with multiple copies)");
5665 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5666 msg, decl))
5667 inform (DECL_SOURCE_LOCATION (decl),
5668 "you can work around this by removing the initializer");
5669 }
5670 }
5671 }
5672 }
5673
5674 /* Issue an error message if DECL is an uninitialized const variable.
5675 CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr
5676 context from potential_constant_expression. Returns true if all is well,
5677 false otherwise. */
5678
5679 bool
5680 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p,
5681 tsubst_flags_t complain)
5682 {
5683 tree type = strip_array_types (TREE_TYPE (decl));
5684
5685 /* ``Unless explicitly declared extern, a const object does not have
5686 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5687 7.1.6 */
5688 if (VAR_P (decl)
5689 && !TYPE_REF_P (type)
5690 && (constexpr_context_p
5691 || CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5692 && !DECL_NONTRIVIALLY_INITIALIZED_P (decl))
5693 {
5694 tree field = default_init_uninitialized_part (type);
5695 if (!field)
5696 return true;
5697
5698 bool show_notes = true;
5699
5700 if (!constexpr_context_p)
5701 {
5702 if (CP_TYPE_CONST_P (type))
5703 {
5704 if (complain & tf_error)
5705 show_notes = permerror (DECL_SOURCE_LOCATION (decl),
5706 "uninitialized %<const %D%>", decl);
5707 }
5708 else
5709 {
5710 if (!is_instantiation_of_constexpr (current_function_decl)
5711 && (complain & tf_error))
5712 error_at (DECL_SOURCE_LOCATION (decl),
5713 "uninitialized variable %qD in %<constexpr%> "
5714 "function", decl);
5715 else
5716 show_notes = false;
5717 cp_function_chain->invalid_constexpr = true;
5718 }
5719 }
5720 else if (complain & tf_error)
5721 error_at (DECL_SOURCE_LOCATION (decl),
5722 "uninitialized variable %qD in %<constexpr%> context",
5723 decl);
5724
5725 if (show_notes && CLASS_TYPE_P (type) && (complain & tf_error))
5726 {
5727 tree defaulted_ctor;
5728
5729 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5730 "%q#T has no user-provided default constructor", type);
5731 defaulted_ctor = in_class_defaulted_default_constructor (type);
5732 if (defaulted_ctor)
5733 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5734 "constructor is not user-provided because it is "
5735 "explicitly defaulted in the class body");
5736 inform (DECL_SOURCE_LOCATION (field),
5737 "and the implicitly-defined constructor does not "
5738 "initialize %q#D", field);
5739 }
5740
5741 return false;
5742 }
5743
5744 return true;
5745 }
5746 \f
5747 /* Structure holding the current initializer being processed by reshape_init.
5748 CUR is a pointer to the current element being processed, END is a pointer
5749 after the last element present in the initializer. */
5750 struct reshape_iter
5751 {
5752 constructor_elt *cur;
5753 constructor_elt *end;
5754 };
5755
5756 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5757
5758 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5759 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5760 initialized. If there are no more such fields, the return value
5761 will be NULL. */
5762
5763 tree
5764 next_initializable_field (tree field)
5765 {
5766 while (field
5767 && (TREE_CODE (field) != FIELD_DECL
5768 || DECL_UNNAMED_BIT_FIELD (field)
5769 || (DECL_ARTIFICIAL (field)
5770 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5771 field = DECL_CHAIN (field);
5772
5773 return field;
5774 }
5775
5776 /* Return true for [dcl.init.list] direct-list-initialization from
5777 single element of enumeration with a fixed underlying type. */
5778
5779 bool
5780 is_direct_enum_init (tree type, tree init)
5781 {
5782 if (cxx_dialect >= cxx17
5783 && TREE_CODE (type) == ENUMERAL_TYPE
5784 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5785 && TREE_CODE (init) == CONSTRUCTOR
5786 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5787 && CONSTRUCTOR_NELTS (init) == 1)
5788 return true;
5789 return false;
5790 }
5791
5792 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5793 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5794 INTEGER_CST representing the size of the array minus one (the maximum index),
5795 or NULL_TREE if the array was declared without specifying the size. D is
5796 the iterator within the constructor. */
5797
5798 static tree
5799 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5800 tsubst_flags_t complain)
5801 {
5802 tree new_init;
5803 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5804 unsigned HOST_WIDE_INT max_index_cst = 0;
5805 unsigned HOST_WIDE_INT index;
5806
5807 /* The initializer for an array is always a CONSTRUCTOR. */
5808 new_init = build_constructor (init_list_type_node, NULL);
5809
5810 if (sized_array_p)
5811 {
5812 /* Minus 1 is used for zero sized arrays. */
5813 if (integer_all_onesp (max_index))
5814 return new_init;
5815
5816 if (tree_fits_uhwi_p (max_index))
5817 max_index_cst = tree_to_uhwi (max_index);
5818 /* sizetype is sign extended, not zero extended. */
5819 else
5820 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5821 }
5822
5823 /* Set to the index of the last element with a non-zero initializer.
5824 Zero initializers for elements past this one can be dropped. */
5825 unsigned HOST_WIDE_INT last_nonzero = -1;
5826 /* Loop until there are no more initializers. */
5827 for (index = 0;
5828 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5829 ++index)
5830 {
5831 tree elt_init;
5832 constructor_elt *old_cur = d->cur;
5833
5834 check_array_designated_initializer (d->cur, index);
5835 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5836 complain);
5837 if (elt_init == error_mark_node)
5838 return error_mark_node;
5839 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5840 size_int (index), elt_init);
5841 if (!TREE_CONSTANT (elt_init))
5842 TREE_CONSTANT (new_init) = false;
5843
5844 /* Pointers initialized to strings must be treated as non-zero
5845 even if the string is empty. */
5846 tree init_type = TREE_TYPE (elt_init);
5847 if ((POINTER_TYPE_P (elt_type) != POINTER_TYPE_P (init_type))
5848 || !initializer_zerop (elt_init))
5849 last_nonzero = index;
5850
5851 /* This can happen with an invalid initializer (c++/54501). */
5852 if (d->cur == old_cur && !sized_array_p)
5853 break;
5854 }
5855
5856 if (sized_array_p && trivial_type_p (elt_type))
5857 {
5858 /* Strip trailing zero-initializers from an array of a trivial
5859 type of known size. They are redundant and get in the way
5860 of telling them apart from those with implicit zero value. */
5861 unsigned HOST_WIDE_INT nelts = CONSTRUCTOR_NELTS (new_init);
5862 if (last_nonzero > nelts)
5863 nelts = 0;
5864 else if (last_nonzero < nelts - 1)
5865 nelts = last_nonzero + 1;
5866
5867 vec_safe_truncate (CONSTRUCTOR_ELTS (new_init), nelts);
5868 }
5869
5870 return new_init;
5871 }
5872
5873 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5874 Parameters are the same of reshape_init_r. */
5875
5876 static tree
5877 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5878 {
5879 tree max_index = NULL_TREE;
5880
5881 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5882
5883 if (TYPE_DOMAIN (type))
5884 max_index = array_type_nelts (type);
5885
5886 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5887 }
5888
5889 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5890 Parameters are the same of reshape_init_r. */
5891
5892 static tree
5893 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5894 {
5895 tree max_index = NULL_TREE;
5896
5897 gcc_assert (VECTOR_TYPE_P (type));
5898
5899 if (COMPOUND_LITERAL_P (d->cur->value))
5900 {
5901 tree value = d->cur->value;
5902 if (!same_type_p (TREE_TYPE (value), type))
5903 {
5904 if (complain & tf_error)
5905 error ("invalid type %qT as initializer for a vector of type %qT",
5906 TREE_TYPE (d->cur->value), type);
5907 value = error_mark_node;
5908 }
5909 ++d->cur;
5910 return value;
5911 }
5912
5913 /* For a vector, we initialize it as an array of the appropriate size. */
5914 if (VECTOR_TYPE_P (type))
5915 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5916
5917 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5918 }
5919
5920 /* Subroutine of reshape_init_r, processes the initializers for classes
5921 or union. Parameters are the same of reshape_init_r. */
5922
5923 static tree
5924 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5925 tsubst_flags_t complain)
5926 {
5927 tree field;
5928 tree new_init;
5929
5930 gcc_assert (CLASS_TYPE_P (type));
5931
5932 /* The initializer for a class is always a CONSTRUCTOR. */
5933 new_init = build_constructor (init_list_type_node, NULL);
5934 field = next_initializable_field (TYPE_FIELDS (type));
5935
5936 if (!field)
5937 {
5938 /* [dcl.init.aggr]
5939
5940 An initializer for an aggregate member that is an
5941 empty class shall have the form of an empty
5942 initializer-list {}. */
5943 if (!first_initializer_p)
5944 {
5945 if (complain & tf_error)
5946 error ("initializer for %qT must be brace-enclosed", type);
5947 return error_mark_node;
5948 }
5949 return new_init;
5950 }
5951
5952 /* Loop through the initializable fields, gathering initializers. */
5953 while (d->cur != d->end)
5954 {
5955 tree field_init;
5956 constructor_elt *old_cur = d->cur;
5957
5958 /* Handle designated initializers, as an extension. */
5959 if (d->cur->index)
5960 {
5961 if (d->cur->index == error_mark_node)
5962 return error_mark_node;
5963
5964 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5965 {
5966 /* We already reshaped this. */
5967 if (field != d->cur->index)
5968 {
5969 tree id = DECL_NAME (d->cur->index);
5970 gcc_assert (id);
5971 gcc_checking_assert (d->cur->index
5972 == get_class_binding (type, id));
5973 field = d->cur->index;
5974 }
5975 }
5976 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5977 field = get_class_binding (type, d->cur->index);
5978 else
5979 {
5980 if (complain & tf_error)
5981 error ("%<[%E] =%> used in a GNU-style designated initializer"
5982 " for class %qT", d->cur->index, type);
5983 return error_mark_node;
5984 }
5985
5986 if (!field || TREE_CODE (field) != FIELD_DECL)
5987 {
5988 if (complain & tf_error)
5989 error ("%qT has no non-static data member named %qD", type,
5990 d->cur->index);
5991 return error_mark_node;
5992 }
5993 }
5994
5995 /* If we processed all the member of the class, we are done. */
5996 if (!field)
5997 break;
5998
5999 field_init = reshape_init_r (TREE_TYPE (field), d,
6000 /*first_initializer_p=*/false, complain);
6001 if (field_init == error_mark_node)
6002 return error_mark_node;
6003
6004 if (d->cur == old_cur && d->cur->index)
6005 {
6006 /* This can happen with an invalid initializer for a flexible
6007 array member (c++/54441). */
6008 if (complain & tf_error)
6009 error ("invalid initializer for %q#D", field);
6010 return error_mark_node;
6011 }
6012
6013 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
6014
6015 /* [dcl.init.aggr]
6016
6017 When a union is initialized with a brace-enclosed
6018 initializer, the braces shall only contain an
6019 initializer for the first member of the union. */
6020 if (TREE_CODE (type) == UNION_TYPE)
6021 break;
6022
6023 field = next_initializable_field (DECL_CHAIN (field));
6024 }
6025
6026 return new_init;
6027 }
6028
6029 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
6030 designators are not valid; either complain or return true to indicate
6031 that reshape_init_r should return error_mark_node. */
6032
6033 static bool
6034 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
6035 {
6036 if (d->cur->index)
6037 {
6038 if (complain & tf_error)
6039 error ("C99 designator %qE outside aggregate initializer",
6040 d->cur->index);
6041 else
6042 return true;
6043 }
6044 return false;
6045 }
6046
6047 /* Subroutine of reshape_init, which processes a single initializer (part of
6048 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
6049 iterator within the CONSTRUCTOR which points to the initializer to process.
6050 FIRST_INITIALIZER_P is true if this is the first initializer of the
6051 outermost CONSTRUCTOR node. */
6052
6053 static tree
6054 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
6055 tsubst_flags_t complain)
6056 {
6057 tree init = d->cur->value;
6058
6059 if (error_operand_p (init))
6060 return error_mark_node;
6061
6062 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
6063 && has_designator_problem (d, complain))
6064 return error_mark_node;
6065
6066 tree stripped_init = tree_strip_any_location_wrapper (init);
6067
6068 if (TREE_CODE (type) == COMPLEX_TYPE)
6069 {
6070 /* A complex type can be initialized from one or two initializers,
6071 but braces are not elided. */
6072 d->cur++;
6073 if (BRACE_ENCLOSED_INITIALIZER_P (stripped_init))
6074 {
6075 if (CONSTRUCTOR_NELTS (stripped_init) > 2)
6076 {
6077 if (complain & tf_error)
6078 error ("too many initializers for %qT", type);
6079 else
6080 return error_mark_node;
6081 }
6082 }
6083 else if (first_initializer_p && d->cur != d->end)
6084 {
6085 vec<constructor_elt, va_gc> *v = 0;
6086 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
6087 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
6088 if (has_designator_problem (d, complain))
6089 return error_mark_node;
6090 d->cur++;
6091 init = build_constructor (init_list_type_node, v);
6092 }
6093 return init;
6094 }
6095
6096 /* A non-aggregate type is always initialized with a single
6097 initializer. */
6098 if (!CP_AGGREGATE_TYPE_P (type))
6099 {
6100 /* It is invalid to initialize a non-aggregate type with a
6101 brace-enclosed initializer before C++0x.
6102 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
6103 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
6104 a CONSTRUCTOR (with a record type). */
6105 if (TREE_CODE (stripped_init) == CONSTRUCTOR
6106 /* Don't complain about a capture-init. */
6107 && !CONSTRUCTOR_IS_DIRECT_INIT (stripped_init)
6108 && BRACE_ENCLOSED_INITIALIZER_P (stripped_init)) /* p7626.C */
6109 {
6110 if (SCALAR_TYPE_P (type))
6111 {
6112 if (cxx_dialect < cxx11)
6113 {
6114 if (complain & tf_error)
6115 error ("braces around scalar initializer for type %qT",
6116 type);
6117 init = error_mark_node;
6118 }
6119 else if (first_initializer_p
6120 || (CONSTRUCTOR_NELTS (stripped_init) > 0
6121 && (BRACE_ENCLOSED_INITIALIZER_P
6122 (CONSTRUCTOR_ELT (stripped_init,0)->value))))
6123 {
6124 if (complain & tf_error)
6125 error ("too many braces around scalar initializer"
6126 "for type %qT", type);
6127 init = error_mark_node;
6128 }
6129 }
6130 else
6131 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6132 }
6133
6134 d->cur++;
6135 return init;
6136 }
6137
6138 /* "If T is a class type and the initializer list has a single element of
6139 type cv U, where U is T or a class derived from T, the object is
6140 initialized from that element." Even if T is an aggregate. */
6141 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
6142 && first_initializer_p
6143 && d->end - d->cur == 1
6144 && reference_related_p (type, TREE_TYPE (init)))
6145 {
6146 d->cur++;
6147 return init;
6148 }
6149
6150 /* [dcl.init.aggr]
6151
6152 All implicit type conversions (clause _conv_) are considered when
6153 initializing the aggregate member with an initializer from an
6154 initializer-list. If the initializer can initialize a member,
6155 the member is initialized. Otherwise, if the member is itself a
6156 non-empty subaggregate, brace elision is assumed and the
6157 initializer is considered for the initialization of the first
6158 member of the subaggregate. */
6159 if (TREE_CODE (init) != CONSTRUCTOR
6160 /* But don't try this for the first initializer, since that would be
6161 looking through the outermost braces; A a2 = { a1 }; is not a
6162 valid aggregate initialization. */
6163 && !first_initializer_p
6164 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
6165 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
6166 complain)))
6167 {
6168 d->cur++;
6169 return init;
6170 }
6171
6172 /* [dcl.init.string]
6173
6174 A char array (whether plain char, signed char, or unsigned char)
6175 can be initialized by a string-literal (optionally enclosed in
6176 braces); a wchar_t array can be initialized by a wide
6177 string-literal (optionally enclosed in braces). */
6178 if (TREE_CODE (type) == ARRAY_TYPE
6179 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
6180 {
6181 tree str_init = init;
6182 tree stripped_str_init = stripped_init;
6183
6184 /* Strip one level of braces if and only if they enclose a single
6185 element (as allowed by [dcl.init.string]). */
6186 if (!first_initializer_p
6187 && TREE_CODE (stripped_str_init) == CONSTRUCTOR
6188 && CONSTRUCTOR_NELTS (stripped_str_init) == 1)
6189 {
6190 str_init = (*CONSTRUCTOR_ELTS (stripped_str_init))[0].value;
6191 stripped_str_init = tree_strip_any_location_wrapper (str_init);
6192 }
6193
6194 /* If it's a string literal, then it's the initializer for the array
6195 as a whole. Otherwise, continue with normal initialization for
6196 array types (one value per array element). */
6197 if (TREE_CODE (stripped_str_init) == STRING_CST)
6198 {
6199 if (has_designator_problem (d, complain))
6200 return error_mark_node;
6201 d->cur++;
6202 return str_init;
6203 }
6204 }
6205
6206 /* The following cases are about aggregates. If we are not within a full
6207 initializer already, and there is not a CONSTRUCTOR, it means that there
6208 is a missing set of braces (that is, we are processing the case for
6209 which reshape_init exists). */
6210 if (!first_initializer_p)
6211 {
6212 if (TREE_CODE (stripped_init) == CONSTRUCTOR)
6213 {
6214 tree init_type = TREE_TYPE (init);
6215 if (init_type && TYPE_PTRMEMFUNC_P (init_type))
6216 /* There is no need to call reshape_init for pointer-to-member
6217 function initializers, as they are always constructed correctly
6218 by the front end. Here we have e.g. {.__pfn=0B, .__delta=0},
6219 which is missing outermost braces. We should warn below, and
6220 one of the routines below will wrap it in additional { }. */;
6221 /* For a nested compound literal, there is no need to reshape since
6222 we called reshape_init in finish_compound_literal, before calling
6223 digest_init. */
6224 else if (COMPOUND_LITERAL_P (stripped_init)
6225 /* Similarly, a CONSTRUCTOR of the target's type is a
6226 previously digested initializer. */
6227 || same_type_ignoring_top_level_qualifiers_p (type,
6228 init_type))
6229 {
6230 ++d->cur;
6231 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (stripped_init));
6232 return init;
6233 }
6234 else
6235 {
6236 /* Something that hasn't been reshaped yet. */
6237 ++d->cur;
6238 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (stripped_init));
6239 return reshape_init (type, init, complain);
6240 }
6241 }
6242
6243 if (complain & tf_warning)
6244 warning (OPT_Wmissing_braces,
6245 "missing braces around initializer for %qT",
6246 type);
6247 }
6248
6249 /* Dispatch to specialized routines. */
6250 if (CLASS_TYPE_P (type))
6251 return reshape_init_class (type, d, first_initializer_p, complain);
6252 else if (TREE_CODE (type) == ARRAY_TYPE)
6253 return reshape_init_array (type, d, complain);
6254 else if (VECTOR_TYPE_P (type))
6255 return reshape_init_vector (type, d, complain);
6256 else
6257 gcc_unreachable();
6258 }
6259
6260 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6261 brace-enclosed aggregate initializer.
6262
6263 INIT is the CONSTRUCTOR containing the list of initializers describing
6264 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6265 It may not presently match the shape of the TYPE; for example:
6266
6267 struct S { int a; int b; };
6268 struct S a[] = { 1, 2, 3, 4 };
6269
6270 Here INIT will hold a vector of four elements, rather than a
6271 vector of two elements, each itself a vector of two elements. This
6272 routine transforms INIT from the former form into the latter. The
6273 revised CONSTRUCTOR node is returned. */
6274
6275 tree
6276 reshape_init (tree type, tree init, tsubst_flags_t complain)
6277 {
6278 vec<constructor_elt, va_gc> *v;
6279 reshape_iter d;
6280 tree new_init;
6281
6282 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6283
6284 v = CONSTRUCTOR_ELTS (init);
6285
6286 /* An empty constructor does not need reshaping, and it is always a valid
6287 initializer. */
6288 if (vec_safe_is_empty (v))
6289 return init;
6290
6291 /* Handle [dcl.init.list] direct-list-initialization from
6292 single element of enumeration with a fixed underlying type. */
6293 if (is_direct_enum_init (type, init))
6294 {
6295 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6296 type = cv_unqualified (type);
6297 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6298 {
6299 warning_sentinel w (warn_useless_cast);
6300 warning_sentinel w2 (warn_ignored_qualifiers);
6301 return cp_build_c_cast (type, elt, tf_warning_or_error);
6302 }
6303 else
6304 return error_mark_node;
6305 }
6306
6307 /* Recurse on this CONSTRUCTOR. */
6308 d.cur = &(*v)[0];
6309 d.end = d.cur + v->length ();
6310
6311 new_init = reshape_init_r (type, &d, true, complain);
6312 if (new_init == error_mark_node)
6313 return error_mark_node;
6314
6315 /* Make sure all the element of the constructor were used. Otherwise,
6316 issue an error about exceeding initializers. */
6317 if (d.cur != d.end)
6318 {
6319 if (complain & tf_error)
6320 error ("too many initializers for %qT", type);
6321 return error_mark_node;
6322 }
6323
6324 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6325 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6326 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6327 if (CONSTRUCTOR_IS_DESIGNATED_INIT (init)
6328 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6329 CONSTRUCTOR_IS_DESIGNATED_INIT (new_init) = true;
6330
6331 return new_init;
6332 }
6333
6334 /* Verify array initializer. Returns true if errors have been reported. */
6335
6336 bool
6337 check_array_initializer (tree decl, tree type, tree init)
6338 {
6339 tree element_type = TREE_TYPE (type);
6340
6341 /* The array type itself need not be complete, because the
6342 initializer may tell us how many elements are in the array.
6343 But, the elements of the array must be complete. */
6344 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6345 {
6346 if (decl)
6347 error_at (DECL_SOURCE_LOCATION (decl),
6348 "elements of array %q#D have incomplete type", decl);
6349 else
6350 error ("elements of array %q#T have incomplete type", type);
6351 return true;
6352 }
6353 /* A compound literal can't have variable size. */
6354 if (init && !decl
6355 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6356 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6357 {
6358 error ("variable-sized compound literal");
6359 return true;
6360 }
6361 return false;
6362 }
6363
6364 /* Subroutine of check_initializer; args are passed down from that function.
6365 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6366
6367 static tree
6368 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6369
6370 {
6371 gcc_assert (stmts_are_full_exprs_p ());
6372 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6373 }
6374
6375 /* Verify INIT (the initializer for DECL), and record the
6376 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6377 grok_reference_init.
6378
6379 If the return value is non-NULL, it is an expression that must be
6380 evaluated dynamically to initialize DECL. */
6381
6382 static tree
6383 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6384 {
6385 tree type = TREE_TYPE (decl);
6386 tree init_code = NULL;
6387 tree core_type;
6388
6389 /* Things that are going to be initialized need to have complete
6390 type. */
6391 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6392
6393 if (DECL_HAS_VALUE_EXPR_P (decl))
6394 {
6395 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6396 it doesn't have storage to be initialized. */
6397 gcc_assert (init == NULL_TREE);
6398 return NULL_TREE;
6399 }
6400
6401 if (type == error_mark_node)
6402 /* We will have already complained. */
6403 return NULL_TREE;
6404
6405 if (TREE_CODE (type) == ARRAY_TYPE)
6406 {
6407 if (check_array_initializer (decl, type, init))
6408 return NULL_TREE;
6409 }
6410 else if (!COMPLETE_TYPE_P (type))
6411 {
6412 error_at (DECL_SOURCE_LOCATION (decl),
6413 "%q#D has incomplete type", decl);
6414 TREE_TYPE (decl) = error_mark_node;
6415 return NULL_TREE;
6416 }
6417 else
6418 /* There is no way to make a variable-sized class type in GNU C++. */
6419 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6420
6421 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6422 {
6423 int init_len = CONSTRUCTOR_NELTS (init);
6424 if (SCALAR_TYPE_P (type))
6425 {
6426 if (init_len == 0)
6427 {
6428 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6429 init = build_zero_init (type, NULL_TREE, false);
6430 }
6431 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6432 {
6433 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6434 "scalar object %qD requires one element in "
6435 "initializer", decl);
6436 TREE_TYPE (decl) = error_mark_node;
6437 return NULL_TREE;
6438 }
6439 }
6440 }
6441
6442 if (TREE_CODE (decl) == CONST_DECL)
6443 {
6444 gcc_assert (!TYPE_REF_P (type));
6445
6446 DECL_INITIAL (decl) = init;
6447
6448 gcc_assert (init != NULL_TREE);
6449 init = NULL_TREE;
6450 }
6451 else if (!init && DECL_REALLY_EXTERN (decl))
6452 ;
6453 else if (init || type_build_ctor_call (type)
6454 || TYPE_REF_P (type))
6455 {
6456 if (TYPE_REF_P (type))
6457 {
6458 init = grok_reference_init (decl, type, init, flags);
6459 flags |= LOOKUP_ALREADY_DIGESTED;
6460 }
6461 else if (!init)
6462 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6463 tf_warning_or_error);
6464 /* Do not reshape constructors of vectors (they don't need to be
6465 reshaped. */
6466 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6467 {
6468 if (is_std_init_list (type))
6469 {
6470 init = perform_implicit_conversion (type, init,
6471 tf_warning_or_error);
6472 flags |= LOOKUP_ALREADY_DIGESTED;
6473 }
6474 else if (TYPE_NON_AGGREGATE_CLASS (type))
6475 {
6476 /* Don't reshape if the class has constructors. */
6477 if (cxx_dialect == cxx98)
6478 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6479 "in C++98 %qD must be initialized by "
6480 "constructor, not by %<{...}%>",
6481 decl);
6482 }
6483 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6484 {
6485 error ("opaque vector types cannot be initialized");
6486 init = error_mark_node;
6487 }
6488 else
6489 {
6490 init = reshape_init (type, init, tf_warning_or_error);
6491 flags |= LOOKUP_NO_NARROWING;
6492 }
6493 }
6494 else if (TREE_CODE (init) == TREE_LIST
6495 && TREE_TYPE (init) != unknown_type_node
6496 && !MAYBE_CLASS_TYPE_P (type))
6497 {
6498 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6499
6500 /* We get here with code like `int a (2);' */
6501 init = build_x_compound_expr_from_list (init, ELK_INIT,
6502 tf_warning_or_error);
6503 }
6504
6505 /* If DECL has an array type without a specific bound, deduce the
6506 array size from the initializer. */
6507 maybe_deduce_size_from_array_init (decl, init);
6508 type = TREE_TYPE (decl);
6509 if (type == error_mark_node)
6510 return NULL_TREE;
6511
6512 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6513 && !(flags & LOOKUP_ALREADY_DIGESTED)
6514 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6515 && CP_AGGREGATE_TYPE_P (type)
6516 && (CLASS_TYPE_P (type)
6517 || !TYPE_NEEDS_CONSTRUCTING (type)
6518 || type_has_extended_temps (type))))
6519 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6520 {
6521 init_code = build_aggr_init_full_exprs (decl, init, flags);
6522
6523 /* A constructor call is a non-trivial initializer even if
6524 it isn't explicitly written. */
6525 if (TREE_SIDE_EFFECTS (init_code))
6526 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6527
6528 /* If this is a constexpr initializer, expand_default_init will
6529 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6530 case, pull the initializer back out and pass it down into
6531 store_init_value. */
6532 while (TREE_CODE (init_code) == EXPR_STMT
6533 || TREE_CODE (init_code) == CONVERT_EXPR)
6534 init_code = TREE_OPERAND (init_code, 0);
6535 if (TREE_CODE (init_code) == INIT_EXPR)
6536 {
6537 init = TREE_OPERAND (init_code, 1);
6538 init_code = NULL_TREE;
6539 /* Don't call digest_init; it's unnecessary and will complain
6540 about aggregate initialization of non-aggregate classes. */
6541 flags |= LOOKUP_ALREADY_DIGESTED;
6542 }
6543 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6544 {
6545 /* Declared constexpr, but no suitable initializer; massage
6546 init appropriately so we can pass it into store_init_value
6547 for the error. */
6548 if (CLASS_TYPE_P (type)
6549 && (!init || TREE_CODE (init) == TREE_LIST))
6550 {
6551 init = build_functional_cast (type, init, tf_none);
6552 if (TREE_CODE (init) == TARGET_EXPR)
6553 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6554 }
6555 init_code = NULL_TREE;
6556 }
6557 else
6558 init = NULL_TREE;
6559 }
6560
6561 if (init && TREE_CODE (init) != TREE_VEC)
6562 {
6563 /* In aggregate initialization of a variable, each element
6564 initialization is a full-expression because there is no
6565 enclosing expression. */
6566 gcc_assert (stmts_are_full_exprs_p ());
6567
6568 init_code = store_init_value (decl, init, cleanups, flags);
6569
6570 if (DECL_INITIAL (decl)
6571 && TREE_CODE (DECL_INITIAL (decl)) == CONSTRUCTOR
6572 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (DECL_INITIAL (decl))))
6573 {
6574 tree elt = CONSTRUCTOR_ELTS (DECL_INITIAL (decl))->last ().value;
6575 if (TREE_CODE (TREE_TYPE (elt)) == ARRAY_TYPE
6576 && TYPE_SIZE (TREE_TYPE (elt)) == NULL_TREE)
6577 cp_complete_array_type (&TREE_TYPE (elt), elt, false);
6578 }
6579
6580 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6581 && DECL_INITIAL (decl)
6582 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6583 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6584 warning_at (cp_expr_loc_or_loc (DECL_INITIAL (decl),
6585 DECL_SOURCE_LOCATION (decl)),
6586 0, "array %qD initialized by parenthesized "
6587 "string literal %qE",
6588 decl, DECL_INITIAL (decl));
6589 init = NULL;
6590 }
6591 }
6592 else
6593 {
6594 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6595 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6596 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6597 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6598 /*complain=*/true);
6599
6600 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6601 tf_warning_or_error);
6602 }
6603
6604 if (init && init != error_mark_node)
6605 init_code = build2 (INIT_EXPR, type, decl, init);
6606
6607 if (init_code)
6608 {
6609 /* We might have set these in cp_finish_decl. */
6610 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6611 TREE_CONSTANT (decl) = false;
6612 }
6613
6614 if (init_code
6615 && DECL_IN_AGGR_P (decl)
6616 && DECL_INITIALIZED_IN_CLASS_P (decl))
6617 {
6618 static int explained = 0;
6619
6620 if (cxx_dialect < cxx11)
6621 error ("initializer invalid for static member with constructor");
6622 else if (cxx_dialect < cxx17)
6623 error ("non-constant in-class initialization invalid for static "
6624 "member %qD", decl);
6625 else
6626 error ("non-constant in-class initialization invalid for non-inline "
6627 "static member %qD", decl);
6628 if (!explained)
6629 {
6630 inform (input_location,
6631 "(an out of class initialization is required)");
6632 explained = 1;
6633 }
6634 return NULL_TREE;
6635 }
6636
6637 return init_code;
6638 }
6639
6640 /* If DECL is not a local variable, give it RTL. */
6641
6642 static void
6643 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6644 {
6645 int toplev = toplevel_bindings_p ();
6646 int defer_p;
6647
6648 /* Set the DECL_ASSEMBLER_NAME for the object. */
6649 if (asmspec)
6650 {
6651 /* The `register' keyword, when used together with an
6652 asm-specification, indicates that the variable should be
6653 placed in a particular register. */
6654 if (VAR_P (decl) && DECL_REGISTER (decl))
6655 {
6656 set_user_assembler_name (decl, asmspec);
6657 DECL_HARD_REGISTER (decl) = 1;
6658 }
6659 else
6660 {
6661 if (TREE_CODE (decl) == FUNCTION_DECL
6662 && fndecl_built_in_p (decl, BUILT_IN_NORMAL))
6663 set_builtin_user_assembler_name (decl, asmspec);
6664 set_user_assembler_name (decl, asmspec);
6665 }
6666 }
6667
6668 /* Handle non-variables up front. */
6669 if (!VAR_P (decl))
6670 {
6671 rest_of_decl_compilation (decl, toplev, at_eof);
6672 return;
6673 }
6674
6675 /* If we see a class member here, it should be a static data
6676 member. */
6677 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6678 {
6679 gcc_assert (TREE_STATIC (decl));
6680 /* An in-class declaration of a static data member should be
6681 external; it is only a declaration, and not a definition. */
6682 if (init == NULL_TREE)
6683 gcc_assert (DECL_EXTERNAL (decl)
6684 || !TREE_PUBLIC (decl));
6685 }
6686
6687 /* We don't create any RTL for local variables. */
6688 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6689 return;
6690
6691 /* We defer emission of local statics until the corresponding
6692 DECL_EXPR is expanded. But with constexpr its function might never
6693 be expanded, so go ahead and tell cgraph about the variable now. */
6694 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6695 && !var_in_maybe_constexpr_fn (decl))
6696 || DECL_VIRTUAL_P (decl));
6697
6698 /* Defer template instantiations. */
6699 if (DECL_LANG_SPECIFIC (decl)
6700 && DECL_IMPLICIT_INSTANTIATION (decl))
6701 defer_p = 1;
6702
6703 /* If we're not deferring, go ahead and assemble the variable. */
6704 if (!defer_p)
6705 rest_of_decl_compilation (decl, toplev, at_eof);
6706 }
6707
6708 /* walk_tree helper for wrap_temporary_cleanups, below. */
6709
6710 static tree
6711 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6712 {
6713 /* Stop at types or full-expression boundaries. */
6714 if (TYPE_P (*stmt_p)
6715 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6716 {
6717 *walk_subtrees = 0;
6718 return NULL_TREE;
6719 }
6720
6721 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6722 {
6723 tree guard = (tree)data;
6724 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6725
6726 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6727 /* Tell honor_protect_cleanup_actions to handle this as a separate
6728 cleanup. */
6729 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6730
6731 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6732 }
6733
6734 return NULL_TREE;
6735 }
6736
6737 /* We're initializing a local variable which has a cleanup GUARD. If there
6738 are any temporaries used in the initializer INIT of this variable, we
6739 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6740 variable will be cleaned up properly if one of them throws.
6741
6742 Unfortunately, there's no way to express this properly in terms of
6743 nesting, as the regions for the temporaries overlap the region for the
6744 variable itself; if there are two temporaries, the variable needs to be
6745 the first thing destroyed if either of them throws. However, we only
6746 want to run the variable's cleanup if it actually got constructed. So
6747 we need to guard the temporary cleanups with the variable's cleanup if
6748 they are run on the normal path, but not if they are run on the
6749 exceptional path. We implement this by telling
6750 honor_protect_cleanup_actions to strip the variable cleanup from the
6751 exceptional path. */
6752
6753 static void
6754 wrap_temporary_cleanups (tree init, tree guard)
6755 {
6756 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6757 }
6758
6759 /* Generate code to initialize DECL (a local variable). */
6760
6761 static void
6762 initialize_local_var (tree decl, tree init)
6763 {
6764 tree type = TREE_TYPE (decl);
6765 tree cleanup;
6766 int already_used;
6767
6768 gcc_assert (VAR_P (decl)
6769 || TREE_CODE (decl) == RESULT_DECL);
6770 gcc_assert (!TREE_STATIC (decl));
6771
6772 if (DECL_SIZE (decl) == NULL_TREE)
6773 {
6774 /* If we used it already as memory, it must stay in memory. */
6775 DECL_INITIAL (decl) = NULL_TREE;
6776 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6777 return;
6778 }
6779
6780 if (type == error_mark_node)
6781 return;
6782
6783 /* Compute and store the initial value. */
6784 already_used = TREE_USED (decl) || TREE_USED (type);
6785 if (TREE_USED (type))
6786 DECL_READ_P (decl) = 1;
6787
6788 /* Generate a cleanup, if necessary. */
6789 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6790
6791 /* Perform the initialization. */
6792 if (init)
6793 {
6794 tree rinit = (TREE_CODE (init) == INIT_EXPR
6795 ? TREE_OPERAND (init, 1) : NULL_TREE);
6796 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6797 {
6798 /* Stick simple initializers in DECL_INITIAL so that
6799 -Wno-init-self works (c++/34772). */
6800 gcc_assert (TREE_OPERAND (init, 0) == decl);
6801 DECL_INITIAL (decl) = rinit;
6802
6803 if (warn_init_self && TYPE_REF_P (type))
6804 {
6805 STRIP_NOPS (rinit);
6806 if (rinit == decl)
6807 warning_at (DECL_SOURCE_LOCATION (decl),
6808 OPT_Winit_self,
6809 "reference %qD is initialized with itself", decl);
6810 }
6811 }
6812 else
6813 {
6814 int saved_stmts_are_full_exprs_p;
6815
6816 /* If we're only initializing a single object, guard the
6817 destructors of any temporaries used in its initializer with
6818 its destructor. This isn't right for arrays because each
6819 element initialization is a full-expression. */
6820 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6821 wrap_temporary_cleanups (init, cleanup);
6822
6823 gcc_assert (building_stmt_list_p ());
6824 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6825 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6826 finish_expr_stmt (init);
6827 current_stmt_tree ()->stmts_are_full_exprs_p =
6828 saved_stmts_are_full_exprs_p;
6829 }
6830 }
6831
6832 /* Set this to 0 so we can tell whether an aggregate which was
6833 initialized was ever used. Don't do this if it has a
6834 destructor, so we don't complain about the 'resource
6835 allocation is initialization' idiom. Now set
6836 attribute((unused)) on types so decls of that type will be
6837 marked used. (see TREE_USED, above.) */
6838 if (TYPE_NEEDS_CONSTRUCTING (type)
6839 && ! already_used
6840 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6841 && DECL_NAME (decl))
6842 TREE_USED (decl) = 0;
6843 else if (already_used)
6844 TREE_USED (decl) = 1;
6845
6846 if (cleanup)
6847 finish_decl_cleanup (decl, cleanup);
6848 }
6849
6850 /* DECL is a VAR_DECL for a compiler-generated variable with static
6851 storage duration (like a virtual table) whose initializer is a
6852 compile-time constant. Initialize the variable and provide it to the
6853 back end. */
6854
6855 void
6856 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6857 {
6858 tree init;
6859 gcc_assert (DECL_ARTIFICIAL (decl));
6860 init = build_constructor (TREE_TYPE (decl), v);
6861 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6862 DECL_INITIAL (decl) = init;
6863 DECL_INITIALIZED_P (decl) = 1;
6864 /* Mark the decl as constexpr so that we can access its content
6865 at compile time. */
6866 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = true;
6867 DECL_DECLARED_CONSTEXPR_P (decl) = true;
6868 determine_visibility (decl);
6869 layout_var_decl (decl);
6870 maybe_commonize_var (decl);
6871 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6872 }
6873
6874 /* INIT is the initializer for a variable, as represented by the
6875 parser. Returns true iff INIT is value-dependent. */
6876
6877 static bool
6878 value_dependent_init_p (tree init)
6879 {
6880 if (TREE_CODE (init) == TREE_LIST)
6881 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6882 return any_value_dependent_elements_p (init);
6883 else if (TREE_CODE (init) == CONSTRUCTOR)
6884 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6885 {
6886 if (dependent_type_p (TREE_TYPE (init)))
6887 return true;
6888
6889 vec<constructor_elt, va_gc> *elts;
6890 size_t nelts;
6891 size_t i;
6892
6893 elts = CONSTRUCTOR_ELTS (init);
6894 nelts = vec_safe_length (elts);
6895 for (i = 0; i < nelts; ++i)
6896 if (value_dependent_init_p ((*elts)[i].value))
6897 return true;
6898 }
6899 else
6900 /* It must be a simple expression, e.g., int i = 3; */
6901 return value_dependent_expression_p (init);
6902
6903 return false;
6904 }
6905
6906 // Returns true if a DECL is VAR_DECL with the concept specifier.
6907 static inline bool
6908 is_concept_var (tree decl)
6909 {
6910 return (VAR_P (decl)
6911 // Not all variables have DECL_LANG_SPECIFIC.
6912 && DECL_LANG_SPECIFIC (decl)
6913 && DECL_DECLARED_CONCEPT_P (decl));
6914 }
6915
6916 /* A helper function to be called via walk_tree. If any label exists
6917 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6918
6919 static tree
6920 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6921 {
6922 if (TYPE_P (*tp))
6923 *walk_subtrees = 0;
6924 if (TREE_CODE (*tp) == LABEL_DECL)
6925 cfun->has_forced_label_in_static = 1;
6926 return NULL_TREE;
6927 }
6928
6929 /* Finish processing of a declaration;
6930 install its line number and initial value.
6931 If the length of an array type is not known before,
6932 it must be determined now, from the initial value, or it is an error.
6933
6934 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6935 true, then INIT is an integral constant expression.
6936
6937 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6938 if the (init) syntax was used. */
6939
6940 void
6941 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6942 tree asmspec_tree, int flags)
6943 {
6944 tree type;
6945 vec<tree, va_gc> *cleanups = NULL;
6946 const char *asmspec = NULL;
6947 int was_readonly = 0;
6948 bool var_definition_p = false;
6949 tree auto_node;
6950
6951 if (decl == error_mark_node)
6952 return;
6953 else if (! decl)
6954 {
6955 if (init)
6956 error ("assignment (not initialization) in declaration");
6957 return;
6958 }
6959
6960 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6961 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6962 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6963
6964 type = TREE_TYPE (decl);
6965 if (type == error_mark_node)
6966 return;
6967
6968 /* Warn about register storage specifiers except when in GNU global
6969 or local register variable extension. */
6970 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6971 {
6972 if (cxx_dialect >= cxx17)
6973 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6974 "ISO C++17 does not allow %<register%> storage "
6975 "class specifier");
6976 else
6977 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6978 "%<register%> storage class specifier used");
6979 }
6980
6981 /* If a name was specified, get the string. */
6982 if (at_namespace_scope_p ())
6983 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6984 if (asmspec_tree && asmspec_tree != error_mark_node)
6985 asmspec = TREE_STRING_POINTER (asmspec_tree);
6986
6987 if (current_class_type
6988 && CP_DECL_CONTEXT (decl) == current_class_type
6989 && TYPE_BEING_DEFINED (current_class_type)
6990 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6991 && (DECL_INITIAL (decl) || init))
6992 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6993
6994 /* Do auto deduction unless decl is a function or an uninstantiated
6995 template specialization. */
6996 if (TREE_CODE (decl) != FUNCTION_DECL
6997 && !(init == NULL_TREE
6998 && DECL_LANG_SPECIFIC (decl)
6999 && DECL_TEMPLATE_INSTANTIATION (decl)
7000 && !DECL_TEMPLATE_INSTANTIATED (decl))
7001 && (auto_node = type_uses_auto (type)))
7002 {
7003 tree d_init;
7004 if (init == NULL_TREE)
7005 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
7006 d_init = init;
7007 if (d_init)
7008 {
7009 if (TREE_CODE (d_init) == TREE_LIST
7010 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
7011 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
7012 tf_warning_or_error);
7013 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
7014 }
7015 enum auto_deduction_context adc = adc_variable_type;
7016 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
7017 adc = adc_decomp_type;
7018 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
7019 tf_warning_or_error, adc,
7020 NULL_TREE, flags);
7021 if (type == error_mark_node)
7022 return;
7023 if (TREE_CODE (type) == FUNCTION_TYPE)
7024 {
7025 error ("initializer for %<decltype(auto) %D%> has function type; "
7026 "did you forget the %<()%>?", decl);
7027 TREE_TYPE (decl) = error_mark_node;
7028 return;
7029 }
7030 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
7031 }
7032
7033 if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node)
7034 {
7035 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
7036 if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl))
7037 {
7038 init = NULL_TREE;
7039 DECL_EXTERNAL (decl) = 1;
7040 }
7041 }
7042
7043 if (VAR_P (decl)
7044 && DECL_CLASS_SCOPE_P (decl)
7045 && DECL_INITIALIZED_IN_CLASS_P (decl))
7046 check_static_variable_definition (decl, type);
7047
7048 if (init && TREE_CODE (decl) == FUNCTION_DECL)
7049 {
7050 tree clone;
7051 if (init == ridpointers[(int)RID_DELETE])
7052 {
7053 /* FIXME check this is 1st decl. */
7054 DECL_DELETED_FN (decl) = 1;
7055 DECL_DECLARED_INLINE_P (decl) = 1;
7056 DECL_INITIAL (decl) = error_mark_node;
7057 FOR_EACH_CLONE (clone, decl)
7058 {
7059 DECL_DELETED_FN (clone) = 1;
7060 DECL_DECLARED_INLINE_P (clone) = 1;
7061 DECL_INITIAL (clone) = error_mark_node;
7062 }
7063 init = NULL_TREE;
7064 }
7065 else if (init == ridpointers[(int)RID_DEFAULT])
7066 {
7067 if (defaultable_fn_check (decl))
7068 DECL_DEFAULTED_FN (decl) = 1;
7069 else
7070 DECL_INITIAL (decl) = NULL_TREE;
7071 }
7072 }
7073
7074 if (init && VAR_P (decl))
7075 {
7076 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
7077 /* If DECL is a reference, then we want to know whether init is a
7078 reference constant; init_const_expr_p as passed tells us whether
7079 it's an rvalue constant. */
7080 if (TYPE_REF_P (type))
7081 init_const_expr_p = potential_constant_expression (init);
7082 if (init_const_expr_p)
7083 {
7084 /* Set these flags now for templates. We'll update the flags in
7085 store_init_value for instantiations. */
7086 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
7087 if (decl_maybe_constant_var_p (decl)
7088 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
7089 && !TYPE_REF_P (type))
7090 TREE_CONSTANT (decl) = 1;
7091 }
7092 }
7093
7094 if (processing_template_decl)
7095 {
7096 bool type_dependent_p;
7097
7098 /* Add this declaration to the statement-tree. */
7099 if (at_function_scope_p ())
7100 add_decl_expr (decl);
7101
7102 type_dependent_p = dependent_type_p (type);
7103
7104 if (check_for_bare_parameter_packs (init))
7105 {
7106 init = NULL_TREE;
7107 DECL_INITIAL (decl) = NULL_TREE;
7108 }
7109
7110 /* Generally, initializers in templates are expanded when the
7111 template is instantiated. But, if DECL is a variable constant
7112 then it can be used in future constant expressions, so its value
7113 must be available. */
7114
7115 bool dep_init = false;
7116
7117 if (!VAR_P (decl) || type_dependent_p)
7118 /* We can't do anything if the decl has dependent type. */;
7119 else if (!init && is_concept_var (decl))
7120 {
7121 error ("variable concept has no initializer");
7122 init = boolean_true_node;
7123 }
7124 else if (init
7125 && init_const_expr_p
7126 && !TYPE_REF_P (type)
7127 && decl_maybe_constant_var_p (decl)
7128 && !(dep_init = value_dependent_init_p (init)))
7129 {
7130 /* This variable seems to be a non-dependent constant, so process
7131 its initializer. If check_initializer returns non-null the
7132 initialization wasn't constant after all. */
7133 tree init_code;
7134 cleanups = make_tree_vector ();
7135 init_code = check_initializer (decl, init, flags, &cleanups);
7136 if (init_code == NULL_TREE)
7137 init = NULL_TREE;
7138 release_tree_vector (cleanups);
7139 }
7140 else
7141 {
7142 gcc_assert (!DECL_PRETTY_FUNCTION_P (decl));
7143 /* Deduce array size even if the initializer is dependent. */
7144 maybe_deduce_size_from_array_init (decl, init);
7145 /* And complain about multiple initializers. */
7146 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
7147 && !MAYBE_CLASS_TYPE_P (type))
7148 init = build_x_compound_expr_from_list (init, ELK_INIT,
7149 tf_warning_or_error);
7150 }
7151
7152 if (init)
7153 DECL_INITIAL (decl) = init;
7154
7155 if (dep_init)
7156 {
7157 retrofit_lang_decl (decl);
7158 SET_DECL_DEPENDENT_INIT_P (decl, true);
7159 }
7160 return;
7161 }
7162
7163 /* Just store non-static data member initializers for later. */
7164 if (init && TREE_CODE (decl) == FIELD_DECL)
7165 DECL_INITIAL (decl) = init;
7166
7167 /* Take care of TYPE_DECLs up front. */
7168 if (TREE_CODE (decl) == TYPE_DECL)
7169 {
7170 if (type != error_mark_node
7171 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
7172 {
7173 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7174 warning (0, "shadowing previous type declaration of %q#D", decl);
7175 set_identifier_type_value (DECL_NAME (decl), decl);
7176 }
7177
7178 /* If we have installed this as the canonical typedef for this
7179 type, and that type has not been defined yet, delay emitting
7180 the debug information for it, as we will emit it later. */
7181 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7182 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7183 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7184
7185 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
7186 at_eof);
7187 return;
7188 }
7189
7190 /* A reference will be modified here, as it is initialized. */
7191 if (! DECL_EXTERNAL (decl)
7192 && TREE_READONLY (decl)
7193 && TYPE_REF_P (type))
7194 {
7195 was_readonly = 1;
7196 TREE_READONLY (decl) = 0;
7197 }
7198
7199 if (VAR_P (decl))
7200 {
7201 /* If this is a local variable that will need a mangled name,
7202 register it now. We must do this before processing the
7203 initializer for the variable, since the initialization might
7204 require a guard variable, and since the mangled name of the
7205 guard variable will depend on the mangled name of this
7206 variable. */
7207 if (DECL_FUNCTION_SCOPE_P (decl)
7208 && TREE_STATIC (decl)
7209 && !DECL_ARTIFICIAL (decl))
7210 {
7211 /* The variable holding an anonymous union will have had its
7212 discriminator set in finish_anon_union, after which it's
7213 NAME will have been cleared. */
7214 if (DECL_NAME (decl))
7215 determine_local_discriminator (decl);
7216 /* Normally has_forced_label_in_static is set during GIMPLE
7217 lowering, but [cd]tors are never actually compiled directly.
7218 We need to set this early so we can deal with the label
7219 address extension. */
7220 if ((DECL_CONSTRUCTOR_P (current_function_decl)
7221 || DECL_DESTRUCTOR_P (current_function_decl))
7222 && init)
7223 {
7224 walk_tree (&init, notice_forced_label_r, NULL, NULL);
7225 add_local_decl (cfun, decl);
7226 }
7227 /* And make sure it's in the symbol table for
7228 c_parse_final_cleanups to find. */
7229 varpool_node::get_create (decl);
7230 }
7231
7232 /* Convert the initializer to the type of DECL, if we have not
7233 already initialized DECL. */
7234 if (!DECL_INITIALIZED_P (decl)
7235 /* If !DECL_EXTERNAL then DECL is being defined. In the
7236 case of a static data member initialized inside the
7237 class-specifier, there can be an initializer even if DECL
7238 is *not* defined. */
7239 && (!DECL_EXTERNAL (decl) || init))
7240 {
7241 cleanups = make_tree_vector ();
7242 init = check_initializer (decl, init, flags, &cleanups);
7243
7244 /* Handle:
7245
7246 [dcl.init]
7247
7248 The memory occupied by any object of static storage
7249 duration is zero-initialized at program startup before
7250 any other initialization takes place.
7251
7252 We cannot create an appropriate initializer until after
7253 the type of DECL is finalized. If DECL_INITIAL is set,
7254 then the DECL is statically initialized, and any
7255 necessary zero-initialization has already been performed. */
7256 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7257 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7258 /*nelts=*/NULL_TREE,
7259 /*static_storage_p=*/true);
7260 /* Remember that the initialization for this variable has
7261 taken place. */
7262 DECL_INITIALIZED_P (decl) = 1;
7263 /* This declaration is the definition of this variable,
7264 unless we are initializing a static data member within
7265 the class specifier. */
7266 if (!DECL_EXTERNAL (decl))
7267 var_definition_p = true;
7268 }
7269 /* If the variable has an array type, lay out the type, even if
7270 there is no initializer. It is valid to index through the
7271 array, and we must get TYPE_ALIGN set correctly on the array
7272 type. */
7273 else if (TREE_CODE (type) == ARRAY_TYPE)
7274 layout_type (type);
7275
7276 if (TREE_STATIC (decl)
7277 && !at_function_scope_p ()
7278 && current_function_decl == NULL)
7279 /* So decl is a global variable or a static member of a
7280 non local class. Record the types it uses
7281 so that we can decide later to emit debug info for them. */
7282 record_types_used_by_current_var_decl (decl);
7283 }
7284
7285 /* Add this declaration to the statement-tree. This needs to happen
7286 after the call to check_initializer so that the DECL_EXPR for a
7287 reference temp is added before the DECL_EXPR for the reference itself. */
7288 if (DECL_FUNCTION_SCOPE_P (decl))
7289 {
7290 /* If we're building a variable sized type, and we might be
7291 reachable other than via the top of the current binding
7292 level, then create a new BIND_EXPR so that we deallocate
7293 the object at the right time. */
7294 if (VAR_P (decl)
7295 && DECL_SIZE (decl)
7296 && !TREE_CONSTANT (DECL_SIZE (decl))
7297 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7298 {
7299 tree bind;
7300 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7301 TREE_SIDE_EFFECTS (bind) = 1;
7302 add_stmt (bind);
7303 BIND_EXPR_BODY (bind) = push_stmt_list ();
7304 }
7305 add_decl_expr (decl);
7306 }
7307
7308 /* Let the middle end know about variables and functions -- but not
7309 static data members in uninstantiated class templates. */
7310 if (VAR_OR_FUNCTION_DECL_P (decl))
7311 {
7312 if (VAR_P (decl))
7313 {
7314 layout_var_decl (decl);
7315 maybe_commonize_var (decl);
7316 }
7317
7318 /* This needs to happen after the linkage is set. */
7319 determine_visibility (decl);
7320
7321 if (var_definition_p && TREE_STATIC (decl))
7322 {
7323 /* If a TREE_READONLY variable needs initialization
7324 at runtime, it is no longer readonly and we need to
7325 avoid MEM_READONLY_P being set on RTL created for it. */
7326 if (init)
7327 {
7328 if (TREE_READONLY (decl))
7329 TREE_READONLY (decl) = 0;
7330 was_readonly = 0;
7331 }
7332 else if (was_readonly)
7333 TREE_READONLY (decl) = 1;
7334
7335 /* Likewise if it needs destruction. */
7336 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7337 TREE_READONLY (decl) = 0;
7338 }
7339
7340 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7341
7342 /* Check for abstractness of the type. Notice that there is no
7343 need to strip array types here since the check for those types
7344 is already done within create_array_type_for_decl. */
7345 abstract_virtuals_error (decl, type);
7346
7347 if (TREE_TYPE (decl) == error_mark_node)
7348 /* No initialization required. */
7349 ;
7350 else if (TREE_CODE (decl) == FUNCTION_DECL)
7351 {
7352 if (init)
7353 {
7354 if (init == ridpointers[(int)RID_DEFAULT])
7355 {
7356 /* An out-of-class default definition is defined at
7357 the point where it is explicitly defaulted. */
7358 if (DECL_DELETED_FN (decl))
7359 maybe_explain_implicit_delete (decl);
7360 else if (DECL_INITIAL (decl) == error_mark_node)
7361 synthesize_method (decl);
7362 }
7363 else
7364 error_at (cp_expr_loc_or_loc (init,
7365 DECL_SOURCE_LOCATION (decl)),
7366 "function %q#D is initialized like a variable",
7367 decl);
7368 }
7369 /* else no initialization required. */
7370 }
7371 else if (DECL_EXTERNAL (decl)
7372 && ! (DECL_LANG_SPECIFIC (decl)
7373 && DECL_NOT_REALLY_EXTERN (decl)))
7374 {
7375 /* check_initializer will have done any constant initialization. */
7376 }
7377 /* A variable definition. */
7378 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7379 /* Initialize the local variable. */
7380 initialize_local_var (decl, init);
7381
7382 /* If a variable is defined, and then a subsequent
7383 definition with external linkage is encountered, we will
7384 get here twice for the same variable. We want to avoid
7385 calling expand_static_init more than once. For variables
7386 that are not static data members, we can call
7387 expand_static_init only when we actually process the
7388 initializer. It is not legal to redeclare a static data
7389 member, so this issue does not arise in that case. */
7390 else if (var_definition_p && TREE_STATIC (decl))
7391 expand_static_init (decl, init);
7392 }
7393
7394 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7395 reference, insert it in the statement-tree now. */
7396 if (cleanups)
7397 {
7398 unsigned i; tree t;
7399 FOR_EACH_VEC_ELT (*cleanups, i, t)
7400 push_cleanup (decl, t, false);
7401 release_tree_vector (cleanups);
7402 }
7403
7404 if (was_readonly)
7405 TREE_READONLY (decl) = 1;
7406
7407 if (flag_openmp
7408 && VAR_P (decl)
7409 && lookup_attribute ("omp declare target implicit",
7410 DECL_ATTRIBUTES (decl)))
7411 {
7412 DECL_ATTRIBUTES (decl)
7413 = remove_attribute ("omp declare target implicit",
7414 DECL_ATTRIBUTES (decl));
7415 complete_type (TREE_TYPE (decl));
7416 if (!cp_omp_mappable_type (TREE_TYPE (decl)))
7417 error ("%q+D in declare target directive does not have mappable type",
7418 decl);
7419 else if (!lookup_attribute ("omp declare target",
7420 DECL_ATTRIBUTES (decl))
7421 && !lookup_attribute ("omp declare target link",
7422 DECL_ATTRIBUTES (decl)))
7423 DECL_ATTRIBUTES (decl)
7424 = tree_cons (get_identifier ("omp declare target"),
7425 NULL_TREE, DECL_ATTRIBUTES (decl));
7426 }
7427
7428 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7429 }
7430
7431 /* For class TYPE return itself or some its bases that contain
7432 any direct non-static data members. Return error_mark_node if an
7433 error has been diagnosed. */
7434
7435 static tree
7436 find_decomp_class_base (location_t loc, tree type, tree ret)
7437 {
7438 bool member_seen = false;
7439 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7440 if (TREE_CODE (field) != FIELD_DECL
7441 || DECL_ARTIFICIAL (field)
7442 || DECL_UNNAMED_BIT_FIELD (field))
7443 continue;
7444 else if (ret)
7445 return type;
7446 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7447 {
7448 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7449 error_at (loc, "cannot decompose class type %qT because it has an "
7450 "anonymous struct member", type);
7451 else
7452 error_at (loc, "cannot decompose class type %qT because it has an "
7453 "anonymous union member", type);
7454 inform (DECL_SOURCE_LOCATION (field), "declared here");
7455 return error_mark_node;
7456 }
7457 else if (!accessible_p (type, field, true))
7458 {
7459 error_at (loc, "cannot decompose inaccessible member %qD of %qT",
7460 field, type);
7461 inform (DECL_SOURCE_LOCATION (field),
7462 TREE_PRIVATE (field)
7463 ? G_("declared private here")
7464 : G_("declared protected here"));
7465 return error_mark_node;
7466 }
7467 else
7468 member_seen = true;
7469
7470 tree base_binfo, binfo;
7471 tree orig_ret = ret;
7472 int i;
7473 if (member_seen)
7474 ret = type;
7475 for (binfo = TYPE_BINFO (type), i = 0;
7476 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7477 {
7478 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7479 if (t == error_mark_node)
7480 return error_mark_node;
7481 if (t != NULL_TREE && t != ret)
7482 {
7483 if (ret == type)
7484 {
7485 error_at (loc, "cannot decompose class type %qT: both it and "
7486 "its base class %qT have non-static data members",
7487 type, t);
7488 return error_mark_node;
7489 }
7490 else if (orig_ret != NULL_TREE)
7491 return t;
7492 else if (ret != NULL_TREE)
7493 {
7494 error_at (loc, "cannot decompose class type %qT: its base "
7495 "classes %qT and %qT have non-static data "
7496 "members", type, ret, t);
7497 return error_mark_node;
7498 }
7499 else
7500 ret = t;
7501 }
7502 }
7503 return ret;
7504 }
7505
7506 /* Return std::tuple_size<TYPE>::value. */
7507
7508 static tree
7509 get_tuple_size (tree type)
7510 {
7511 tree args = make_tree_vec (1);
7512 TREE_VEC_ELT (args, 0) = type;
7513 tree inst = lookup_template_class (tuple_size_identifier, args,
7514 /*in_decl*/NULL_TREE,
7515 /*context*/std_node,
7516 /*entering_scope*/false, tf_none);
7517 inst = complete_type (inst);
7518 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7519 return NULL_TREE;
7520 tree val = lookup_qualified_name (inst, value_identifier,
7521 /*type*/false, /*complain*/false);
7522 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7523 val = maybe_constant_value (val);
7524 if (TREE_CODE (val) == INTEGER_CST)
7525 return val;
7526 else
7527 return error_mark_node;
7528 }
7529
7530 /* Return std::tuple_element<I,TYPE>::type. */
7531
7532 static tree
7533 get_tuple_element_type (tree type, unsigned i)
7534 {
7535 tree args = make_tree_vec (2);
7536 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7537 TREE_VEC_ELT (args, 1) = type;
7538 tree inst = lookup_template_class (tuple_element_identifier, args,
7539 /*in_decl*/NULL_TREE,
7540 /*context*/std_node,
7541 /*entering_scope*/false,
7542 tf_warning_or_error);
7543 return make_typename_type (inst, type_identifier,
7544 none_type, tf_warning_or_error);
7545 }
7546
7547 /* Return e.get<i>() or get<i>(e). */
7548
7549 static tree
7550 get_tuple_decomp_init (tree decl, unsigned i)
7551 {
7552 tree targs = make_tree_vec (1);
7553 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7554
7555 tree etype = TREE_TYPE (decl);
7556 tree e = convert_from_reference (decl);
7557
7558 /* [The id-expression] e is an lvalue if the type of the entity e is an
7559 lvalue reference and an xvalue otherwise. */
7560 if (!TYPE_REF_P (etype)
7561 || TYPE_REF_IS_RVALUE (etype))
7562 e = move (e);
7563
7564 tree fns = lookup_qualified_name (TREE_TYPE (e), get__identifier,
7565 /*type*/false, /*complain*/false);
7566 bool use_member_get = false;
7567
7568 /* To use a member get, member lookup must find at least one
7569 declaration that is a function template
7570 whose first template parameter is a non-type parameter. */
7571 for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
7572 {
7573 tree fn = *iter;
7574 if (TREE_CODE (fn) == TEMPLATE_DECL)
7575 {
7576 tree tparms = DECL_TEMPLATE_PARMS (fn);
7577 tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
7578 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
7579 {
7580 use_member_get = true;
7581 break;
7582 }
7583 }
7584 }
7585
7586 if (use_member_get)
7587 {
7588 fns = lookup_template_function (fns, targs);
7589 return build_new_method_call (e, fns, /*args*/NULL,
7590 /*path*/NULL_TREE, LOOKUP_NORMAL,
7591 /*fn_p*/NULL, tf_warning_or_error);
7592 }
7593 else
7594 {
7595 releasing_vec args (make_tree_vector_single (e));
7596 fns = lookup_template_function (get__identifier, targs);
7597 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7598 return finish_call_expr (fns, &args, /*novirt*/false,
7599 /*koenig*/true, tf_warning_or_error);
7600 }
7601 }
7602
7603 /* It's impossible to recover the decltype of a tuple decomposition variable
7604 based on the actual type of the variable, so store it in a hash table. */
7605
7606 static GTY((cache)) tree_cache_map *decomp_type_table;
7607 static void
7608 store_decomp_type (tree v, tree t)
7609 {
7610 if (!decomp_type_table)
7611 decomp_type_table = tree_cache_map::create_ggc (13);
7612 decomp_type_table->put (v, t);
7613 }
7614
7615 tree
7616 lookup_decomp_type (tree v)
7617 {
7618 return *decomp_type_table->get (v);
7619 }
7620
7621 /* Mangle a decomposition declaration if needed. Arguments like
7622 in cp_finish_decomp. */
7623
7624 void
7625 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7626 {
7627 if (!processing_template_decl
7628 && !error_operand_p (decl)
7629 && TREE_STATIC (decl))
7630 {
7631 auto_vec<tree, 16> v;
7632 v.safe_grow (count);
7633 tree d = first;
7634 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7635 v[count - i - 1] = d;
7636 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7637 maybe_apply_pragma_weak (decl);
7638 }
7639 }
7640
7641 /* Finish a decomposition declaration. DECL is the underlying declaration
7642 "e", FIRST is the head of a chain of decls for the individual identifiers
7643 chained through DECL_CHAIN in reverse order and COUNT is the number of
7644 those decls. */
7645
7646 void
7647 cp_finish_decomp (tree decl, tree first, unsigned int count)
7648 {
7649 if (error_operand_p (decl))
7650 {
7651 error_out:
7652 while (count--)
7653 {
7654 TREE_TYPE (first) = error_mark_node;
7655 if (DECL_HAS_VALUE_EXPR_P (first))
7656 {
7657 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7658 DECL_HAS_VALUE_EXPR_P (first) = 0;
7659 }
7660 first = DECL_CHAIN (first);
7661 }
7662 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7663 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7664 return;
7665 }
7666
7667 location_t loc = DECL_SOURCE_LOCATION (decl);
7668 if (type_dependent_expression_p (decl)
7669 /* This happens for range for when not in templates.
7670 Still add the DECL_VALUE_EXPRs for later processing. */
7671 || (!processing_template_decl
7672 && type_uses_auto (TREE_TYPE (decl))))
7673 {
7674 for (unsigned int i = 0; i < count; i++)
7675 {
7676 if (!DECL_HAS_VALUE_EXPR_P (first))
7677 {
7678 tree v = build_nt (ARRAY_REF, decl,
7679 size_int (count - i - 1),
7680 NULL_TREE, NULL_TREE);
7681 SET_DECL_VALUE_EXPR (first, v);
7682 DECL_HAS_VALUE_EXPR_P (first) = 1;
7683 }
7684 if (processing_template_decl)
7685 fit_decomposition_lang_decl (first, decl);
7686 first = DECL_CHAIN (first);
7687 }
7688 return;
7689 }
7690
7691 auto_vec<tree, 16> v;
7692 v.safe_grow (count);
7693 tree d = first;
7694 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7695 {
7696 v[count - i - 1] = d;
7697 fit_decomposition_lang_decl (d, decl);
7698 }
7699
7700 tree type = TREE_TYPE (decl);
7701 tree dexp = decl;
7702
7703 if (TYPE_REF_P (type))
7704 {
7705 dexp = convert_from_reference (dexp);
7706 type = complete_type (TREE_TYPE (type));
7707 if (type == error_mark_node)
7708 goto error_out;
7709 if (!COMPLETE_TYPE_P (type))
7710 {
7711 error_at (loc, "structured binding refers to incomplete type %qT",
7712 type);
7713 goto error_out;
7714 }
7715 }
7716
7717 tree eltype = NULL_TREE;
7718 unsigned HOST_WIDE_INT eltscnt = 0;
7719 if (TREE_CODE (type) == ARRAY_TYPE)
7720 {
7721 tree nelts;
7722 nelts = array_type_nelts_top (type);
7723 if (nelts == error_mark_node)
7724 goto error_out;
7725 if (!tree_fits_uhwi_p (nelts))
7726 {
7727 error_at (loc, "cannot decompose variable length array %qT", type);
7728 goto error_out;
7729 }
7730 eltscnt = tree_to_uhwi (nelts);
7731 if (count != eltscnt)
7732 {
7733 cnt_mismatch:
7734 if (count > eltscnt)
7735 error_n (loc, count,
7736 "%u name provided for structured binding",
7737 "%u names provided for structured binding", count);
7738 else
7739 error_n (loc, count,
7740 "only %u name provided for structured binding",
7741 "only %u names provided for structured binding", count);
7742 inform_n (loc, eltscnt,
7743 "while %qT decomposes into %wu element",
7744 "while %qT decomposes into %wu elements",
7745 type, eltscnt);
7746 goto error_out;
7747 }
7748 eltype = TREE_TYPE (type);
7749 for (unsigned int i = 0; i < count; i++)
7750 {
7751 TREE_TYPE (v[i]) = eltype;
7752 layout_decl (v[i], 0);
7753 if (processing_template_decl)
7754 continue;
7755 tree t = unshare_expr (dexp);
7756 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7757 eltype, t, size_int (i), NULL_TREE,
7758 NULL_TREE);
7759 SET_DECL_VALUE_EXPR (v[i], t);
7760 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7761 }
7762 }
7763 /* 2 GNU extensions. */
7764 else if (TREE_CODE (type) == COMPLEX_TYPE)
7765 {
7766 eltscnt = 2;
7767 if (count != eltscnt)
7768 goto cnt_mismatch;
7769 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7770 for (unsigned int i = 0; i < count; i++)
7771 {
7772 TREE_TYPE (v[i]) = eltype;
7773 layout_decl (v[i], 0);
7774 if (processing_template_decl)
7775 continue;
7776 tree t = unshare_expr (dexp);
7777 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7778 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7779 t);
7780 SET_DECL_VALUE_EXPR (v[i], t);
7781 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7782 }
7783 }
7784 else if (TREE_CODE (type) == VECTOR_TYPE)
7785 {
7786 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7787 {
7788 error_at (loc, "cannot decompose variable length vector %qT", type);
7789 goto error_out;
7790 }
7791 if (count != eltscnt)
7792 goto cnt_mismatch;
7793 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7794 for (unsigned int i = 0; i < count; i++)
7795 {
7796 TREE_TYPE (v[i]) = eltype;
7797 layout_decl (v[i], 0);
7798 if (processing_template_decl)
7799 continue;
7800 tree t = unshare_expr (dexp);
7801 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7802 &t, size_int (i));
7803 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7804 eltype, t, size_int (i), NULL_TREE,
7805 NULL_TREE);
7806 SET_DECL_VALUE_EXPR (v[i], t);
7807 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7808 }
7809 }
7810 else if (tree tsize = get_tuple_size (type))
7811 {
7812 if (tsize == error_mark_node)
7813 {
7814 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7815 "constant expression", type);
7816 goto error_out;
7817 }
7818 if (!tree_fits_uhwi_p (tsize))
7819 {
7820 error_n (loc, count,
7821 "%u name provided for structured binding",
7822 "%u names provided for structured binding", count);
7823 inform (loc, "while %qT decomposes into %E elements",
7824 type, tsize);
7825 goto error_out;
7826 }
7827 eltscnt = tree_to_uhwi (tsize);
7828 if (count != eltscnt)
7829 goto cnt_mismatch;
7830 int save_read = DECL_READ_P (decl);
7831 for (unsigned i = 0; i < count; ++i)
7832 {
7833 location_t sloc = input_location;
7834 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7835
7836 input_location = dloc;
7837 tree init = get_tuple_decomp_init (decl, i);
7838 tree eltype = (init == error_mark_node ? error_mark_node
7839 : get_tuple_element_type (type, i));
7840 input_location = sloc;
7841
7842 if (init == error_mark_node || eltype == error_mark_node)
7843 {
7844 inform (dloc, "in initialization of structured binding "
7845 "variable %qD", v[i]);
7846 goto error_out;
7847 }
7848 /* Save the decltype away before reference collapse. */
7849 store_decomp_type (v[i], eltype);
7850 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7851 TREE_TYPE (v[i]) = eltype;
7852 layout_decl (v[i], 0);
7853 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7854 {
7855 /* In this case the names are variables, not just proxies. */
7856 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7857 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7858 }
7859 if (!processing_template_decl)
7860 {
7861 TREE_PUBLIC (v[i]) = TREE_PUBLIC (decl);
7862 TREE_STATIC (v[i]) = TREE_STATIC (decl);
7863 DECL_COMMON (v[i]) = DECL_COMMON (decl);
7864 DECL_COMDAT (v[i]) = DECL_COMDAT (decl);
7865 if (TREE_STATIC (v[i]))
7866 {
7867 CP_DECL_THREAD_LOCAL_P (v[i])
7868 = CP_DECL_THREAD_LOCAL_P (decl);
7869 set_decl_tls_model (v[i], DECL_TLS_MODEL (decl));
7870 if (DECL_ONE_ONLY (decl))
7871 make_decl_one_only (v[i], cxx_comdat_group (v[i]));
7872 if (TREE_PUBLIC (decl))
7873 DECL_WEAK (v[i]) = DECL_WEAK (decl);
7874 DECL_VISIBILITY (v[i]) = DECL_VISIBILITY (decl);
7875 DECL_VISIBILITY_SPECIFIED (v[i])
7876 = DECL_VISIBILITY_SPECIFIED (decl);
7877 }
7878 cp_finish_decl (v[i], init, /*constexpr*/false,
7879 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7880 }
7881 }
7882 /* Ignore reads from the underlying decl performed during initialization
7883 of the individual variables. If those will be read, we'll mark
7884 the underlying decl as read at that point. */
7885 DECL_READ_P (decl) = save_read;
7886 }
7887 else if (TREE_CODE (type) == UNION_TYPE)
7888 {
7889 error_at (loc, "cannot decompose union type %qT", type);
7890 goto error_out;
7891 }
7892 else if (!CLASS_TYPE_P (type))
7893 {
7894 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7895 goto error_out;
7896 }
7897 else if (LAMBDA_TYPE_P (type))
7898 {
7899 error_at (loc, "cannot decompose lambda closure type %qT", type);
7900 goto error_out;
7901 }
7902 else if (processing_template_decl && !COMPLETE_TYPE_P (type))
7903 pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
7904 type);
7905 else
7906 {
7907 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7908 if (btype == error_mark_node)
7909 goto error_out;
7910 else if (btype == NULL_TREE)
7911 {
7912 error_at (loc, "cannot decompose class type %qT without non-static "
7913 "data members", type);
7914 goto error_out;
7915 }
7916 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7917 if (TREE_CODE (field) != FIELD_DECL
7918 || DECL_ARTIFICIAL (field)
7919 || DECL_UNNAMED_BIT_FIELD (field))
7920 continue;
7921 else
7922 eltscnt++;
7923 if (count != eltscnt)
7924 goto cnt_mismatch;
7925 tree t = dexp;
7926 if (type != btype)
7927 {
7928 t = convert_to_base (t, btype, /*check_access*/true,
7929 /*nonnull*/false, tf_warning_or_error);
7930 type = btype;
7931 }
7932 unsigned int i = 0;
7933 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7934 if (TREE_CODE (field) != FIELD_DECL
7935 || DECL_ARTIFICIAL (field)
7936 || DECL_UNNAMED_BIT_FIELD (field))
7937 continue;
7938 else
7939 {
7940 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7941 NULL_TREE);
7942 if (REFERENCE_REF_P (tt))
7943 tt = TREE_OPERAND (tt, 0);
7944 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7945 layout_decl (v[i], 0);
7946 if (!processing_template_decl)
7947 {
7948 SET_DECL_VALUE_EXPR (v[i], tt);
7949 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7950 }
7951 i++;
7952 }
7953 }
7954 if (processing_template_decl)
7955 {
7956 for (unsigned int i = 0; i < count; i++)
7957 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7958 {
7959 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7960 NULL_TREE, NULL_TREE);
7961 SET_DECL_VALUE_EXPR (v[i], a);
7962 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7963 }
7964 }
7965 }
7966
7967 /* Returns a declaration for a VAR_DECL as if:
7968
7969 extern "C" TYPE NAME;
7970
7971 had been seen. Used to create compiler-generated global
7972 variables. */
7973
7974 static tree
7975 declare_global_var (tree name, tree type)
7976 {
7977 tree decl;
7978
7979 push_to_top_level ();
7980 decl = build_decl (input_location, VAR_DECL, name, type);
7981 TREE_PUBLIC (decl) = 1;
7982 DECL_EXTERNAL (decl) = 1;
7983 DECL_ARTIFICIAL (decl) = 1;
7984 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7985 /* If the user has explicitly declared this variable (perhaps
7986 because the code we are compiling is part of a low-level runtime
7987 library), then it is possible that our declaration will be merged
7988 with theirs by pushdecl. */
7989 decl = pushdecl (decl);
7990 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7991 pop_from_top_level ();
7992
7993 return decl;
7994 }
7995
7996 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7997 if "__cxa_atexit" is not being used) corresponding to the function
7998 to be called when the program exits. */
7999
8000 static tree
8001 get_atexit_fn_ptr_type (void)
8002 {
8003 tree fn_type;
8004
8005 if (!atexit_fn_ptr_type_node)
8006 {
8007 tree arg_type;
8008 if (flag_use_cxa_atexit
8009 && !targetm.cxx.use_atexit_for_cxa_atexit ())
8010 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
8011 arg_type = ptr_type_node;
8012 else
8013 /* The parameter to "atexit" is "void (*)(void)". */
8014 arg_type = NULL_TREE;
8015
8016 fn_type = build_function_type_list (void_type_node,
8017 arg_type, NULL_TREE);
8018 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
8019 }
8020
8021 return atexit_fn_ptr_type_node;
8022 }
8023
8024 /* Returns a pointer to the `atexit' function. Note that if
8025 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
8026 `__cxa_atexit' function specified in the IA64 C++ ABI. */
8027
8028 static tree
8029 get_atexit_node (void)
8030 {
8031 tree atexit_fndecl;
8032 tree fn_type;
8033 tree fn_ptr_type;
8034 const char *name;
8035 bool use_aeabi_atexit;
8036
8037 if (atexit_node)
8038 return atexit_node;
8039
8040 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
8041 {
8042 /* The declaration for `__cxa_atexit' is:
8043
8044 int __cxa_atexit (void (*)(void *), void *, void *)
8045
8046 We build up the argument types and then the function type
8047 itself. */
8048 tree argtype0, argtype1, argtype2;
8049
8050 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
8051 /* First, build the pointer-to-function type for the first
8052 argument. */
8053 fn_ptr_type = get_atexit_fn_ptr_type ();
8054 /* Then, build the rest of the argument types. */
8055 argtype2 = ptr_type_node;
8056 if (use_aeabi_atexit)
8057 {
8058 argtype1 = fn_ptr_type;
8059 argtype0 = ptr_type_node;
8060 }
8061 else
8062 {
8063 argtype1 = ptr_type_node;
8064 argtype0 = fn_ptr_type;
8065 }
8066 /* And the final __cxa_atexit type. */
8067 fn_type = build_function_type_list (integer_type_node,
8068 argtype0, argtype1, argtype2,
8069 NULL_TREE);
8070 if (use_aeabi_atexit)
8071 name = "__aeabi_atexit";
8072 else
8073 name = "__cxa_atexit";
8074 }
8075 else
8076 {
8077 /* The declaration for `atexit' is:
8078
8079 int atexit (void (*)());
8080
8081 We build up the argument types and then the function type
8082 itself. */
8083 fn_ptr_type = get_atexit_fn_ptr_type ();
8084 /* Build the final atexit type. */
8085 fn_type = build_function_type_list (integer_type_node,
8086 fn_ptr_type, NULL_TREE);
8087 name = "atexit";
8088 }
8089
8090 /* Now, build the function declaration. */
8091 push_lang_context (lang_name_c);
8092 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
8093 mark_used (atexit_fndecl);
8094 pop_lang_context ();
8095 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
8096
8097 return atexit_node;
8098 }
8099
8100 /* Like get_atexit_node, but for thread-local cleanups. */
8101
8102 static tree
8103 get_thread_atexit_node (void)
8104 {
8105 /* The declaration for `__cxa_thread_atexit' is:
8106
8107 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
8108 tree fn_type = build_function_type_list (integer_type_node,
8109 get_atexit_fn_ptr_type (),
8110 ptr_type_node, ptr_type_node,
8111 NULL_TREE);
8112
8113 /* Now, build the function declaration. */
8114 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
8115 ECF_LEAF | ECF_NOTHROW);
8116 return decay_conversion (atexit_fndecl, tf_warning_or_error);
8117 }
8118
8119 /* Returns the __dso_handle VAR_DECL. */
8120
8121 static tree
8122 get_dso_handle_node (void)
8123 {
8124 if (dso_handle_node)
8125 return dso_handle_node;
8126
8127 /* Declare the variable. */
8128 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8129 ptr_type_node);
8130
8131 #ifdef HAVE_GAS_HIDDEN
8132 if (dso_handle_node != error_mark_node)
8133 {
8134 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
8135 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
8136 }
8137 #endif
8138
8139 return dso_handle_node;
8140 }
8141
8142 /* Begin a new function with internal linkage whose job will be simply
8143 to destroy some particular variable. */
8144
8145 static GTY(()) int start_cleanup_cnt;
8146
8147 static tree
8148 start_cleanup_fn (void)
8149 {
8150 char name[32];
8151 tree fntype;
8152 tree fndecl;
8153 bool use_cxa_atexit = flag_use_cxa_atexit
8154 && !targetm.cxx.use_atexit_for_cxa_atexit ();
8155
8156 push_to_top_level ();
8157
8158 /* No need to mangle this. */
8159 push_lang_context (lang_name_c);
8160
8161 /* Build the name of the function. */
8162 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
8163 /* Build the function declaration. */
8164 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
8165 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8166 /* It's a function with internal linkage, generated by the
8167 compiler. */
8168 TREE_PUBLIC (fndecl) = 0;
8169 DECL_ARTIFICIAL (fndecl) = 1;
8170 /* Make the function `inline' so that it is only emitted if it is
8171 actually needed. It is unlikely that it will be inlined, since
8172 it is only called via a function pointer, but we avoid unnecessary
8173 emissions this way. */
8174 DECL_DECLARED_INLINE_P (fndecl) = 1;
8175 DECL_INTERFACE_KNOWN (fndecl) = 1;
8176 /* Build the parameter. */
8177 if (use_cxa_atexit)
8178 {
8179 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
8180 TREE_USED (parmdecl) = 1;
8181 DECL_READ_P (parmdecl) = 1;
8182 DECL_ARGUMENTS (fndecl) = parmdecl;
8183 }
8184
8185 pushdecl (fndecl);
8186 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
8187
8188 pop_lang_context ();
8189
8190 return current_function_decl;
8191 }
8192
8193 /* Finish the cleanup function begun by start_cleanup_fn. */
8194
8195 static void
8196 end_cleanup_fn (void)
8197 {
8198 expand_or_defer_fn (finish_function (/*inline_p=*/false));
8199
8200 pop_from_top_level ();
8201 }
8202
8203 /* Generate code to handle the destruction of DECL, an object with
8204 static storage duration. */
8205
8206 tree
8207 register_dtor_fn (tree decl)
8208 {
8209 tree cleanup;
8210 tree addr;
8211 tree compound_stmt;
8212 tree fcall;
8213 tree type;
8214 bool ob_parm, dso_parm, use_dtor;
8215 tree arg0, arg1, arg2;
8216 tree atex_node;
8217
8218 type = TREE_TYPE (decl);
8219 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8220 return void_node;
8221
8222 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
8223 "__aeabi_atexit"), and DECL is a class object, we can just pass the
8224 destructor to "__cxa_atexit"; we don't have to build a temporary
8225 function to do the cleanup. */
8226 dso_parm = (flag_use_cxa_atexit
8227 && !targetm.cxx.use_atexit_for_cxa_atexit ());
8228 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
8229 use_dtor = ob_parm && CLASS_TYPE_P (type);
8230 if (use_dtor)
8231 {
8232 cleanup = get_class_binding (type, complete_dtor_identifier);
8233
8234 /* Make sure it is accessible. */
8235 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
8236 tf_warning_or_error);
8237 }
8238 else
8239 {
8240 /* Call build_cleanup before we enter the anonymous function so
8241 that any access checks will be done relative to the current
8242 scope, rather than the scope of the anonymous function. */
8243 build_cleanup (decl);
8244
8245 /* Now start the function. */
8246 cleanup = start_cleanup_fn ();
8247
8248 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8249 to the original function, rather than the anonymous one. That
8250 will make the back end think that nested functions are in use,
8251 which causes confusion. */
8252 push_deferring_access_checks (dk_no_check);
8253 fcall = build_cleanup (decl);
8254 pop_deferring_access_checks ();
8255
8256 /* Create the body of the anonymous function. */
8257 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
8258 finish_expr_stmt (fcall);
8259 finish_compound_stmt (compound_stmt);
8260 end_cleanup_fn ();
8261 }
8262
8263 /* Call atexit with the cleanup function. */
8264 mark_used (cleanup);
8265 cleanup = build_address (cleanup);
8266
8267 if (CP_DECL_THREAD_LOCAL_P (decl))
8268 atex_node = get_thread_atexit_node ();
8269 else
8270 atex_node = get_atexit_node ();
8271
8272 if (use_dtor)
8273 {
8274 /* We must convert CLEANUP to the type that "__cxa_atexit"
8275 expects. */
8276 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
8277 /* "__cxa_atexit" will pass the address of DECL to the
8278 cleanup function. */
8279 mark_used (decl);
8280 addr = build_address (decl);
8281 /* The declared type of the parameter to "__cxa_atexit" is
8282 "void *". For plain "T*", we could just let the
8283 machinery in cp_build_function_call convert it -- but if the
8284 type is "cv-qualified T *", then we need to convert it
8285 before passing it in, to avoid spurious errors. */
8286 addr = build_nop (ptr_type_node, addr);
8287 }
8288 else
8289 /* Since the cleanup functions we build ignore the address
8290 they're given, there's no reason to pass the actual address
8291 in, and, in general, it's cheaper to pass NULL than any
8292 other value. */
8293 addr = null_pointer_node;
8294
8295 if (dso_parm)
8296 arg2 = cp_build_addr_expr (get_dso_handle_node (),
8297 tf_warning_or_error);
8298 else if (ob_parm)
8299 /* Just pass NULL to the dso handle parm if we don't actually
8300 have a DSO handle on this target. */
8301 arg2 = null_pointer_node;
8302 else
8303 arg2 = NULL_TREE;
8304
8305 if (ob_parm)
8306 {
8307 if (!CP_DECL_THREAD_LOCAL_P (decl)
8308 && targetm.cxx.use_aeabi_atexit ())
8309 {
8310 arg1 = cleanup;
8311 arg0 = addr;
8312 }
8313 else
8314 {
8315 arg1 = addr;
8316 arg0 = cleanup;
8317 }
8318 }
8319 else
8320 {
8321 arg0 = cleanup;
8322 arg1 = NULL_TREE;
8323 }
8324 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8325 arg0, arg1, arg2, NULL_TREE);
8326 }
8327
8328 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8329 is its initializer. Generate code to handle the construction
8330 and destruction of DECL. */
8331
8332 static void
8333 expand_static_init (tree decl, tree init)
8334 {
8335 gcc_assert (VAR_P (decl));
8336 gcc_assert (TREE_STATIC (decl));
8337
8338 /* Some variables require no dynamic initialization. */
8339 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8340 {
8341 /* Make sure the destructor is callable. */
8342 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8343 if (!init)
8344 return;
8345 }
8346
8347 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8348 && !DECL_FUNCTION_SCOPE_P (decl))
8349 {
8350 location_t dloc = DECL_SOURCE_LOCATION (decl);
8351 if (init)
8352 error_at (dloc, "non-local variable %qD declared %<__thread%> "
8353 "needs dynamic initialization", decl);
8354 else
8355 error_at (dloc, "non-local variable %qD declared %<__thread%> "
8356 "has a non-trivial destructor", decl);
8357 static bool informed;
8358 if (!informed)
8359 {
8360 inform (dloc, "C++11 %<thread_local%> allows dynamic "
8361 "initialization and destruction");
8362 informed = true;
8363 }
8364 return;
8365 }
8366
8367 if (DECL_FUNCTION_SCOPE_P (decl))
8368 {
8369 /* Emit code to perform this initialization but once. */
8370 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8371 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8372 tree guard, guard_addr;
8373 tree flag, begin;
8374 /* We don't need thread-safety code for thread-local vars. */
8375 bool thread_guard = (flag_threadsafe_statics
8376 && !CP_DECL_THREAD_LOCAL_P (decl));
8377
8378 /* Emit code to perform this initialization but once. This code
8379 looks like:
8380
8381 static <type> guard;
8382 if (!__atomic_load (guard.first_byte)) {
8383 if (__cxa_guard_acquire (&guard)) {
8384 bool flag = false;
8385 try {
8386 // Do initialization.
8387 flag = true; __cxa_guard_release (&guard);
8388 // Register variable for destruction at end of program.
8389 } catch {
8390 if (!flag) __cxa_guard_abort (&guard);
8391 }
8392 }
8393 }
8394
8395 Note that the `flag' variable is only set to 1 *after* the
8396 initialization is complete. This ensures that an exception,
8397 thrown during the construction, will cause the variable to
8398 reinitialized when we pass through this code again, as per:
8399
8400 [stmt.dcl]
8401
8402 If the initialization exits by throwing an exception, the
8403 initialization is not complete, so it will be tried again
8404 the next time control enters the declaration.
8405
8406 This process should be thread-safe, too; multiple threads
8407 should not be able to initialize the variable more than
8408 once. */
8409
8410 /* Create the guard variable. */
8411 guard = get_guard (decl);
8412
8413 /* Begin the conditional initialization. */
8414 if_stmt = begin_if_stmt ();
8415
8416 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8417 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8418
8419 if (thread_guard)
8420 {
8421 tree vfntype = NULL_TREE;
8422 tree acquire_name, release_name, abort_name;
8423 tree acquire_fn, release_fn, abort_fn;
8424 guard_addr = build_address (guard);
8425
8426 acquire_name = get_identifier ("__cxa_guard_acquire");
8427 release_name = get_identifier ("__cxa_guard_release");
8428 abort_name = get_identifier ("__cxa_guard_abort");
8429 acquire_fn = get_global_binding (acquire_name);
8430 release_fn = get_global_binding (release_name);
8431 abort_fn = get_global_binding (abort_name);
8432 if (!acquire_fn)
8433 acquire_fn = push_library_fn
8434 (acquire_name, build_function_type_list (integer_type_node,
8435 TREE_TYPE (guard_addr),
8436 NULL_TREE),
8437 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8438 if (!release_fn || !abort_fn)
8439 vfntype = build_function_type_list (void_type_node,
8440 TREE_TYPE (guard_addr),
8441 NULL_TREE);
8442 if (!release_fn)
8443 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8444 ECF_NOTHROW | ECF_LEAF);
8445 if (!abort_fn)
8446 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8447 ECF_NOTHROW | ECF_LEAF);
8448
8449 inner_if_stmt = begin_if_stmt ();
8450 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8451 inner_if_stmt);
8452
8453 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8454 begin = get_target_expr (boolean_false_node);
8455 flag = TARGET_EXPR_SLOT (begin);
8456
8457 TARGET_EXPR_CLEANUP (begin)
8458 = build3 (COND_EXPR, void_type_node, flag,
8459 void_node,
8460 build_call_n (abort_fn, 1, guard_addr));
8461 CLEANUP_EH_ONLY (begin) = 1;
8462
8463 /* Do the initialization itself. */
8464 init = add_stmt_to_compound (begin, init);
8465 init = add_stmt_to_compound
8466 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8467 init = add_stmt_to_compound
8468 (init, build_call_n (release_fn, 1, guard_addr));
8469 }
8470 else
8471 init = add_stmt_to_compound (init, set_guard (guard));
8472
8473 /* Use atexit to register a function for destroying this static
8474 variable. */
8475 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8476
8477 finish_expr_stmt (init);
8478
8479 if (thread_guard)
8480 {
8481 finish_compound_stmt (inner_then_clause);
8482 finish_then_clause (inner_if_stmt);
8483 finish_if_stmt (inner_if_stmt);
8484 }
8485
8486 finish_compound_stmt (then_clause);
8487 finish_then_clause (if_stmt);
8488 finish_if_stmt (if_stmt);
8489 }
8490 else if (CP_DECL_THREAD_LOCAL_P (decl))
8491 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8492 else
8493 static_aggregates = tree_cons (init, decl, static_aggregates);
8494 }
8495
8496 \f
8497 /* Make TYPE a complete type based on INITIAL_VALUE.
8498 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8499 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8500 3 if the initializer list is empty (in pedantic mode). */
8501
8502 int
8503 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8504 {
8505 int failure;
8506 tree type, elt_type;
8507
8508 /* Don't get confused by a CONSTRUCTOR for some other type. */
8509 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8510 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8511 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8512 return 1;
8513
8514 if (initial_value)
8515 {
8516 unsigned HOST_WIDE_INT i;
8517 tree value;
8518
8519 /* An array of character type can be initialized from a
8520 brace-enclosed string constant.
8521
8522 FIXME: this code is duplicated from reshape_init. Probably
8523 we should just call reshape_init here? */
8524 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8525 && TREE_CODE (initial_value) == CONSTRUCTOR
8526 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8527 {
8528 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8529 tree value = (*v)[0].value;
8530 STRIP_ANY_LOCATION_WRAPPER (value);
8531
8532 if (TREE_CODE (value) == STRING_CST
8533 && v->length () == 1)
8534 initial_value = value;
8535 }
8536
8537 /* If any of the elements are parameter packs, we can't actually
8538 complete this type now because the array size is dependent. */
8539 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8540 {
8541 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8542 i, value)
8543 {
8544 if (PACK_EXPANSION_P (value))
8545 return 0;
8546 }
8547 }
8548 }
8549
8550 failure = complete_array_type (ptype, initial_value, do_default);
8551
8552 /* We can create the array before the element type is complete, which
8553 means that we didn't have these two bits set in the original type
8554 either. In completing the type, we are expected to propagate these
8555 bits. See also complete_type which does the same thing for arrays
8556 of fixed size. */
8557 type = *ptype;
8558 if (type != error_mark_node && TYPE_DOMAIN (type))
8559 {
8560 elt_type = TREE_TYPE (type);
8561 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8562 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8563 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8564 }
8565
8566 return failure;
8567 }
8568
8569 /* As above, but either give an error or reject zero-size arrays, depending
8570 on COMPLAIN. */
8571
8572 int
8573 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8574 bool do_default, tsubst_flags_t complain)
8575 {
8576 int failure;
8577 bool sfinae = !(complain & tf_error);
8578 /* In SFINAE context we can't be lenient about zero-size arrays. */
8579 if (sfinae)
8580 ++pedantic;
8581 failure = cp_complete_array_type (ptype, initial_value, do_default);
8582 if (sfinae)
8583 --pedantic;
8584 if (failure)
8585 {
8586 if (sfinae)
8587 /* Not an error. */;
8588 else if (failure == 1)
8589 error ("initializer fails to determine size of %qT", *ptype);
8590 else if (failure == 2)
8591 {
8592 if (do_default)
8593 error ("array size missing in %qT", *ptype);
8594 }
8595 else if (failure == 3)
8596 error ("zero-size array %qT", *ptype);
8597 *ptype = error_mark_node;
8598 }
8599 return failure;
8600 }
8601 \f
8602 /* Return zero if something is declared to be a member of type
8603 CTYPE when in the context of CUR_TYPE. STRING is the error
8604 message to print in that case. Otherwise, quietly return 1. */
8605
8606 static int
8607 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8608 {
8609 if (ctype && ctype != cur_type)
8610 {
8611 if (flags == DTOR_FLAG)
8612 error ("destructor for alien class %qT cannot be a member", ctype);
8613 else
8614 error ("constructor for alien class %qT cannot be a member", ctype);
8615 return 0;
8616 }
8617 return 1;
8618 }
8619 \f
8620 /* Subroutine of `grokdeclarator'. */
8621
8622 /* Generate errors possibly applicable for a given set of specifiers.
8623 This is for ARM $7.1.2. */
8624
8625 static void
8626 bad_specifiers (tree object,
8627 enum bad_spec_place type,
8628 int virtualp,
8629 int quals,
8630 int inlinep,
8631 int friendp,
8632 int raises,
8633 const location_t* locations)
8634 {
8635 switch (type)
8636 {
8637 case BSP_VAR:
8638 if (virtualp)
8639 error_at (locations[ds_virtual],
8640 "%qD declared as a %<virtual%> variable", object);
8641 if (quals)
8642 error ("%<const%> and %<volatile%> function specifiers on "
8643 "%qD invalid in variable declaration", object);
8644 break;
8645 case BSP_PARM:
8646 if (virtualp)
8647 error_at (locations[ds_virtual],
8648 "%qD declared as a %<virtual%> parameter", object);
8649 if (inlinep)
8650 error_at (locations[ds_inline],
8651 "%qD declared as an %<inline%> parameter", object);
8652 if (quals)
8653 error ("%<const%> and %<volatile%> function specifiers on "
8654 "%qD invalid in parameter declaration", object);
8655 break;
8656 case BSP_TYPE:
8657 if (virtualp)
8658 error_at (locations[ds_virtual],
8659 "%qD declared as a %<virtual%> type", object);
8660 if (inlinep)
8661 error_at (locations[ds_inline],
8662 "%qD declared as an %<inline%> type", object);
8663 if (quals)
8664 error ("%<const%> and %<volatile%> function specifiers on "
8665 "%qD invalid in type declaration", object);
8666 break;
8667 case BSP_FIELD:
8668 if (virtualp)
8669 error_at (locations[ds_virtual],
8670 "%qD declared as a %<virtual%> field", object);
8671 if (inlinep)
8672 error_at (locations[ds_inline],
8673 "%qD declared as an %<inline%> field", object);
8674 if (quals)
8675 error ("%<const%> and %<volatile%> function specifiers on "
8676 "%qD invalid in field declaration", object);
8677 break;
8678 default:
8679 gcc_unreachable();
8680 }
8681 if (friendp)
8682 error ("%q+D declared as a friend", object);
8683 if (raises
8684 && !flag_noexcept_type
8685 && (TREE_CODE (object) == TYPE_DECL
8686 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8687 && !TYPE_REFFN_P (TREE_TYPE (object))
8688 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8689 error ("%q+D declared with an exception specification", object);
8690 }
8691
8692 /* DECL is a member function or static data member and is presently
8693 being defined. Check that the definition is taking place in a
8694 valid namespace. */
8695
8696 static void
8697 check_class_member_definition_namespace (tree decl)
8698 {
8699 /* These checks only apply to member functions and static data
8700 members. */
8701 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8702 /* We check for problems with specializations in pt.c in
8703 check_specialization_namespace, where we can issue better
8704 diagnostics. */
8705 if (processing_specialization)
8706 return;
8707 /* We check this in check_explicit_instantiation_namespace. */
8708 if (processing_explicit_instantiation)
8709 return;
8710 /* [class.mfct]
8711
8712 A member function definition that appears outside of the
8713 class definition shall appear in a namespace scope enclosing
8714 the class definition.
8715
8716 [class.static.data]
8717
8718 The definition for a static data member shall appear in a
8719 namespace scope enclosing the member's class definition. */
8720 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8721 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8722 decl, DECL_CONTEXT (decl));
8723 }
8724
8725 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8726 METHOD_TYPE for a non-static member function; QUALS are the
8727 cv-qualifiers that apply to the function. */
8728
8729 tree
8730 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8731 {
8732 tree this_type;
8733 tree qual_type;
8734 tree parm;
8735 cp_cv_quals this_quals;
8736
8737 if (CLASS_TYPE_P (type))
8738 {
8739 this_type
8740 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8741 this_type = build_pointer_type (this_type);
8742 }
8743 else
8744 this_type = type_of_this_parm (type);
8745 /* The `this' parameter is implicitly `const'; it cannot be
8746 assigned to. */
8747 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8748 qual_type = cp_build_qualified_type (this_type, this_quals);
8749 parm = build_artificial_parm (fn, this_identifier, qual_type);
8750 cp_apply_type_quals_to_decl (this_quals, parm);
8751 return parm;
8752 }
8753
8754 /* DECL is a static member function. Complain if it was declared
8755 with function-cv-quals. */
8756
8757 static void
8758 check_static_quals (tree decl, cp_cv_quals quals)
8759 {
8760 if (quals != TYPE_UNQUALIFIED)
8761 error ("static member function %q#D declared with type qualifiers",
8762 decl);
8763 }
8764
8765 // Check that FN takes no arguments and returns bool.
8766 static void
8767 check_concept_fn (tree fn)
8768 {
8769 // A constraint is nullary.
8770 if (DECL_ARGUMENTS (fn))
8771 error_at (DECL_SOURCE_LOCATION (fn),
8772 "concept %q#D declared with function parameters", fn);
8773
8774 // The declared return type of the concept shall be bool, and
8775 // it shall not be deduced from it definition.
8776 tree type = TREE_TYPE (TREE_TYPE (fn));
8777 if (is_auto (type))
8778 error_at (DECL_SOURCE_LOCATION (fn),
8779 "concept %q#D declared with a deduced return type", fn);
8780 else if (type != boolean_type_node)
8781 error_at (DECL_SOURCE_LOCATION (fn),
8782 "concept %q#D with non-%<bool%> return type %qT", fn, type);
8783 }
8784
8785 /* Helper function. Replace the temporary this parameter injected
8786 during cp_finish_omp_declare_simd with the real this parameter. */
8787
8788 static tree
8789 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8790 {
8791 tree this_parm = (tree) data;
8792 if (TREE_CODE (*tp) == PARM_DECL
8793 && DECL_NAME (*tp) == this_identifier
8794 && *tp != this_parm)
8795 *tp = this_parm;
8796 else if (TYPE_P (*tp))
8797 *walk_subtrees = 0;
8798 return NULL_TREE;
8799 }
8800
8801 /* CTYPE is class type, or null if non-class.
8802 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8803 or METHOD_TYPE.
8804 DECLARATOR is the function's name.
8805 PARMS is a chain of PARM_DECLs for the function.
8806 VIRTUALP is truthvalue of whether the function is virtual or not.
8807 FLAGS are to be passed through to `grokclassfn'.
8808 QUALS are qualifiers indicating whether the function is `const'
8809 or `volatile'.
8810 RAISES is a list of exceptions that this function can raise.
8811 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8812 not look, and -1 if we should not call `grokclassfn' at all.
8813
8814 SFK is the kind of special function (if any) for the new function.
8815
8816 Returns `NULL_TREE' if something goes wrong, after issuing
8817 applicable error messages. */
8818
8819 static tree
8820 grokfndecl (tree ctype,
8821 tree type,
8822 tree declarator,
8823 tree parms,
8824 tree orig_declarator,
8825 const cp_decl_specifier_seq *declspecs,
8826 tree decl_reqs,
8827 int virtualp,
8828 enum overload_flags flags,
8829 cp_cv_quals quals,
8830 cp_ref_qualifier rqual,
8831 tree raises,
8832 int check,
8833 int friendp,
8834 int publicp,
8835 int inlinep,
8836 bool deletedp,
8837 special_function_kind sfk,
8838 bool funcdef_flag,
8839 bool late_return_type_p,
8840 int template_count,
8841 tree in_namespace,
8842 tree* attrlist,
8843 location_t location)
8844 {
8845 tree decl;
8846 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8847 tree t;
8848
8849 if (location == UNKNOWN_LOCATION)
8850 location = input_location;
8851
8852 // Was the concept specifier present?
8853 bool concept_p = inlinep & 4;
8854
8855 // Concept declarations must have a corresponding definition.
8856 if (concept_p && !funcdef_flag)
8857 {
8858 error_at (location, "concept %qD has no definition", declarator);
8859 return NULL_TREE;
8860 }
8861
8862 type = build_cp_fntype_variant (type, rqual, raises, late_return_type_p);
8863
8864 decl = build_lang_decl_loc (location, FUNCTION_DECL, declarator, type);
8865
8866 /* Set the constraints on the declaration. */
8867 if (flag_concepts)
8868 {
8869 tree tmpl_reqs = NULL_TREE;
8870 if (processing_template_decl > template_class_depth (ctype))
8871 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8872
8873 /* Adjust the required expression into a constraint. */
8874 if (decl_reqs)
8875 decl_reqs = normalize_expression (decl_reqs);
8876
8877 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8878 set_constraints (decl, ci);
8879 }
8880
8881 if (TREE_CODE (type) == METHOD_TYPE)
8882 {
8883 tree parm = build_this_parm (decl, type, quals);
8884 DECL_CHAIN (parm) = parms;
8885 parms = parm;
8886
8887 /* Allocate space to hold the vptr bit if needed. */
8888 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8889 }
8890
8891 DECL_ARGUMENTS (decl) = parms;
8892 for (t = parms; t; t = DECL_CHAIN (t))
8893 DECL_CONTEXT (t) = decl;
8894
8895 /* Propagate volatile out from type to decl. */
8896 if (TYPE_VOLATILE (type))
8897 TREE_THIS_VOLATILE (decl) = 1;
8898
8899 /* Setup decl according to sfk. */
8900 switch (sfk)
8901 {
8902 case sfk_constructor:
8903 case sfk_copy_constructor:
8904 case sfk_move_constructor:
8905 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8906 DECL_NAME (decl) = ctor_identifier;
8907 break;
8908 case sfk_destructor:
8909 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8910 DECL_NAME (decl) = dtor_identifier;
8911 break;
8912 default:
8913 break;
8914 }
8915
8916 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8917 {
8918 if (funcdef_flag)
8919 error_at (location,
8920 "defining explicit specialization %qD in friend declaration",
8921 orig_declarator);
8922 else
8923 {
8924 tree fns = TREE_OPERAND (orig_declarator, 0);
8925 tree args = TREE_OPERAND (orig_declarator, 1);
8926
8927 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8928 {
8929 /* Something like `template <class T> friend void f<T>()'. */
8930 error_at (location,
8931 "invalid use of template-id %qD in declaration "
8932 "of primary template",
8933 orig_declarator);
8934 return NULL_TREE;
8935 }
8936
8937
8938 /* A friend declaration of the form friend void f<>(). Record
8939 the information in the TEMPLATE_ID_EXPR. */
8940 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8941
8942 gcc_assert (identifier_p (fns) || OVL_P (fns));
8943 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8944
8945 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8946 if (TREE_PURPOSE (t)
8947 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8948 {
8949 error_at (defarg_location (TREE_PURPOSE (t)),
8950 "default arguments are not allowed in declaration "
8951 "of friend template specialization %qD",
8952 decl);
8953 return NULL_TREE;
8954 }
8955
8956 if (inlinep & 1)
8957 {
8958 error_at (declspecs->locations[ds_inline],
8959 "%<inline%> is not allowed in declaration of friend "
8960 "template specialization %qD",
8961 decl);
8962 return NULL_TREE;
8963 }
8964 }
8965 }
8966
8967 /* C++17 11.3.6/4: "If a friend declaration specifies a default argument
8968 expression, that declaration shall be a definition..." */
8969 if (friendp && !funcdef_flag)
8970 {
8971 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
8972 t && t != void_list_node; t = TREE_CHAIN (t))
8973 if (TREE_PURPOSE (t))
8974 {
8975 permerror (DECL_SOURCE_LOCATION (decl),
8976 "friend declaration of %qD specifies default "
8977 "arguments and isn%'t a definition", decl);
8978 break;
8979 }
8980 }
8981
8982 /* If this decl has namespace scope, set that up. */
8983 if (in_namespace)
8984 set_decl_namespace (decl, in_namespace, friendp);
8985 else if (!ctype)
8986 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8987
8988 /* `main' and builtins have implicit 'C' linkage. */
8989 if (ctype == NULL_TREE
8990 && DECL_FILE_SCOPE_P (decl)
8991 && current_lang_name == lang_name_cplusplus
8992 && (MAIN_NAME_P (declarator)
8993 || (IDENTIFIER_LENGTH (declarator) > 10
8994 && IDENTIFIER_POINTER (declarator)[0] == '_'
8995 && IDENTIFIER_POINTER (declarator)[1] == '_'
8996 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8997 "builtin_", 8) == 0)
8998 || (targetcm.cxx_implicit_extern_c
8999 && (targetcm.cxx_implicit_extern_c
9000 (IDENTIFIER_POINTER (declarator))))))
9001 SET_DECL_LANGUAGE (decl, lang_c);
9002
9003 /* Should probably propagate const out from type to decl I bet (mrs). */
9004 if (staticp)
9005 {
9006 DECL_STATIC_FUNCTION_P (decl) = 1;
9007 DECL_CONTEXT (decl) = ctype;
9008 }
9009
9010 if (deletedp)
9011 DECL_DELETED_FN (decl) = 1;
9012
9013 if (ctype)
9014 {
9015 DECL_CONTEXT (decl) = ctype;
9016 if (funcdef_flag)
9017 check_class_member_definition_namespace (decl);
9018 }
9019
9020 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9021 {
9022 if (PROCESSING_REAL_TEMPLATE_DECL_P())
9023 error_at (location, "cannot declare %<::main%> to be a template");
9024 if (inlinep & 1)
9025 error_at (declspecs->locations[ds_inline],
9026 "cannot declare %<::main%> to be inline");
9027 if (inlinep & 2)
9028 error_at (declspecs->locations[ds_constexpr],
9029 "cannot declare %<::main%> to be %<constexpr%>");
9030 if (!publicp)
9031 error_at (location, "cannot declare %<::main%> to be static");
9032 inlinep = 0;
9033 publicp = 1;
9034 }
9035
9036 /* Members of anonymous types and local classes have no linkage; make
9037 them internal. If a typedef is made later, this will be changed. */
9038 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
9039 || decl_function_context (TYPE_MAIN_DECL (ctype))))
9040 publicp = 0;
9041
9042 if (publicp && cxx_dialect == cxx98)
9043 {
9044 /* [basic.link]: A name with no linkage (notably, the name of a class
9045 or enumeration declared in a local scope) shall not be used to
9046 declare an entity with linkage.
9047
9048 DR 757 relaxes this restriction for C++0x. */
9049 no_linkage_error (decl);
9050 }
9051
9052 TREE_PUBLIC (decl) = publicp;
9053 if (! publicp)
9054 {
9055 DECL_INTERFACE_KNOWN (decl) = 1;
9056 DECL_NOT_REALLY_EXTERN (decl) = 1;
9057 }
9058
9059 /* If the declaration was declared inline, mark it as such. */
9060 if (inlinep)
9061 {
9062 DECL_DECLARED_INLINE_P (decl) = 1;
9063 if (publicp)
9064 DECL_COMDAT (decl) = 1;
9065 }
9066 if (inlinep & 2)
9067 DECL_DECLARED_CONSTEXPR_P (decl) = true;
9068
9069 // If the concept declaration specifier was found, check
9070 // that the declaration satisfies the necessary requirements.
9071 if (concept_p)
9072 {
9073 DECL_DECLARED_CONCEPT_P (decl) = true;
9074 check_concept_fn (decl);
9075 }
9076
9077 DECL_EXTERNAL (decl) = 1;
9078 if (TREE_CODE (type) == FUNCTION_TYPE)
9079 {
9080 if (quals || rqual)
9081 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
9082 TYPE_UNQUALIFIED,
9083 REF_QUAL_NONE);
9084
9085 if (quals)
9086 {
9087 error (ctype
9088 ? G_("static member function %qD cannot have cv-qualifier")
9089 : G_("non-member function %qD cannot have cv-qualifier"),
9090 decl);
9091 quals = TYPE_UNQUALIFIED;
9092 }
9093
9094 if (rqual)
9095 {
9096 error (ctype
9097 ? G_("static member function %qD cannot have ref-qualifier")
9098 : G_("non-member function %qD cannot have ref-qualifier"),
9099 decl);
9100 rqual = REF_QUAL_NONE;
9101 }
9102 }
9103
9104 if (deduction_guide_p (decl))
9105 {
9106 if (!DECL_NAMESPACE_SCOPE_P (decl))
9107 {
9108 error_at (location, "deduction guide %qD must be declared at "
9109 "namespace scope", decl);
9110 return NULL_TREE;
9111 }
9112 if (funcdef_flag)
9113 error_at (location,
9114 "deduction guide %qD must not have a function body", decl);
9115 }
9116 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
9117 && !grok_op_properties (decl, /*complain=*/true))
9118 return NULL_TREE;
9119 else if (UDLIT_OPER_P (DECL_NAME (decl)))
9120 {
9121 bool long_long_unsigned_p;
9122 bool long_double_p;
9123 const char *suffix = NULL;
9124 /* [over.literal]/6: Literal operators shall not have C linkage. */
9125 if (DECL_LANGUAGE (decl) == lang_c)
9126 {
9127 error_at (location, "literal operator with C linkage");
9128 maybe_show_extern_c_location ();
9129 return NULL_TREE;
9130 }
9131
9132 if (DECL_NAMESPACE_SCOPE_P (decl))
9133 {
9134 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
9135 &long_double_p))
9136 {
9137 error_at (location, "%qD has invalid argument list", decl);
9138 return NULL_TREE;
9139 }
9140
9141 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
9142 if (long_long_unsigned_p)
9143 {
9144 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
9145 warning_at (location, 0, "integer suffix %qs"
9146 " shadowed by implementation", suffix);
9147 }
9148 else if (long_double_p)
9149 {
9150 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
9151 warning_at (location, 0, "floating-point suffix %qs"
9152 " shadowed by implementation", suffix);
9153 }
9154 /* 17.6.3.3.5 */
9155 if (suffix[0] != '_'
9156 && !in_system_header_at (location)
9157 && !current_function_decl && !(friendp && !funcdef_flag))
9158 warning_at (location, OPT_Wliteral_suffix,
9159 "literal operator suffixes not preceded by %<_%>"
9160 " are reserved for future standardization");
9161 }
9162 else
9163 {
9164 error_at (location, "%qD must be a non-member function", decl);
9165 return NULL_TREE;
9166 }
9167 }
9168
9169 if (funcdef_flag)
9170 /* Make the init_value nonzero so pushdecl knows this is not
9171 tentative. error_mark_node is replaced later with the BLOCK. */
9172 DECL_INITIAL (decl) = error_mark_node;
9173
9174 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
9175 TREE_NOTHROW (decl) = 1;
9176
9177 if (flag_openmp || flag_openmp_simd)
9178 {
9179 /* Adjust "omp declare simd" attributes. */
9180 tree ods = lookup_attribute ("omp declare simd", *attrlist);
9181 if (ods)
9182 {
9183 tree attr;
9184 for (attr = ods; attr;
9185 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
9186 {
9187 if (TREE_CODE (type) == METHOD_TYPE)
9188 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
9189 DECL_ARGUMENTS (decl), NULL);
9190 if (TREE_VALUE (attr) != NULL_TREE)
9191 {
9192 tree cl = TREE_VALUE (TREE_VALUE (attr));
9193 cl = c_omp_declare_simd_clauses_to_numbers
9194 (DECL_ARGUMENTS (decl), cl);
9195 if (cl)
9196 TREE_VALUE (TREE_VALUE (attr)) = cl;
9197 else
9198 TREE_VALUE (attr) = NULL_TREE;
9199 }
9200 }
9201 }
9202 }
9203
9204 /* Caller will do the rest of this. */
9205 if (check < 0)
9206 return decl;
9207
9208 if (ctype != NULL_TREE)
9209 grokclassfn (ctype, decl, flags);
9210
9211 /* 12.4/3 */
9212 if (cxx_dialect >= cxx11
9213 && DECL_DESTRUCTOR_P (decl)
9214 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
9215 && !processing_template_decl)
9216 deduce_noexcept_on_destructor (decl);
9217
9218 decl = check_explicit_specialization (orig_declarator, decl,
9219 template_count,
9220 2 * funcdef_flag +
9221 4 * (friendp != 0) +
9222 8 * concept_p,
9223 *attrlist);
9224 if (decl == error_mark_node)
9225 return NULL_TREE;
9226
9227 if (DECL_STATIC_FUNCTION_P (decl))
9228 check_static_quals (decl, quals);
9229
9230 if (attrlist)
9231 {
9232 cplus_decl_attributes (&decl, *attrlist, 0);
9233 *attrlist = NULL_TREE;
9234 }
9235
9236 /* Check main's type after attributes have been applied. */
9237 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9238 {
9239 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9240 integer_type_node))
9241 {
9242 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
9243 tree newtype;
9244 error_at (declspecs->locations[ds_type_spec],
9245 "%<::main%> must return %<int%>");
9246 newtype = build_function_type (integer_type_node, oldtypeargs);
9247 TREE_TYPE (decl) = newtype;
9248 }
9249 if (warn_main)
9250 check_main_parameter_types (decl);
9251 }
9252
9253 if (ctype != NULL_TREE && check)
9254 {
9255 tree old_decl = check_classfn (ctype, decl,
9256 (processing_template_decl
9257 > template_class_depth (ctype))
9258 ? current_template_parms
9259 : NULL_TREE);
9260
9261 if (old_decl == error_mark_node)
9262 return NULL_TREE;
9263
9264 if (old_decl)
9265 {
9266 tree ok;
9267 tree pushed_scope;
9268
9269 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
9270 /* Because grokfndecl is always supposed to return a
9271 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9272 here. We depend on our callers to figure out that its
9273 really a template that's being returned. */
9274 old_decl = DECL_TEMPLATE_RESULT (old_decl);
9275
9276 if (DECL_STATIC_FUNCTION_P (old_decl)
9277 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9278 {
9279 /* Remove the `this' parm added by grokclassfn. */
9280 revert_static_member_fn (decl);
9281 check_static_quals (decl, quals);
9282 }
9283 if (DECL_ARTIFICIAL (old_decl))
9284 {
9285 error ("definition of implicitly-declared %qD", old_decl);
9286 return NULL_TREE;
9287 }
9288 else if (DECL_DEFAULTED_FN (old_decl))
9289 {
9290 error ("definition of explicitly-defaulted %q+D", decl);
9291 inform (DECL_SOURCE_LOCATION (old_decl),
9292 "%q#D explicitly defaulted here", old_decl);
9293 return NULL_TREE;
9294 }
9295
9296 /* Since we've smashed OLD_DECL to its
9297 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9298 if (TREE_CODE (decl) == TEMPLATE_DECL)
9299 decl = DECL_TEMPLATE_RESULT (decl);
9300
9301 /* Attempt to merge the declarations. This can fail, in
9302 the case of some invalid specialization declarations. */
9303 pushed_scope = push_scope (ctype);
9304 ok = duplicate_decls (decl, old_decl, friendp);
9305 if (pushed_scope)
9306 pop_scope (pushed_scope);
9307 if (!ok)
9308 {
9309 error ("no %q#D member function declared in class %qT",
9310 decl, ctype);
9311 return NULL_TREE;
9312 }
9313 if (ok == error_mark_node)
9314 return NULL_TREE;
9315 return old_decl;
9316 }
9317 }
9318
9319 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9320 return NULL_TREE;
9321
9322 if (ctype == NULL_TREE || check)
9323 return decl;
9324
9325 if (virtualp)
9326 DECL_VIRTUAL_P (decl) = 1;
9327
9328 return decl;
9329 }
9330
9331 /* decl is a FUNCTION_DECL.
9332 specifiers are the parsed virt-specifiers.
9333
9334 Set flags to reflect the virt-specifiers.
9335
9336 Returns decl. */
9337
9338 static tree
9339 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
9340 {
9341 if (decl == NULL_TREE)
9342 return decl;
9343 if (specifiers & VIRT_SPEC_OVERRIDE)
9344 DECL_OVERRIDE_P (decl) = 1;
9345 if (specifiers & VIRT_SPEC_FINAL)
9346 DECL_FINAL_P (decl) = 1;
9347 return decl;
9348 }
9349
9350 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
9351 the linkage that DECL will receive in the object file. */
9352
9353 static void
9354 set_linkage_for_static_data_member (tree decl)
9355 {
9356 /* A static data member always has static storage duration and
9357 external linkage. Note that static data members are forbidden in
9358 local classes -- the only situation in which a class has
9359 non-external linkage. */
9360 TREE_PUBLIC (decl) = 1;
9361 TREE_STATIC (decl) = 1;
9362 /* For non-template classes, static data members are always put
9363 out in exactly those files where they are defined, just as
9364 with ordinary namespace-scope variables. */
9365 if (!processing_template_decl)
9366 DECL_INTERFACE_KNOWN (decl) = 1;
9367 }
9368
9369 /* Create a VAR_DECL named NAME with the indicated TYPE.
9370
9371 If SCOPE is non-NULL, it is the class type or namespace containing
9372 the variable. If SCOPE is NULL, the variable should is created in
9373 the innermost enclosing scope. */
9374
9375 static tree
9376 grokvardecl (tree type,
9377 tree name,
9378 tree orig_declarator,
9379 const cp_decl_specifier_seq *declspecs,
9380 int initialized,
9381 int type_quals,
9382 int inlinep,
9383 bool conceptp,
9384 int template_count,
9385 tree scope,
9386 location_t location)
9387 {
9388 tree decl;
9389 tree explicit_scope;
9390
9391 gcc_assert (!name || identifier_p (name));
9392
9393 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9394 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9395
9396 /* Compute the scope in which to place the variable, but remember
9397 whether or not that scope was explicitly specified by the user. */
9398 explicit_scope = scope;
9399 if (!scope)
9400 {
9401 /* An explicit "extern" specifier indicates a namespace-scope
9402 variable. */
9403 if (declspecs->storage_class == sc_extern)
9404 scope = current_decl_namespace ();
9405 else if (!at_function_scope_p ())
9406 scope = current_scope ();
9407 }
9408
9409 if (scope
9410 && (/* If the variable is a namespace-scope variable declared in a
9411 template, we need DECL_LANG_SPECIFIC. */
9412 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9413 /* Similarly for namespace-scope variables with language linkage
9414 other than C++. */
9415 || (TREE_CODE (scope) == NAMESPACE_DECL
9416 && current_lang_name != lang_name_cplusplus)
9417 /* Similarly for static data members. */
9418 || TYPE_P (scope)
9419 /* Similarly for explicit specializations. */
9420 || (orig_declarator
9421 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9422 decl = build_lang_decl_loc (location, VAR_DECL, name, type);
9423 else
9424 decl = build_decl (location, VAR_DECL, name, type);
9425
9426 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9427 set_decl_namespace (decl, explicit_scope, 0);
9428 else
9429 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9430
9431 if (declspecs->storage_class == sc_extern)
9432 {
9433 DECL_THIS_EXTERN (decl) = 1;
9434 DECL_EXTERNAL (decl) = !initialized;
9435 }
9436
9437 if (DECL_CLASS_SCOPE_P (decl))
9438 {
9439 set_linkage_for_static_data_member (decl);
9440 /* This function is only called with out-of-class definitions. */
9441 DECL_EXTERNAL (decl) = 0;
9442 check_class_member_definition_namespace (decl);
9443 }
9444 /* At top level, either `static' or no s.c. makes a definition
9445 (perhaps tentative), and absence of `static' makes it public. */
9446 else if (toplevel_bindings_p ())
9447 {
9448 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9449 && (DECL_THIS_EXTERN (decl)
9450 || ! constp
9451 || volatilep
9452 || inlinep));
9453 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9454 }
9455 /* Not at top level, only `static' makes a static definition. */
9456 else
9457 {
9458 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9459 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9460 }
9461
9462 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9463 {
9464 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9465 {
9466 CP_DECL_THREAD_LOCAL_P (decl) = true;
9467 if (!processing_template_decl)
9468 set_decl_tls_model (decl, decl_default_tls_model (decl));
9469 }
9470 if (declspecs->gnu_thread_keyword_p)
9471 SET_DECL_GNU_TLS_P (decl);
9472 }
9473
9474 /* If the type of the decl has no linkage, make sure that we'll
9475 notice that in mark_used. */
9476 if (cxx_dialect > cxx98
9477 && decl_linkage (decl) != lk_none
9478 && DECL_LANG_SPECIFIC (decl) == NULL
9479 && !DECL_EXTERN_C_P (decl)
9480 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9481 retrofit_lang_decl (decl);
9482
9483 if (TREE_PUBLIC (decl))
9484 {
9485 /* [basic.link]: A name with no linkage (notably, the name of a class
9486 or enumeration declared in a local scope) shall not be used to
9487 declare an entity with linkage.
9488
9489 DR 757 relaxes this restriction for C++0x. */
9490 if (cxx_dialect < cxx11)
9491 no_linkage_error (decl);
9492 }
9493 else
9494 DECL_INTERFACE_KNOWN (decl) = 1;
9495
9496 if (DECL_NAME (decl)
9497 && MAIN_NAME_P (DECL_NAME (decl))
9498 && scope == global_namespace)
9499 error_at (DECL_SOURCE_LOCATION (decl),
9500 "cannot declare %<::main%> to be a global variable");
9501
9502 /* Check that the variable can be safely declared as a concept.
9503 Note that this also forbids explicit specializations. */
9504 if (conceptp)
9505 {
9506 if (!processing_template_decl)
9507 {
9508 error_at (declspecs->locations[ds_concept],
9509 "a non-template variable cannot be %<concept%>");
9510 return NULL_TREE;
9511 }
9512 else
9513 DECL_DECLARED_CONCEPT_P (decl) = true;
9514 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9515 error_at (declspecs->locations[ds_type_spec],
9516 "concept must have type %<bool%>");
9517 }
9518 else if (flag_concepts
9519 && processing_template_decl > template_class_depth (scope))
9520 {
9521 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9522 tree ci = build_constraints (reqs, NULL_TREE);
9523 set_constraints (decl, ci);
9524 }
9525
9526 // Handle explicit specializations and instantiations of variable templates.
9527 if (orig_declarator)
9528 decl = check_explicit_specialization (orig_declarator, decl,
9529 template_count, conceptp * 8);
9530
9531 return decl != error_mark_node ? decl : NULL_TREE;
9532 }
9533
9534 /* Create and return a canonical pointer to member function type, for
9535 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9536
9537 tree
9538 build_ptrmemfunc_type (tree type)
9539 {
9540 tree field, fields;
9541 tree t;
9542
9543 if (type == error_mark_node)
9544 return type;
9545
9546 /* Make sure that we always have the unqualified pointer-to-member
9547 type first. */
9548 if (cp_cv_quals quals = cp_type_quals (type))
9549 {
9550 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9551 return cp_build_qualified_type (unqual, quals);
9552 }
9553
9554 /* If a canonical type already exists for this type, use it. We use
9555 this method instead of type_hash_canon, because it only does a
9556 simple equality check on the list of field members. */
9557
9558 t = TYPE_PTRMEMFUNC_TYPE (type);
9559 if (t)
9560 return t;
9561
9562 t = make_node (RECORD_TYPE);
9563
9564 /* Let the front end know this is a pointer to member function. */
9565 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9566
9567 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9568 fields = field;
9569
9570 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9571 delta_type_node);
9572 DECL_CHAIN (field) = fields;
9573 fields = field;
9574
9575 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9576
9577 /* Zap out the name so that the back end will give us the debugging
9578 information for this anonymous RECORD_TYPE. */
9579 TYPE_NAME (t) = NULL_TREE;
9580
9581 /* Cache this pointer-to-member type so that we can find it again
9582 later. */
9583 TYPE_PTRMEMFUNC_TYPE (type) = t;
9584
9585 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9586 SET_TYPE_STRUCTURAL_EQUALITY (t);
9587 else if (TYPE_CANONICAL (type) != type)
9588 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9589
9590 return t;
9591 }
9592
9593 /* Create and return a pointer to data member type. */
9594
9595 tree
9596 build_ptrmem_type (tree class_type, tree member_type)
9597 {
9598 if (TREE_CODE (member_type) == METHOD_TYPE)
9599 {
9600 cp_cv_quals quals = type_memfn_quals (member_type);
9601 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9602 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9603 return build_ptrmemfunc_type (build_pointer_type (member_type));
9604 }
9605 else
9606 {
9607 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9608 return build_offset_type (class_type, member_type);
9609 }
9610 }
9611
9612 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9613 Check to see that the definition is valid. Issue appropriate error
9614 messages. */
9615
9616 static void
9617 check_static_variable_definition (tree decl, tree type)
9618 {
9619 /* Avoid redundant diagnostics on out-of-class definitions. */
9620 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9621 ;
9622 /* Can't check yet if we don't know the type. */
9623 else if (dependent_type_p (type))
9624 ;
9625 /* If DECL is declared constexpr, we'll do the appropriate checks
9626 in check_initializer. Similarly for inline static data members. */
9627 else if (DECL_P (decl)
9628 && (DECL_DECLARED_CONSTEXPR_P (decl)
9629 || undeduced_auto_decl (decl)
9630 || DECL_VAR_DECLARED_INLINE_P (decl)))
9631 ;
9632 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9633 {
9634 if (!COMPLETE_TYPE_P (type))
9635 error_at (DECL_SOURCE_LOCATION (decl),
9636 "in-class initialization of static data member %q#D of "
9637 "incomplete type", decl);
9638 else if (literal_type_p (type))
9639 permerror (DECL_SOURCE_LOCATION (decl),
9640 "%<constexpr%> needed for in-class initialization of "
9641 "static data member %q#D of non-integral type", decl);
9642 else
9643 error_at (DECL_SOURCE_LOCATION (decl),
9644 "in-class initialization of static data member %q#D of "
9645 "non-literal type", decl);
9646 }
9647 /* Motion 10 at San Diego: If a static const integral data member is
9648 initialized with an integral constant expression, the initializer
9649 may appear either in the declaration (within the class), or in
9650 the definition, but not both. If it appears in the class, the
9651 member is a member constant. The file-scope definition is always
9652 required. */
9653 else if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9654 error_at (DECL_SOURCE_LOCATION (decl),
9655 "invalid in-class initialization of static data member "
9656 "of non-integral type %qT",
9657 type);
9658 else if (!CP_TYPE_CONST_P (type))
9659 error_at (DECL_SOURCE_LOCATION (decl),
9660 "ISO C++ forbids in-class initialization of non-const "
9661 "static member %qD",
9662 decl);
9663 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9664 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9665 "ISO C++ forbids initialization of member constant "
9666 "%qD of non-integral type %qT", decl, type);
9667 }
9668
9669 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9670 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9671 expressions out into temporary variables so that walk_tree doesn't
9672 step into them (c++/15764). */
9673
9674 static tree
9675 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9676 {
9677 hash_set<tree> *pset = (hash_set<tree> *)data;
9678 tree expr = *expr_p;
9679 if (TREE_CODE (expr) == SAVE_EXPR)
9680 {
9681 tree op = TREE_OPERAND (expr, 0);
9682 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9683 if (TREE_SIDE_EFFECTS (op))
9684 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9685 *walk_subtrees = 0;
9686 }
9687 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9688 *walk_subtrees = 0;
9689 return NULL;
9690 }
9691
9692 /* Entry point for the above. */
9693
9694 static void
9695 stabilize_vla_size (tree size)
9696 {
9697 hash_set<tree> pset;
9698 /* Break out any function calls into temporary variables. */
9699 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9700 }
9701
9702 /* Reduce a SIZEOF_EXPR to its value. */
9703
9704 tree
9705 fold_sizeof_expr (tree t)
9706 {
9707 tree r;
9708 if (SIZEOF_EXPR_TYPE_P (t))
9709 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9710 SIZEOF_EXPR, false, false);
9711 else if (TYPE_P (TREE_OPERAND (t, 0)))
9712 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9713 false, false);
9714 else
9715 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9716 false);
9717 if (r == error_mark_node)
9718 r = size_one_node;
9719 return r;
9720 }
9721
9722 /* Given the SIZE (i.e., number of elements) in an array, compute
9723 an appropriate index type for the array. If non-NULL, NAME is
9724 the name of the entity being declared. */
9725
9726 static tree
9727 compute_array_index_type_loc (location_t name_loc, tree name, tree size,
9728 tsubst_flags_t complain)
9729 {
9730 if (error_operand_p (size))
9731 return error_mark_node;
9732
9733 /* The type of the index being computed. */
9734 tree itype;
9735
9736 /* The original numeric size as seen in the source code before
9737 conversion to size_t. */
9738 tree origsize = size;
9739
9740 location_t loc = cp_expr_loc_or_loc (size, name ? name_loc : input_location);
9741
9742 if (!type_dependent_expression_p (size))
9743 {
9744 origsize = size = mark_rvalue_use (size);
9745
9746 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9747 && TREE_SIDE_EFFECTS (size))
9748 /* In C++98, we mark a non-constant array bound with a magic
9749 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9750 else
9751 {
9752 size = instantiate_non_dependent_expr_sfinae (size, complain);
9753 size = build_converted_constant_expr (size_type_node, size, complain);
9754 /* Pedantically a constant expression is required here and so
9755 __builtin_is_constant_evaluated () should fold to true if it
9756 is successfully folded into a constant. */
9757 size = maybe_constant_value (size, NULL_TREE,
9758 /*manifestly_const_eval=*/true);
9759
9760 if (!TREE_CONSTANT (size))
9761 size = origsize;
9762 }
9763
9764 if (error_operand_p (size))
9765 return error_mark_node;
9766
9767 /* The array bound must be an integer type. */
9768 tree type = TREE_TYPE (size);
9769 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9770 {
9771 if (!(complain & tf_error))
9772 return error_mark_node;
9773 if (name)
9774 error_at (loc, "size of array %qD has non-integral type %qT",
9775 name, type);
9776 else
9777 error_at (loc, "size of array has non-integral type %qT", type);
9778 size = integer_one_node;
9779 }
9780 }
9781
9782 /* A type is dependent if it is...an array type constructed from any
9783 dependent type or whose size is specified by a constant expression
9784 that is value-dependent. */
9785 /* We can only call value_dependent_expression_p on integral constant
9786 expressions; treat non-constant expressions as dependent, too. */
9787 if (processing_template_decl
9788 && (type_dependent_expression_p (size)
9789 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9790 {
9791 /* We cannot do any checking for a SIZE that isn't known to be
9792 constant. Just build the index type and mark that it requires
9793 structural equality checks. */
9794 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9795 size, size_one_node));
9796 TYPE_DEPENDENT_P (itype) = 1;
9797 TYPE_DEPENDENT_P_VALID (itype) = 1;
9798 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9799 return itype;
9800 }
9801
9802 if (TREE_CODE (size) != INTEGER_CST)
9803 {
9804 tree folded = cp_fully_fold (size);
9805 if (TREE_CODE (folded) == INTEGER_CST)
9806 {
9807 if (name)
9808 pedwarn (loc, OPT_Wpedantic, "size of array %qD is not an "
9809 "integral constant-expression", name);
9810 else
9811 pedwarn (loc, OPT_Wpedantic,
9812 "size of array is not an integral constant-expression");
9813 }
9814 /* Use the folded result for VLAs, too; it will have resolved
9815 SIZEOF_EXPR. */
9816 size = folded;
9817 }
9818
9819 /* Normally, the array-bound will be a constant. */
9820 if (TREE_CODE (size) == INTEGER_CST)
9821 {
9822 /* The size to use in diagnostics that reflects the constant
9823 size used in the source, rather than SIZE massaged above. */
9824 tree diagsize = size;
9825
9826 /* If the original size before conversion to size_t was signed
9827 and negative, convert it to ssizetype to restore the sign. */
9828 if (!TYPE_UNSIGNED (TREE_TYPE (origsize))
9829 && TREE_CODE (size) == INTEGER_CST
9830 && tree_int_cst_sign_bit (size))
9831 {
9832 diagsize = fold_convert (ssizetype, size);
9833
9834 /* Clear the overflow bit that may have been set as a result
9835 of the conversion from the sizetype of the new size to
9836 ssizetype. */
9837 TREE_OVERFLOW (diagsize) = false;
9838 }
9839
9840 /* Verify that the array has a positive number of elements
9841 and issue the appropriate diagnostic if it doesn't. */
9842 if (!valid_array_size_p (loc, diagsize, name, (complain & tf_error)))
9843 {
9844 if (!(complain & tf_error))
9845 return error_mark_node;
9846 size = integer_one_node;
9847 }
9848 /* As an extension we allow zero-sized arrays. */
9849 else if (integer_zerop (size))
9850 {
9851 if (!(complain & tf_error))
9852 /* We must fail if performing argument deduction (as
9853 indicated by the state of complain), so that
9854 another substitution can be found. */
9855 return error_mark_node;
9856 else if (in_system_header_at (input_location))
9857 /* Allow them in system headers because glibc uses them. */;
9858 else if (name)
9859 pedwarn (loc, OPT_Wpedantic,
9860 "ISO C++ forbids zero-size array %qD", name);
9861 else
9862 pedwarn (loc, OPT_Wpedantic,
9863 "ISO C++ forbids zero-size array");
9864 }
9865 }
9866 else if (TREE_CONSTANT (size)
9867 /* We don't allow VLAs at non-function scopes, or during
9868 tentative template substitution. */
9869 || !at_function_scope_p ()
9870 || !(complain & tf_error))
9871 {
9872 if (!(complain & tf_error))
9873 return error_mark_node;
9874 /* `(int) &fn' is not a valid array bound. */
9875 if (name)
9876 error_at (loc,
9877 "size of array %qD is not an integral constant-expression",
9878 name);
9879 else
9880 error_at (loc, "size of array is not an integral constant-expression");
9881 size = integer_one_node;
9882 }
9883 else if (pedantic && warn_vla != 0)
9884 {
9885 if (name)
9886 pedwarn (name_loc, OPT_Wvla,
9887 "ISO C++ forbids variable length array %qD", name);
9888 else
9889 pedwarn (input_location, OPT_Wvla,
9890 "ISO C++ forbids variable length array");
9891 }
9892 else if (warn_vla > 0)
9893 {
9894 if (name)
9895 warning_at (name_loc, OPT_Wvla,
9896 "variable length array %qD is used", name);
9897 else
9898 warning (OPT_Wvla,
9899 "variable length array is used");
9900 }
9901
9902 if (processing_template_decl && !TREE_CONSTANT (size))
9903 /* A variable sized array. */
9904 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9905 else
9906 {
9907 /* Compute the index of the largest element in the array. It is
9908 one less than the number of elements in the array. We save
9909 and restore PROCESSING_TEMPLATE_DECL so that computations in
9910 cp_build_binary_op will be appropriately folded. */
9911 {
9912 processing_template_decl_sentinel s;
9913 itype = cp_build_binary_op (input_location,
9914 MINUS_EXPR,
9915 cp_convert (ssizetype, size, complain),
9916 cp_convert (ssizetype, integer_one_node,
9917 complain),
9918 complain);
9919 itype = maybe_constant_value (itype);
9920 }
9921
9922 if (!TREE_CONSTANT (itype))
9923 {
9924 /* A variable sized array. */
9925 itype = variable_size (itype);
9926
9927 stabilize_vla_size (itype);
9928
9929 if (sanitize_flags_p (SANITIZE_VLA)
9930 && current_function_decl != NULL_TREE)
9931 {
9932 /* We have to add 1 -- in the ubsan routine we generate
9933 LE_EXPR rather than LT_EXPR. */
9934 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9935 build_one_cst (TREE_TYPE (itype)));
9936 t = ubsan_instrument_vla (input_location, t);
9937 finish_expr_stmt (t);
9938 }
9939 }
9940 /* Make sure that there was no overflow when creating to a signed
9941 index type. (For example, on a 32-bit machine, an array with
9942 size 2^32 - 1 is too big.) */
9943 else if (TREE_CODE (itype) == INTEGER_CST
9944 && TREE_OVERFLOW (itype))
9945 {
9946 if (!(complain & tf_error))
9947 return error_mark_node;
9948 error ("overflow in array dimension");
9949 TREE_OVERFLOW (itype) = 0;
9950 }
9951 }
9952
9953 /* Create and return the appropriate index type. */
9954 itype = build_index_type (itype);
9955
9956 /* If the index type were dependent, we would have returned early, so
9957 remember that it isn't. */
9958 TYPE_DEPENDENT_P (itype) = 0;
9959 TYPE_DEPENDENT_P_VALID (itype) = 1;
9960 return itype;
9961 }
9962
9963 tree
9964 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9965 {
9966 return compute_array_index_type_loc (input_location, name, size, complain);
9967 }
9968
9969 /* Returns the scope (if any) in which the entity declared by
9970 DECLARATOR will be located. If the entity was declared with an
9971 unqualified name, NULL_TREE is returned. */
9972
9973 tree
9974 get_scope_of_declarator (const cp_declarator *declarator)
9975 {
9976 while (declarator && declarator->kind != cdk_id)
9977 declarator = declarator->declarator;
9978
9979 /* If the declarator-id is a SCOPE_REF, the scope in which the
9980 declaration occurs is the first operand. */
9981 if (declarator
9982 && declarator->u.id.qualifying_scope)
9983 return declarator->u.id.qualifying_scope;
9984
9985 /* Otherwise, the declarator is not a qualified name; the entity will
9986 be declared in the current scope. */
9987 return NULL_TREE;
9988 }
9989
9990 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9991 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9992 with this type. */
9993
9994 static tree
9995 create_array_type_for_decl (tree name, tree type, tree size, location_t loc)
9996 {
9997 tree itype = NULL_TREE;
9998
9999 /* If things have already gone awry, bail now. */
10000 if (type == error_mark_node || size == error_mark_node)
10001 return error_mark_node;
10002
10003 /* 8.3.4/1: If the type of the identifier of D contains the auto
10004 type-specifier, the program is ill-formed. */
10005 if (type_uses_auto (type))
10006 {
10007 if (name)
10008 error_at (loc, "%qD declared as array of %qT", name, type);
10009 else
10010 error ("creating array of %qT", type);
10011 return error_mark_node;
10012 }
10013
10014 /* If there are some types which cannot be array elements,
10015 issue an error-message and return. */
10016 switch (TREE_CODE (type))
10017 {
10018 case VOID_TYPE:
10019 if (name)
10020 error_at (loc, "declaration of %qD as array of void", name);
10021 else
10022 error ("creating array of void");
10023 return error_mark_node;
10024
10025 case FUNCTION_TYPE:
10026 if (name)
10027 error_at (loc, "declaration of %qD as array of functions", name);
10028 else
10029 error ("creating array of functions");
10030 return error_mark_node;
10031
10032 case REFERENCE_TYPE:
10033 if (name)
10034 error_at (loc, "declaration of %qD as array of references", name);
10035 else
10036 error ("creating array of references");
10037 return error_mark_node;
10038
10039 case METHOD_TYPE:
10040 if (name)
10041 error_at (loc, "declaration of %qD as array of function members",
10042 name);
10043 else
10044 error ("creating array of function members");
10045 return error_mark_node;
10046
10047 default:
10048 break;
10049 }
10050
10051 /* [dcl.array]
10052
10053 The constant expressions that specify the bounds of the arrays
10054 can be omitted only for the first member of the sequence. */
10055 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
10056 {
10057 if (name)
10058 error_at (loc, "declaration of %qD as multidimensional array must "
10059 "have bounds for all dimensions except the first",
10060 name);
10061 else
10062 error ("multidimensional array must have bounds for all "
10063 "dimensions except the first");
10064
10065 return error_mark_node;
10066 }
10067
10068 /* Figure out the index type for the array. */
10069 if (size)
10070 itype = compute_array_index_type_loc (loc, name, size,
10071 tf_warning_or_error);
10072
10073 /* [dcl.array]
10074 T is called the array element type; this type shall not be [...] an
10075 abstract class type. */
10076 abstract_virtuals_error (name, type);
10077
10078 return build_cplus_array_type (type, itype);
10079 }
10080
10081 /* Returns the smallest location that is not UNKNOWN_LOCATION. */
10082
10083 static location_t
10084 min_location (location_t loca, location_t locb)
10085 {
10086 if (loca == UNKNOWN_LOCATION
10087 || (locb != UNKNOWN_LOCATION
10088 && linemap_location_before_p (line_table, locb, loca)))
10089 return locb;
10090 return loca;
10091 }
10092
10093 /* Returns the smallest location != UNKNOWN_LOCATION among the
10094 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
10095 and LOCATIONS[ds_restrict]. */
10096
10097 static location_t
10098 smallest_type_quals_location (int type_quals, const location_t* locations)
10099 {
10100 location_t loc = UNKNOWN_LOCATION;
10101
10102 if (type_quals & TYPE_QUAL_CONST)
10103 loc = locations[ds_const];
10104
10105 if (type_quals & TYPE_QUAL_VOLATILE)
10106 loc = min_location (loc, locations[ds_volatile]);
10107
10108 if (type_quals & TYPE_QUAL_RESTRICT)
10109 loc = min_location (loc, locations[ds_restrict]);
10110
10111 return loc;
10112 }
10113
10114 /* Returns the smallest among the latter and locations[ds_type_spec]. */
10115
10116 static location_t
10117 smallest_type_location (int type_quals, const location_t* locations)
10118 {
10119 location_t loc = smallest_type_quals_location (type_quals, locations);
10120 return min_location (loc, locations[ds_type_spec]);
10121 }
10122
10123 /* Check that it's OK to declare a function with the indicated TYPE
10124 and TYPE_QUALS. SFK indicates the kind of special function (if any)
10125 that this function is. OPTYPE is the type given in a conversion
10126 operator declaration, or the class type for a constructor/destructor.
10127 Returns the actual return type of the function; that may be different
10128 than TYPE if an error occurs, or for certain special functions. */
10129
10130 static tree
10131 check_special_function_return_type (special_function_kind sfk,
10132 tree type,
10133 tree optype,
10134 int type_quals,
10135 const location_t* locations)
10136 {
10137 switch (sfk)
10138 {
10139 case sfk_constructor:
10140 if (type)
10141 error_at (smallest_type_location (type_quals, locations),
10142 "return type specification for constructor invalid");
10143 else if (type_quals != TYPE_UNQUALIFIED)
10144 error_at (smallest_type_quals_location (type_quals, locations),
10145 "qualifiers are not allowed on constructor declaration");
10146
10147 if (targetm.cxx.cdtor_returns_this ())
10148 type = build_pointer_type (optype);
10149 else
10150 type = void_type_node;
10151 break;
10152
10153 case sfk_destructor:
10154 if (type)
10155 error_at (smallest_type_location (type_quals, locations),
10156 "return type specification for destructor invalid");
10157 else if (type_quals != TYPE_UNQUALIFIED)
10158 error_at (smallest_type_quals_location (type_quals, locations),
10159 "qualifiers are not allowed on destructor declaration");
10160
10161 /* We can't use the proper return type here because we run into
10162 problems with ambiguous bases and covariant returns. */
10163 if (targetm.cxx.cdtor_returns_this ())
10164 type = build_pointer_type (void_type_node);
10165 else
10166 type = void_type_node;
10167 break;
10168
10169 case sfk_conversion:
10170 if (type)
10171 error_at (smallest_type_location (type_quals, locations),
10172 "return type specified for %<operator %T%>", optype);
10173 else if (type_quals != TYPE_UNQUALIFIED)
10174 error_at (smallest_type_quals_location (type_quals, locations),
10175 "qualifiers are not allowed on declaration of "
10176 "%<operator %T%>", optype);
10177
10178 type = optype;
10179 break;
10180
10181 case sfk_deduction_guide:
10182 if (type)
10183 error_at (smallest_type_location (type_quals, locations),
10184 "return type specified for deduction guide");
10185 else if (type_quals != TYPE_UNQUALIFIED)
10186 error_at (smallest_type_quals_location (type_quals, locations),
10187 "qualifiers are not allowed on declaration of "
10188 "deduction guide");
10189 if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
10190 {
10191 error ("template template parameter %qT in declaration of "
10192 "deduction guide", optype);
10193 type = error_mark_node;
10194 }
10195 else
10196 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
10197 for (int i = 0; i < ds_last; ++i)
10198 if (i != ds_explicit && locations[i])
10199 error_at (locations[i],
10200 "%<decl-specifier%> in declaration of deduction guide");
10201 break;
10202
10203 default:
10204 gcc_unreachable ();
10205 }
10206
10207 return type;
10208 }
10209
10210 /* A variable or data member (whose unqualified name is IDENTIFIER)
10211 has been declared with the indicated TYPE. If the TYPE is not
10212 acceptable, issue an error message and return a type to use for
10213 error-recovery purposes. */
10214
10215 tree
10216 check_var_type (tree identifier, tree type)
10217 {
10218 if (VOID_TYPE_P (type))
10219 {
10220 if (!identifier)
10221 error ("unnamed variable or field declared void");
10222 else if (identifier_p (identifier))
10223 {
10224 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
10225 error ("variable or field %qE declared void", identifier);
10226 }
10227 else
10228 error ("variable or field declared void");
10229 type = error_mark_node;
10230 }
10231
10232 return type;
10233 }
10234
10235 /* Handle declaring DECL as an inline variable. */
10236
10237 static void
10238 mark_inline_variable (tree decl, location_t loc)
10239 {
10240 bool inlinep = true;
10241 if (! toplevel_bindings_p ())
10242 {
10243 error_at (loc, "%<inline%> specifier invalid for variable "
10244 "%qD declared at block scope", decl);
10245 inlinep = false;
10246 }
10247 else if (cxx_dialect < cxx17)
10248 pedwarn (loc, 0, "inline variables are only available "
10249 "with %<-std=c++17%> or %<-std=gnu++17%>");
10250 if (inlinep)
10251 {
10252 retrofit_lang_decl (decl);
10253 SET_DECL_VAR_DECLARED_INLINE_P (decl);
10254 }
10255 }
10256
10257
10258 /* Assign a typedef-given name to a class or enumeration type declared
10259 as anonymous at first. This was split out of grokdeclarator
10260 because it is also used in libcc1. */
10261
10262 void
10263 name_unnamed_type (tree type, tree decl)
10264 {
10265 gcc_assert (TYPE_UNNAMED_P (type));
10266
10267 /* Replace the anonymous name with the real name everywhere. */
10268 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10269 if (IDENTIFIER_ANON_P (TYPE_IDENTIFIER (t)))
10270 /* We do not rename the debug info representing the unnamed
10271 tagged type because the standard says in [dcl.typedef] that
10272 the naming applies only for linkage purposes. */
10273 /*debug_hooks->set_name (t, decl);*/
10274 TYPE_NAME (t) = decl;
10275
10276 if (TYPE_LANG_SPECIFIC (type))
10277 TYPE_WAS_UNNAMED (type) = 1;
10278
10279 /* If this is a typedef within a template class, the nested
10280 type is a (non-primary) template. The name for the
10281 template needs updating as well. */
10282 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10283 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10284 = TYPE_IDENTIFIER (type);
10285
10286 /* Adjust linkage now that we aren't unnamed anymore. */
10287 reset_type_linkage (type);
10288
10289 /* FIXME remangle member functions; member functions of a
10290 type with external linkage have external linkage. */
10291
10292 /* Check that our job is done, and that it would fail if we
10293 attempted to do it again. */
10294 gcc_assert (!TYPE_UNNAMED_P (type));
10295 }
10296
10297 /* Given declspecs and a declarator (abstract or otherwise), determine
10298 the name and type of the object declared and construct a DECL node
10299 for it.
10300
10301 DECLSPECS points to the representation of declaration-specifier
10302 sequence that precedes declarator.
10303
10304 DECL_CONTEXT says which syntactic context this declaration is in:
10305 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
10306 FUNCDEF for a function definition. Like NORMAL but a few different
10307 error messages in each case. Return value may be zero meaning
10308 this definition is too screwy to try to parse.
10309 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
10310 handle member functions (which have FIELD context).
10311 Return value may be zero meaning this definition is too screwy to
10312 try to parse.
10313 PARM for a parameter declaration (either within a function prototype
10314 or before a function body). Make a PARM_DECL, or return void_type_node.
10315 TPARM for a template parameter declaration.
10316 CATCHPARM for a parameter declaration before a catch clause.
10317 TYPENAME if for a typename (in a cast or sizeof).
10318 Don't make a DECL node; just return the ..._TYPE node.
10319 FIELD for a struct or union field; make a FIELD_DECL.
10320 BITFIELD for a field with specified width.
10321
10322 INITIALIZED is as for start_decl.
10323
10324 ATTRLIST is a pointer to the list of attributes, which may be NULL
10325 if there are none; *ATTRLIST may be modified if attributes from inside
10326 the declarator should be applied to the declaration.
10327
10328 When this function is called, scoping variables (such as
10329 CURRENT_CLASS_TYPE) should reflect the scope in which the
10330 declaration occurs, not the scope in which the new declaration will
10331 be placed. For example, on:
10332
10333 void S::f() { ... }
10334
10335 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
10336 should not be `S'.
10337
10338 Returns a DECL (if a declarator is present), a TYPE (if there is no
10339 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
10340 error occurs. */
10341
10342 tree
10343 grokdeclarator (const cp_declarator *declarator,
10344 cp_decl_specifier_seq *declspecs,
10345 enum decl_context decl_context,
10346 int initialized,
10347 tree* attrlist)
10348 {
10349 tree type = NULL_TREE;
10350 int longlong = 0;
10351 int explicit_intN = 0;
10352 int virtualp, explicitp, friendp, inlinep, staticp;
10353 int explicit_int = 0;
10354 int explicit_char = 0;
10355 int defaulted_int = 0;
10356
10357 tree typedef_decl = NULL_TREE;
10358 const char *name = NULL;
10359 tree typedef_type = NULL_TREE;
10360 /* True if this declarator is a function definition. */
10361 bool funcdef_flag = false;
10362 cp_declarator_kind innermost_code = cdk_error;
10363 int bitfield = 0;
10364 #if 0
10365 /* See the code below that used this. */
10366 tree decl_attr = NULL_TREE;
10367 #endif
10368
10369 /* Keep track of what sort of function is being processed
10370 so that we can warn about default return values, or explicit
10371 return values which do not match prescribed defaults. */
10372 special_function_kind sfk = sfk_none;
10373
10374 tree dname = NULL_TREE;
10375 tree ctor_return_type = NULL_TREE;
10376 enum overload_flags flags = NO_SPECIAL;
10377 /* cv-qualifiers that apply to the declarator, for a declaration of
10378 a member function. */
10379 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
10380 /* virt-specifiers that apply to the declarator, for a declaration of
10381 a member function. */
10382 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
10383 /* ref-qualifier that applies to the declarator, for a declaration of
10384 a member function. */
10385 cp_ref_qualifier rqual = REF_QUAL_NONE;
10386 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
10387 int type_quals = TYPE_UNQUALIFIED;
10388 tree raises = NULL_TREE;
10389 int template_count = 0;
10390 tree returned_attrs = NULL_TREE;
10391 tree parms = NULL_TREE;
10392 const cp_declarator *id_declarator;
10393 /* The unqualified name of the declarator; either an
10394 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
10395 tree unqualified_id;
10396 /* The class type, if any, in which this entity is located,
10397 or NULL_TREE if none. Note that this value may be different from
10398 the current class type; for example if an attempt is made to declare
10399 "A::f" inside "B", this value will be "A". */
10400 tree ctype = current_class_type;
10401 /* The NAMESPACE_DECL for the namespace in which this entity is
10402 located. If an unqualified name is used to declare the entity,
10403 this value will be NULL_TREE, even if the entity is located at
10404 namespace scope. */
10405 tree in_namespace = NULL_TREE;
10406 cp_storage_class storage_class;
10407 bool unsigned_p, signed_p, short_p, long_p, thread_p;
10408 bool type_was_error_mark_node = false;
10409 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10410 bool template_type_arg = false;
10411 bool template_parm_flag = false;
10412 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10413 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10414 bool late_return_type_p = false;
10415 bool array_parameter_p = false;
10416 location_t saved_loc = input_location;
10417 tree reqs = NULL_TREE;
10418
10419 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10420 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10421 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10422 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10423 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10424 explicit_intN = declspecs->explicit_intN_p;
10425 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10426
10427 // Was concept_p specified? Note that ds_concept
10428 // implies ds_constexpr!
10429 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10430 if (concept_p)
10431 constexpr_p = true;
10432
10433 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10434 type_quals |= TYPE_QUAL_CONST;
10435 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10436 type_quals |= TYPE_QUAL_VOLATILE;
10437 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10438 type_quals |= TYPE_QUAL_RESTRICT;
10439
10440 if (decl_context == FUNCDEF)
10441 funcdef_flag = true, decl_context = NORMAL;
10442 else if (decl_context == MEMFUNCDEF)
10443 funcdef_flag = true, decl_context = FIELD;
10444 else if (decl_context == BITFIELD)
10445 bitfield = 1, decl_context = FIELD;
10446 else if (decl_context == TEMPLATE_TYPE_ARG)
10447 template_type_arg = true, decl_context = TYPENAME;
10448 else if (decl_context == TPARM)
10449 template_parm_flag = true, decl_context = PARM;
10450
10451 if (initialized > 1)
10452 funcdef_flag = true;
10453
10454 location_t typespec_loc = smallest_type_location (type_quals,
10455 declspecs->locations);
10456 if (typespec_loc == UNKNOWN_LOCATION)
10457 typespec_loc = input_location;
10458
10459 /* Look inside a declarator for the name being declared
10460 and get it as a string, for an error message. */
10461 for (id_declarator = declarator;
10462 id_declarator;
10463 id_declarator = id_declarator->declarator)
10464 {
10465 if (id_declarator->kind != cdk_id)
10466 innermost_code = id_declarator->kind;
10467
10468 switch (id_declarator->kind)
10469 {
10470 case cdk_function:
10471 if (id_declarator->declarator
10472 && id_declarator->declarator->kind == cdk_id)
10473 {
10474 sfk = id_declarator->declarator->u.id.sfk;
10475 if (sfk == sfk_destructor)
10476 flags = DTOR_FLAG;
10477 }
10478 break;
10479
10480 case cdk_id:
10481 {
10482 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10483 tree decl = id_declarator->u.id.unqualified_name;
10484 if (!decl)
10485 break;
10486 if (qualifying_scope)
10487 {
10488 if (check_for_bare_parameter_packs (qualifying_scope,
10489 id_declarator->id_loc))
10490 return error_mark_node;
10491 if (at_function_scope_p ())
10492 {
10493 /* [dcl.meaning]
10494
10495 A declarator-id shall not be qualified except
10496 for ...
10497
10498 None of the cases are permitted in block
10499 scope. */
10500 if (qualifying_scope == global_namespace)
10501 error ("invalid use of qualified-name %<::%D%>",
10502 decl);
10503 else if (TYPE_P (qualifying_scope))
10504 error ("invalid use of qualified-name %<%T::%D%>",
10505 qualifying_scope, decl);
10506 else
10507 error ("invalid use of qualified-name %<%D::%D%>",
10508 qualifying_scope, decl);
10509 return error_mark_node;
10510 }
10511 else if (TYPE_P (qualifying_scope))
10512 {
10513 ctype = qualifying_scope;
10514 if (!MAYBE_CLASS_TYPE_P (ctype))
10515 {
10516 error ("%q#T is not a class or a namespace", ctype);
10517 ctype = NULL_TREE;
10518 }
10519 else if (innermost_code != cdk_function
10520 && current_class_type
10521 && !uniquely_derived_from_p (ctype,
10522 current_class_type))
10523 {
10524 error ("invalid use of qualified-name %<%T::%D%>",
10525 qualifying_scope, decl);
10526 return error_mark_node;
10527 }
10528 }
10529 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10530 in_namespace = qualifying_scope;
10531 }
10532 switch (TREE_CODE (decl))
10533 {
10534 case BIT_NOT_EXPR:
10535 {
10536 if (innermost_code != cdk_function)
10537 {
10538 error ("declaration of %qD as non-function", decl);
10539 return error_mark_node;
10540 }
10541 else if (!qualifying_scope
10542 && !(current_class_type && at_class_scope_p ()))
10543 {
10544 error ("declaration of %qD as non-member", decl);
10545 return error_mark_node;
10546 }
10547
10548 tree type = TREE_OPERAND (decl, 0);
10549 if (TYPE_P (type))
10550 type = constructor_name (type);
10551 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10552 dname = decl;
10553 }
10554 break;
10555
10556 case TEMPLATE_ID_EXPR:
10557 {
10558 tree fns = TREE_OPERAND (decl, 0);
10559
10560 dname = fns;
10561 if (!identifier_p (dname))
10562 dname = OVL_NAME (dname);
10563 }
10564 /* Fall through. */
10565
10566 case IDENTIFIER_NODE:
10567 if (identifier_p (decl))
10568 dname = decl;
10569
10570 if (IDENTIFIER_KEYWORD_P (dname))
10571 {
10572 error ("declarator-id missing; using reserved word %qD",
10573 dname);
10574 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10575 }
10576 else if (!IDENTIFIER_CONV_OP_P (dname))
10577 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10578 else
10579 {
10580 gcc_assert (flags == NO_SPECIAL);
10581 flags = TYPENAME_FLAG;
10582 sfk = sfk_conversion;
10583 tree glob = get_global_binding (dname);
10584 if (glob && TREE_CODE (glob) == TYPE_DECL)
10585 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10586 else
10587 name = "<invalid operator>";
10588 }
10589 break;
10590
10591 default:
10592 gcc_unreachable ();
10593 }
10594 break;
10595 }
10596
10597 case cdk_array:
10598 case cdk_pointer:
10599 case cdk_reference:
10600 case cdk_ptrmem:
10601 break;
10602
10603 case cdk_decomp:
10604 name = "structured binding";
10605 break;
10606
10607 case cdk_error:
10608 return error_mark_node;
10609
10610 default:
10611 gcc_unreachable ();
10612 }
10613 if (id_declarator->kind == cdk_id)
10614 break;
10615 }
10616
10617 /* [dcl.fct.edf]
10618
10619 The declarator in a function-definition shall have the form
10620 D1 ( parameter-declaration-clause) ... */
10621 if (funcdef_flag && innermost_code != cdk_function)
10622 {
10623 error_at (declarator->id_loc,
10624 "function definition does not declare parameters");
10625 return error_mark_node;
10626 }
10627
10628 if (flags == TYPENAME_FLAG
10629 && innermost_code != cdk_function
10630 && ! (ctype && !declspecs->any_specifiers_p))
10631 {
10632 error_at (declarator->id_loc,
10633 "declaration of %qD as non-function", dname);
10634 return error_mark_node;
10635 }
10636
10637 if (dname && identifier_p (dname))
10638 {
10639 if (UDLIT_OPER_P (dname)
10640 && innermost_code != cdk_function)
10641 {
10642 error_at (declarator->id_loc,
10643 "declaration of %qD as non-function", dname);
10644 return error_mark_node;
10645 }
10646
10647 if (IDENTIFIER_ANY_OP_P (dname))
10648 {
10649 if (typedef_p)
10650 {
10651 error_at (declarator->id_loc,
10652 "declaration of %qD as %<typedef%>", dname);
10653 return error_mark_node;
10654 }
10655 else if (decl_context == PARM || decl_context == CATCHPARM)
10656 {
10657 error_at (declarator->id_loc,
10658 "declaration of %qD as parameter", dname);
10659 return error_mark_node;
10660 }
10661 }
10662 }
10663
10664 /* Anything declared one level down from the top level
10665 must be one of the parameters of a function
10666 (because the body is at least two levels down). */
10667
10668 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10669 by not allowing C++ class definitions to specify their parameters
10670 with xdecls (must be spec.d in the parmlist).
10671
10672 Since we now wait to push a class scope until we are sure that
10673 we are in a legitimate method context, we must set oldcname
10674 explicitly (since current_class_name is not yet alive).
10675
10676 We also want to avoid calling this a PARM if it is in a namespace. */
10677
10678 if (decl_context == NORMAL && !toplevel_bindings_p ())
10679 {
10680 cp_binding_level *b = current_binding_level;
10681 current_binding_level = b->level_chain;
10682 if (current_binding_level != 0 && toplevel_bindings_p ())
10683 decl_context = PARM;
10684 current_binding_level = b;
10685 }
10686
10687 if (name == NULL)
10688 name = decl_context == PARM ? "parameter" : "type name";
10689
10690 if (concept_p && typedef_p)
10691 {
10692 error_at (declspecs->locations[ds_concept],
10693 "%<concept%> cannot appear in a typedef declaration");
10694 return error_mark_node;
10695 }
10696
10697 if (constexpr_p && typedef_p)
10698 {
10699 error_at (declspecs->locations[ds_constexpr],
10700 "%<constexpr%> cannot appear in a typedef declaration");
10701 return error_mark_node;
10702 }
10703
10704 /* If there were multiple types specified in the decl-specifier-seq,
10705 issue an error message. */
10706 if (declspecs->multiple_types_p)
10707 {
10708 error ("two or more data types in declaration of %qs", name);
10709 return error_mark_node;
10710 }
10711
10712 if (declspecs->conflicting_specifiers_p)
10713 {
10714 error ("conflicting specifiers in declaration of %qs", name);
10715 return error_mark_node;
10716 }
10717
10718 /* Extract the basic type from the decl-specifier-seq. */
10719 type = declspecs->type;
10720 if (type == error_mark_node)
10721 {
10722 type = NULL_TREE;
10723 type_was_error_mark_node = true;
10724 }
10725 cp_warn_deprecated_use (type);
10726 if (type && TREE_CODE (type) == TYPE_DECL)
10727 {
10728 typedef_decl = type;
10729 type = TREE_TYPE (typedef_decl);
10730 if (DECL_ARTIFICIAL (typedef_decl))
10731 cp_warn_deprecated_use (type);
10732 }
10733 /* No type at all: default to `int', and set DEFAULTED_INT
10734 because it was not a user-defined typedef. */
10735 if (type == NULL_TREE)
10736 {
10737 if (signed_p || unsigned_p || long_p || short_p)
10738 {
10739 /* These imply 'int'. */
10740 type = integer_type_node;
10741 defaulted_int = 1;
10742 }
10743 /* If we just have "complex", it is equivalent to "complex double". */
10744 else if (!longlong && !explicit_intN
10745 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10746 {
10747 type = double_type_node;
10748 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10749 "ISO C++ does not support plain %<complex%> meaning "
10750 "%<double complex%>");
10751 }
10752 }
10753 /* Gather flags. */
10754 explicit_int = declspecs->explicit_int_p;
10755 explicit_char = declspecs->explicit_char_p;
10756
10757 #if 0
10758 /* See the code below that used this. */
10759 if (typedef_decl)
10760 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10761 #endif
10762 typedef_type = type;
10763
10764 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10765 ctor_return_type = TREE_TYPE (dname);
10766 else
10767 ctor_return_type = ctype;
10768
10769 if (sfk != sfk_none)
10770 {
10771 type = check_special_function_return_type (sfk, type,
10772 ctor_return_type,
10773 type_quals,
10774 declspecs->locations);
10775 type_quals = TYPE_UNQUALIFIED;
10776 }
10777 else if (type == NULL_TREE)
10778 {
10779 int is_main;
10780
10781 explicit_int = -1;
10782
10783 /* We handle `main' specially here, because 'main () { }' is so
10784 common. With no options, it is allowed. With -Wreturn-type,
10785 it is a warning. It is only an error with -pedantic-errors. */
10786 is_main = (funcdef_flag
10787 && dname && identifier_p (dname)
10788 && MAIN_NAME_P (dname)
10789 && ctype == NULL_TREE
10790 && in_namespace == NULL_TREE
10791 && current_namespace == global_namespace);
10792
10793 if (type_was_error_mark_node)
10794 /* We've already issued an error, don't complain more. */;
10795 else if (in_system_header_at (input_location) || flag_ms_extensions)
10796 /* Allow it, sigh. */;
10797 else if (! is_main)
10798 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10799 else if (pedantic)
10800 pedwarn (input_location, OPT_Wpedantic,
10801 "ISO C++ forbids declaration of %qs with no type", name);
10802 else
10803 warning (OPT_Wreturn_type,
10804 "ISO C++ forbids declaration of %qs with no type", name);
10805
10806 if (type_was_error_mark_node && template_parm_flag)
10807 /* FIXME we should be able to propagate the error_mark_node as is
10808 for other contexts too. */
10809 type = error_mark_node;
10810 else
10811 type = integer_type_node;
10812 }
10813
10814 ctype = NULL_TREE;
10815
10816 if (explicit_intN)
10817 {
10818 if (! int_n_enabled_p[declspecs->int_n_idx])
10819 {
10820 error ("%<__int%d%> is not supported by this target",
10821 int_n_data[declspecs->int_n_idx].bitsize);
10822 explicit_intN = false;
10823 }
10824 else if (pedantic && ! in_system_header_at (input_location))
10825 pedwarn (input_location, OPT_Wpedantic,
10826 "ISO C++ does not support %<__int%d%> for %qs",
10827 int_n_data[declspecs->int_n_idx].bitsize, name);
10828 }
10829
10830 /* Now process the modifiers that were specified
10831 and check for invalid combinations. */
10832
10833 /* Long double is a special combination. */
10834 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10835 {
10836 long_p = false;
10837 type = cp_build_qualified_type (long_double_type_node,
10838 cp_type_quals (type));
10839 }
10840
10841 /* Check all other uses of type modifiers. */
10842
10843 if (unsigned_p || signed_p || long_p || short_p)
10844 {
10845 location_t loc;
10846 const char *key;
10847 if (unsigned_p)
10848 {
10849 key = "unsigned";
10850 loc = declspecs->locations[ds_unsigned];
10851 }
10852 else if (signed_p)
10853 {
10854 key = "signed";
10855 loc = declspecs->locations[ds_signed];
10856 }
10857 else if (longlong)
10858 {
10859 key = "long long";
10860 loc = declspecs->locations[ds_long_long];
10861 }
10862 else if (long_p)
10863 {
10864 key = "long";
10865 loc = declspecs->locations[ds_long];
10866 }
10867 else /* if (short_p) */
10868 {
10869 key = "short";
10870 loc = declspecs->locations[ds_short];
10871 }
10872
10873 int ok = 0;
10874
10875 if (signed_p && unsigned_p)
10876 {
10877 gcc_rich_location richloc (declspecs->locations[ds_signed]);
10878 richloc.add_range (declspecs->locations[ds_unsigned]);
10879 error_at (&richloc,
10880 "%<signed%> and %<unsigned%> specified together");
10881 }
10882 else if (long_p && short_p)
10883 {
10884 gcc_rich_location richloc (declspecs->locations[ds_long]);
10885 richloc.add_range (declspecs->locations[ds_short]);
10886 error_at (&richloc, "%<long%> and %<short%> specified together");
10887 }
10888 else if (TREE_CODE (type) != INTEGER_TYPE
10889 || type == char8_type_node
10890 || type == char16_type_node
10891 || type == char32_type_node
10892 || ((long_p || short_p)
10893 && (explicit_char || explicit_intN)))
10894 error_at (loc, "%qs specified with %qT", key, type);
10895 else if (!explicit_int && !defaulted_int
10896 && !explicit_char && !explicit_intN)
10897 {
10898 if (typedef_decl)
10899 {
10900 pedwarn (loc, OPT_Wpedantic, "%qs specified with %qT",
10901 key, type);
10902 ok = !flag_pedantic_errors;
10903 }
10904 else if (declspecs->decltype_p)
10905 error_at (loc, "%qs specified with %<decltype%>", key);
10906 else
10907 error_at (loc, "%qs specified with %<typeof%>", key);
10908 }
10909 else
10910 ok = 1;
10911
10912 /* Discard the type modifiers if they are invalid. */
10913 if (! ok)
10914 {
10915 unsigned_p = false;
10916 signed_p = false;
10917 long_p = false;
10918 short_p = false;
10919 longlong = 0;
10920 }
10921 }
10922
10923 /* Decide whether an integer type is signed or not.
10924 Optionally treat bitfields as signed by default. */
10925 if (unsigned_p
10926 /* [class.bit]
10927
10928 It is implementation-defined whether a plain (neither
10929 explicitly signed or unsigned) char, short, int, or long
10930 bit-field is signed or unsigned.
10931
10932 Naturally, we extend this to long long as well. Note that
10933 this does not include wchar_t. */
10934 || (bitfield && !flag_signed_bitfields
10935 && !signed_p
10936 /* A typedef for plain `int' without `signed' can be
10937 controlled just like plain `int', but a typedef for
10938 `signed int' cannot be so controlled. */
10939 && !(typedef_decl
10940 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10941 && TREE_CODE (type) == INTEGER_TYPE
10942 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10943 {
10944 if (explicit_intN)
10945 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10946 else if (longlong)
10947 type = long_long_unsigned_type_node;
10948 else if (long_p)
10949 type = long_unsigned_type_node;
10950 else if (short_p)
10951 type = short_unsigned_type_node;
10952 else if (type == char_type_node)
10953 type = unsigned_char_type_node;
10954 else if (typedef_decl)
10955 type = unsigned_type_for (type);
10956 else
10957 type = unsigned_type_node;
10958 }
10959 else if (signed_p && type == char_type_node)
10960 type = signed_char_type_node;
10961 else if (explicit_intN)
10962 type = int_n_trees[declspecs->int_n_idx].signed_type;
10963 else if (longlong)
10964 type = long_long_integer_type_node;
10965 else if (long_p)
10966 type = long_integer_type_node;
10967 else if (short_p)
10968 type = short_integer_type_node;
10969
10970 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10971 {
10972 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10973 error ("complex invalid for %qs", name);
10974 /* If a modifier is specified, the resulting complex is the complex
10975 form of TYPE. E.g, "complex short" is "complex short int". */
10976 else if (type == integer_type_node)
10977 type = complex_integer_type_node;
10978 else if (type == float_type_node)
10979 type = complex_float_type_node;
10980 else if (type == double_type_node)
10981 type = complex_double_type_node;
10982 else if (type == long_double_type_node)
10983 type = complex_long_double_type_node;
10984 else
10985 type = build_complex_type (type);
10986 }
10987
10988 /* If we're using the injected-class-name to form a compound type or a
10989 declaration, replace it with the underlying class so we don't get
10990 redundant typedefs in the debug output. But if we are returning the
10991 type unchanged, leave it alone so that it's available to
10992 maybe_get_template_decl_from_type_decl. */
10993 if (CLASS_TYPE_P (type)
10994 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10995 && type == TREE_TYPE (TYPE_NAME (type))
10996 && (declarator || type_quals))
10997 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10998
10999 type_quals |= cp_type_quals (type);
11000 type = cp_build_qualified_type_real
11001 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
11002 || declspecs->decltype_p)
11003 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
11004 /* We might have ignored or rejected some of the qualifiers. */
11005 type_quals = cp_type_quals (type);
11006
11007 if (cxx_dialect >= cxx17 && type && is_auto (type)
11008 && innermost_code != cdk_function
11009 && id_declarator && declarator != id_declarator)
11010 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
11011 {
11012 error_at (typespec_loc, "template placeholder type %qT must be followed "
11013 "by a simple declarator-id", type);
11014 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
11015 type = error_mark_node;
11016 }
11017
11018 staticp = 0;
11019 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
11020 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
11021 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
11022
11023 storage_class = declspecs->storage_class;
11024 if (storage_class == sc_static)
11025 staticp = 1 + (decl_context == FIELD);
11026
11027 if (virtualp)
11028 {
11029 if (staticp == 2)
11030 {
11031 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
11032 richloc.add_range (declspecs->locations[ds_storage_class]);
11033 error_at (&richloc, "member %qD cannot be declared both %<virtual%> "
11034 "and %<static%>", dname);
11035 storage_class = sc_none;
11036 staticp = 0;
11037 }
11038 if (constexpr_p && cxx_dialect < cxx2a)
11039 {
11040 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
11041 richloc.add_range (declspecs->locations[ds_constexpr]);
11042 pedwarn (&richloc, OPT_Wpedantic, "member %qD can be declared both "
11043 "%<virtual%> and %<constexpr%> only in %<-std=c++2a%> or "
11044 "%<-std=gnu++2a%>", dname);
11045 }
11046 }
11047 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
11048
11049 /* Issue errors about use of storage classes for parameters. */
11050 if (decl_context == PARM)
11051 {
11052 if (typedef_p)
11053 {
11054 error_at (declspecs->locations[ds_typedef],
11055 "typedef declaration invalid in parameter declaration");
11056 return error_mark_node;
11057 }
11058 else if (template_parm_flag && storage_class != sc_none)
11059 {
11060 error_at (min_location (declspecs->locations[ds_thread],
11061 declspecs->locations[ds_storage_class]),
11062 "storage class specified for template parameter %qs",
11063 name);
11064 return error_mark_node;
11065 }
11066 else if (storage_class == sc_static
11067 || storage_class == sc_extern
11068 || thread_p)
11069 {
11070 error_at (min_location (declspecs->locations[ds_thread],
11071 declspecs->locations[ds_storage_class]),
11072 "storage class specified for parameter %qs", name);
11073 return error_mark_node;
11074 }
11075
11076 /* Function parameters cannot be concept. */
11077 if (concept_p)
11078 error_at (declspecs->locations[ds_concept],
11079 "a parameter cannot be declared %<concept%>");
11080 /* Function parameters cannot be constexpr. If we saw one, moan
11081 and pretend it wasn't there. */
11082 else if (constexpr_p)
11083 {
11084 error_at (declspecs->locations[ds_constexpr],
11085 "a parameter cannot be declared %<constexpr%>");
11086 constexpr_p = 0;
11087 }
11088 }
11089
11090 /* Give error if `virtual' is used outside of class declaration. */
11091 if (virtualp
11092 && (current_class_name == NULL_TREE || decl_context != FIELD))
11093 {
11094 error_at (declspecs->locations[ds_virtual],
11095 "%<virtual%> outside class declaration");
11096 virtualp = 0;
11097 }
11098
11099 if (innermost_code == cdk_decomp)
11100 {
11101 location_t loc = (declarator->kind == cdk_reference
11102 ? declarator->declarator->id_loc : declarator->id_loc);
11103 if (inlinep)
11104 error_at (declspecs->locations[ds_inline],
11105 "structured binding declaration cannot be %qs", "inline");
11106 if (typedef_p)
11107 error_at (declspecs->locations[ds_typedef],
11108 "structured binding declaration cannot be %qs", "typedef");
11109 if (constexpr_p)
11110 error_at (declspecs->locations[ds_constexpr], "structured "
11111 "binding declaration cannot be %qs", "constexpr");
11112 if (thread_p && cxx_dialect < cxx2a)
11113 pedwarn (declspecs->locations[ds_thread], 0,
11114 "structured binding declaration can be %qs only in "
11115 "%<-std=c++2a%> or %<-std=gnu++2a%>",
11116 declspecs->gnu_thread_keyword_p
11117 ? "__thread" : "thread_local");
11118 if (concept_p)
11119 error_at (declspecs->locations[ds_concept],
11120 "structured binding declaration cannot be %qs", "concept");
11121 switch (storage_class)
11122 {
11123 case sc_none:
11124 break;
11125 case sc_register:
11126 error_at (loc, "structured binding declaration cannot be %qs",
11127 "register");
11128 break;
11129 case sc_static:
11130 if (cxx_dialect < cxx2a)
11131 pedwarn (loc, 0,
11132 "structured binding declaration can be %qs only in "
11133 "%<-std=c++2a%> or %<-std=gnu++2a%>", "static");
11134 break;
11135 case sc_extern:
11136 error_at (loc, "structured binding declaration cannot be %qs",
11137 "extern");
11138 break;
11139 case sc_mutable:
11140 error_at (loc, "structured binding declaration cannot be %qs",
11141 "mutable");
11142 break;
11143 case sc_auto:
11144 error_at (loc, "structured binding declaration cannot be "
11145 "C++98 %<auto%>");
11146 break;
11147 default:
11148 gcc_unreachable ();
11149 }
11150 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
11151 || TYPE_IDENTIFIER (type) != auto_identifier)
11152 {
11153 if (type != error_mark_node)
11154 {
11155 error_at (loc, "structured binding declaration cannot have "
11156 "type %qT", type);
11157 inform (loc,
11158 "type must be cv-qualified %<auto%> or reference to "
11159 "cv-qualified %<auto%>");
11160 }
11161 type = build_qualified_type (make_auto (), type_quals);
11162 declspecs->type = type;
11163 }
11164 inlinep = 0;
11165 typedef_p = 0;
11166 constexpr_p = 0;
11167 concept_p = 0;
11168 if (storage_class != sc_static)
11169 {
11170 storage_class = sc_none;
11171 declspecs->storage_class = sc_none;
11172 }
11173 }
11174
11175 /* Static anonymous unions are dealt with here. */
11176 if (staticp && decl_context == TYPENAME
11177 && declspecs->type
11178 && ANON_AGGR_TYPE_P (declspecs->type))
11179 decl_context = FIELD;
11180
11181 /* Warn about storage classes that are invalid for certain
11182 kinds of declarations (parameters, typenames, etc.). */
11183 if (thread_p
11184 && ((storage_class
11185 && storage_class != sc_extern
11186 && storage_class != sc_static)
11187 || typedef_p))
11188 {
11189 error ("multiple storage classes in declaration of %qs", name);
11190 thread_p = false;
11191 }
11192 if (decl_context != NORMAL
11193 && ((storage_class != sc_none
11194 && storage_class != sc_mutable)
11195 || thread_p))
11196 {
11197 if ((decl_context == PARM || decl_context == CATCHPARM)
11198 && (storage_class == sc_register
11199 || storage_class == sc_auto))
11200 ;
11201 else if (typedef_p)
11202 ;
11203 else if (decl_context == FIELD
11204 /* C++ allows static class elements. */
11205 && storage_class == sc_static)
11206 /* C++ also allows inlines and signed and unsigned elements,
11207 but in those cases we don't come in here. */
11208 ;
11209 else
11210 {
11211 location_t loc
11212 = min_location (declspecs->locations[ds_thread],
11213 declspecs->locations[ds_storage_class]);
11214 if (decl_context == FIELD)
11215 error_at (loc, "storage class specified for %qs", name);
11216 else if (decl_context == PARM || decl_context == CATCHPARM)
11217 error_at (loc, "storage class specified for parameter %qs", name);
11218 else
11219 error_at (loc, "storage class specified for typename");
11220 if (storage_class == sc_register
11221 || storage_class == sc_auto
11222 || storage_class == sc_extern
11223 || thread_p)
11224 storage_class = sc_none;
11225 }
11226 }
11227 else if (storage_class == sc_extern && funcdef_flag
11228 && ! toplevel_bindings_p ())
11229 error ("nested function %qs declared %<extern%>", name);
11230 else if (toplevel_bindings_p ())
11231 {
11232 if (storage_class == sc_auto)
11233 error ("top-level declaration of %qs specifies %<auto%>", name);
11234 }
11235 else if (thread_p
11236 && storage_class != sc_extern
11237 && storage_class != sc_static)
11238 {
11239 if (declspecs->gnu_thread_keyword_p)
11240 pedwarn (declspecs->locations[ds_thread],
11241 0, "function-scope %qs implicitly auto and "
11242 "declared %<__thread%>", name);
11243
11244 /* When thread_local is applied to a variable of block scope the
11245 storage-class-specifier static is implied if it does not appear
11246 explicitly. */
11247 storage_class = declspecs->storage_class = sc_static;
11248 staticp = 1;
11249 }
11250
11251 if (storage_class && friendp)
11252 {
11253 error_at (min_location (declspecs->locations[ds_thread],
11254 declspecs->locations[ds_storage_class]),
11255 "storage class specifiers invalid in friend function "
11256 "declarations");
11257 storage_class = sc_none;
11258 staticp = 0;
11259 }
11260
11261 if (!id_declarator)
11262 unqualified_id = NULL_TREE;
11263 else
11264 {
11265 unqualified_id = id_declarator->u.id.unqualified_name;
11266 switch (TREE_CODE (unqualified_id))
11267 {
11268 case BIT_NOT_EXPR:
11269 unqualified_id = TREE_OPERAND (unqualified_id, 0);
11270 if (TYPE_P (unqualified_id))
11271 unqualified_id = constructor_name (unqualified_id);
11272 break;
11273
11274 case IDENTIFIER_NODE:
11275 case TEMPLATE_ID_EXPR:
11276 break;
11277
11278 default:
11279 gcc_unreachable ();
11280 }
11281 }
11282
11283 if (declspecs->std_attributes)
11284 {
11285 location_t attr_loc = declspecs->locations[ds_std_attribute];
11286 if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
11287 inform (attr_loc, "an attribute that appertains to a type-specifier "
11288 "is ignored");
11289 }
11290
11291 /* Determine the type of the entity declared by recurring on the
11292 declarator. */
11293 for (; declarator; declarator = declarator->declarator)
11294 {
11295 const cp_declarator *inner_declarator;
11296 tree attrs;
11297
11298 if (type == error_mark_node)
11299 return error_mark_node;
11300
11301 attrs = declarator->attributes;
11302 if (attrs)
11303 {
11304 int attr_flags;
11305
11306 attr_flags = 0;
11307 if (declarator == NULL || declarator->kind == cdk_id)
11308 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
11309 if (declarator->kind == cdk_function)
11310 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
11311 if (declarator->kind == cdk_array)
11312 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
11313 returned_attrs = decl_attributes (&type,
11314 chainon (returned_attrs, attrs),
11315 attr_flags);
11316 }
11317
11318 inner_declarator = declarator->declarator;
11319
11320 /* We don't want to warn in parameter context because we don't
11321 yet know if the parse will succeed, and this might turn out
11322 to be a constructor call. */
11323 if (decl_context != PARM
11324 && decl_context != TYPENAME
11325 && !typedef_p
11326 && declarator->parenthesized != UNKNOWN_LOCATION
11327 /* If the type is class-like and the inner name used a
11328 global namespace qualifier, we need the parens.
11329 Unfortunately all we can tell is whether a qualified name
11330 was used or not. */
11331 && !(inner_declarator
11332 && inner_declarator->kind == cdk_id
11333 && inner_declarator->u.id.qualifying_scope
11334 && (MAYBE_CLASS_TYPE_P (type)
11335 || TREE_CODE (type) == ENUMERAL_TYPE)))
11336 warning_at (declarator->parenthesized, OPT_Wparentheses,
11337 "unnecessary parentheses in declaration of %qs", name);
11338 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
11339 break;
11340
11341 switch (declarator->kind)
11342 {
11343 case cdk_array:
11344 type = create_array_type_for_decl (dname, type,
11345 declarator->u.array.bounds,
11346 declarator->id_loc);
11347 if (!valid_array_size_p (input_location, type, dname))
11348 type = error_mark_node;
11349
11350 if (declarator->std_attributes)
11351 /* [dcl.array]/1:
11352
11353 The optional attribute-specifier-seq appertains to the
11354 array. */
11355 returned_attrs = chainon (returned_attrs,
11356 declarator->std_attributes);
11357 break;
11358
11359 case cdk_function:
11360 {
11361 tree arg_types;
11362 int funcdecl_p;
11363
11364 /* Declaring a function type. */
11365
11366 input_location = declspecs->locations[ds_type_spec];
11367 abstract_virtuals_error (ACU_RETURN, type);
11368 input_location = saved_loc;
11369
11370 /* Pick up type qualifiers which should be applied to `this'. */
11371 memfn_quals = declarator->u.function.qualifiers;
11372 /* Pick up virt-specifiers. */
11373 virt_specifiers = declarator->u.function.virt_specifiers;
11374 /* And ref-qualifier, too */
11375 rqual = declarator->u.function.ref_qualifier;
11376 /* And tx-qualifier. */
11377 tree tx_qual = declarator->u.function.tx_qualifier;
11378 /* Pick up the exception specifications. */
11379 raises = declarator->u.function.exception_specification;
11380 /* If the exception-specification is ill-formed, let's pretend
11381 there wasn't one. */
11382 if (raises == error_mark_node)
11383 raises = NULL_TREE;
11384
11385 if (reqs)
11386 error_at (location_of (reqs), "requires-clause on return type");
11387 reqs = declarator->u.function.requires_clause;
11388
11389 /* Say it's a definition only for the CALL_EXPR
11390 closest to the identifier. */
11391 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
11392
11393 /* Handle a late-specified return type. */
11394 tree late_return_type = declarator->u.function.late_return_type;
11395 if (funcdecl_p
11396 /* This is the case e.g. for
11397 using T = auto () -> int. */
11398 || inner_declarator == NULL)
11399 {
11400 if (tree auto_node = type_uses_auto (type))
11401 {
11402 if (!late_return_type)
11403 {
11404 if (current_class_type
11405 && LAMBDA_TYPE_P (current_class_type))
11406 /* OK for C++11 lambdas. */;
11407 else if (cxx_dialect < cxx14)
11408 {
11409 error_at (typespec_loc, "%qs function uses "
11410 "%<auto%> type specifier without "
11411 "trailing return type", name);
11412 inform (typespec_loc,
11413 "deduced return type only available "
11414 "with %<-std=c++14%> or %<-std=gnu++14%>");
11415 }
11416 else if (virtualp)
11417 {
11418 error_at (typespec_loc, "virtual function "
11419 "cannot have deduced return type");
11420 virtualp = false;
11421 }
11422 }
11423 else if (!is_auto (type) && sfk != sfk_conversion)
11424 {
11425 error_at (typespec_loc, "%qs function with trailing "
11426 "return type has %qT as its type rather "
11427 "than plain %<auto%>", name, type);
11428 return error_mark_node;
11429 }
11430 else if (is_auto (type) && AUTO_IS_DECLTYPE (type))
11431 {
11432 if (funcdecl_p)
11433 error_at (typespec_loc,
11434 "%qs function with trailing return type "
11435 "has %<decltype(auto)%> as its type "
11436 "rather than plain %<auto%>", name);
11437 else
11438 error_at (typespec_loc,
11439 "invalid use of %<decltype(auto)%>");
11440 return error_mark_node;
11441 }
11442 tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
11443 if (!tmpl)
11444 if (tree late_auto = type_uses_auto (late_return_type))
11445 tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
11446 if (tmpl && funcdecl_p)
11447 {
11448 if (!dguide_name_p (unqualified_id))
11449 {
11450 error_at (declarator->id_loc, "deduced class "
11451 "type %qD in function return type",
11452 DECL_NAME (tmpl));
11453 inform (DECL_SOURCE_LOCATION (tmpl),
11454 "%qD declared here", tmpl);
11455 return error_mark_node;
11456 }
11457 else if (!late_return_type)
11458 {
11459 error_at (declarator->id_loc, "deduction guide "
11460 "for %qT must have trailing return "
11461 "type", TREE_TYPE (tmpl));
11462 inform (DECL_SOURCE_LOCATION (tmpl),
11463 "%qD declared here", tmpl);
11464 return error_mark_node;
11465 }
11466 else if (CLASS_TYPE_P (late_return_type)
11467 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11468 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11469 == tmpl))
11470 /* OK */;
11471 else
11472 error ("trailing return type %qT of deduction guide "
11473 "is not a specialization of %qT",
11474 late_return_type, TREE_TYPE (tmpl));
11475 }
11476 }
11477 else if (late_return_type
11478 && sfk != sfk_conversion)
11479 {
11480 if (cxx_dialect < cxx11)
11481 /* Not using maybe_warn_cpp0x because this should
11482 always be an error. */
11483 error_at (typespec_loc,
11484 "trailing return type only available "
11485 "with %<-std=c++11%> or %<-std=gnu++11%>");
11486 else
11487 error_at (typespec_loc, "%qs function with trailing "
11488 "return type not declared with %<auto%> "
11489 "type specifier", name);
11490 return error_mark_node;
11491 }
11492 }
11493 type = splice_late_return_type (type, late_return_type);
11494 if (type == error_mark_node)
11495 return error_mark_node;
11496
11497 if (late_return_type)
11498 {
11499 late_return_type_p = true;
11500 type_quals = cp_type_quals (type);
11501 }
11502
11503 if (type_quals != TYPE_UNQUALIFIED)
11504 {
11505 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11506 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11507 "qualifiers ignored on function return type");
11508 /* We now know that the TYPE_QUALS don't apply to the
11509 decl, but to its return type. */
11510 type_quals = TYPE_UNQUALIFIED;
11511 }
11512
11513 /* Error about some types functions can't return. */
11514
11515 if (TREE_CODE (type) == FUNCTION_TYPE)
11516 {
11517 error_at (typespec_loc, "%qs declared as function returning "
11518 "a function", name);
11519 return error_mark_node;
11520 }
11521 if (TREE_CODE (type) == ARRAY_TYPE)
11522 {
11523 error_at (typespec_loc, "%qs declared as function returning "
11524 "an array", name);
11525 return error_mark_node;
11526 }
11527
11528 if (ctype == NULL_TREE
11529 && decl_context == FIELD
11530 && funcdecl_p
11531 && friendp == 0)
11532 ctype = current_class_type;
11533
11534 if (ctype && (sfk == sfk_constructor
11535 || sfk == sfk_destructor))
11536 {
11537 /* We are within a class's scope. If our declarator name
11538 is the same as the class name, and we are defining
11539 a function, then it is a constructor/destructor, and
11540 therefore returns a void type. */
11541
11542 /* ISO C++ 12.4/2. A destructor may not be declared
11543 const or volatile. A destructor may not be static.
11544 A destructor may not be declared with ref-qualifier.
11545
11546 ISO C++ 12.1. A constructor may not be declared
11547 const or volatile. A constructor may not be
11548 virtual. A constructor may not be static.
11549 A constructor may not be declared with ref-qualifier. */
11550 if (staticp == 2)
11551 error ((flags == DTOR_FLAG)
11552 ? G_("destructor cannot be static member function")
11553 : G_("constructor cannot be static member function"));
11554 if (memfn_quals)
11555 {
11556 error ((flags == DTOR_FLAG)
11557 ? G_("destructors may not be cv-qualified")
11558 : G_("constructors may not be cv-qualified"));
11559 memfn_quals = TYPE_UNQUALIFIED;
11560 }
11561
11562 if (rqual)
11563 {
11564 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11565 error ((flags == DTOR_FLAG)
11566 ? G_("destructors may not be ref-qualified")
11567 : G_("constructors may not be ref-qualified"));
11568 rqual = REF_QUAL_NONE;
11569 }
11570
11571 if (decl_context == FIELD
11572 && !member_function_or_else (ctype,
11573 current_class_type,
11574 flags))
11575 return error_mark_node;
11576
11577 if (flags != DTOR_FLAG)
11578 {
11579 /* It's a constructor. */
11580 if (explicitp == 1)
11581 explicitp = 2;
11582 if (virtualp)
11583 {
11584 permerror (declspecs->locations[ds_virtual],
11585 "constructors cannot be declared %<virtual%>");
11586 virtualp = 0;
11587 }
11588 if (decl_context == FIELD
11589 && sfk != sfk_constructor)
11590 return error_mark_node;
11591 }
11592 if (decl_context == FIELD)
11593 staticp = 0;
11594 }
11595 else if (friendp)
11596 {
11597 if (virtualp)
11598 {
11599 /* Cannot be both friend and virtual. */
11600 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
11601 richloc.add_range (declspecs->locations[ds_friend]);
11602 error_at (&richloc, "virtual functions cannot be friends");
11603 friendp = 0;
11604 }
11605 if (decl_context == NORMAL)
11606 error ("friend declaration not in class definition");
11607 if (current_function_decl && funcdef_flag)
11608 {
11609 error ("cannot define friend function %qs in a local "
11610 "class definition", name);
11611 friendp = 0;
11612 }
11613 }
11614 else if (ctype && sfk == sfk_conversion)
11615 {
11616 if (explicitp == 1)
11617 {
11618 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11619 explicitp = 2;
11620 }
11621 if (late_return_type_p)
11622 error ("a conversion function cannot have a trailing return type");
11623 }
11624 else if (sfk == sfk_deduction_guide)
11625 {
11626 if (explicitp == 1)
11627 explicitp = 2;
11628 }
11629
11630 tree pushed_scope = NULL_TREE;
11631 if (funcdecl_p
11632 && decl_context != FIELD
11633 && inner_declarator->u.id.qualifying_scope
11634 && CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
11635 pushed_scope
11636 = push_scope (inner_declarator->u.id.qualifying_scope);
11637
11638 arg_types = grokparms (declarator->u.function.parameters, &parms);
11639
11640 if (pushed_scope)
11641 pop_scope (pushed_scope);
11642
11643 if (inner_declarator
11644 && inner_declarator->kind == cdk_id
11645 && inner_declarator->u.id.sfk == sfk_destructor
11646 && arg_types != void_list_node)
11647 {
11648 error ("destructors may not have parameters");
11649 arg_types = void_list_node;
11650 parms = NULL_TREE;
11651 }
11652
11653 type = build_function_type (type, arg_types);
11654
11655 tree attrs = declarator->std_attributes;
11656 if (tx_qual)
11657 {
11658 tree att = build_tree_list (tx_qual, NULL_TREE);
11659 /* transaction_safe applies to the type, but
11660 transaction_safe_dynamic applies to the function. */
11661 if (is_attribute_p ("transaction_safe", tx_qual))
11662 attrs = chainon (attrs, att);
11663 else
11664 returned_attrs = chainon (returned_attrs, att);
11665 }
11666 if (attrs)
11667 /* [dcl.fct]/2:
11668
11669 The optional attribute-specifier-seq appertains to
11670 the function type. */
11671 decl_attributes (&type, attrs, 0);
11672
11673 if (raises)
11674 type = build_exception_variant (type, raises);
11675 }
11676 break;
11677
11678 case cdk_pointer:
11679 case cdk_reference:
11680 case cdk_ptrmem:
11681 /* Filter out pointers-to-references and references-to-references.
11682 We can get these if a TYPE_DECL is used. */
11683
11684 if (TYPE_REF_P (type))
11685 {
11686 if (declarator->kind != cdk_reference)
11687 {
11688 error ("cannot declare pointer to %q#T", type);
11689 type = TREE_TYPE (type);
11690 }
11691
11692 /* In C++0x, we allow reference to reference declarations
11693 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11694 and template type arguments [14.3.1/4 temp.arg.type]. The
11695 check for direct reference to reference declarations, which
11696 are still forbidden, occurs below. Reasoning behind the change
11697 can be found in DR106, DR540, and the rvalue reference
11698 proposals. */
11699 else if (cxx_dialect == cxx98)
11700 {
11701 error ("cannot declare reference to %q#T", type);
11702 type = TREE_TYPE (type);
11703 }
11704 }
11705 else if (VOID_TYPE_P (type))
11706 {
11707 if (declarator->kind == cdk_reference)
11708 error ("cannot declare reference to %q#T", type);
11709 else if (declarator->kind == cdk_ptrmem)
11710 error ("cannot declare pointer to %q#T member", type);
11711 }
11712
11713 /* We now know that the TYPE_QUALS don't apply to the decl,
11714 but to the target of the pointer. */
11715 type_quals = TYPE_UNQUALIFIED;
11716
11717 /* This code used to handle METHOD_TYPE, but I don't think it's
11718 possible to get it here anymore. */
11719 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11720 if (declarator->kind == cdk_ptrmem
11721 && TREE_CODE (type) == FUNCTION_TYPE)
11722 {
11723 memfn_quals |= type_memfn_quals (type);
11724 type = build_memfn_type (type,
11725 declarator->u.pointer.class_type,
11726 memfn_quals,
11727 rqual);
11728 if (type == error_mark_node)
11729 return error_mark_node;
11730
11731 rqual = REF_QUAL_NONE;
11732 memfn_quals = TYPE_UNQUALIFIED;
11733 }
11734
11735 if (TREE_CODE (type) == FUNCTION_TYPE
11736 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11737 || type_memfn_rqual (type) != REF_QUAL_NONE))
11738 error (declarator->kind == cdk_reference
11739 ? G_("cannot declare reference to qualified function type %qT")
11740 : G_("cannot declare pointer to qualified function type %qT"),
11741 type);
11742
11743 /* When the pointed-to type involves components of variable size,
11744 care must be taken to ensure that the size evaluation code is
11745 emitted early enough to dominate all the possible later uses
11746 and late enough for the variables on which it depends to have
11747 been assigned.
11748
11749 This is expected to happen automatically when the pointed-to
11750 type has a name/declaration of it's own, but special attention
11751 is required if the type is anonymous.
11752
11753 We handle the NORMAL and FIELD contexts here by inserting a
11754 dummy statement that just evaluates the size at a safe point
11755 and ensures it is not deferred until e.g. within a deeper
11756 conditional context (c++/43555).
11757
11758 We expect nothing to be needed here for PARM or TYPENAME.
11759 Evaluating the size at this point for TYPENAME would
11760 actually be incorrect, as we might be in the middle of an
11761 expression with side effects on the pointed-to type size
11762 "arguments" prior to the pointer declaration point and the
11763 size evaluation could end up prior to the side effects. */
11764
11765 if (!TYPE_NAME (type)
11766 && (decl_context == NORMAL || decl_context == FIELD)
11767 && at_function_scope_p ()
11768 && variably_modified_type_p (type, NULL_TREE))
11769 {
11770 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11771 NULL_TREE, type);
11772 add_decl_expr (TYPE_NAME (type));
11773 }
11774
11775 if (declarator->kind == cdk_reference)
11776 {
11777 /* In C++0x, the type we are creating a reference to might be
11778 a typedef which is itself a reference type. In that case,
11779 we follow the reference collapsing rules in
11780 [7.1.3/8 dcl.typedef] to create the final reference type:
11781
11782 "If a typedef TD names a type that is a reference to a type
11783 T, an attempt to create the type 'lvalue reference to cv TD'
11784 creates the type 'lvalue reference to T,' while an attempt
11785 to create the type "rvalue reference to cv TD' creates the
11786 type TD."
11787 */
11788 if (VOID_TYPE_P (type))
11789 /* We already gave an error. */;
11790 else if (TYPE_REF_P (type))
11791 {
11792 if (declarator->u.reference.rvalue_ref)
11793 /* Leave type alone. */;
11794 else
11795 type = cp_build_reference_type (TREE_TYPE (type), false);
11796 }
11797 else
11798 type = cp_build_reference_type
11799 (type, declarator->u.reference.rvalue_ref);
11800
11801 /* In C++0x, we need this check for direct reference to
11802 reference declarations, which are forbidden by
11803 [8.3.2/5 dcl.ref]. Reference to reference declarations
11804 are only allowed indirectly through typedefs and template
11805 type arguments. Example:
11806
11807 void foo(int & &); // invalid ref-to-ref decl
11808
11809 typedef int & int_ref;
11810 void foo(int_ref &); // valid ref-to-ref decl
11811 */
11812 if (inner_declarator && inner_declarator->kind == cdk_reference)
11813 error ("cannot declare reference to %q#T, which is not "
11814 "a typedef or a template type argument", type);
11815 }
11816 else if (TREE_CODE (type) == METHOD_TYPE)
11817 type = build_ptrmemfunc_type (build_pointer_type (type));
11818 else if (declarator->kind == cdk_ptrmem)
11819 {
11820 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11821 != NAMESPACE_DECL);
11822 if (declarator->u.pointer.class_type == error_mark_node)
11823 /* We will already have complained. */
11824 type = error_mark_node;
11825 else
11826 type = build_ptrmem_type (declarator->u.pointer.class_type,
11827 type);
11828 }
11829 else
11830 type = build_pointer_type (type);
11831
11832 /* Process a list of type modifier keywords (such as
11833 const or volatile) that were given inside the `*' or `&'. */
11834
11835 if (declarator->u.pointer.qualifiers)
11836 {
11837 type
11838 = cp_build_qualified_type (type,
11839 declarator->u.pointer.qualifiers);
11840 type_quals = cp_type_quals (type);
11841 }
11842
11843 /* Apply C++11 attributes to the pointer, and not to the
11844 type pointed to. This is unlike what is done for GNU
11845 attributes above. It is to comply with [dcl.ptr]/1:
11846
11847 [the optional attribute-specifier-seq (7.6.1) appertains
11848 to the pointer and not to the object pointed to]. */
11849 if (declarator->std_attributes)
11850 decl_attributes (&type, declarator->std_attributes,
11851 0);
11852
11853 ctype = NULL_TREE;
11854 break;
11855
11856 case cdk_error:
11857 break;
11858
11859 default:
11860 gcc_unreachable ();
11861 }
11862 }
11863
11864 /* A `constexpr' specifier used in an object declaration declares
11865 the object as `const'. */
11866 if (constexpr_p && innermost_code != cdk_function)
11867 {
11868 /* DR1688 says that a `constexpr' specifier in combination with
11869 `volatile' is valid. */
11870
11871 if (!TYPE_REF_P (type))
11872 {
11873 type_quals |= TYPE_QUAL_CONST;
11874 type = cp_build_qualified_type (type, type_quals);
11875 }
11876 }
11877
11878 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11879 && !FUNC_OR_METHOD_TYPE_P (type)
11880 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11881 {
11882 error ("template-id %qD used as a declarator",
11883 unqualified_id);
11884 unqualified_id = dname;
11885 }
11886
11887 location_t loc = declarator ? declarator->id_loc : input_location;
11888
11889 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11890 qualified with a class-name, turn it into a METHOD_TYPE, unless
11891 we know that the function is static. We take advantage of this
11892 opportunity to do other processing that pertains to entities
11893 explicitly declared to be class members. Note that if DECLARATOR
11894 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11895 would not have exited the loop above. */
11896 if (declarator
11897 && declarator->kind == cdk_id
11898 && declarator->u.id.qualifying_scope
11899 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11900 {
11901 ctype = declarator->u.id.qualifying_scope;
11902 ctype = TYPE_MAIN_VARIANT (ctype);
11903 template_count = num_template_headers_for_class (ctype);
11904
11905 if (ctype == current_class_type)
11906 {
11907 if (friendp)
11908 {
11909 permerror (declspecs->locations[ds_friend],
11910 "member functions are implicitly "
11911 "friends of their class");
11912 friendp = 0;
11913 }
11914 else
11915 permerror (loc, "extra qualification %<%T::%> on member %qs",
11916 ctype, name);
11917 }
11918 else if (/* If the qualifying type is already complete, then we
11919 can skip the following checks. */
11920 !COMPLETE_TYPE_P (ctype)
11921 && (/* If the function is being defined, then
11922 qualifying type must certainly be complete. */
11923 funcdef_flag
11924 /* A friend declaration of "T::f" is OK, even if
11925 "T" is a template parameter. But, if this
11926 function is not a friend, the qualifying type
11927 must be a class. */
11928 || (!friendp && !CLASS_TYPE_P (ctype))
11929 /* For a declaration, the type need not be
11930 complete, if either it is dependent (since there
11931 is no meaningful definition of complete in that
11932 case) or the qualifying class is currently being
11933 defined. */
11934 || !(dependent_type_p (ctype)
11935 || currently_open_class (ctype)))
11936 /* Check that the qualifying type is complete. */
11937 && !complete_type_or_else (ctype, NULL_TREE))
11938 return error_mark_node;
11939 else if (TREE_CODE (type) == FUNCTION_TYPE)
11940 {
11941 if (current_class_type
11942 && (!friendp || funcdef_flag || initialized))
11943 {
11944 error_at (loc, funcdef_flag || initialized
11945 ? G_("cannot define member function %<%T::%s%> "
11946 "within %qT")
11947 : G_("cannot declare member function %<%T::%s%> "
11948 "within %qT"),
11949 ctype, name, current_class_type);
11950 return error_mark_node;
11951 }
11952 }
11953 else if (typedef_p && current_class_type)
11954 {
11955 error_at (loc, "cannot declare member %<%T::%s%> within %qT",
11956 ctype, name, current_class_type);
11957 return error_mark_node;
11958 }
11959 }
11960
11961 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11962 ctype = current_class_type;
11963
11964 /* Now TYPE has the actual type. */
11965
11966 if (returned_attrs)
11967 {
11968 if (attrlist)
11969 *attrlist = chainon (returned_attrs, *attrlist);
11970 else
11971 attrlist = &returned_attrs;
11972 }
11973
11974 if (declarator
11975 && declarator->kind == cdk_id
11976 && declarator->std_attributes
11977 && attrlist != NULL)
11978 {
11979 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11980 a declarator-id appertains to the entity that is declared. */
11981 if (declarator->std_attributes != error_mark_node)
11982 *attrlist = chainon (*attrlist, declarator->std_attributes);
11983 else
11984 /* We should have already diagnosed the issue (c++/78344). */
11985 gcc_assert (seen_error ());
11986 }
11987
11988 /* Handle parameter packs. */
11989 if (parameter_pack_p)
11990 {
11991 if (decl_context == PARM)
11992 /* Turn the type into a pack expansion.*/
11993 type = make_pack_expansion (type);
11994 else
11995 error ("non-parameter %qs cannot be a parameter pack", name);
11996 }
11997
11998 if ((decl_context == FIELD || decl_context == PARM)
11999 && !processing_template_decl
12000 && variably_modified_type_p (type, NULL_TREE))
12001 {
12002 if (decl_context == FIELD)
12003 error ("data member may not have variably modified type %qT", type);
12004 else
12005 error ("parameter may not have variably modified type %qT", type);
12006 type = error_mark_node;
12007 }
12008
12009 if (explicitp == 1 || (explicitp && friendp))
12010 {
12011 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
12012 in the declaration of a constructor or conversion function within
12013 a class definition. */
12014 if (!current_class_type)
12015 error_at (declspecs->locations[ds_explicit],
12016 "%<explicit%> outside class declaration");
12017 else if (friendp)
12018 error_at (declspecs->locations[ds_explicit],
12019 "%<explicit%> in friend declaration");
12020 else
12021 error_at (declspecs->locations[ds_explicit],
12022 "only declarations of constructors and conversion operators "
12023 "can be %<explicit%>");
12024 explicitp = 0;
12025 }
12026
12027 if (storage_class == sc_mutable)
12028 {
12029 location_t sloc = declspecs->locations[ds_storage_class];
12030 if (decl_context != FIELD || friendp)
12031 {
12032 error_at (sloc, "non-member %qs cannot be declared %<mutable%>",
12033 name);
12034 storage_class = sc_none;
12035 }
12036 else if (decl_context == TYPENAME || typedef_p)
12037 {
12038 error_at (sloc,
12039 "non-object member %qs cannot be declared %<mutable%>",
12040 name);
12041 storage_class = sc_none;
12042 }
12043 else if (FUNC_OR_METHOD_TYPE_P (type))
12044 {
12045 error_at (sloc, "function %qs cannot be declared %<mutable%>",
12046 name);
12047 storage_class = sc_none;
12048 }
12049 else if (staticp)
12050 {
12051 error_at (sloc, "%<static%> %qs cannot be declared %<mutable%>",
12052 name);
12053 storage_class = sc_none;
12054 }
12055 else if (type_quals & TYPE_QUAL_CONST)
12056 {
12057 error_at (sloc, "%<const%> %qs cannot be declared %<mutable%>",
12058 name);
12059 storage_class = sc_none;
12060 }
12061 else if (TYPE_REF_P (type))
12062 {
12063 permerror (sloc, "reference %qs cannot be declared %<mutable%>",
12064 name);
12065 storage_class = sc_none;
12066 }
12067 }
12068
12069 /* If this is declaring a typedef name, return a TYPE_DECL. */
12070 if (typedef_p && decl_context != TYPENAME)
12071 {
12072 bool alias_p = decl_spec_seq_has_spec_p (declspecs, ds_alias);
12073 tree decl;
12074
12075 /* This declaration:
12076
12077 typedef void f(int) const;
12078
12079 declares a function type which is not a member of any
12080 particular class, but which is cv-qualified; for
12081 example "f S::*" declares a pointer to a const-qualified
12082 member function of S. We record the cv-qualification in the
12083 function type. */
12084 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
12085 {
12086 type = apply_memfn_quals (type, memfn_quals, rqual);
12087
12088 /* We have now dealt with these qualifiers. */
12089 memfn_quals = TYPE_UNQUALIFIED;
12090 rqual = REF_QUAL_NONE;
12091 }
12092
12093 if (type_uses_auto (type))
12094 {
12095 if (alias_p)
12096 error_at (declspecs->locations[ds_type_spec],
12097 "%<auto%> not allowed in alias declaration");
12098 else
12099 error_at (declspecs->locations[ds_type_spec],
12100 "typedef declared %<auto%>");
12101 type = error_mark_node;
12102 }
12103
12104 if (reqs)
12105 error_at (location_of (reqs), "requires-clause on typedef");
12106
12107 if (id_declarator && declarator->u.id.qualifying_scope)
12108 {
12109 error ("typedef name may not be a nested-name-specifier");
12110 type = error_mark_node;
12111 }
12112
12113 if (decl_context == FIELD)
12114 decl = build_lang_decl_loc (loc, TYPE_DECL, unqualified_id, type);
12115 else
12116 decl = build_decl (loc, TYPE_DECL, unqualified_id, type);
12117
12118 if (decl_context != FIELD)
12119 {
12120 if (!current_function_decl)
12121 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
12122 else if (DECL_MAYBE_IN_CHARGE_CDTOR_P (current_function_decl))
12123 /* The TYPE_DECL is "abstract" because there will be
12124 clones of this constructor/destructor, and there will
12125 be copies of this TYPE_DECL generated in those
12126 clones. The decloning optimization (for space) may
12127 revert this subsequently if it determines that
12128 the clones should share a common implementation. */
12129 DECL_ABSTRACT_P (decl) = true;
12130 }
12131 else if (current_class_type
12132 && constructor_name_p (unqualified_id, current_class_type))
12133 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
12134 "as enclosing class",
12135 unqualified_id);
12136
12137 /* If the user declares "typedef struct {...} foo" then the
12138 struct will have an anonymous name. Fill that name in now.
12139 Nothing can refer to it, so nothing needs know about the name
12140 change. */
12141 if (type != error_mark_node
12142 && unqualified_id
12143 && TYPE_NAME (type)
12144 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
12145 && TYPE_UNNAMED_P (type)
12146 && declspecs->type_definition_p
12147 && attributes_naming_typedef_ok (*attrlist)
12148 && cp_type_quals (type) == TYPE_UNQUALIFIED)
12149 name_unnamed_type (type, decl);
12150
12151 if (signed_p
12152 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
12153 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
12154
12155 bad_specifiers (decl, BSP_TYPE, virtualp,
12156 memfn_quals != TYPE_UNQUALIFIED,
12157 inlinep, friendp, raises != NULL_TREE,
12158 declspecs->locations);
12159
12160 if (alias_p)
12161 /* Acknowledge that this was written:
12162 `using analias = atype;'. */
12163 TYPE_DECL_ALIAS_P (decl) = 1;
12164
12165 return decl;
12166 }
12167
12168 /* Detect the case of an array type of unspecified size
12169 which came, as such, direct from a typedef name.
12170 We must copy the type, so that the array's domain can be
12171 individually set by the object's initializer. */
12172
12173 if (type && typedef_type
12174 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
12175 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
12176 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12177
12178 /* Detect where we're using a typedef of function type to declare a
12179 function. PARMS will not be set, so we must create it now. */
12180
12181 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
12182 {
12183 tree decls = NULL_TREE;
12184 tree args;
12185
12186 for (args = TYPE_ARG_TYPES (type);
12187 args && args != void_list_node;
12188 args = TREE_CHAIN (args))
12189 {
12190 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
12191 TREE_VALUE (args));
12192
12193 DECL_CHAIN (decl) = decls;
12194 decls = decl;
12195 }
12196
12197 parms = nreverse (decls);
12198
12199 if (decl_context != TYPENAME)
12200 {
12201 /* The qualifiers on the function type become the qualifiers on
12202 the non-static member function. */
12203 memfn_quals |= type_memfn_quals (type);
12204 rqual = type_memfn_rqual (type);
12205 type_quals = TYPE_UNQUALIFIED;
12206 }
12207 }
12208
12209 /* If this is a type name (such as, in a cast or sizeof),
12210 compute the type and return it now. */
12211
12212 if (decl_context == TYPENAME)
12213 {
12214 /* Note that here we don't care about type_quals. */
12215
12216 /* Special case: "friend class foo" looks like a TYPENAME context. */
12217 if (friendp)
12218 {
12219 if (inlinep)
12220 {
12221 error ("%<inline%> specified for friend class declaration");
12222 inlinep = 0;
12223 }
12224
12225 if (!current_aggr)
12226 {
12227 /* Don't allow friend declaration without a class-key. */
12228 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12229 permerror (input_location, "template parameters cannot be friends");
12230 else if (TREE_CODE (type) == TYPENAME_TYPE)
12231 permerror (input_location, "friend declaration requires class-key, "
12232 "i.e. %<friend class %T::%D%>",
12233 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
12234 else
12235 permerror (input_location, "friend declaration requires class-key, "
12236 "i.e. %<friend %#T%>",
12237 type);
12238 }
12239
12240 /* Only try to do this stuff if we didn't already give up. */
12241 if (type != integer_type_node)
12242 {
12243 /* A friendly class? */
12244 if (current_class_type)
12245 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
12246 /*complain=*/true);
12247 else
12248 error ("trying to make class %qT a friend of global scope",
12249 type);
12250
12251 type = void_type_node;
12252 }
12253 }
12254 else if (memfn_quals || rqual)
12255 {
12256 if (ctype == NULL_TREE
12257 && TREE_CODE (type) == METHOD_TYPE)
12258 ctype = TYPE_METHOD_BASETYPE (type);
12259
12260 if (ctype)
12261 type = build_memfn_type (type, ctype, memfn_quals, rqual);
12262 /* Core issue #547: need to allow this in template type args.
12263 Allow it in general in C++11 for alias-declarations. */
12264 else if ((template_type_arg || cxx_dialect >= cxx11)
12265 && TREE_CODE (type) == FUNCTION_TYPE)
12266 type = apply_memfn_quals (type, memfn_quals, rqual);
12267 else
12268 error ("invalid qualifiers on non-member function type");
12269 }
12270
12271 if (reqs)
12272 error_at (location_of (reqs), "requires-clause on type-id");
12273
12274 return type;
12275 }
12276 else if (unqualified_id == NULL_TREE && decl_context != PARM
12277 && decl_context != CATCHPARM
12278 && TREE_CODE (type) != UNION_TYPE
12279 && ! bitfield
12280 && innermost_code != cdk_decomp)
12281 {
12282 error ("abstract declarator %qT used as declaration", type);
12283 return error_mark_node;
12284 }
12285
12286 if (!FUNC_OR_METHOD_TYPE_P (type))
12287 {
12288 /* Only functions may be declared using an operator-function-id. */
12289 if (dname && IDENTIFIER_ANY_OP_P (dname))
12290 {
12291 error ("declaration of %qD as non-function", dname);
12292 return error_mark_node;
12293 }
12294
12295 if (reqs)
12296 error_at (location_of (reqs),
12297 "requires-clause on declaration of non-function type %qT",
12298 type);
12299 }
12300
12301 /* We don't check parameter types here because we can emit a better
12302 error message later. */
12303 if (decl_context != PARM)
12304 {
12305 type = check_var_type (unqualified_id, type);
12306 if (type == error_mark_node)
12307 return error_mark_node;
12308 }
12309
12310 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
12311 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
12312
12313 if (decl_context == PARM || decl_context == CATCHPARM)
12314 {
12315 if (ctype || in_namespace)
12316 error ("cannot use %<::%> in parameter declaration");
12317
12318 if (type_uses_auto (type)
12319 && !(cxx_dialect >= cxx17 && template_parm_flag))
12320 {
12321 if (cxx_dialect >= cxx14)
12322 error ("%<auto%> parameter not permitted in this context");
12323 else
12324 error ("parameter declared %<auto%>");
12325 type = error_mark_node;
12326 }
12327
12328 /* A parameter declared as an array of T is really a pointer to T.
12329 One declared as a function is really a pointer to a function.
12330 One declared as a member is really a pointer to member. */
12331
12332 if (TREE_CODE (type) == ARRAY_TYPE)
12333 {
12334 /* Transfer const-ness of array into that of type pointed to. */
12335 type = build_pointer_type (TREE_TYPE (type));
12336 type_quals = TYPE_UNQUALIFIED;
12337 array_parameter_p = true;
12338 }
12339 else if (TREE_CODE (type) == FUNCTION_TYPE)
12340 type = build_pointer_type (type);
12341 }
12342
12343 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
12344 && !(unqualified_id
12345 && identifier_p (unqualified_id)
12346 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
12347 {
12348 cp_cv_quals real_quals = memfn_quals;
12349 if (cxx_dialect < cxx14 && constexpr_p
12350 && sfk != sfk_constructor && sfk != sfk_destructor)
12351 real_quals |= TYPE_QUAL_CONST;
12352 type = build_memfn_type (type, ctype, real_quals, rqual);
12353 }
12354
12355 {
12356 tree decl = NULL_TREE;
12357
12358 if (decl_context == PARM)
12359 {
12360 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
12361 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
12362
12363 bad_specifiers (decl, BSP_PARM, virtualp,
12364 memfn_quals != TYPE_UNQUALIFIED,
12365 inlinep, friendp, raises != NULL_TREE,
12366 declspecs->locations);
12367 }
12368 else if (decl_context == FIELD)
12369 {
12370 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
12371 if (tree auto_node = type_uses_auto (type))
12372 {
12373 location_t tloc = declspecs->locations[ds_type_spec];
12374 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12375 error_at (tloc, "invalid use of template-name %qE without an "
12376 "argument list",
12377 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
12378 else
12379 error_at (tloc, "non-static data member declared with "
12380 "placeholder %qT", auto_node);
12381 type = error_mark_node;
12382 }
12383
12384 /* The C99 flexible array extension. */
12385 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
12386 && TYPE_DOMAIN (type) == NULL_TREE)
12387 {
12388 if (ctype
12389 && (TREE_CODE (ctype) == UNION_TYPE
12390 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
12391 {
12392 error ("flexible array member in union");
12393 type = error_mark_node;
12394 }
12395 else
12396 {
12397 /* Array is a flexible member. */
12398 if (in_system_header_at (input_location))
12399 /* Do not warn on flexible array members in system
12400 headers because glibc uses them. */;
12401 else if (name && declarator)
12402 pedwarn (declarator->id_loc, OPT_Wpedantic,
12403 "ISO C++ forbids flexible array member %qs", name);
12404 else
12405 pedwarn (input_location, OPT_Wpedantic,
12406 "ISO C++ forbids flexible array members");
12407
12408 /* Flexible array member has a null domain. */
12409 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12410 }
12411 }
12412
12413 if (type == error_mark_node)
12414 {
12415 /* Happens when declaring arrays of sizes which
12416 are error_mark_node, for example. */
12417 decl = NULL_TREE;
12418 }
12419 else if (in_namespace && !friendp)
12420 {
12421 /* Something like struct S { int N::j; }; */
12422 error ("invalid use of %<::%>");
12423 return error_mark_node;
12424 }
12425 else if (FUNC_OR_METHOD_TYPE_P (type) && unqualified_id)
12426 {
12427 int publicp = 0;
12428 tree function_context;
12429
12430 if (friendp == 0)
12431 {
12432 /* This should never happen in pure C++ (the check
12433 could be an assert). It could happen in
12434 Objective-C++ if someone writes invalid code that
12435 uses a function declaration for an instance
12436 variable or property (instance variables and
12437 properties are parsed as FIELD_DECLs, but they are
12438 part of an Objective-C class, not a C++ class).
12439 That code is invalid and is caught by this
12440 check. */
12441 if (!ctype)
12442 {
12443 error ("declaration of function %qD in invalid context",
12444 unqualified_id);
12445 return error_mark_node;
12446 }
12447
12448 /* ``A union may [ ... ] not [ have ] virtual functions.''
12449 ARM 9.5 */
12450 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12451 {
12452 error_at (declspecs->locations[ds_virtual],
12453 "function %qD declared %<virtual%> inside a union",
12454 unqualified_id);
12455 return error_mark_node;
12456 }
12457
12458 if (virtualp
12459 && identifier_p (unqualified_id)
12460 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
12461 {
12462 error_at (declspecs->locations[ds_virtual],
12463 "%qD cannot be declared %<virtual%>, since it "
12464 "is always static", unqualified_id);
12465 virtualp = 0;
12466 }
12467 }
12468
12469 /* Check that the name used for a destructor makes sense. */
12470 if (sfk == sfk_destructor)
12471 {
12472 tree uqname = id_declarator->u.id.unqualified_name;
12473
12474 if (!ctype)
12475 {
12476 gcc_assert (friendp);
12477 error ("expected qualified name in friend declaration "
12478 "for destructor %qD", uqname);
12479 return error_mark_node;
12480 }
12481
12482 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
12483 {
12484 error ("declaration of %qD as member of %qT",
12485 uqname, ctype);
12486 return error_mark_node;
12487 }
12488 if (concept_p)
12489 {
12490 error_at (declspecs->locations[ds_concept],
12491 "a destructor cannot be %<concept%>");
12492 return error_mark_node;
12493 }
12494 if (constexpr_p)
12495 {
12496 error_at (declspecs->locations[ds_constexpr],
12497 "a destructor cannot be %<constexpr%>");
12498 return error_mark_node;
12499 }
12500 }
12501 else if (sfk == sfk_constructor && friendp && !ctype)
12502 {
12503 error ("expected qualified name in friend declaration "
12504 "for constructor %qD",
12505 id_declarator->u.id.unqualified_name);
12506 return error_mark_node;
12507 }
12508 if (sfk == sfk_constructor)
12509 if (concept_p)
12510 {
12511 error_at (declspecs->locations[ds_concept],
12512 "a constructor cannot be %<concept%>");
12513 return error_mark_node;
12514 }
12515 if (concept_p)
12516 {
12517 error_at (declspecs->locations[ds_concept],
12518 "a concept cannot be a member function");
12519 concept_p = false;
12520 }
12521
12522 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12523 {
12524 tree tmpl = TREE_OPERAND (unqualified_id, 0);
12525 if (variable_template_p (tmpl))
12526 {
12527 error ("specialization of variable template %qD "
12528 "declared as function", tmpl);
12529 inform (DECL_SOURCE_LOCATION (tmpl),
12530 "variable template declared here");
12531 return error_mark_node;
12532 }
12533 }
12534
12535 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12536 function_context = (ctype != NULL_TREE) ?
12537 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12538 publicp = (! friendp || ! staticp)
12539 && function_context == NULL_TREE;
12540
12541 decl = grokfndecl (ctype, type,
12542 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12543 ? unqualified_id : dname,
12544 parms,
12545 unqualified_id,
12546 declspecs,
12547 reqs,
12548 virtualp, flags, memfn_quals, rqual, raises,
12549 friendp ? -1 : 0, friendp, publicp,
12550 inlinep | (2 * constexpr_p) | (4 * concept_p),
12551 initialized == SD_DELETED, sfk,
12552 funcdef_flag, late_return_type_p,
12553 template_count, in_namespace,
12554 attrlist, declarator->id_loc);
12555 decl = set_virt_specifiers (decl, virt_specifiers);
12556 if (decl == NULL_TREE)
12557 return error_mark_node;
12558 #if 0
12559 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12560 /* The decl and setting of decl_attr is also turned off. */
12561 decl = build_decl_attribute_variant (decl, decl_attr);
12562 #endif
12563
12564 /* [class.conv.ctor]
12565
12566 A constructor declared without the function-specifier
12567 explicit that can be called with a single parameter
12568 specifies a conversion from the type of its first
12569 parameter to the type of its class. Such a constructor
12570 is called a converting constructor. */
12571 if (explicitp == 2)
12572 DECL_NONCONVERTING_P (decl) = 1;
12573
12574 if (declspecs->explicit_specifier)
12575 store_explicit_specifier (decl, declspecs->explicit_specifier);
12576 }
12577 else if (!staticp && !dependent_type_p (type)
12578 && !COMPLETE_TYPE_P (complete_type (type))
12579 && (!complete_or_array_type_p (type)
12580 || initialized == 0))
12581 {
12582 if (TREE_CODE (type) != ARRAY_TYPE
12583 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12584 {
12585 if (unqualified_id)
12586 {
12587 error_at (declarator->id_loc,
12588 "field %qD has incomplete type %qT",
12589 unqualified_id, type);
12590 cxx_incomplete_type_inform (strip_array_types (type));
12591 }
12592 else
12593 error ("name %qT has incomplete type", type);
12594
12595 type = error_mark_node;
12596 decl = NULL_TREE;
12597 }
12598 }
12599 else
12600 {
12601 if (friendp)
12602 {
12603 if (unqualified_id && declarator)
12604 error_at (declarator->id_loc,
12605 "%qE is neither function nor member function; "
12606 "cannot be declared friend", unqualified_id);
12607 else
12608 error ("unnamed field is neither function nor member "
12609 "function; cannot be declared friend");
12610 return error_mark_node;
12611 }
12612 decl = NULL_TREE;
12613 }
12614
12615 if (friendp)
12616 {
12617 /* Friends are treated specially. */
12618 if (ctype == current_class_type)
12619 ; /* We already issued a permerror. */
12620 else if (decl && DECL_NAME (decl))
12621 {
12622 if (template_class_depth (current_class_type) == 0)
12623 {
12624 decl = check_explicit_specialization
12625 (unqualified_id, decl, template_count,
12626 2 * funcdef_flag + 4);
12627 if (decl == error_mark_node)
12628 return error_mark_node;
12629 }
12630
12631 decl = do_friend (ctype, unqualified_id, decl,
12632 *attrlist, flags,
12633 funcdef_flag);
12634 return decl;
12635 }
12636 else
12637 return error_mark_node;
12638 }
12639
12640 /* Structure field. It may not be a function, except for C++. */
12641
12642 if (decl == NULL_TREE)
12643 {
12644 if (staticp)
12645 {
12646 /* C++ allows static class members. All other work
12647 for this is done by grokfield. */
12648 decl = build_lang_decl_loc (loc, VAR_DECL,
12649 unqualified_id, type);
12650 set_linkage_for_static_data_member (decl);
12651 if (concept_p)
12652 error_at (declspecs->locations[ds_concept],
12653 "static data member %qE declared %<concept%>",
12654 unqualified_id);
12655 else if (constexpr_p && !initialized)
12656 {
12657 error_at (DECL_SOURCE_LOCATION (decl),
12658 "%<constexpr%> static data member %qD must "
12659 "have an initializer", decl);
12660 constexpr_p = false;
12661 }
12662
12663 if (inlinep)
12664 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12665
12666 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12667 && !(cxx_dialect >= cxx17 && constexpr_p))
12668 /* Even if there is an in-class initialization, DECL
12669 is considered undefined until an out-of-class
12670 definition is provided, unless this is an inline
12671 variable. */
12672 DECL_EXTERNAL (decl) = 1;
12673
12674 if (thread_p)
12675 {
12676 CP_DECL_THREAD_LOCAL_P (decl) = true;
12677 if (!processing_template_decl)
12678 set_decl_tls_model (decl, decl_default_tls_model (decl));
12679 if (declspecs->gnu_thread_keyword_p)
12680 SET_DECL_GNU_TLS_P (decl);
12681 }
12682 }
12683 else
12684 {
12685 if (concept_p)
12686 error_at (declspecs->locations[ds_concept],
12687 "non-static data member %qE declared %<concept%>",
12688 unqualified_id);
12689 else if (constexpr_p)
12690 {
12691 error_at (declspecs->locations[ds_constexpr],
12692 "non-static data member %qE declared %<constexpr%>",
12693 unqualified_id);
12694 constexpr_p = false;
12695 }
12696 decl = build_decl (loc, FIELD_DECL, unqualified_id, type);
12697 DECL_NONADDRESSABLE_P (decl) = bitfield;
12698 if (bitfield && !unqualified_id)
12699 {
12700 TREE_NO_WARNING (decl) = 1;
12701 DECL_PADDING_P (decl) = 1;
12702 }
12703
12704 if (storage_class == sc_mutable)
12705 {
12706 DECL_MUTABLE_P (decl) = 1;
12707 storage_class = sc_none;
12708 }
12709
12710 if (initialized)
12711 {
12712 /* An attempt is being made to initialize a non-static
12713 member. This is new in C++11. */
12714 maybe_warn_cpp0x (CPP0X_NSDMI);
12715
12716 /* If this has been parsed with static storage class, but
12717 errors forced staticp to be cleared, ensure NSDMI is
12718 not present. */
12719 if (declspecs->storage_class == sc_static)
12720 DECL_INITIAL (decl) = error_mark_node;
12721 }
12722 }
12723
12724 bad_specifiers (decl, BSP_FIELD, virtualp,
12725 memfn_quals != TYPE_UNQUALIFIED,
12726 staticp ? false : inlinep, friendp,
12727 raises != NULL_TREE,
12728 declspecs->locations);
12729 }
12730 }
12731 else if (FUNC_OR_METHOD_TYPE_P (type))
12732 {
12733 tree original_name;
12734 int publicp = 0;
12735
12736 if (!unqualified_id)
12737 return error_mark_node;
12738
12739 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12740 original_name = dname;
12741 else
12742 original_name = unqualified_id;
12743 // FIXME:gcc_assert (original_name == dname);
12744
12745 if (storage_class == sc_auto)
12746 error ("storage class %<auto%> invalid for function %qs", name);
12747 else if (storage_class == sc_register)
12748 error ("storage class %<register%> invalid for function %qs", name);
12749 else if (thread_p)
12750 {
12751 if (declspecs->gnu_thread_keyword_p)
12752 error_at (declspecs->locations[ds_thread],
12753 "storage class %<__thread%> invalid for function %qs",
12754 name);
12755 else
12756 error_at (declspecs->locations[ds_thread],
12757 "storage class %<thread_local%> invalid for "
12758 "function %qs", name);
12759 }
12760
12761 if (virt_specifiers)
12762 error ("virt-specifiers in %qs not allowed outside a class "
12763 "definition", name);
12764 /* Function declaration not at top level.
12765 Storage classes other than `extern' are not allowed
12766 and `extern' makes no difference. */
12767 if (! toplevel_bindings_p ()
12768 && (storage_class == sc_static
12769 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12770 && pedantic)
12771 {
12772 if (storage_class == sc_static)
12773 pedwarn (declspecs->locations[ds_storage_class], OPT_Wpedantic,
12774 "%<static%> specifier invalid for function %qs "
12775 "declared out of global scope", name);
12776 else
12777 pedwarn (declspecs->locations[ds_inline], OPT_Wpedantic,
12778 "%<inline%> specifier invalid for function %qs "
12779 "declared out of global scope", name);
12780 }
12781
12782 if (ctype == NULL_TREE)
12783 {
12784 if (virtualp)
12785 {
12786 error ("virtual non-class function %qs", name);
12787 virtualp = 0;
12788 }
12789 else if (sfk == sfk_constructor
12790 || sfk == sfk_destructor)
12791 {
12792 error (funcdef_flag
12793 ? G_("%qs defined in a non-class scope")
12794 : G_("%qs declared in a non-class scope"), name);
12795 sfk = sfk_none;
12796 }
12797 }
12798
12799 /* Record whether the function is public. */
12800 publicp = (ctype != NULL_TREE
12801 || storage_class != sc_static);
12802
12803 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12804 declspecs,
12805 reqs, virtualp, flags, memfn_quals, rqual, raises,
12806 1, friendp,
12807 publicp,
12808 inlinep | (2 * constexpr_p) | (4 * concept_p),
12809 initialized == SD_DELETED,
12810 sfk,
12811 funcdef_flag,
12812 late_return_type_p,
12813 template_count, in_namespace, attrlist,
12814 declarator->id_loc);
12815 if (decl == NULL_TREE)
12816 return error_mark_node;
12817
12818 if (explicitp == 2)
12819 DECL_NONCONVERTING_P (decl) = 1;
12820 if (staticp == 1)
12821 {
12822 int invalid_static = 0;
12823
12824 /* Don't allow a static member function in a class, and forbid
12825 declaring main to be static. */
12826 if (TREE_CODE (type) == METHOD_TYPE)
12827 {
12828 permerror (input_location, "cannot declare member function %qD to have "
12829 "static linkage", decl);
12830 invalid_static = 1;
12831 }
12832 else if (current_function_decl)
12833 {
12834 /* 7.1.1: There can be no static function declarations within a
12835 block. */
12836 error_at (declspecs->locations[ds_storage_class],
12837 "cannot declare static function inside another function");
12838 invalid_static = 1;
12839 }
12840
12841 if (invalid_static)
12842 {
12843 staticp = 0;
12844 storage_class = sc_none;
12845 }
12846 }
12847 }
12848 else
12849 {
12850 /* It's a variable. */
12851
12852 /* An uninitialized decl with `extern' is a reference. */
12853 decl = grokvardecl (type, dname, unqualified_id,
12854 declspecs,
12855 initialized,
12856 type_quals,
12857 inlinep,
12858 concept_p,
12859 template_count,
12860 ctype ? ctype : in_namespace,
12861 loc);
12862 if (decl == NULL_TREE)
12863 return error_mark_node;
12864
12865 bad_specifiers (decl, BSP_VAR, virtualp,
12866 memfn_quals != TYPE_UNQUALIFIED,
12867 inlinep, friendp, raises != NULL_TREE,
12868 declspecs->locations);
12869
12870 if (ctype)
12871 {
12872 DECL_CONTEXT (decl) = ctype;
12873 if (staticp == 1)
12874 {
12875 permerror (declspecs->locations[ds_storage_class],
12876 "%<static%> may not be used when defining "
12877 "(as opposed to declaring) a static data member");
12878 staticp = 0;
12879 storage_class = sc_none;
12880 }
12881 if (storage_class == sc_register && TREE_STATIC (decl))
12882 {
12883 error ("static member %qD declared %<register%>", decl);
12884 storage_class = sc_none;
12885 }
12886 if (storage_class == sc_extern && pedantic)
12887 {
12888 pedwarn (input_location, OPT_Wpedantic,
12889 "cannot explicitly declare member %q#D to have "
12890 "extern linkage", decl);
12891 storage_class = sc_none;
12892 }
12893 }
12894 else if (constexpr_p && DECL_EXTERNAL (decl))
12895 {
12896 error_at (DECL_SOURCE_LOCATION (decl),
12897 "declaration of %<constexpr%> variable %qD "
12898 "is not a definition", decl);
12899 constexpr_p = false;
12900 }
12901
12902 if (inlinep)
12903 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12904 if (innermost_code == cdk_decomp)
12905 {
12906 gcc_assert (declarator && declarator->kind == cdk_decomp);
12907 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12908 DECL_ARTIFICIAL (decl) = 1;
12909 fit_decomposition_lang_decl (decl, NULL_TREE);
12910 }
12911 }
12912
12913 if (VAR_P (decl) && !initialized)
12914 if (tree auto_node = type_uses_auto (type))
12915 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12916 {
12917 location_t loc = declspecs->locations[ds_type_spec];
12918 error_at (loc, "declaration of %q#D has no initializer", decl);
12919 TREE_TYPE (decl) = error_mark_node;
12920 }
12921
12922 if (storage_class == sc_extern && initialized && !funcdef_flag)
12923 {
12924 if (toplevel_bindings_p ())
12925 {
12926 /* It's common practice (and completely valid) to have a const
12927 be initialized and declared extern. */
12928 if (!(type_quals & TYPE_QUAL_CONST))
12929 warning_at (DECL_SOURCE_LOCATION (decl), 0,
12930 "%qs initialized and declared %<extern%>", name);
12931 }
12932 else
12933 {
12934 error_at (DECL_SOURCE_LOCATION (decl),
12935 "%qs has both %<extern%> and initializer", name);
12936 return error_mark_node;
12937 }
12938 }
12939
12940 /* Record `register' declaration for warnings on &
12941 and in case doing stupid register allocation. */
12942
12943 if (storage_class == sc_register)
12944 {
12945 DECL_REGISTER (decl) = 1;
12946 /* Warn about register storage specifiers on PARM_DECLs. */
12947 if (TREE_CODE (decl) == PARM_DECL)
12948 {
12949 if (cxx_dialect >= cxx17)
12950 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12951 "ISO C++17 does not allow %<register%> storage "
12952 "class specifier");
12953 else
12954 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12955 "%<register%> storage class specifier used");
12956 }
12957 }
12958 else if (storage_class == sc_extern)
12959 DECL_THIS_EXTERN (decl) = 1;
12960 else if (storage_class == sc_static)
12961 DECL_THIS_STATIC (decl) = 1;
12962
12963 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12964 if (constexpr_p && VAR_P (decl))
12965 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12966
12967 /* Record constancy and volatility on the DECL itself . There's
12968 no need to do this when processing a template; we'll do this
12969 for the instantiated declaration based on the type of DECL. */
12970 if (!processing_template_decl)
12971 cp_apply_type_quals_to_decl (type_quals, decl);
12972
12973 return decl;
12974 }
12975 }
12976 \f
12977 /* Subroutine of start_function. Ensure that each of the parameter
12978 types (as listed in PARMS) is complete, as is required for a
12979 function definition. */
12980
12981 static void
12982 require_complete_types_for_parms (tree parms)
12983 {
12984 for (; parms; parms = DECL_CHAIN (parms))
12985 {
12986 if (dependent_type_p (TREE_TYPE (parms)))
12987 continue;
12988 if (!VOID_TYPE_P (TREE_TYPE (parms))
12989 && complete_type_or_else (TREE_TYPE (parms), parms))
12990 {
12991 relayout_decl (parms);
12992 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12993
12994 maybe_warn_parm_abi (TREE_TYPE (parms),
12995 DECL_SOURCE_LOCATION (parms));
12996 }
12997 else
12998 /* grokparms or complete_type_or_else will have already issued
12999 an error. */
13000 TREE_TYPE (parms) = error_mark_node;
13001 }
13002 }
13003
13004 /* Returns nonzero if T is a local variable. */
13005
13006 int
13007 local_variable_p (const_tree t)
13008 {
13009 if ((VAR_P (t)
13010 /* A VAR_DECL with a context that is a _TYPE is a static data
13011 member. */
13012 && !TYPE_P (CP_DECL_CONTEXT (t))
13013 /* Any other non-local variable must be at namespace scope. */
13014 && !DECL_NAMESPACE_SCOPE_P (t))
13015 || (TREE_CODE (t) == PARM_DECL))
13016 return 1;
13017
13018 return 0;
13019 }
13020
13021 /* Like local_variable_p, but suitable for use as a tree-walking
13022 function. */
13023
13024 static tree
13025 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
13026 void * /*data*/)
13027 {
13028 if (local_variable_p (*tp)
13029 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
13030 return *tp;
13031 else if (TYPE_P (*tp))
13032 *walk_subtrees = 0;
13033
13034 return NULL_TREE;
13035 }
13036
13037 /* Check that ARG, which is a default-argument expression for a
13038 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
13039 something goes wrong. DECL may also be a _TYPE node, rather than a
13040 DECL, if there is no DECL available. */
13041
13042 tree
13043 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
13044 {
13045 tree var;
13046 tree decl_type;
13047
13048 if (TREE_CODE (arg) == DEFAULT_ARG)
13049 /* We get a DEFAULT_ARG when looking at an in-class declaration
13050 with a default argument. Ignore the argument for now; we'll
13051 deal with it after the class is complete. */
13052 return arg;
13053
13054 if (TYPE_P (decl))
13055 {
13056 decl_type = decl;
13057 decl = NULL_TREE;
13058 }
13059 else
13060 decl_type = TREE_TYPE (decl);
13061
13062 if (arg == error_mark_node
13063 || decl == error_mark_node
13064 || TREE_TYPE (arg) == error_mark_node
13065 || decl_type == error_mark_node)
13066 /* Something already went wrong. There's no need to check
13067 further. */
13068 return error_mark_node;
13069
13070 /* [dcl.fct.default]
13071
13072 A default argument expression is implicitly converted to the
13073 parameter type. */
13074 ++cp_unevaluated_operand;
13075 /* Avoid digest_init clobbering the initializer. */
13076 tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
13077 perform_implicit_conversion_flags (decl_type, carg, complain,
13078 LOOKUP_IMPLICIT);
13079 --cp_unevaluated_operand;
13080
13081 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
13082 the call sites. */
13083 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
13084 && null_ptr_cst_p (arg))
13085 return nullptr_node;
13086
13087 /* [dcl.fct.default]
13088
13089 Local variables shall not be used in default argument
13090 expressions.
13091
13092 The keyword `this' shall not be used in a default argument of a
13093 member function. */
13094 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
13095 if (var)
13096 {
13097 if (complain & tf_warning_or_error)
13098 {
13099 if (DECL_NAME (var) == this_identifier)
13100 permerror (input_location, "default argument %qE uses %qD",
13101 arg, var);
13102 else
13103 error ("default argument %qE uses local variable %qD", arg, var);
13104 }
13105 return error_mark_node;
13106 }
13107
13108 /* All is well. */
13109 return arg;
13110 }
13111
13112 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
13113
13114 static tree
13115 type_is_deprecated (tree type)
13116 {
13117 enum tree_code code;
13118 if (TREE_DEPRECATED (type))
13119 return type;
13120 if (TYPE_NAME (type))
13121 {
13122 if (TREE_DEPRECATED (TYPE_NAME (type)))
13123 return type;
13124 else
13125 return NULL_TREE;
13126 }
13127
13128 /* Do warn about using typedefs to a deprecated class. */
13129 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
13130 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
13131
13132 code = TREE_CODE (type);
13133
13134 if (code == POINTER_TYPE || code == REFERENCE_TYPE
13135 || code == OFFSET_TYPE || code == FUNCTION_TYPE
13136 || code == METHOD_TYPE || code == ARRAY_TYPE)
13137 return type_is_deprecated (TREE_TYPE (type));
13138
13139 if (TYPE_PTRMEMFUNC_P (type))
13140 return type_is_deprecated
13141 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
13142
13143 return NULL_TREE;
13144 }
13145
13146 /* Decode the list of parameter types for a function type.
13147 Given the list of things declared inside the parens,
13148 return a list of types.
13149
13150 If this parameter does not end with an ellipsis, we append
13151 void_list_node.
13152
13153 *PARMS is set to the chain of PARM_DECLs created. */
13154
13155 tree
13156 grokparms (tree parmlist, tree *parms)
13157 {
13158 tree result = NULL_TREE;
13159 tree decls = NULL_TREE;
13160 tree parm;
13161 int any_error = 0;
13162
13163 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
13164 {
13165 tree type = NULL_TREE;
13166 tree init = TREE_PURPOSE (parm);
13167 tree decl = TREE_VALUE (parm);
13168
13169 if (parm == void_list_node)
13170 break;
13171
13172 if (! decl || TREE_TYPE (decl) == error_mark_node)
13173 continue;
13174
13175 type = TREE_TYPE (decl);
13176 if (VOID_TYPE_P (type))
13177 {
13178 if (same_type_p (type, void_type_node)
13179 && !init
13180 && !DECL_NAME (decl) && !result
13181 && TREE_CHAIN (parm) == void_list_node)
13182 /* DR 577: A parameter list consisting of a single
13183 unnamed parameter of non-dependent type 'void'. */
13184 break;
13185 else if (cv_qualified_p (type))
13186 error_at (DECL_SOURCE_LOCATION (decl),
13187 "invalid use of cv-qualified type %qT in "
13188 "parameter declaration", type);
13189 else
13190 error_at (DECL_SOURCE_LOCATION (decl),
13191 "invalid use of type %<void%> in parameter "
13192 "declaration");
13193 /* It's not a good idea to actually create parameters of
13194 type `void'; other parts of the compiler assume that a
13195 void type terminates the parameter list. */
13196 type = error_mark_node;
13197 TREE_TYPE (decl) = error_mark_node;
13198 }
13199
13200 if (type != error_mark_node)
13201 {
13202 if (deprecated_state != DEPRECATED_SUPPRESS)
13203 {
13204 tree deptype = type_is_deprecated (type);
13205 if (deptype)
13206 cp_warn_deprecated_use (deptype);
13207 }
13208
13209 /* Top-level qualifiers on the parameters are
13210 ignored for function types. */
13211 type = cp_build_qualified_type (type, 0);
13212 if (TREE_CODE (type) == METHOD_TYPE)
13213 {
13214 error ("parameter %qD invalidly declared method type", decl);
13215 type = build_pointer_type (type);
13216 TREE_TYPE (decl) = type;
13217 }
13218 else if (abstract_virtuals_error (decl, type))
13219 any_error = 1; /* Seems like a good idea. */
13220 else if (cxx_dialect < cxx17 && INDIRECT_TYPE_P (type))
13221 {
13222 /* Before C++17 DR 393:
13223 [dcl.fct]/6, parameter types cannot contain pointers
13224 (references) to arrays of unknown bound. */
13225 tree t = TREE_TYPE (type);
13226 int ptr = TYPE_PTR_P (type);
13227
13228 while (1)
13229 {
13230 if (TYPE_PTR_P (t))
13231 ptr = 1;
13232 else if (TREE_CODE (t) != ARRAY_TYPE)
13233 break;
13234 else if (!TYPE_DOMAIN (t))
13235 break;
13236 t = TREE_TYPE (t);
13237 }
13238 if (TREE_CODE (t) == ARRAY_TYPE)
13239 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
13240 ptr
13241 ? G_("parameter %qD includes pointer to array of "
13242 "unknown bound %qT")
13243 : G_("parameter %qD includes reference to array of "
13244 "unknown bound %qT"),
13245 decl, t);
13246 }
13247
13248 if (any_error)
13249 init = NULL_TREE;
13250 else if (init && !processing_template_decl)
13251 init = check_default_argument (decl, init, tf_warning_or_error);
13252 }
13253
13254 DECL_CHAIN (decl) = decls;
13255 decls = decl;
13256 result = tree_cons (init, type, result);
13257 }
13258 decls = nreverse (decls);
13259 result = nreverse (result);
13260 if (parm)
13261 result = chainon (result, void_list_node);
13262 *parms = decls;
13263
13264 return result;
13265 }
13266
13267 \f
13268 /* D is a constructor or overloaded `operator='.
13269
13270 Let T be the class in which D is declared. Then, this function
13271 returns:
13272
13273 -1 if D's is an ill-formed constructor or copy assignment operator
13274 whose first parameter is of type `T'.
13275 0 if D is not a copy constructor or copy assignment
13276 operator.
13277 1 if D is a copy constructor or copy assignment operator whose
13278 first parameter is a reference to non-const qualified T.
13279 2 if D is a copy constructor or copy assignment operator whose
13280 first parameter is a reference to const qualified T.
13281
13282 This function can be used as a predicate. Positive values indicate
13283 a copy constructor and nonzero values indicate a copy assignment
13284 operator. */
13285
13286 int
13287 copy_fn_p (const_tree d)
13288 {
13289 tree args;
13290 tree arg_type;
13291 int result = 1;
13292
13293 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13294
13295 if (TREE_CODE (d) == TEMPLATE_DECL
13296 || (DECL_TEMPLATE_INFO (d)
13297 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13298 /* Instantiations of template member functions are never copy
13299 functions. Note that member functions of templated classes are
13300 represented as template functions internally, and we must
13301 accept those as copy functions. */
13302 return 0;
13303
13304 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13305 if (!args)
13306 return 0;
13307
13308 arg_type = TREE_VALUE (args);
13309 if (arg_type == error_mark_node)
13310 return 0;
13311
13312 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
13313 {
13314 /* Pass by value copy assignment operator. */
13315 result = -1;
13316 }
13317 else if (TYPE_REF_P (arg_type)
13318 && !TYPE_REF_IS_RVALUE (arg_type)
13319 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
13320 {
13321 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
13322 result = 2;
13323 }
13324 else
13325 return 0;
13326
13327 args = TREE_CHAIN (args);
13328
13329 if (args && args != void_list_node && !TREE_PURPOSE (args))
13330 /* There are more non-optional args. */
13331 return 0;
13332
13333 return result;
13334 }
13335
13336 /* D is a constructor or overloaded `operator='.
13337
13338 Let T be the class in which D is declared. Then, this function
13339 returns true when D is a move constructor or move assignment
13340 operator, false otherwise. */
13341
13342 bool
13343 move_fn_p (const_tree d)
13344 {
13345 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13346
13347 if (cxx_dialect == cxx98)
13348 /* There are no move constructors if we are in C++98 mode. */
13349 return false;
13350
13351 if (TREE_CODE (d) == TEMPLATE_DECL
13352 || (DECL_TEMPLATE_INFO (d)
13353 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13354 /* Instantiations of template member functions are never move
13355 functions. Note that member functions of templated classes are
13356 represented as template functions internally, and we must
13357 accept those as move functions. */
13358 return 0;
13359
13360 return move_signature_fn_p (d);
13361 }
13362
13363 /* D is a constructor or overloaded `operator='.
13364
13365 Then, this function returns true when D has the same signature as a move
13366 constructor or move assignment operator (because either it is such a
13367 ctor/op= or it is a template specialization with the same signature),
13368 false otherwise. */
13369
13370 bool
13371 move_signature_fn_p (const_tree d)
13372 {
13373 tree args;
13374 tree arg_type;
13375 bool result = false;
13376
13377 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13378 if (!args)
13379 return 0;
13380
13381 arg_type = TREE_VALUE (args);
13382 if (arg_type == error_mark_node)
13383 return 0;
13384
13385 if (TYPE_REF_P (arg_type)
13386 && TYPE_REF_IS_RVALUE (arg_type)
13387 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
13388 DECL_CONTEXT (d)))
13389 result = true;
13390
13391 args = TREE_CHAIN (args);
13392
13393 if (args && args != void_list_node && !TREE_PURPOSE (args))
13394 /* There are more non-optional args. */
13395 return false;
13396
13397 return result;
13398 }
13399
13400 /* Remember any special properties of member function DECL. */
13401
13402 void
13403 grok_special_member_properties (tree decl)
13404 {
13405 tree class_type;
13406
13407 if (TREE_CODE (decl) == USING_DECL
13408 || !DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
13409 return;
13410
13411 class_type = DECL_CONTEXT (decl);
13412 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
13413 {
13414 int ctor = copy_fn_p (decl);
13415
13416 if (!DECL_ARTIFICIAL (decl))
13417 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
13418
13419 if (ctor > 0)
13420 {
13421 /* [class.copy]
13422
13423 A non-template constructor for class X is a copy
13424 constructor if its first parameter is of type X&, const
13425 X&, volatile X& or const volatile X&, and either there
13426 are no other parameters or else all other parameters have
13427 default arguments. */
13428 TYPE_HAS_COPY_CTOR (class_type) = 1;
13429 if (user_provided_p (decl))
13430 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
13431 if (ctor > 1)
13432 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
13433 }
13434 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
13435 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
13436 else if (move_fn_p (decl) && user_provided_p (decl))
13437 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
13438 else if (is_list_ctor (decl))
13439 TYPE_HAS_LIST_CTOR (class_type) = 1;
13440
13441 if (DECL_DECLARED_CONSTEXPR_P (decl)
13442 && !ctor && !move_fn_p (decl))
13443 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
13444 }
13445 else if (DECL_NAME (decl) == assign_op_identifier)
13446 {
13447 /* [class.copy]
13448
13449 A non-template assignment operator for class X is a copy
13450 assignment operator if its parameter is of type X, X&, const
13451 X&, volatile X& or const volatile X&. */
13452
13453 int assop = copy_fn_p (decl);
13454
13455 if (assop)
13456 {
13457 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
13458 if (user_provided_p (decl))
13459 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
13460 if (assop != 1)
13461 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
13462 }
13463 else if (move_fn_p (decl) && user_provided_p (decl))
13464 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
13465 }
13466 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
13467 TYPE_HAS_CONVERSION (class_type) = true;
13468
13469 /* Destructors are handled in check_methods. */
13470 }
13471
13472 /* Check a constructor DECL has the correct form. Complains
13473 if the class has a constructor of the form X(X). */
13474
13475 bool
13476 grok_ctor_properties (const_tree ctype, const_tree decl)
13477 {
13478 int ctor_parm = copy_fn_p (decl);
13479
13480 if (ctor_parm < 0)
13481 {
13482 /* [class.copy]
13483
13484 A declaration of a constructor for a class X is ill-formed if
13485 its first parameter is of type (optionally cv-qualified) X
13486 and either there are no other parameters or else all other
13487 parameters have default arguments.
13488
13489 We *don't* complain about member template instantiations that
13490 have this form, though; they can occur as we try to decide
13491 what constructor to use during overload resolution. Since
13492 overload resolution will never prefer such a constructor to
13493 the non-template copy constructor (which is either explicitly
13494 or implicitly defined), there's no need to worry about their
13495 existence. Theoretically, they should never even be
13496 instantiated, but that's hard to forestall. */
13497 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
13498 ctype, ctype);
13499 return false;
13500 }
13501
13502 return true;
13503 }
13504
13505 /* DECL is a declaration for an overloaded or conversion operator. If
13506 COMPLAIN is true, errors are issued for invalid declarations. */
13507
13508 bool
13509 grok_op_properties (tree decl, bool complain)
13510 {
13511 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13512 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
13513 tree name = DECL_NAME (decl);
13514 location_t loc = DECL_SOURCE_LOCATION (decl);
13515
13516 tree class_type = DECL_CONTEXT (decl);
13517 if (class_type && !CLASS_TYPE_P (class_type))
13518 class_type = NULL_TREE;
13519
13520 tree_code operator_code;
13521 unsigned op_flags;
13522 if (IDENTIFIER_CONV_OP_P (name))
13523 {
13524 /* Conversion operators are TYPE_EXPR for the purposes of this
13525 function. */
13526 operator_code = TYPE_EXPR;
13527 op_flags = OVL_OP_FLAG_UNARY;
13528 }
13529 else
13530 {
13531 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13532
13533 operator_code = ovl_op->tree_code;
13534 op_flags = ovl_op->flags;
13535 gcc_checking_assert (operator_code != ERROR_MARK);
13536 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13537 }
13538
13539 if (op_flags & OVL_OP_FLAG_ALLOC)
13540 {
13541 /* operator new and operator delete are quite special. */
13542 if (class_type)
13543 switch (op_flags)
13544 {
13545 case OVL_OP_FLAG_ALLOC:
13546 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13547 break;
13548
13549 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13550 TYPE_GETS_DELETE (class_type) |= 1;
13551 break;
13552
13553 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13554 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13555 break;
13556
13557 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13558 TYPE_GETS_DELETE (class_type) |= 2;
13559 break;
13560
13561 default:
13562 gcc_unreachable ();
13563 }
13564
13565 /* [basic.std.dynamic.allocation]/1:
13566
13567 A program is ill-formed if an allocation function is declared
13568 in a namespace scope other than global scope or declared
13569 static in global scope.
13570
13571 The same also holds true for deallocation functions. */
13572 if (DECL_NAMESPACE_SCOPE_P (decl))
13573 {
13574 if (CP_DECL_CONTEXT (decl) != global_namespace)
13575 {
13576 error_at (loc, "%qD may not be declared within a namespace",
13577 decl);
13578 return false;
13579 }
13580
13581 if (!TREE_PUBLIC (decl))
13582 {
13583 error_at (loc, "%qD may not be declared as static", decl);
13584 return false;
13585 }
13586 }
13587
13588 if (op_flags & OVL_OP_FLAG_DELETE)
13589 coerce_delete_type (decl, loc);
13590 else
13591 {
13592 DECL_IS_OPERATOR_NEW (decl) = 1;
13593 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl), loc);
13594 }
13595
13596 return true;
13597 }
13598
13599 /* An operator function must either be a non-static member function
13600 or have at least one parameter of a class, a reference to a class,
13601 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13602 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13603 {
13604 if (operator_code == TYPE_EXPR
13605 || operator_code == CALL_EXPR
13606 || operator_code == COMPONENT_REF
13607 || operator_code == ARRAY_REF
13608 || operator_code == NOP_EXPR)
13609 {
13610 error_at (loc, "%qD must be a nonstatic member function", decl);
13611 return false;
13612 }
13613
13614 if (DECL_STATIC_FUNCTION_P (decl))
13615 {
13616 error_at (loc, "%qD must be either a non-static member "
13617 "function or a non-member function", decl);
13618 return false;
13619 }
13620
13621 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13622 {
13623 if (!arg || arg == void_list_node)
13624 {
13625 if (complain)
13626 error_at(loc, "%qD must have an argument of class or "
13627 "enumerated type", decl);
13628 return false;
13629 }
13630
13631 tree type = non_reference (TREE_VALUE (arg));
13632 if (type == error_mark_node)
13633 return false;
13634
13635 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13636 because these checks are performed even on template
13637 functions. */
13638 if (MAYBE_CLASS_TYPE_P (type)
13639 || TREE_CODE (type) == ENUMERAL_TYPE)
13640 break;
13641 }
13642 }
13643
13644 if (operator_code == CALL_EXPR)
13645 /* There are no further restrictions on the arguments to an overloaded
13646 "operator ()". */
13647 return true;
13648
13649 if (operator_code == COND_EXPR)
13650 {
13651 /* 13.4.0.3 */
13652 error_at (loc, "ISO C++ prohibits overloading %<operator ?:%>");
13653 return false;
13654 }
13655
13656 /* Count the number of arguments and check for ellipsis. */
13657 int arity = 0;
13658 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13659 {
13660 if (!arg)
13661 {
13662 /* Variadic. */
13663 error_at (loc, "%qD must not have variable number of arguments",
13664 decl);
13665 return false;
13666 }
13667 ++arity;
13668 }
13669
13670 /* Verify correct number of arguments. */
13671 switch (op_flags)
13672 {
13673 case OVL_OP_FLAG_AMBIARY:
13674 if (arity == 1)
13675 {
13676 /* We have a unary instance of an ambi-ary op. Remap to the
13677 unary one. */
13678 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13679 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13680 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13681 operator_code = ovl_op->tree_code;
13682 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13683 }
13684 else if (arity != 2)
13685 {
13686 /* This was an ambiguous operator but is invalid. */
13687 error_at (loc,
13688 methodp
13689 ? G_("%qD must have either zero or one argument")
13690 : G_("%qD must have either one or two arguments"), decl);
13691 return false;
13692 }
13693 else if ((operator_code == POSTINCREMENT_EXPR
13694 || operator_code == POSTDECREMENT_EXPR)
13695 && ! processing_template_decl
13696 /* x++ and x--'s second argument must be an int. */
13697 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13698 integer_type_node))
13699 {
13700 error_at (loc,
13701 methodp
13702 ? G_("postfix %qD must have %<int%> as its argument")
13703 : G_("postfix %qD must have %<int%> as its second argument"),
13704 decl);
13705 return false;
13706 }
13707 break;
13708
13709 case OVL_OP_FLAG_UNARY:
13710 if (arity != 1)
13711 {
13712 error_at (loc,
13713 methodp
13714 ? G_("%qD must have no arguments")
13715 : G_("%qD must have exactly one argument"), decl);
13716 return false;
13717 }
13718 break;
13719
13720 case OVL_OP_FLAG_BINARY:
13721 if (arity != 2)
13722 {
13723 error_at (loc,
13724 methodp
13725 ? G_("%qD must have exactly one argument")
13726 : G_("%qD must have exactly two arguments"), decl);
13727 return false;
13728 }
13729 break;
13730
13731 default:
13732 gcc_unreachable ();
13733 }
13734
13735 /* There can be no default arguments. */
13736 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13737 if (TREE_PURPOSE (arg))
13738 {
13739 TREE_PURPOSE (arg) = NULL_TREE;
13740 error_at (loc, "%qD cannot have default arguments", decl);
13741 return false;
13742 }
13743
13744 /* At this point the declaration is well-formed. It may not be
13745 sensible though. */
13746
13747 /* Check member function warnings only on the in-class declaration.
13748 There's no point warning on an out-of-class definition. */
13749 if (class_type && class_type != current_class_type)
13750 return true;
13751
13752 /* Warn about conversion operators that will never be used. */
13753 if (IDENTIFIER_CONV_OP_P (name)
13754 && ! DECL_TEMPLATE_INFO (decl)
13755 && warn_class_conversion)
13756 {
13757 tree t = TREE_TYPE (name);
13758 int ref = TYPE_REF_P (t);
13759
13760 if (ref)
13761 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13762
13763 if (VOID_TYPE_P (t))
13764 warning_at (loc, OPT_Wclass_conversion, "converting %qT to %<void%> "
13765 "will never use a type conversion operator", class_type);
13766 else if (class_type)
13767 {
13768 if (same_type_ignoring_top_level_qualifiers_p (t, class_type))
13769 warning_at (loc, OPT_Wclass_conversion,
13770 ref
13771 ? G_("converting %qT to a reference to the same type "
13772 "will never use a type conversion operator")
13773 : G_("converting %qT to the same type "
13774 "will never use a type conversion operator"),
13775 class_type);
13776 /* Don't force t to be complete here. */
13777 else if (MAYBE_CLASS_TYPE_P (t)
13778 && COMPLETE_TYPE_P (t)
13779 && DERIVED_FROM_P (t, class_type))
13780 warning_at (loc, OPT_Wclass_conversion,
13781 ref
13782 ? G_("converting %qT to a reference to a base class "
13783 "%qT will never use a type conversion operator")
13784 : G_("converting %qT to a base class %qT "
13785 "will never use a type conversion operator"),
13786 class_type, t);
13787 }
13788 }
13789
13790 if (!warn_ecpp)
13791 return true;
13792
13793 /* Effective C++ rules below. */
13794
13795 /* More Effective C++ rule 7. */
13796 if (operator_code == TRUTH_ANDIF_EXPR
13797 || operator_code == TRUTH_ORIF_EXPR
13798 || operator_code == COMPOUND_EXPR)
13799 warning_at (loc, OPT_Weffc__,
13800 "user-defined %qD always evaluates both arguments", decl);
13801
13802 /* More Effective C++ rule 6. */
13803 if (operator_code == POSTINCREMENT_EXPR
13804 || operator_code == POSTDECREMENT_EXPR
13805 || operator_code == PREINCREMENT_EXPR
13806 || operator_code == PREDECREMENT_EXPR)
13807 {
13808 tree arg = TREE_VALUE (argtypes);
13809 tree ret = TREE_TYPE (TREE_TYPE (decl));
13810 if (methodp || TYPE_REF_P (arg))
13811 arg = TREE_TYPE (arg);
13812 arg = TYPE_MAIN_VARIANT (arg);
13813
13814 if (operator_code == PREINCREMENT_EXPR
13815 || operator_code == PREDECREMENT_EXPR)
13816 {
13817 if (!TYPE_REF_P (ret)
13818 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13819 warning_at (loc, OPT_Weffc__, "prefix %qD should return %qT", decl,
13820 build_reference_type (arg));
13821 }
13822 else
13823 {
13824 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13825 warning_at (loc, OPT_Weffc__,
13826 "postfix %qD should return %qT", decl, arg);
13827 }
13828 }
13829
13830 /* Effective C++ rule 23. */
13831 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13832 && (operator_code == PLUS_EXPR
13833 || operator_code == MINUS_EXPR
13834 || operator_code == TRUNC_DIV_EXPR
13835 || operator_code == MULT_EXPR
13836 || operator_code == TRUNC_MOD_EXPR)
13837 && TYPE_REF_P (TREE_TYPE (TREE_TYPE (decl))))
13838 warning_at (loc, OPT_Weffc__, "%qD should return by value", decl);
13839
13840 return true;
13841 }
13842 \f
13843 /* Return a string giving the keyword associate with CODE. */
13844
13845 static const char *
13846 tag_name (enum tag_types code)
13847 {
13848 switch (code)
13849 {
13850 case record_type:
13851 return "struct";
13852 case class_type:
13853 return "class";
13854 case union_type:
13855 return "union";
13856 case enum_type:
13857 return "enum";
13858 case typename_type:
13859 return "typename";
13860 default:
13861 gcc_unreachable ();
13862 }
13863 }
13864
13865 /* Name lookup in an elaborated-type-specifier (after the keyword
13866 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13867 elaborated-type-specifier is invalid, issue a diagnostic and return
13868 error_mark_node; otherwise, return the *_TYPE to which it referred.
13869 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13870
13871 tree
13872 check_elaborated_type_specifier (enum tag_types tag_code,
13873 tree decl,
13874 bool allow_template_p)
13875 {
13876 tree type;
13877
13878 /* In the case of:
13879
13880 struct S { struct S *p; };
13881
13882 name lookup will find the TYPE_DECL for the implicit "S::S"
13883 typedef. Adjust for that here. */
13884 if (DECL_SELF_REFERENCE_P (decl))
13885 decl = TYPE_NAME (TREE_TYPE (decl));
13886
13887 type = TREE_TYPE (decl);
13888
13889 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13890 is false for this case as well. */
13891 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13892 {
13893 error ("using template type parameter %qT after %qs",
13894 type, tag_name (tag_code));
13895 return error_mark_node;
13896 }
13897 /* Accept template template parameters. */
13898 else if (allow_template_p
13899 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13900 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13901 ;
13902 /* [dcl.type.elab]
13903
13904 If the identifier resolves to a typedef-name or the
13905 simple-template-id resolves to an alias template
13906 specialization, the elaborated-type-specifier is ill-formed.
13907
13908 In other words, the only legitimate declaration to use in the
13909 elaborated type specifier is the implicit typedef created when
13910 the type is declared. */
13911 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13912 && !DECL_SELF_REFERENCE_P (decl)
13913 && tag_code != typename_type)
13914 {
13915 if (alias_template_specialization_p (type))
13916 error ("using alias template specialization %qT after %qs",
13917 type, tag_name (tag_code));
13918 else
13919 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13920 inform (DECL_SOURCE_LOCATION (decl),
13921 "%qD has a previous declaration here", decl);
13922 return error_mark_node;
13923 }
13924 else if (TREE_CODE (type) != RECORD_TYPE
13925 && TREE_CODE (type) != UNION_TYPE
13926 && tag_code != enum_type
13927 && tag_code != typename_type)
13928 {
13929 error ("%qT referred to as %qs", type, tag_name (tag_code));
13930 inform (location_of (type), "%qT has a previous declaration here", type);
13931 return error_mark_node;
13932 }
13933 else if (TREE_CODE (type) != ENUMERAL_TYPE
13934 && tag_code == enum_type)
13935 {
13936 error ("%qT referred to as enum", type);
13937 inform (location_of (type), "%qT has a previous declaration here", type);
13938 return error_mark_node;
13939 }
13940 else if (!allow_template_p
13941 && TREE_CODE (type) == RECORD_TYPE
13942 && CLASSTYPE_IS_TEMPLATE (type))
13943 {
13944 /* If a class template appears as elaborated type specifier
13945 without a template header such as:
13946
13947 template <class T> class C {};
13948 void f(class C); // No template header here
13949
13950 then the required template argument is missing. */
13951 error ("template argument required for %<%s %T%>",
13952 tag_name (tag_code),
13953 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13954 return error_mark_node;
13955 }
13956
13957 return type;
13958 }
13959
13960 /* Lookup NAME in elaborate type specifier in scope according to
13961 SCOPE and issue diagnostics if necessary.
13962 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13963 found, and ERROR_MARK_NODE for type error. */
13964
13965 static tree
13966 lookup_and_check_tag (enum tag_types tag_code, tree name,
13967 tag_scope scope, bool template_header_p)
13968 {
13969 tree t;
13970 tree decl;
13971 if (scope == ts_global)
13972 {
13973 /* First try ordinary name lookup, ignoring hidden class name
13974 injected via friend declaration. */
13975 decl = lookup_name_prefer_type (name, 2);
13976 decl = strip_using_decl (decl);
13977 /* If that fails, the name will be placed in the smallest
13978 non-class, non-function-prototype scope according to 3.3.1/5.
13979 We may already have a hidden name declared as friend in this
13980 scope. So lookup again but not ignoring hidden names.
13981 If we find one, that name will be made visible rather than
13982 creating a new tag. */
13983 if (!decl)
13984 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13985 }
13986 else
13987 decl = lookup_type_scope (name, scope);
13988
13989 if (decl
13990 && (DECL_CLASS_TEMPLATE_P (decl)
13991 /* If scope is ts_current we're defining a class, so ignore a
13992 template template parameter. */
13993 || (scope != ts_current
13994 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13995 decl = DECL_TEMPLATE_RESULT (decl);
13996
13997 if (decl && TREE_CODE (decl) == TYPE_DECL)
13998 {
13999 /* Look for invalid nested type:
14000 class C {
14001 class C {};
14002 }; */
14003 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
14004 {
14005 error ("%qD has the same name as the class in which it is "
14006 "declared",
14007 decl);
14008 return error_mark_node;
14009 }
14010
14011 /* Two cases we need to consider when deciding if a class
14012 template is allowed as an elaborated type specifier:
14013 1. It is a self reference to its own class.
14014 2. It comes with a template header.
14015
14016 For example:
14017
14018 template <class T> class C {
14019 class C *c1; // DECL_SELF_REFERENCE_P is true
14020 class D;
14021 };
14022 template <class U> class C; // template_header_p is true
14023 template <class T> class C<T>::D {
14024 class C *c2; // DECL_SELF_REFERENCE_P is true
14025 }; */
14026
14027 t = check_elaborated_type_specifier (tag_code,
14028 decl,
14029 template_header_p
14030 | DECL_SELF_REFERENCE_P (decl));
14031 if (template_header_p && t && CLASS_TYPE_P (t)
14032 && (!CLASSTYPE_TEMPLATE_INFO (t)
14033 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
14034 {
14035 error ("%qT is not a template", t);
14036 inform (location_of (t), "previous declaration here");
14037 if (TYPE_CLASS_SCOPE_P (t)
14038 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
14039 inform (input_location,
14040 "perhaps you want to explicitly add %<%T::%>",
14041 TYPE_CONTEXT (t));
14042 t = error_mark_node;
14043 }
14044
14045 return t;
14046 }
14047 else if (decl && TREE_CODE (decl) == TREE_LIST)
14048 {
14049 error ("reference to %qD is ambiguous", name);
14050 print_candidates (decl);
14051 return error_mark_node;
14052 }
14053 else
14054 return NULL_TREE;
14055 }
14056
14057 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
14058 Define the tag as a forward-reference if it is not defined.
14059
14060 If a declaration is given, process it here, and report an error if
14061 multiple declarations are not identical.
14062
14063 SCOPE is TS_CURRENT when this is also a definition. Only look in
14064 the current frame for the name (since C++ allows new names in any
14065 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
14066 declaration. Only look beginning from the current scope outward up
14067 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
14068
14069 TEMPLATE_HEADER_P is true when this declaration is preceded by
14070 a set of template parameters. */
14071
14072 static tree
14073 xref_tag_1 (enum tag_types tag_code, tree name,
14074 tag_scope scope, bool template_header_p)
14075 {
14076 enum tree_code code;
14077 tree context = NULL_TREE;
14078
14079 gcc_assert (identifier_p (name));
14080
14081 switch (tag_code)
14082 {
14083 case record_type:
14084 case class_type:
14085 code = RECORD_TYPE;
14086 break;
14087 case union_type:
14088 code = UNION_TYPE;
14089 break;
14090 case enum_type:
14091 code = ENUMERAL_TYPE;
14092 break;
14093 default:
14094 gcc_unreachable ();
14095 }
14096
14097 /* In case of anonymous name, xref_tag is only called to
14098 make type node and push name. Name lookup is not required. */
14099 tree t = NULL_TREE;
14100 if (scope != ts_lambda && !IDENTIFIER_ANON_P (name))
14101 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
14102
14103 if (t == error_mark_node)
14104 return error_mark_node;
14105
14106 if (scope != ts_current && t && current_class_type
14107 && template_class_depth (current_class_type)
14108 && template_header_p)
14109 {
14110 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
14111 return t;
14112
14113 /* Since SCOPE is not TS_CURRENT, we are not looking at a
14114 definition of this tag. Since, in addition, we are currently
14115 processing a (member) template declaration of a template
14116 class, we must be very careful; consider:
14117
14118 template <class X> struct S1
14119
14120 template <class U> struct S2
14121 {
14122 template <class V> friend struct S1;
14123 };
14124
14125 Here, the S2::S1 declaration should not be confused with the
14126 outer declaration. In particular, the inner version should
14127 have a template parameter of level 2, not level 1.
14128
14129 On the other hand, when presented with:
14130
14131 template <class T> struct S1
14132 {
14133 template <class U> struct S2 {};
14134 template <class U> friend struct S2;
14135 };
14136
14137 the friend must find S1::S2 eventually. We accomplish this
14138 by making sure that the new type we create to represent this
14139 declaration has the right TYPE_CONTEXT. */
14140 context = TYPE_CONTEXT (t);
14141 t = NULL_TREE;
14142 }
14143
14144 if (! t)
14145 {
14146 /* If no such tag is yet defined, create a forward-reference node
14147 and record it as the "definition".
14148 When a real declaration of this type is found,
14149 the forward-reference will be altered into a real type. */
14150 if (code == ENUMERAL_TYPE)
14151 {
14152 error ("use of enum %q#D without previous declaration", name);
14153 return error_mark_node;
14154 }
14155 else
14156 {
14157 t = make_class_type (code);
14158 TYPE_CONTEXT (t) = context;
14159 if (scope == ts_lambda)
14160 {
14161 /* Mark it as a lambda type. */
14162 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
14163 /* And push it into current scope. */
14164 scope = ts_current;
14165 }
14166 t = pushtag (name, t, scope);
14167 }
14168 }
14169 else
14170 {
14171 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
14172 {
14173 /* Check that we aren't trying to overload a class with different
14174 constraints. */
14175 tree constr = NULL_TREE;
14176 if (current_template_parms)
14177 {
14178 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
14179 constr = build_constraints (reqs, NULL_TREE);
14180 }
14181 if (!redeclare_class_template (t, current_template_parms, constr))
14182 return error_mark_node;
14183 }
14184 else if (!processing_template_decl
14185 && CLASS_TYPE_P (t)
14186 && CLASSTYPE_IS_TEMPLATE (t))
14187 {
14188 error ("redeclaration of %qT as a non-template", t);
14189 inform (location_of (t), "previous declaration %qD", t);
14190 return error_mark_node;
14191 }
14192
14193 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
14194 {
14195 /* This is no longer an invisible friend. Make it
14196 visible. */
14197 tree decl = TYPE_NAME (t);
14198
14199 DECL_ANTICIPATED (decl) = false;
14200 DECL_FRIEND_P (decl) = false;
14201
14202 if (TYPE_TEMPLATE_INFO (t))
14203 {
14204 tree tmpl = TYPE_TI_TEMPLATE (t);
14205 DECL_ANTICIPATED (tmpl) = false;
14206 DECL_FRIEND_P (tmpl) = false;
14207 }
14208 }
14209 }
14210
14211 return t;
14212 }
14213
14214 /* Wrapper for xref_tag_1. */
14215
14216 tree
14217 xref_tag (enum tag_types tag_code, tree name,
14218 tag_scope scope, bool template_header_p)
14219 {
14220 tree ret;
14221 bool subtime;
14222 subtime = timevar_cond_start (TV_NAME_LOOKUP);
14223 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
14224 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
14225 return ret;
14226 }
14227
14228
14229 tree
14230 xref_tag_from_type (tree old, tree id, tag_scope scope)
14231 {
14232 enum tag_types tag_kind;
14233
14234 if (TREE_CODE (old) == RECORD_TYPE)
14235 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
14236 else
14237 tag_kind = union_type;
14238
14239 if (id == NULL_TREE)
14240 id = TYPE_IDENTIFIER (old);
14241
14242 return xref_tag (tag_kind, id, scope, false);
14243 }
14244
14245 /* Create the binfo hierarchy for REF with (possibly NULL) base list
14246 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
14247 access_* node, and the TREE_VALUE is the type of the base-class.
14248 Non-NULL TREE_TYPE indicates virtual inheritance. */
14249
14250 void
14251 xref_basetypes (tree ref, tree base_list)
14252 {
14253 tree *basep;
14254 tree binfo, base_binfo;
14255 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
14256 unsigned max_bases = 0; /* Maximum direct bases. */
14257 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
14258 int i;
14259 tree default_access;
14260 tree igo_prev; /* Track Inheritance Graph Order. */
14261
14262 if (ref == error_mark_node)
14263 return;
14264
14265 /* The base of a derived class is private by default, all others are
14266 public. */
14267 default_access = (TREE_CODE (ref) == RECORD_TYPE
14268 && CLASSTYPE_DECLARED_CLASS (ref)
14269 ? access_private_node : access_public_node);
14270
14271 /* First, make sure that any templates in base-classes are
14272 instantiated. This ensures that if we call ourselves recursively
14273 we do not get confused about which classes are marked and which
14274 are not. */
14275 basep = &base_list;
14276 while (*basep)
14277 {
14278 tree basetype = TREE_VALUE (*basep);
14279
14280 /* The dependent_type_p call below should really be dependent_scope_p
14281 so that we give a hard error about using an incomplete type as a
14282 base, but we allow it with a pedwarn for backward
14283 compatibility. */
14284 if (processing_template_decl
14285 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
14286 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
14287 if (!dependent_type_p (basetype)
14288 && !complete_type_or_else (basetype, NULL))
14289 /* An incomplete type. Remove it from the list. */
14290 *basep = TREE_CHAIN (*basep);
14291 else
14292 {
14293 max_bases++;
14294 if (TREE_TYPE (*basep))
14295 max_dvbases++;
14296 if (CLASS_TYPE_P (basetype))
14297 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14298 basep = &TREE_CHAIN (*basep);
14299 }
14300 }
14301 max_vbases += max_dvbases;
14302
14303 TYPE_MARKED_P (ref) = 1;
14304
14305 /* The binfo slot should be empty, unless this is an (ill-formed)
14306 redefinition. */
14307 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
14308
14309 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
14310
14311 binfo = make_tree_binfo (max_bases);
14312
14313 TYPE_BINFO (ref) = binfo;
14314 BINFO_OFFSET (binfo) = size_zero_node;
14315 BINFO_TYPE (binfo) = ref;
14316
14317 /* Apply base-class info set up to the variants of this type. */
14318 fixup_type_variants (ref);
14319
14320 if (max_bases)
14321 {
14322 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
14323 /* A C++98 POD cannot have base classes. */
14324 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
14325
14326 if (TREE_CODE (ref) == UNION_TYPE)
14327 {
14328 error ("derived union %qT invalid", ref);
14329 return;
14330 }
14331 }
14332
14333 if (max_bases > 1)
14334 warning (OPT_Wmultiple_inheritance,
14335 "%qT defined with multiple direct bases", ref);
14336
14337 if (max_vbases)
14338 {
14339 /* An aggregate can't have virtual base classes. */
14340 CLASSTYPE_NON_AGGREGATE (ref) = true;
14341
14342 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
14343
14344 if (max_dvbases)
14345 warning (OPT_Wvirtual_inheritance,
14346 "%qT defined with direct virtual base", ref);
14347 }
14348
14349 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
14350 {
14351 tree access = TREE_PURPOSE (base_list);
14352 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
14353 tree basetype = TREE_VALUE (base_list);
14354
14355 if (access == access_default_node)
14356 access = default_access;
14357
14358 /* Before C++17, an aggregate cannot have base classes. In C++17, an
14359 aggregate can't have virtual, private, or protected base classes. */
14360 if (cxx_dialect < cxx17
14361 || access != access_public_node
14362 || via_virtual)
14363 CLASSTYPE_NON_AGGREGATE (ref) = true;
14364
14365 if (PACK_EXPANSION_P (basetype))
14366 basetype = PACK_EXPANSION_PATTERN (basetype);
14367 if (TREE_CODE (basetype) == TYPE_DECL)
14368 basetype = TREE_TYPE (basetype);
14369 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
14370 {
14371 error ("base type %qT fails to be a struct or class type",
14372 basetype);
14373 goto dropped_base;
14374 }
14375
14376 base_binfo = NULL_TREE;
14377 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
14378 {
14379 base_binfo = TYPE_BINFO (basetype);
14380 /* The original basetype could have been a typedef'd type. */
14381 basetype = BINFO_TYPE (base_binfo);
14382
14383 /* Inherit flags from the base. */
14384 TYPE_HAS_NEW_OPERATOR (ref)
14385 |= TYPE_HAS_NEW_OPERATOR (basetype);
14386 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
14387 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
14388 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
14389 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
14390 CLASSTYPE_DIAMOND_SHAPED_P (ref)
14391 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
14392 CLASSTYPE_REPEATED_BASE_P (ref)
14393 |= CLASSTYPE_REPEATED_BASE_P (basetype);
14394 }
14395
14396 /* We must do this test after we've seen through a typedef
14397 type. */
14398 if (TYPE_MARKED_P (basetype))
14399 {
14400 if (basetype == ref)
14401 error ("recursive type %qT undefined", basetype);
14402 else
14403 error ("duplicate base type %qT invalid", basetype);
14404 goto dropped_base;
14405 }
14406
14407 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
14408 /* Regenerate the pack expansion for the bases. */
14409 basetype = make_pack_expansion (basetype);
14410
14411 TYPE_MARKED_P (basetype) = 1;
14412
14413 base_binfo = copy_binfo (base_binfo, basetype, ref,
14414 &igo_prev, via_virtual);
14415 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
14416 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
14417
14418 BINFO_BASE_APPEND (binfo, base_binfo);
14419 BINFO_BASE_ACCESS_APPEND (binfo, access);
14420 continue;
14421
14422 dropped_base:
14423 /* Update max_vbases to reflect the reality that we are dropping
14424 this base: if it reaches zero we want to undo the vec_alloc
14425 above to avoid inconsistencies during error-recovery: eg, in
14426 build_special_member_call, CLASSTYPE_VBASECLASSES non null
14427 and vtt null (c++/27952). */
14428 if (via_virtual)
14429 max_vbases--;
14430 if (CLASS_TYPE_P (basetype))
14431 max_vbases
14432 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14433 }
14434
14435 if (CLASSTYPE_VBASECLASSES (ref)
14436 && max_vbases == 0)
14437 vec_free (CLASSTYPE_VBASECLASSES (ref));
14438
14439 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
14440 /* If we didn't get max_vbases vbases, we must have shared at
14441 least one of them, and are therefore diamond shaped. */
14442 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
14443
14444 /* Unmark all the types. */
14445 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
14446 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14447 TYPE_MARKED_P (ref) = 0;
14448
14449 /* Now see if we have a repeated base type. */
14450 if (!CLASSTYPE_REPEATED_BASE_P (ref))
14451 {
14452 for (base_binfo = binfo; base_binfo;
14453 base_binfo = TREE_CHAIN (base_binfo))
14454 {
14455 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14456 {
14457 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
14458 break;
14459 }
14460 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
14461 }
14462 for (base_binfo = binfo; base_binfo;
14463 base_binfo = TREE_CHAIN (base_binfo))
14464 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14465 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14466 else
14467 break;
14468 }
14469 }
14470
14471 \f
14472 /* Copies the enum-related properties from type SRC to type DST.
14473 Used with the underlying type of an enum and the enum itself. */
14474 static void
14475 copy_type_enum (tree dst, tree src)
14476 {
14477 tree t;
14478 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
14479 {
14480 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
14481 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
14482 TYPE_SIZE (t) = TYPE_SIZE (src);
14483 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
14484 SET_TYPE_MODE (dst, TYPE_MODE (src));
14485 TYPE_PRECISION (t) = TYPE_PRECISION (src);
14486 unsigned valign = TYPE_ALIGN (src);
14487 if (TYPE_USER_ALIGN (t))
14488 valign = MAX (valign, TYPE_ALIGN (t));
14489 else
14490 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
14491 SET_TYPE_ALIGN (t, valign);
14492 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
14493 }
14494 }
14495
14496 /* Begin compiling the definition of an enumeration type.
14497 NAME is its name,
14498
14499 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
14500
14501 UNDERLYING_TYPE is the type that will be used as the storage for
14502 the enumeration type. This should be NULL_TREE if no storage type
14503 was specified.
14504
14505 ATTRIBUTES are any attributes specified after the enum-key.
14506
14507 SCOPED_ENUM_P is true if this is a scoped enumeration type.
14508
14509 if IS_NEW is not NULL, gets TRUE iff a new type is created.
14510
14511 Returns the type object, as yet incomplete.
14512 Also records info about it so that build_enumerator
14513 may be used to declare the individual values as they are read. */
14514
14515 tree
14516 start_enum (tree name, tree enumtype, tree underlying_type,
14517 tree attributes, bool scoped_enum_p, bool *is_new)
14518 {
14519 tree prevtype = NULL_TREE;
14520 gcc_assert (identifier_p (name));
14521
14522 if (is_new)
14523 *is_new = false;
14524 /* [C++0x dcl.enum]p5:
14525
14526 If not explicitly specified, the underlying type of a scoped
14527 enumeration type is int. */
14528 if (!underlying_type && scoped_enum_p)
14529 underlying_type = integer_type_node;
14530
14531 if (underlying_type)
14532 underlying_type = cv_unqualified (underlying_type);
14533
14534 /* If this is the real definition for a previous forward reference,
14535 fill in the contents in the same object that used to be the
14536 forward reference. */
14537 if (!enumtype)
14538 enumtype = lookup_and_check_tag (enum_type, name,
14539 /*tag_scope=*/ts_current,
14540 /*template_header_p=*/false);
14541
14542 /* In case of a template_decl, the only check that should be deferred
14543 to instantiation time is the comparison of underlying types. */
14544 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14545 {
14546 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14547 {
14548 error_at (input_location, "scoped/unscoped mismatch "
14549 "in enum %q#T", enumtype);
14550 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14551 "previous definition here");
14552 enumtype = error_mark_node;
14553 }
14554 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14555 {
14556 error_at (input_location, "underlying type mismatch "
14557 "in enum %q#T", enumtype);
14558 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14559 "previous definition here");
14560 enumtype = error_mark_node;
14561 }
14562 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14563 && !same_type_p (underlying_type,
14564 ENUM_UNDERLYING_TYPE (enumtype)))
14565 {
14566 error_at (input_location, "different underlying type "
14567 "in enum %q#T", enumtype);
14568 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14569 "previous definition here");
14570 underlying_type = NULL_TREE;
14571 }
14572 }
14573
14574 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14575 || processing_template_decl)
14576 {
14577 /* In case of error, make a dummy enum to allow parsing to
14578 continue. */
14579 if (enumtype == error_mark_node)
14580 {
14581 name = make_anon_name ();
14582 enumtype = NULL_TREE;
14583 }
14584
14585 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14586 of an opaque enum, or an opaque enum of an already defined
14587 enumeration (C++11).
14588 In any other case, it'll be NULL_TREE. */
14589 if (!enumtype)
14590 {
14591 if (is_new)
14592 *is_new = true;
14593 }
14594 prevtype = enumtype;
14595
14596 /* Do not push the decl more than once. */
14597 if (!enumtype
14598 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
14599 {
14600 enumtype = cxx_make_type (ENUMERAL_TYPE);
14601 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14602
14603 /* std::byte aliases anything. */
14604 if (enumtype != error_mark_node
14605 && TYPE_CONTEXT (enumtype) == std_node
14606 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14607 TYPE_ALIAS_SET (enumtype) = 0;
14608 }
14609 else
14610 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14611 false);
14612
14613 if (enumtype == error_mark_node)
14614 return error_mark_node;
14615
14616 /* The enum is considered opaque until the opening '{' of the
14617 enumerator list. */
14618 SET_OPAQUE_ENUM_P (enumtype, true);
14619 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14620 }
14621
14622 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14623
14624 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14625
14626 if (underlying_type)
14627 {
14628 if (ENUM_UNDERLYING_TYPE (enumtype))
14629 /* We already checked that it matches, don't change it to a different
14630 typedef variant. */;
14631 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14632 {
14633 copy_type_enum (enumtype, underlying_type);
14634 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14635 }
14636 else if (dependent_type_p (underlying_type))
14637 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14638 else
14639 error ("underlying type %qT of %qT must be an integral type",
14640 underlying_type, enumtype);
14641 }
14642
14643 /* If into a template class, the returned enum is always the first
14644 declaration (opaque or not) seen. This way all the references to
14645 this type will be to the same declaration. The following ones are used
14646 only to check for definition errors. */
14647 if (prevtype && processing_template_decl)
14648 return prevtype;
14649 else
14650 return enumtype;
14651 }
14652
14653 /* After processing and defining all the values of an enumeration type,
14654 install their decls in the enumeration type.
14655 ENUMTYPE is the type object. */
14656
14657 void
14658 finish_enum_value_list (tree enumtype)
14659 {
14660 tree values;
14661 tree underlying_type;
14662 tree decl;
14663 tree value;
14664 tree minnode, maxnode;
14665 tree t;
14666
14667 bool fixed_underlying_type_p
14668 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14669
14670 /* We built up the VALUES in reverse order. */
14671 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14672
14673 /* For an enum defined in a template, just set the type of the values;
14674 all further processing is postponed until the template is
14675 instantiated. We need to set the type so that tsubst of a CONST_DECL
14676 works. */
14677 if (processing_template_decl)
14678 {
14679 for (values = TYPE_VALUES (enumtype);
14680 values;
14681 values = TREE_CHAIN (values))
14682 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14683 return;
14684 }
14685
14686 /* Determine the minimum and maximum values of the enumerators. */
14687 if (TYPE_VALUES (enumtype))
14688 {
14689 minnode = maxnode = NULL_TREE;
14690
14691 for (values = TYPE_VALUES (enumtype);
14692 values;
14693 values = TREE_CHAIN (values))
14694 {
14695 decl = TREE_VALUE (values);
14696
14697 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14698 each enumerator has the type of its enumeration. Prior to the
14699 closing brace, the type of each enumerator is the type of its
14700 initializing value. */
14701 TREE_TYPE (decl) = enumtype;
14702
14703 /* Update the minimum and maximum values, if appropriate. */
14704 value = DECL_INITIAL (decl);
14705 if (value == error_mark_node)
14706 value = integer_zero_node;
14707 /* Figure out what the minimum and maximum values of the
14708 enumerators are. */
14709 if (!minnode)
14710 minnode = maxnode = value;
14711 else if (tree_int_cst_lt (maxnode, value))
14712 maxnode = value;
14713 else if (tree_int_cst_lt (value, minnode))
14714 minnode = value;
14715 }
14716 }
14717 else
14718 /* [dcl.enum]
14719
14720 If the enumerator-list is empty, the underlying type is as if
14721 the enumeration had a single enumerator with value 0. */
14722 minnode = maxnode = integer_zero_node;
14723
14724 if (!fixed_underlying_type_p)
14725 {
14726 /* Compute the number of bits require to represent all values of the
14727 enumeration. We must do this before the type of MINNODE and
14728 MAXNODE are transformed, since tree_int_cst_min_precision relies
14729 on the TREE_TYPE of the value it is passed. */
14730 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14731 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14732 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14733 int precision = MAX (lowprec, highprec);
14734 unsigned int itk;
14735 bool use_short_enum;
14736
14737 /* Determine the underlying type of the enumeration.
14738
14739 [dcl.enum]
14740
14741 The underlying type of an enumeration is an integral type that
14742 can represent all the enumerator values defined in the
14743 enumeration. It is implementation-defined which integral type is
14744 used as the underlying type for an enumeration except that the
14745 underlying type shall not be larger than int unless the value of
14746 an enumerator cannot fit in an int or unsigned int.
14747
14748 We use "int" or an "unsigned int" as the underlying type, even if
14749 a smaller integral type would work, unless the user has
14750 explicitly requested that we use the smallest possible type. The
14751 user can request that for all enumerations with a command line
14752 flag, or for just one enumeration with an attribute. */
14753
14754 use_short_enum = flag_short_enums
14755 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14756
14757 /* If the precision of the type was specified with an attribute and it
14758 was too small, give an error. Otherwise, use it. */
14759 if (TYPE_PRECISION (enumtype))
14760 {
14761 if (precision > TYPE_PRECISION (enumtype))
14762 error ("specified mode too small for enumerated values");
14763 else
14764 {
14765 use_short_enum = true;
14766 precision = TYPE_PRECISION (enumtype);
14767 }
14768 }
14769
14770 for (itk = (use_short_enum ? itk_char : itk_int);
14771 itk != itk_none;
14772 itk++)
14773 {
14774 underlying_type = integer_types[itk];
14775 if (underlying_type != NULL_TREE
14776 && TYPE_PRECISION (underlying_type) >= precision
14777 && TYPE_SIGN (underlying_type) == sgn)
14778 break;
14779 }
14780 if (itk == itk_none)
14781 {
14782 /* DR 377
14783
14784 IF no integral type can represent all the enumerator values, the
14785 enumeration is ill-formed. */
14786 error ("no integral type can represent all of the enumerator values "
14787 "for %qT", enumtype);
14788 precision = TYPE_PRECISION (long_long_integer_type_node);
14789 underlying_type = integer_types[itk_unsigned_long_long];
14790 }
14791
14792 /* [dcl.enum]
14793
14794 The value of sizeof() applied to an enumeration type, an object
14795 of an enumeration type, or an enumerator, is the value of sizeof()
14796 applied to the underlying type. */
14797 copy_type_enum (enumtype, underlying_type);
14798
14799 /* Compute the minimum and maximum values for the type.
14800
14801 [dcl.enum]
14802
14803 For an enumeration where emin is the smallest enumerator and emax
14804 is the largest, the values of the enumeration are the values of the
14805 underlying type in the range bmin to bmax, where bmin and bmax are,
14806 respectively, the smallest and largest values of the smallest bit-
14807 field that can store emin and emax. */
14808
14809 /* The middle-end currently assumes that types with TYPE_PRECISION
14810 narrower than their underlying type are suitably zero or sign
14811 extended to fill their mode. Similarly, it assumes that the front
14812 end assures that a value of a particular type must be within
14813 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14814
14815 We used to set these fields based on bmin and bmax, but that led
14816 to invalid assumptions like optimizing away bounds checking. So
14817 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14818 TYPE_MAX_VALUE to the values for the mode above and only restrict
14819 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14820 ENUM_UNDERLYING_TYPE (enumtype)
14821 = build_distinct_type_copy (underlying_type);
14822 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14823 set_min_and_max_values_for_integral_type
14824 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14825
14826 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14827 if (flag_strict_enums)
14828 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14829 }
14830 else
14831 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14832
14833 /* Convert each of the enumerators to the type of the underlying
14834 type of the enumeration. */
14835 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14836 {
14837 location_t saved_location;
14838
14839 decl = TREE_VALUE (values);
14840 saved_location = input_location;
14841 input_location = DECL_SOURCE_LOCATION (decl);
14842 if (fixed_underlying_type_p)
14843 /* If the enumeration type has a fixed underlying type, we
14844 already checked all of the enumerator values. */
14845 value = DECL_INITIAL (decl);
14846 else
14847 value = perform_implicit_conversion (underlying_type,
14848 DECL_INITIAL (decl),
14849 tf_warning_or_error);
14850 input_location = saved_location;
14851
14852 /* Do not clobber shared ints. */
14853 if (value != error_mark_node)
14854 {
14855 value = copy_node (value);
14856
14857 TREE_TYPE (value) = enumtype;
14858 }
14859 DECL_INITIAL (decl) = value;
14860 }
14861
14862 /* Fix up all variant types of this enum type. */
14863 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14864 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14865
14866 if (at_class_scope_p ()
14867 && COMPLETE_TYPE_P (current_class_type)
14868 && UNSCOPED_ENUM_P (enumtype))
14869 {
14870 insert_late_enum_def_bindings (current_class_type, enumtype);
14871 /* TYPE_FIELDS needs fixup. */
14872 fixup_type_variants (current_class_type);
14873 }
14874
14875 /* Finish debugging output for this type. */
14876 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14877
14878 /* Each enumerator now has the type of its enumeration. Clear the cache
14879 so that this change in types doesn't confuse us later on. */
14880 clear_cv_and_fold_caches ();
14881 }
14882
14883 /* Finishes the enum type. This is called only the first time an
14884 enumeration is seen, be it opaque or odinary.
14885 ENUMTYPE is the type object. */
14886
14887 void
14888 finish_enum (tree enumtype)
14889 {
14890 if (processing_template_decl)
14891 {
14892 if (at_function_scope_p ())
14893 add_stmt (build_min (TAG_DEFN, enumtype));
14894 return;
14895 }
14896
14897 /* If this is a forward declaration, there should not be any variants,
14898 though we can get a variant in the middle of an enum-specifier with
14899 wacky code like 'enum E { e = sizeof(const E*) };' */
14900 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14901 && (TYPE_VALUES (enumtype)
14902 || !TYPE_NEXT_VARIANT (enumtype)));
14903 }
14904
14905 /* Build and install a CONST_DECL for an enumeration constant of the
14906 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14907 Apply ATTRIBUTES if available. LOC is the location of NAME.
14908 Assignment of sequential values by default is handled here. */
14909
14910 void
14911 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14912 location_t loc)
14913 {
14914 tree decl;
14915 tree context;
14916 tree type;
14917
14918 /* scalar_constant_value will pull out this expression, so make sure
14919 it's folded as appropriate. */
14920 if (processing_template_decl)
14921 value = fold_non_dependent_expr (value);
14922
14923 /* If the VALUE was erroneous, pretend it wasn't there; that will
14924 result in the enum being assigned the next value in sequence. */
14925 if (value == error_mark_node)
14926 value = NULL_TREE;
14927
14928 /* Remove no-op casts from the value. */
14929 if (value)
14930 STRIP_TYPE_NOPS (value);
14931
14932 if (! processing_template_decl)
14933 {
14934 /* Validate and default VALUE. */
14935 if (value != NULL_TREE)
14936 {
14937 if (!ENUM_UNDERLYING_TYPE (enumtype))
14938 {
14939 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14940 value, true);
14941 if (tmp_value)
14942 value = tmp_value;
14943 }
14944 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14945 (TREE_TYPE (value)))
14946 value = perform_implicit_conversion_flags
14947 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14948 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14949
14950 if (value == error_mark_node)
14951 value = NULL_TREE;
14952
14953 if (value != NULL_TREE)
14954 {
14955 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14956 (TREE_TYPE (value)))
14957 {
14958 error ("enumerator value for %qD must have integral or "
14959 "unscoped enumeration type", name);
14960 value = NULL_TREE;
14961 }
14962 else
14963 {
14964 value = cxx_constant_value (value);
14965
14966 if (TREE_CODE (value) != INTEGER_CST)
14967 {
14968 error ("enumerator value for %qD is not an integer "
14969 "constant", name);
14970 value = NULL_TREE;
14971 }
14972 }
14973 }
14974 }
14975
14976 /* Default based on previous value. */
14977 if (value == NULL_TREE)
14978 {
14979 if (TYPE_VALUES (enumtype))
14980 {
14981 tree prev_value;
14982
14983 /* C++03 7.2/4: If no initializer is specified for the first
14984 enumerator, the type is an unspecified integral
14985 type. Otherwise the type is the same as the type of the
14986 initializing value of the preceding enumerator unless the
14987 incremented value is not representable in that type, in
14988 which case the type is an unspecified integral type
14989 sufficient to contain the incremented value. */
14990 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14991 if (error_operand_p (prev_value))
14992 value = error_mark_node;
14993 else
14994 {
14995 wi::overflow_type overflowed;
14996 tree type = TREE_TYPE (prev_value);
14997 signop sgn = TYPE_SIGN (type);
14998 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14999 &overflowed);
15000 if (!overflowed)
15001 {
15002 bool pos = !wi::neg_p (wi, sgn);
15003 if (!wi::fits_to_tree_p (wi, type))
15004 {
15005 unsigned int itk;
15006 for (itk = itk_int; itk != itk_none; itk++)
15007 {
15008 type = integer_types[itk];
15009 if (type != NULL_TREE
15010 && (pos || !TYPE_UNSIGNED (type))
15011 && wi::fits_to_tree_p (wi, type))
15012 break;
15013 }
15014 if (type && cxx_dialect < cxx11
15015 && itk > itk_unsigned_long)
15016 pedwarn (input_location, OPT_Wlong_long,
15017 pos ? G_("\
15018 incremented enumerator value is too large for %<unsigned long%>") : G_("\
15019 incremented enumerator value is too large for %<long%>"));
15020 }
15021 if (type == NULL_TREE)
15022 overflowed = wi::OVF_UNKNOWN;
15023 else
15024 value = wide_int_to_tree (type, wi);
15025 }
15026
15027 if (overflowed)
15028 {
15029 error ("overflow in enumeration values at %qD", name);
15030 value = error_mark_node;
15031 }
15032 }
15033 }
15034 else
15035 value = integer_zero_node;
15036 }
15037
15038 /* Remove no-op casts from the value. */
15039 STRIP_TYPE_NOPS (value);
15040
15041 /* If the underlying type of the enum is fixed, check whether
15042 the enumerator values fits in the underlying type. If it
15043 does not fit, the program is ill-formed [C++0x dcl.enum]. */
15044 if (ENUM_UNDERLYING_TYPE (enumtype)
15045 && value
15046 && TREE_CODE (value) == INTEGER_CST)
15047 {
15048 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
15049 error ("enumerator value %qE is outside the range of underlying "
15050 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
15051
15052 /* Convert the value to the appropriate type. */
15053 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
15054 }
15055 }
15056
15057 /* C++ associates enums with global, function, or class declarations. */
15058 context = current_scope ();
15059
15060 /* Build the actual enumeration constant. Note that the enumeration
15061 constants have the underlying type of the enum (if it is fixed)
15062 or the type of their initializer (if the underlying type of the
15063 enum is not fixed):
15064
15065 [ C++0x dcl.enum ]
15066
15067 If the underlying type is fixed, the type of each enumerator
15068 prior to the closing brace is the underlying type; if the
15069 initializing value of an enumerator cannot be represented by
15070 the underlying type, the program is ill-formed. If the
15071 underlying type is not fixed, the type of each enumerator is
15072 the type of its initializing value.
15073
15074 If the underlying type is not fixed, it will be computed by
15075 finish_enum and we will reset the type of this enumerator. Of
15076 course, if we're processing a template, there may be no value. */
15077 type = value ? TREE_TYPE (value) : NULL_TREE;
15078
15079 decl = build_decl (loc, CONST_DECL, name, type);
15080
15081 DECL_CONTEXT (decl) = enumtype;
15082 TREE_CONSTANT (decl) = 1;
15083 TREE_READONLY (decl) = 1;
15084 DECL_INITIAL (decl) = value;
15085
15086 if (attributes)
15087 cplus_decl_attributes (&decl, attributes, 0);
15088
15089 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
15090 {
15091 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
15092 on the TYPE_FIELDS list for `S'. (That's so that you can say
15093 things like `S::i' later.) */
15094
15095 /* The enumerator may be getting declared outside of its enclosing
15096 class, like so:
15097
15098 class S { public: enum E : int; }; enum S::E : int { i = 7; };
15099
15100 For which case we need to make sure that the access of `S::i'
15101 matches the access of `S::E'. */
15102 tree saved_cas = current_access_specifier;
15103 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
15104 current_access_specifier = access_private_node;
15105 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
15106 current_access_specifier = access_protected_node;
15107 else
15108 current_access_specifier = access_public_node;
15109
15110 finish_member_declaration (decl);
15111
15112 current_access_specifier = saved_cas;
15113 }
15114 else
15115 pushdecl (decl);
15116
15117 /* Add this enumeration constant to the list for this type. */
15118 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
15119 }
15120
15121 /* Look for an enumerator with the given NAME within the enumeration
15122 type ENUMTYPE. This routine is used primarily for qualified name
15123 lookup into an enumerator in C++0x, e.g.,
15124
15125 enum class Color { Red, Green, Blue };
15126
15127 Color color = Color::Red;
15128
15129 Returns the value corresponding to the enumerator, or
15130 NULL_TREE if no such enumerator was found. */
15131 tree
15132 lookup_enumerator (tree enumtype, tree name)
15133 {
15134 tree e;
15135 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
15136
15137 e = purpose_member (name, TYPE_VALUES (enumtype));
15138 return e? TREE_VALUE (e) : NULL_TREE;
15139 }
15140
15141 \f
15142 /* We're defining DECL. Make sure that its type is OK. */
15143
15144 static void
15145 check_function_type (tree decl, tree current_function_parms)
15146 {
15147 tree fntype = TREE_TYPE (decl);
15148 tree return_type = complete_type (TREE_TYPE (fntype));
15149
15150 /* In a function definition, arg types must be complete. */
15151 require_complete_types_for_parms (current_function_parms);
15152
15153 if (dependent_type_p (return_type)
15154 || type_uses_auto (return_type))
15155 return;
15156 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
15157 {
15158 tree args = TYPE_ARG_TYPES (fntype);
15159
15160 error ("return type %q#T is incomplete", return_type);
15161
15162 /* Make it return void instead. */
15163 if (TREE_CODE (fntype) == METHOD_TYPE)
15164 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
15165 void_type_node,
15166 TREE_CHAIN (args));
15167 else
15168 fntype = build_function_type (void_type_node, args);
15169 fntype = (cp_build_type_attribute_variant
15170 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
15171 fntype = cxx_copy_lang_qualifiers (fntype, TREE_TYPE (decl));
15172 TREE_TYPE (decl) = fntype;
15173 }
15174 else
15175 {
15176 abstract_virtuals_error (decl, TREE_TYPE (fntype));
15177 maybe_warn_parm_abi (TREE_TYPE (fntype),
15178 DECL_SOURCE_LOCATION (decl));
15179 }
15180 }
15181
15182 /* True iff FN is an implicitly-defined default constructor. */
15183
15184 static bool
15185 implicit_default_ctor_p (tree fn)
15186 {
15187 return (DECL_CONSTRUCTOR_P (fn)
15188 && !user_provided_p (fn)
15189 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
15190 }
15191
15192 /* Clobber the contents of *this to let the back end know that the object
15193 storage is dead when we enter the constructor or leave the destructor. */
15194
15195 static tree
15196 build_clobber_this ()
15197 {
15198 /* Clobbering an empty base is pointless, and harmful if its one byte
15199 TYPE_SIZE overlays real data. */
15200 if (is_empty_class (current_class_type))
15201 return void_node;
15202
15203 /* If we have virtual bases, clobber the whole object, but only if we're in
15204 charge. If we don't have virtual bases, clobber the as-base type so we
15205 don't mess with tail padding. */
15206 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
15207
15208 tree ctype = current_class_type;
15209 if (!vbases)
15210 ctype = CLASSTYPE_AS_BASE (ctype);
15211
15212 tree clobber = build_clobber (ctype);
15213
15214 tree thisref = current_class_ref;
15215 if (ctype != current_class_type)
15216 {
15217 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
15218 thisref = convert_from_reference (thisref);
15219 }
15220
15221 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
15222 if (vbases)
15223 exprstmt = build_if_in_charge (exprstmt);
15224
15225 return exprstmt;
15226 }
15227
15228 /* Create the FUNCTION_DECL for a function definition.
15229 DECLSPECS and DECLARATOR are the parts of the declaration;
15230 they describe the function's name and the type it returns,
15231 but twisted together in a fashion that parallels the syntax of C.
15232
15233 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
15234 DECLARATOR is really the DECL for the function we are about to
15235 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
15236 indicating that the function is an inline defined in-class.
15237
15238 This function creates a binding context for the function body
15239 as well as setting up the FUNCTION_DECL in current_function_decl.
15240
15241 For C++, we must first check whether that datum makes any sense.
15242 For example, "class A local_a(1,2);" means that variable local_a
15243 is an aggregate of type A, which should have a constructor
15244 applied to it with the argument list [1, 2].
15245
15246 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
15247 or may be a BLOCK if the function has been defined previously
15248 in this translation unit. On exit, DECL_INITIAL (decl1) will be
15249 error_mark_node if the function has never been defined, or
15250 a BLOCK if the function has been defined somewhere. */
15251
15252 bool
15253 start_preparsed_function (tree decl1, tree attrs, int flags)
15254 {
15255 tree ctype = NULL_TREE;
15256 tree fntype;
15257 tree restype;
15258 int doing_friend = 0;
15259 cp_binding_level *bl;
15260 tree current_function_parms;
15261 struct c_fileinfo *finfo
15262 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
15263 bool honor_interface;
15264
15265 /* Sanity check. */
15266 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
15267 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
15268
15269 fntype = TREE_TYPE (decl1);
15270 if (TREE_CODE (fntype) == METHOD_TYPE)
15271 ctype = TYPE_METHOD_BASETYPE (fntype);
15272
15273 /* ISO C++ 11.4/5. A friend function defined in a class is in
15274 the (lexical) scope of the class in which it is defined. */
15275 if (!ctype && DECL_FRIEND_P (decl1))
15276 {
15277 ctype = DECL_FRIEND_CONTEXT (decl1);
15278
15279 /* CTYPE could be null here if we're dealing with a template;
15280 for example, `inline friend float foo()' inside a template
15281 will have no CTYPE set. */
15282 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
15283 ctype = NULL_TREE;
15284 else
15285 doing_friend = 1;
15286 }
15287
15288 if (DECL_DECLARED_INLINE_P (decl1)
15289 && lookup_attribute ("noinline", attrs))
15290 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
15291 "inline function %qD given attribute %qs", decl1, "noinline");
15292
15293 /* Handle gnu_inline attribute. */
15294 if (GNU_INLINE_P (decl1))
15295 {
15296 DECL_EXTERNAL (decl1) = 1;
15297 DECL_NOT_REALLY_EXTERN (decl1) = 0;
15298 DECL_INTERFACE_KNOWN (decl1) = 1;
15299 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
15300 }
15301
15302 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
15303 /* This is a constructor, we must ensure that any default args
15304 introduced by this definition are propagated to the clones
15305 now. The clones are used directly in overload resolution. */
15306 adjust_clone_args (decl1);
15307
15308 /* Sometimes we don't notice that a function is a static member, and
15309 build a METHOD_TYPE for it. Fix that up now. */
15310 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
15311 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
15312
15313 /* Set up current_class_type, and enter the scope of the class, if
15314 appropriate. */
15315 if (ctype)
15316 push_nested_class (ctype);
15317 else if (DECL_STATIC_FUNCTION_P (decl1))
15318 push_nested_class (DECL_CONTEXT (decl1));
15319
15320 /* Now that we have entered the scope of the class, we must restore
15321 the bindings for any template parameters surrounding DECL1, if it
15322 is an inline member template. (Order is important; consider the
15323 case where a template parameter has the same name as a field of
15324 the class.) It is not until after this point that
15325 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
15326 if (flags & SF_INCLASS_INLINE)
15327 maybe_begin_member_template_processing (decl1);
15328
15329 /* Effective C++ rule 15. */
15330 if (warn_ecpp
15331 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
15332 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
15333 && VOID_TYPE_P (TREE_TYPE (fntype)))
15334 warning (OPT_Weffc__,
15335 "%<operator=%> should return a reference to %<*this%>");
15336
15337 /* Make the init_value nonzero so pushdecl knows this is not tentative.
15338 error_mark_node is replaced below (in poplevel) with the BLOCK. */
15339 if (!DECL_INITIAL (decl1))
15340 DECL_INITIAL (decl1) = error_mark_node;
15341
15342 /* This function exists in static storage.
15343 (This does not mean `static' in the C sense!) */
15344 TREE_STATIC (decl1) = 1;
15345
15346 /* We must call push_template_decl after current_class_type is set
15347 up. (If we are processing inline definitions after exiting a
15348 class scope, current_class_type will be NULL_TREE until set above
15349 by push_nested_class.) */
15350 if (processing_template_decl)
15351 {
15352 tree newdecl1 = push_template_decl (decl1);
15353 if (newdecl1 == error_mark_node)
15354 {
15355 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
15356 pop_nested_class ();
15357 return false;
15358 }
15359 decl1 = newdecl1;
15360 }
15361
15362 /* Make sure the parameter and return types are reasonable. When
15363 you declare a function, these types can be incomplete, but they
15364 must be complete when you define the function. */
15365 check_function_type (decl1, DECL_ARGUMENTS (decl1));
15366
15367 /* Build the return declaration for the function. */
15368 restype = TREE_TYPE (fntype);
15369
15370 if (DECL_RESULT (decl1) == NULL_TREE)
15371 {
15372 tree resdecl;
15373
15374 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
15375 DECL_ARTIFICIAL (resdecl) = 1;
15376 DECL_IGNORED_P (resdecl) = 1;
15377 DECL_RESULT (decl1) = resdecl;
15378
15379 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
15380 }
15381
15382 /* Record the decl so that the function name is defined.
15383 If we already have a decl for this name, and it is a FUNCTION_DECL,
15384 use the old decl. */
15385 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
15386 {
15387 /* A specialization is not used to guide overload resolution. */
15388 if (!DECL_FUNCTION_MEMBER_P (decl1)
15389 && !(DECL_USE_TEMPLATE (decl1) &&
15390 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
15391 {
15392 tree olddecl = pushdecl (decl1);
15393
15394 if (olddecl == error_mark_node)
15395 /* If something went wrong when registering the declaration,
15396 use DECL1; we have to have a FUNCTION_DECL to use when
15397 parsing the body of the function. */
15398 ;
15399 else
15400 {
15401 /* Otherwise, OLDDECL is either a previous declaration
15402 of the same function or DECL1 itself. */
15403
15404 if (warn_missing_declarations
15405 && olddecl == decl1
15406 && !DECL_MAIN_P (decl1)
15407 && TREE_PUBLIC (decl1)
15408 && !DECL_DECLARED_INLINE_P (decl1))
15409 {
15410 tree context;
15411
15412 /* Check whether DECL1 is in an anonymous
15413 namespace. */
15414 for (context = DECL_CONTEXT (decl1);
15415 context;
15416 context = DECL_CONTEXT (context))
15417 {
15418 if (TREE_CODE (context) == NAMESPACE_DECL
15419 && DECL_NAME (context) == NULL_TREE)
15420 break;
15421 }
15422
15423 if (context == NULL)
15424 warning_at (DECL_SOURCE_LOCATION (decl1),
15425 OPT_Wmissing_declarations,
15426 "no previous declaration for %qD", decl1);
15427 }
15428
15429 decl1 = olddecl;
15430 }
15431 }
15432 else
15433 {
15434 /* We need to set the DECL_CONTEXT. */
15435 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
15436 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
15437 }
15438 fntype = TREE_TYPE (decl1);
15439 restype = TREE_TYPE (fntype);
15440
15441 /* If #pragma weak applies, mark the decl appropriately now.
15442 The pragma only applies to global functions. Because
15443 determining whether or not the #pragma applies involves
15444 computing the mangled name for the declaration, we cannot
15445 apply the pragma until after we have merged this declaration
15446 with any previous declarations; if the original declaration
15447 has a linkage specification, that specification applies to
15448 the definition as well, and may affect the mangled name. */
15449 if (DECL_FILE_SCOPE_P (decl1))
15450 maybe_apply_pragma_weak (decl1);
15451 }
15452
15453 /* We are now in the scope of the function being defined. */
15454 current_function_decl = decl1;
15455
15456 /* Save the parm names or decls from this function's declarator
15457 where store_parm_decls will find them. */
15458 current_function_parms = DECL_ARGUMENTS (decl1);
15459
15460 /* Let the user know we're compiling this function. */
15461 announce_function (decl1);
15462
15463 gcc_assert (DECL_INITIAL (decl1));
15464
15465 /* This function may already have been parsed, in which case just
15466 return; our caller will skip over the body without parsing. */
15467 if (DECL_INITIAL (decl1) != error_mark_node)
15468 return true;
15469
15470 /* Initialize RTL machinery. We cannot do this until
15471 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
15472 even when processing a template; this is how we get
15473 CFUN set up, and our per-function variables initialized.
15474 FIXME factor out the non-RTL stuff. */
15475 bl = current_binding_level;
15476 allocate_struct_function (decl1, processing_template_decl);
15477
15478 /* Initialize the language data structures. Whenever we start
15479 a new function, we destroy temporaries in the usual way. */
15480 cfun->language = ggc_cleared_alloc<language_function> ();
15481 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15482 current_binding_level = bl;
15483
15484 /* If we are (erroneously) defining a function that we have already
15485 defined before, wipe out what we knew before. */
15486 gcc_checking_assert (!DECL_PENDING_INLINE_P (decl1));
15487 FNDECL_USED_AUTO (decl1) = false;
15488 DECL_SAVED_AUTO_RETURN_TYPE (decl1) = NULL;
15489
15490 if (!processing_template_decl && type_uses_auto (restype))
15491 {
15492 FNDECL_USED_AUTO (decl1) = true;
15493 DECL_SAVED_AUTO_RETURN_TYPE (decl1) = restype;
15494 }
15495
15496 /* Start the statement-tree, start the tree now. */
15497 DECL_SAVED_TREE (decl1) = push_stmt_list ();
15498
15499 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
15500 {
15501 /* We know that this was set up by `grokclassfn'. We do not
15502 wait until `store_parm_decls', since evil parse errors may
15503 never get us to that point. Here we keep the consistency
15504 between `current_class_type' and `current_class_ptr'. */
15505 tree t = DECL_ARGUMENTS (decl1);
15506
15507 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
15508 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
15509
15510 cp_function_chain->x_current_class_ref
15511 = cp_build_fold_indirect_ref (t);
15512 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
15513 cp_function_chain->x_current_class_ptr = t;
15514
15515 /* Constructors and destructors need to know whether they're "in
15516 charge" of initializing virtual base classes. */
15517 t = DECL_CHAIN (t);
15518 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15519 {
15520 current_in_charge_parm = t;
15521 t = DECL_CHAIN (t);
15522 }
15523 if (DECL_HAS_VTT_PARM_P (decl1))
15524 {
15525 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15526 current_vtt_parm = t;
15527 }
15528 }
15529
15530 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15531 /* Implicitly-defined methods (like the
15532 destructor for a class in which no destructor
15533 is explicitly declared) must not be defined
15534 until their definition is needed. So, we
15535 ignore interface specifications for
15536 compiler-generated functions. */
15537 && !DECL_ARTIFICIAL (decl1));
15538
15539 if (processing_template_decl)
15540 /* Don't mess with interface flags. */;
15541 else if (DECL_INTERFACE_KNOWN (decl1))
15542 {
15543 tree ctx = decl_function_context (decl1);
15544
15545 if (DECL_NOT_REALLY_EXTERN (decl1))
15546 DECL_EXTERNAL (decl1) = 0;
15547
15548 if (ctx != NULL_TREE && vague_linkage_p (ctx))
15549 /* This is a function in a local class in an extern inline
15550 or template function. */
15551 comdat_linkage (decl1);
15552 }
15553 /* If this function belongs to an interface, it is public.
15554 If it belongs to someone else's interface, it is also external.
15555 This only affects inlines and template instantiations. */
15556 else if (!finfo->interface_unknown && honor_interface)
15557 {
15558 if (DECL_DECLARED_INLINE_P (decl1)
15559 || DECL_TEMPLATE_INSTANTIATION (decl1))
15560 {
15561 DECL_EXTERNAL (decl1)
15562 = (finfo->interface_only
15563 || (DECL_DECLARED_INLINE_P (decl1)
15564 && ! flag_implement_inlines
15565 && !DECL_VINDEX (decl1)));
15566
15567 /* For WIN32 we also want to put these in linkonce sections. */
15568 maybe_make_one_only (decl1);
15569 }
15570 else
15571 DECL_EXTERNAL (decl1) = 0;
15572 DECL_INTERFACE_KNOWN (decl1) = 1;
15573 /* If this function is in an interface implemented in this file,
15574 make sure that the back end knows to emit this function
15575 here. */
15576 if (!DECL_EXTERNAL (decl1))
15577 mark_needed (decl1);
15578 }
15579 else if (finfo->interface_unknown && finfo->interface_only
15580 && honor_interface)
15581 {
15582 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15583 interface, we will have both finfo->interface_unknown and
15584 finfo->interface_only set. In that case, we don't want to
15585 use the normal heuristics because someone will supply a
15586 #pragma implementation elsewhere, and deducing it here would
15587 produce a conflict. */
15588 comdat_linkage (decl1);
15589 DECL_EXTERNAL (decl1) = 0;
15590 DECL_INTERFACE_KNOWN (decl1) = 1;
15591 DECL_DEFER_OUTPUT (decl1) = 1;
15592 }
15593 else
15594 {
15595 /* This is a definition, not a reference.
15596 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15597 if (!GNU_INLINE_P (decl1))
15598 DECL_EXTERNAL (decl1) = 0;
15599
15600 if ((DECL_DECLARED_INLINE_P (decl1)
15601 || DECL_TEMPLATE_INSTANTIATION (decl1))
15602 && ! DECL_INTERFACE_KNOWN (decl1))
15603 DECL_DEFER_OUTPUT (decl1) = 1;
15604 else
15605 DECL_INTERFACE_KNOWN (decl1) = 1;
15606 }
15607
15608 /* Determine the ELF visibility attribute for the function. We must not
15609 do this before calling "pushdecl", as we must allow "duplicate_decls"
15610 to merge any attributes appropriately. We also need to wait until
15611 linkage is set. */
15612 if (!DECL_CLONED_FUNCTION_P (decl1))
15613 determine_visibility (decl1);
15614
15615 if (!processing_template_decl)
15616 maybe_instantiate_noexcept (decl1);
15617
15618 begin_scope (sk_function_parms, decl1);
15619
15620 ++function_depth;
15621
15622 if (DECL_DESTRUCTOR_P (decl1)
15623 || (DECL_CONSTRUCTOR_P (decl1)
15624 && targetm.cxx.cdtor_returns_this ()))
15625 {
15626 cdtor_label = create_artificial_label (input_location);
15627 LABEL_DECL_CDTOR (cdtor_label) = true;
15628 }
15629
15630 start_fname_decls ();
15631
15632 store_parm_decls (current_function_parms);
15633
15634 push_operator_bindings ();
15635
15636 if (!processing_template_decl
15637 && (flag_lifetime_dse > 1)
15638 && DECL_CONSTRUCTOR_P (decl1)
15639 && !DECL_CLONED_FUNCTION_P (decl1)
15640 /* Clobbering an empty base is harmful if it overlays real data. */
15641 && !is_empty_class (current_class_type)
15642 /* We can't clobber safely for an implicitly-defined default constructor
15643 because part of the initialization might happen before we enter the
15644 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15645 && !implicit_default_ctor_p (decl1))
15646 finish_expr_stmt (build_clobber_this ());
15647
15648 if (!processing_template_decl
15649 && DECL_CONSTRUCTOR_P (decl1)
15650 && sanitize_flags_p (SANITIZE_VPTR)
15651 && !DECL_CLONED_FUNCTION_P (decl1)
15652 && !implicit_default_ctor_p (decl1))
15653 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15654
15655 start_lambda_scope (decl1);
15656
15657 return true;
15658 }
15659
15660
15661 /* Like start_preparsed_function, except that instead of a
15662 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15663
15664 Returns true on success. If the DECLARATOR is not suitable
15665 for a function, we return false, which tells the parser to
15666 skip the entire function. */
15667
15668 bool
15669 start_function (cp_decl_specifier_seq *declspecs,
15670 const cp_declarator *declarator,
15671 tree attrs)
15672 {
15673 tree decl1;
15674
15675 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15676 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15677 if (decl1 == error_mark_node)
15678 return false;
15679 /* If the declarator is not suitable for a function definition,
15680 cause a syntax error. */
15681 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15682 {
15683 error ("invalid function declaration");
15684 return false;
15685 }
15686
15687 if (DECL_MAIN_P (decl1))
15688 /* main must return int. grokfndecl should have corrected it
15689 (and issued a diagnostic) if the user got it wrong. */
15690 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15691 integer_type_node));
15692
15693 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15694 }
15695 \f
15696 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15697 FN. */
15698
15699 static bool
15700 use_eh_spec_block (tree fn)
15701 {
15702 return (flag_exceptions && flag_enforce_eh_specs
15703 && !processing_template_decl
15704 && !type_throw_all_p (TREE_TYPE (fn))
15705 /* We insert the EH_SPEC_BLOCK only in the original
15706 function; then, it is copied automatically to the
15707 clones. */
15708 && !DECL_CLONED_FUNCTION_P (fn)
15709 /* Implicitly-generated constructors and destructors have
15710 exception specifications. However, those specifications
15711 are the union of the possible exceptions specified by the
15712 constructors/destructors for bases and members, so no
15713 unallowed exception will ever reach this function. By
15714 not creating the EH_SPEC_BLOCK we save a little memory,
15715 and we avoid spurious warnings about unreachable
15716 code. */
15717 && !DECL_DEFAULTED_FN (fn));
15718 }
15719
15720 /* Store the parameter declarations into the current function declaration.
15721 This is called after parsing the parameter declarations, before
15722 digesting the body of the function.
15723
15724 Also install to binding contour return value identifier, if any. */
15725
15726 static void
15727 store_parm_decls (tree current_function_parms)
15728 {
15729 tree fndecl = current_function_decl;
15730 tree parm;
15731
15732 /* This is a chain of any other decls that came in among the parm
15733 declarations. If a parm is declared with enum {foo, bar} x;
15734 then CONST_DECLs for foo and bar are put here. */
15735 tree nonparms = NULL_TREE;
15736
15737 if (current_function_parms)
15738 {
15739 /* This case is when the function was defined with an ANSI prototype.
15740 The parms already have decls, so we need not do anything here
15741 except record them as in effect
15742 and complain if any redundant old-style parm decls were written. */
15743
15744 tree specparms = current_function_parms;
15745 tree next;
15746
15747 /* Must clear this because it might contain TYPE_DECLs declared
15748 at class level. */
15749 current_binding_level->names = NULL;
15750
15751 /* If we're doing semantic analysis, then we'll call pushdecl
15752 for each of these. We must do them in reverse order so that
15753 they end in the correct forward order. */
15754 specparms = nreverse (specparms);
15755
15756 for (parm = specparms; parm; parm = next)
15757 {
15758 next = DECL_CHAIN (parm);
15759 if (TREE_CODE (parm) == PARM_DECL)
15760 pushdecl (parm);
15761 else
15762 {
15763 /* If we find an enum constant or a type tag,
15764 put it aside for the moment. */
15765 TREE_CHAIN (parm) = NULL_TREE;
15766 nonparms = chainon (nonparms, parm);
15767 }
15768 }
15769
15770 /* Get the decls in their original chain order and record in the
15771 function. This is all and only the PARM_DECLs that were
15772 pushed into scope by the loop above. */
15773 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15774 }
15775 else
15776 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15777
15778 /* Now store the final chain of decls for the arguments
15779 as the decl-chain of the current lexical scope.
15780 Put the enumerators in as well, at the front so that
15781 DECL_ARGUMENTS is not modified. */
15782 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15783
15784 if (use_eh_spec_block (current_function_decl))
15785 current_eh_spec_block = begin_eh_spec_block ();
15786 }
15787
15788 \f
15789 /* Set the return value of the constructor (if present). */
15790
15791 static void
15792 finish_constructor_body (void)
15793 {
15794 tree val;
15795 tree exprstmt;
15796
15797 if (targetm.cxx.cdtor_returns_this ())
15798 {
15799 /* Any return from a constructor will end up here. */
15800 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15801
15802 val = DECL_ARGUMENTS (current_function_decl);
15803 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15804 DECL_RESULT (current_function_decl), val);
15805 /* Return the address of the object. */
15806 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15807 add_stmt (exprstmt);
15808 }
15809 }
15810
15811 /* Do all the processing for the beginning of a destructor; set up the
15812 vtable pointers and cleanups for bases and members. */
15813
15814 static void
15815 begin_destructor_body (void)
15816 {
15817 tree compound_stmt;
15818
15819 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15820 issued an error message. We still want to try to process the
15821 body of the function, but initialize_vtbl_ptrs will crash if
15822 TYPE_BINFO is NULL. */
15823 if (COMPLETE_TYPE_P (current_class_type))
15824 {
15825 compound_stmt = begin_compound_stmt (0);
15826 /* Make all virtual function table pointers in non-virtual base
15827 classes point to CURRENT_CLASS_TYPE's virtual function
15828 tables. */
15829 initialize_vtbl_ptrs (current_class_ptr);
15830 finish_compound_stmt (compound_stmt);
15831
15832 if (flag_lifetime_dse
15833 /* Clobbering an empty base is harmful if it overlays real data. */
15834 && !is_empty_class (current_class_type))
15835 {
15836 if (sanitize_flags_p (SANITIZE_VPTR)
15837 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15838 && TYPE_CONTAINS_VPTR_P (current_class_type))
15839 {
15840 tree binfo = TYPE_BINFO (current_class_type);
15841 tree ref
15842 = cp_build_fold_indirect_ref (current_class_ptr);
15843
15844 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15845 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15846 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15847 NOP_EXPR, vtbl,
15848 tf_warning_or_error);
15849 /* If the vptr is shared with some virtual nearly empty base,
15850 don't clear it if not in charge, the dtor of the virtual
15851 nearly empty base will do that later. */
15852 if (CLASSTYPE_VBASECLASSES (current_class_type)
15853 && CLASSTYPE_PRIMARY_BINFO (current_class_type)
15854 && BINFO_VIRTUAL_P
15855 (CLASSTYPE_PRIMARY_BINFO (current_class_type)))
15856 {
15857 stmt = convert_to_void (stmt, ICV_STATEMENT,
15858 tf_warning_or_error);
15859 stmt = build_if_in_charge (stmt);
15860 }
15861 finish_decl_cleanup (NULL_TREE, stmt);
15862 }
15863 else
15864 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15865 }
15866
15867 /* And insert cleanups for our bases and members so that they
15868 will be properly destroyed if we throw. */
15869 push_base_cleanups ();
15870 }
15871 }
15872
15873 /* At the end of every destructor we generate code to delete the object if
15874 necessary. Do that now. */
15875
15876 static void
15877 finish_destructor_body (void)
15878 {
15879 tree exprstmt;
15880
15881 /* Any return from a destructor will end up here; that way all base
15882 and member cleanups will be run when the function returns. */
15883 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15884
15885 if (targetm.cxx.cdtor_returns_this ())
15886 {
15887 tree val;
15888
15889 val = DECL_ARGUMENTS (current_function_decl);
15890 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15891 DECL_RESULT (current_function_decl), val);
15892 /* Return the address of the object. */
15893 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15894 add_stmt (exprstmt);
15895 }
15896 }
15897
15898 /* Do the necessary processing for the beginning of a function body, which
15899 in this case includes member-initializers, but not the catch clauses of
15900 a function-try-block. Currently, this means opening a binding level
15901 for the member-initializers (in a ctor), member cleanups (in a dtor),
15902 and capture proxies (in a lambda operator()). */
15903
15904 tree
15905 begin_function_body (void)
15906 {
15907 tree stmt;
15908
15909 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15910 return NULL_TREE;
15911
15912 if (processing_template_decl)
15913 /* Do nothing now. */;
15914 else
15915 /* Always keep the BLOCK node associated with the outermost pair of
15916 curly braces of a function. These are needed for correct
15917 operation of dwarfout.c. */
15918 keep_next_level (true);
15919
15920 stmt = begin_compound_stmt (BCS_FN_BODY);
15921
15922 if (processing_template_decl)
15923 /* Do nothing now. */;
15924 else if (DECL_DESTRUCTOR_P (current_function_decl))
15925 begin_destructor_body ();
15926
15927 return stmt;
15928 }
15929
15930 /* Do the processing for the end of a function body. Currently, this means
15931 closing out the cleanups for fully-constructed bases and members, and in
15932 the case of the destructor, deleting the object if desired. Again, this
15933 is only meaningful for [cd]tors, since they are the only functions where
15934 there is a significant distinction between the main body and any
15935 function catch clauses. Handling, say, main() return semantics here
15936 would be wrong, as flowing off the end of a function catch clause for
15937 main() would also need to return 0. */
15938
15939 void
15940 finish_function_body (tree compstmt)
15941 {
15942 if (compstmt == NULL_TREE)
15943 return;
15944
15945 /* Close the block. */
15946 finish_compound_stmt (compstmt);
15947
15948 if (processing_template_decl)
15949 /* Do nothing now. */;
15950 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15951 finish_constructor_body ();
15952 else if (DECL_DESTRUCTOR_P (current_function_decl))
15953 finish_destructor_body ();
15954 }
15955
15956 /* Given a function, returns the BLOCK corresponding to the outermost level
15957 of curly braces, skipping the artificial block created for constructor
15958 initializers. */
15959
15960 tree
15961 outer_curly_brace_block (tree fndecl)
15962 {
15963 tree block = DECL_INITIAL (fndecl);
15964 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15965 return block;
15966 block = BLOCK_SUBBLOCKS (block);
15967 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15968 return block;
15969 block = BLOCK_SUBBLOCKS (block);
15970 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15971 return block;
15972 }
15973
15974 /* If FNDECL is a class's key method, add the class to the list of
15975 keyed classes that should be emitted. */
15976
15977 static void
15978 record_key_method_defined (tree fndecl)
15979 {
15980 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15981 && DECL_VIRTUAL_P (fndecl)
15982 && !processing_template_decl)
15983 {
15984 tree fnclass = DECL_CONTEXT (fndecl);
15985 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15986 vec_safe_push (keyed_classes, fnclass);
15987 }
15988 }
15989
15990 /* Subroutine of finish_function.
15991 Save the body of constexpr functions for possible
15992 future compile time evaluation. */
15993
15994 static void
15995 maybe_save_function_definition (tree fun)
15996 {
15997 if (!processing_template_decl
15998 && DECL_DECLARED_CONSTEXPR_P (fun)
15999 && !cp_function_chain->invalid_constexpr
16000 && !DECL_CLONED_FUNCTION_P (fun))
16001 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
16002 }
16003
16004 /* Attempt to add a fix-it hint to RICHLOC suggesting the insertion
16005 of "return *this;" immediately before its location, using FNDECL's
16006 first statement (if any) to give the indentation, if appropriate. */
16007
16008 static void
16009 add_return_star_this_fixit (gcc_rich_location *richloc, tree fndecl)
16010 {
16011 location_t indent = UNKNOWN_LOCATION;
16012 tree stmts = expr_first (DECL_SAVED_TREE (fndecl));
16013 if (stmts)
16014 indent = EXPR_LOCATION (stmts);
16015 richloc->add_fixit_insert_formatted ("return *this;",
16016 richloc->get_loc (),
16017 indent);
16018 }
16019
16020 /* Finish up a function declaration and compile that function
16021 all the way to assembler language output. The free the storage
16022 for the function definition. INLINE_P is TRUE if we just
16023 finished processing the body of an in-class inline function
16024 definition. (This processing will have taken place after the
16025 class definition is complete.) */
16026
16027 tree
16028 finish_function (bool inline_p)
16029 {
16030 tree fndecl = current_function_decl;
16031 tree fntype, ctype = NULL_TREE;
16032
16033 /* When we get some parse errors, we can end up without a
16034 current_function_decl, so cope. */
16035 if (fndecl == NULL_TREE)
16036 return error_mark_node;
16037
16038 finish_lambda_scope ();
16039
16040 if (c_dialect_objc ())
16041 objc_finish_function ();
16042
16043 record_key_method_defined (fndecl);
16044
16045 fntype = TREE_TYPE (fndecl);
16046
16047 /* TREE_READONLY (fndecl) = 1;
16048 This caused &foo to be of type ptr-to-const-function
16049 which then got a warning when stored in a ptr-to-function variable. */
16050
16051 gcc_assert (building_stmt_list_p ());
16052 /* The current function is being defined, so its DECL_INITIAL should
16053 be set, and unless there's a multiple definition, it should be
16054 error_mark_node. */
16055 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
16056
16057 /* For a cloned function, we've already got all the code we need;
16058 there's no need to add any extra bits. */
16059 if (!DECL_CLONED_FUNCTION_P (fndecl))
16060 {
16061 /* Make it so that `main' always returns 0 by default. */
16062 if (DECL_MAIN_P (current_function_decl))
16063 finish_return_stmt (integer_zero_node);
16064
16065 if (use_eh_spec_block (current_function_decl))
16066 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
16067 (TREE_TYPE (current_function_decl)),
16068 current_eh_spec_block);
16069 }
16070
16071 /* If we're saving up tree structure, tie off the function now. */
16072 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
16073
16074 finish_fname_decls ();
16075
16076 /* If this function can't throw any exceptions, remember that. */
16077 if (!processing_template_decl
16078 && !cp_function_chain->can_throw
16079 && !flag_non_call_exceptions
16080 && !decl_replaceable_p (fndecl))
16081 TREE_NOTHROW (fndecl) = 1;
16082
16083 /* This must come after expand_function_end because cleanups might
16084 have declarations (from inline functions) that need to go into
16085 this function's blocks. */
16086
16087 /* If the current binding level isn't the outermost binding level
16088 for this function, either there is a bug, or we have experienced
16089 syntax errors and the statement tree is malformed. */
16090 if (current_binding_level->kind != sk_function_parms)
16091 {
16092 /* Make sure we have already experienced errors. */
16093 gcc_assert (errorcount);
16094
16095 /* Throw away the broken statement tree and extra binding
16096 levels. */
16097 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
16098
16099 while (current_binding_level->kind != sk_function_parms)
16100 {
16101 if (current_binding_level->kind == sk_class)
16102 pop_nested_class ();
16103 else
16104 poplevel (0, 0, 0);
16105 }
16106 }
16107 poplevel (1, 0, 1);
16108
16109 /* Statements should always be full-expressions at the outermost set
16110 of curly braces for a function. */
16111 gcc_assert (stmts_are_full_exprs_p ());
16112
16113 /* If there are no return statements in a function with auto return type,
16114 the return type is void. But if the declared type is something like
16115 auto*, this is an error. */
16116 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
16117 && TREE_TYPE (fntype) == DECL_SAVED_AUTO_RETURN_TYPE (fndecl))
16118 {
16119 if (is_auto (DECL_SAVED_AUTO_RETURN_TYPE (fndecl)))
16120 {
16121 apply_deduced_return_type (fndecl, void_type_node);
16122 fntype = TREE_TYPE (fndecl);
16123 }
16124 else if (!current_function_returns_value
16125 && !current_function_returns_null)
16126 {
16127 error ("no return statements in function returning %qT",
16128 DECL_SAVED_AUTO_RETURN_TYPE (fndecl));
16129 inform (input_location, "only plain %<auto%> return type can be "
16130 "deduced to %<void%>");
16131 }
16132 }
16133
16134 // If this is a concept, check that the definition is reasonable.
16135 if (DECL_DECLARED_CONCEPT_P (fndecl))
16136 check_function_concept (fndecl);
16137
16138 /* Lambda closure members are implicitly constexpr if possible. */
16139 if (cxx_dialect >= cxx17
16140 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
16141 DECL_DECLARED_CONSTEXPR_P (fndecl)
16142 = ((processing_template_decl
16143 || is_valid_constexpr_fn (fndecl, /*complain*/false))
16144 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
16145
16146 /* Save constexpr function body before it gets munged by
16147 the NRV transformation. */
16148 maybe_save_function_definition (fndecl);
16149
16150 /* Invoke the pre-genericize plugin before we start munging things. */
16151 if (!processing_template_decl)
16152 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
16153
16154 /* Perform delayed folding before NRV transformation. */
16155 if (!processing_template_decl)
16156 cp_fold_function (fndecl);
16157
16158 /* Set up the named return value optimization, if we can. Candidate
16159 variables are selected in check_return_expr. */
16160 if (current_function_return_value)
16161 {
16162 tree r = current_function_return_value;
16163 tree outer;
16164
16165 if (r != error_mark_node
16166 /* This is only worth doing for fns that return in memory--and
16167 simpler, since we don't have to worry about promoted modes. */
16168 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
16169 /* Only allow this for variables declared in the outer scope of
16170 the function so we know that their lifetime always ends with a
16171 return; see g++.dg/opt/nrv6.C. We could be more flexible if
16172 we were to do this optimization in tree-ssa. */
16173 && (outer = outer_curly_brace_block (fndecl))
16174 && chain_member (r, BLOCK_VARS (outer)))
16175 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
16176
16177 current_function_return_value = NULL_TREE;
16178 }
16179
16180 /* Remember that we were in class scope. */
16181 if (current_class_name)
16182 ctype = current_class_type;
16183
16184 /* Must mark the RESULT_DECL as being in this function. */
16185 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
16186
16187 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
16188 to the FUNCTION_DECL node itself. */
16189 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
16190
16191 /* Complain if there's just no return statement. */
16192 if (warn_return_type
16193 && !VOID_TYPE_P (TREE_TYPE (fntype))
16194 && !dependent_type_p (TREE_TYPE (fntype))
16195 && !current_function_returns_value && !current_function_returns_null
16196 /* Don't complain if we abort or throw. */
16197 && !current_function_returns_abnormally
16198 /* Don't complain if there's an infinite loop. */
16199 && !current_function_infinite_loop
16200 /* Don't complain if we are declared noreturn. */
16201 && !TREE_THIS_VOLATILE (fndecl)
16202 && !DECL_NAME (DECL_RESULT (fndecl))
16203 && !TREE_NO_WARNING (fndecl)
16204 /* Structor return values (if any) are set by the compiler. */
16205 && !DECL_CONSTRUCTOR_P (fndecl)
16206 && !DECL_DESTRUCTOR_P (fndecl)
16207 && targetm.warn_func_return (fndecl))
16208 {
16209 gcc_rich_location richloc (input_location);
16210 /* Potentially add a "return *this;" fix-it hint for
16211 assignment operators. */
16212 if (IDENTIFIER_ASSIGN_OP_P (DECL_NAME (fndecl)))
16213 {
16214 tree valtype = TREE_TYPE (DECL_RESULT (fndecl));
16215 if (TREE_CODE (valtype) == REFERENCE_TYPE
16216 && current_class_ref
16217 && same_type_ignoring_top_level_qualifiers_p
16218 (TREE_TYPE (valtype), TREE_TYPE (current_class_ref))
16219 && global_dc->option_enabled (OPT_Wreturn_type,
16220 global_dc->option_state))
16221 add_return_star_this_fixit (&richloc, fndecl);
16222 }
16223 if (warning_at (&richloc, OPT_Wreturn_type,
16224 "no return statement in function returning non-void"))
16225 TREE_NO_WARNING (fndecl) = 1;
16226 }
16227
16228 /* Store the end of the function, so that we get good line number
16229 info for the epilogue. */
16230 cfun->function_end_locus = input_location;
16231
16232 /* Complain about parameters that are only set, but never otherwise used. */
16233 if (warn_unused_but_set_parameter
16234 && !processing_template_decl
16235 && errorcount == unused_but_set_errorcount
16236 && !DECL_CLONED_FUNCTION_P (fndecl))
16237 {
16238 tree decl;
16239
16240 for (decl = DECL_ARGUMENTS (fndecl);
16241 decl;
16242 decl = DECL_CHAIN (decl))
16243 if (TREE_USED (decl)
16244 && TREE_CODE (decl) == PARM_DECL
16245 && !DECL_READ_P (decl)
16246 && DECL_NAME (decl)
16247 && !DECL_ARTIFICIAL (decl)
16248 && !TREE_NO_WARNING (decl)
16249 && !DECL_IN_SYSTEM_HEADER (decl)
16250 && TREE_TYPE (decl) != error_mark_node
16251 && !TYPE_REF_P (TREE_TYPE (decl))
16252 && (!CLASS_TYPE_P (TREE_TYPE (decl))
16253 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
16254 warning_at (DECL_SOURCE_LOCATION (decl),
16255 OPT_Wunused_but_set_parameter,
16256 "parameter %qD set but not used", decl);
16257 unused_but_set_errorcount = errorcount;
16258 }
16259
16260 /* Complain about locally defined typedefs that are not used in this
16261 function. */
16262 maybe_warn_unused_local_typedefs ();
16263
16264 /* Possibly warn about unused parameters. */
16265 if (warn_unused_parameter
16266 && !processing_template_decl
16267 && !DECL_CLONED_FUNCTION_P (fndecl))
16268 do_warn_unused_parameter (fndecl);
16269
16270 /* Genericize before inlining. */
16271 if (!processing_template_decl)
16272 cp_genericize (fndecl);
16273
16274 /* We're leaving the context of this function, so zap cfun. It's still in
16275 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
16276 set_cfun (NULL);
16277 current_function_decl = NULL;
16278
16279 /* If this is an in-class inline definition, we may have to pop the
16280 bindings for the template parameters that we added in
16281 maybe_begin_member_template_processing when start_function was
16282 called. */
16283 if (inline_p)
16284 maybe_end_member_template_processing ();
16285
16286 /* Leave the scope of the class. */
16287 if (ctype)
16288 pop_nested_class ();
16289
16290 --function_depth;
16291
16292 /* Clean up. */
16293 current_function_decl = NULL_TREE;
16294
16295 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
16296 return fndecl;
16297 }
16298 \f
16299 /* Create the FUNCTION_DECL for a function definition.
16300 DECLSPECS and DECLARATOR are the parts of the declaration;
16301 they describe the return type and the name of the function,
16302 but twisted together in a fashion that parallels the syntax of C.
16303
16304 This function creates a binding context for the function body
16305 as well as setting up the FUNCTION_DECL in current_function_decl.
16306
16307 Returns a FUNCTION_DECL on success.
16308
16309 If the DECLARATOR is not suitable for a function (it defines a datum
16310 instead), we return 0, which tells yyparse to report a parse error.
16311
16312 May return void_type_node indicating that this method is actually
16313 a friend. See grokfield for more details.
16314
16315 Came here with a `.pushlevel' .
16316
16317 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
16318 CHANGES TO CODE IN `grokfield'. */
16319
16320 tree
16321 grokmethod (cp_decl_specifier_seq *declspecs,
16322 const cp_declarator *declarator, tree attrlist)
16323 {
16324 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
16325 &attrlist);
16326
16327 if (fndecl == error_mark_node)
16328 return error_mark_node;
16329
16330 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
16331 {
16332 error ("invalid member function declaration");
16333 return error_mark_node;
16334 }
16335
16336 if (attrlist)
16337 cplus_decl_attributes (&fndecl, attrlist, 0);
16338
16339 /* Pass friends other than inline friend functions back. */
16340 if (fndecl == void_type_node)
16341 return fndecl;
16342
16343 if (DECL_IN_AGGR_P (fndecl))
16344 {
16345 if (DECL_CLASS_SCOPE_P (fndecl))
16346 error ("%qD is already defined in class %qT", fndecl,
16347 DECL_CONTEXT (fndecl));
16348 return error_mark_node;
16349 }
16350
16351 check_template_shadow (fndecl);
16352
16353 if (TREE_PUBLIC (fndecl))
16354 DECL_COMDAT (fndecl) = 1;
16355 DECL_DECLARED_INLINE_P (fndecl) = 1;
16356 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
16357
16358 /* We process method specializations in finish_struct_1. */
16359 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
16360 {
16361 fndecl = push_template_decl (fndecl);
16362 if (fndecl == error_mark_node)
16363 return fndecl;
16364 }
16365
16366 if (! DECL_FRIEND_P (fndecl))
16367 {
16368 if (DECL_CHAIN (fndecl))
16369 {
16370 fndecl = copy_node (fndecl);
16371 TREE_CHAIN (fndecl) = NULL_TREE;
16372 }
16373 }
16374
16375 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
16376
16377 DECL_IN_AGGR_P (fndecl) = 1;
16378 return fndecl;
16379 }
16380 \f
16381
16382 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
16383 we can lay it out later, when and if its type becomes complete.
16384
16385 Also handle constexpr variables where the initializer involves
16386 an unlowered PTRMEM_CST because the class isn't complete yet. */
16387
16388 void
16389 maybe_register_incomplete_var (tree var)
16390 {
16391 gcc_assert (VAR_P (var));
16392
16393 /* Keep track of variables with incomplete types. */
16394 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
16395 && DECL_EXTERNAL (var))
16396 {
16397 tree inner_type = TREE_TYPE (var);
16398
16399 while (TREE_CODE (inner_type) == ARRAY_TYPE)
16400 inner_type = TREE_TYPE (inner_type);
16401 inner_type = TYPE_MAIN_VARIANT (inner_type);
16402
16403 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
16404 /* RTTI TD entries are created while defining the type_info. */
16405 || (TYPE_LANG_SPECIFIC (inner_type)
16406 && TYPE_BEING_DEFINED (inner_type)))
16407 {
16408 incomplete_var iv = {var, inner_type};
16409 vec_safe_push (incomplete_vars, iv);
16410 }
16411 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
16412 && decl_constant_var_p (var)
16413 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
16414 {
16415 /* When the outermost open class is complete we can resolve any
16416 pointers-to-members. */
16417 tree context = outermost_open_class ();
16418 incomplete_var iv = {var, context};
16419 vec_safe_push (incomplete_vars, iv);
16420 }
16421 }
16422 }
16423
16424 /* Called when a class type (given by TYPE) is defined. If there are
16425 any existing VAR_DECLs whose type has been completed by this
16426 declaration, update them now. */
16427
16428 void
16429 complete_vars (tree type)
16430 {
16431 unsigned ix;
16432 incomplete_var *iv;
16433
16434 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
16435 {
16436 if (same_type_p (type, iv->incomplete_type))
16437 {
16438 tree var = iv->decl;
16439 tree type = TREE_TYPE (var);
16440
16441 if (type != error_mark_node
16442 && (TYPE_MAIN_VARIANT (strip_array_types (type))
16443 == iv->incomplete_type))
16444 {
16445 /* Complete the type of the variable. The VAR_DECL itself
16446 will be laid out in expand_expr. */
16447 complete_type (type);
16448 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
16449 }
16450
16451 /* Remove this entry from the list. */
16452 incomplete_vars->unordered_remove (ix);
16453 }
16454 else
16455 ix++;
16456 }
16457
16458 /* Check for pending declarations which may have abstract type. */
16459 complete_type_check_abstract (type);
16460 }
16461
16462 /* If DECL is of a type which needs a cleanup, build and return an
16463 expression to perform that cleanup here. Return NULL_TREE if no
16464 cleanup need be done. DECL can also be a _REF when called from
16465 split_nonconstant_init_1. */
16466
16467 tree
16468 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
16469 {
16470 tree type;
16471 tree attr;
16472 tree cleanup;
16473
16474 /* Assume no cleanup is required. */
16475 cleanup = NULL_TREE;
16476
16477 if (error_operand_p (decl))
16478 return cleanup;
16479
16480 /* Handle "__attribute__((cleanup))". We run the cleanup function
16481 before the destructor since the destructor is what actually
16482 terminates the lifetime of the object. */
16483 if (DECL_P (decl))
16484 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
16485 else
16486 attr = NULL_TREE;
16487 if (attr)
16488 {
16489 tree id;
16490 tree fn;
16491 tree arg;
16492
16493 /* Get the name specified by the user for the cleanup function. */
16494 id = TREE_VALUE (TREE_VALUE (attr));
16495 /* Look up the name to find the cleanup function to call. It is
16496 important to use lookup_name here because that is what is
16497 used in c-common.c:handle_cleanup_attribute when performing
16498 initial checks on the attribute. Note that those checks
16499 include ensuring that the function found is not an overloaded
16500 function, or an object with an overloaded call operator,
16501 etc.; we can rely on the fact that the function found is an
16502 ordinary FUNCTION_DECL. */
16503 fn = lookup_name (id);
16504 arg = build_address (decl);
16505 if (!mark_used (decl, complain) && !(complain & tf_error))
16506 return error_mark_node;
16507 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
16508 if (cleanup == error_mark_node)
16509 return error_mark_node;
16510 }
16511 /* Handle ordinary C++ destructors. */
16512 type = TREE_TYPE (decl);
16513 if (type_build_dtor_call (type))
16514 {
16515 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16516 tree addr;
16517 tree call;
16518
16519 if (TREE_CODE (type) == ARRAY_TYPE)
16520 addr = decl;
16521 else
16522 addr = build_address (decl);
16523
16524 call = build_delete (TREE_TYPE (addr), addr,
16525 sfk_complete_destructor, flags, 0, complain);
16526 if (call == error_mark_node)
16527 cleanup = error_mark_node;
16528 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16529 /* Discard the call. */;
16530 else if (cleanup)
16531 cleanup = cp_build_compound_expr (cleanup, call, complain);
16532 else
16533 cleanup = call;
16534 }
16535
16536 /* build_delete sets the location of the destructor call to the
16537 current location, even though the destructor is going to be
16538 called later, at the end of the current scope. This can lead to
16539 a "jumpy" behavior for users of debuggers when they step around
16540 the end of the block. So let's unset the location of the
16541 destructor call instead. */
16542 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16543
16544 if (cleanup
16545 && DECL_P (decl)
16546 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16547 /* Treat objects with destructors as used; the destructor may do
16548 something substantive. */
16549 && !mark_used (decl, complain) && !(complain & tf_error))
16550 return error_mark_node;
16551
16552 return cleanup;
16553 }
16554
16555 \f
16556 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16557 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16558 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16559
16560 tree
16561 static_fn_type (tree memfntype)
16562 {
16563 tree fntype;
16564 tree args;
16565
16566 if (TYPE_PTRMEMFUNC_P (memfntype))
16567 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16568 if (INDIRECT_TYPE_P (memfntype)
16569 || TREE_CODE (memfntype) == FUNCTION_DECL)
16570 memfntype = TREE_TYPE (memfntype);
16571 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16572 return memfntype;
16573 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16574 args = TYPE_ARG_TYPES (memfntype);
16575 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16576 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
16577 fntype = (cp_build_type_attribute_variant
16578 (fntype, TYPE_ATTRIBUTES (memfntype)));
16579 fntype = cxx_copy_lang_qualifiers (fntype, memfntype);
16580 return fntype;
16581 }
16582
16583 /* DECL was originally constructed as a non-static member function,
16584 but turned out to be static. Update it accordingly. */
16585
16586 void
16587 revert_static_member_fn (tree decl)
16588 {
16589 tree stype = static_fn_type (decl);
16590 cp_cv_quals quals = type_memfn_quals (stype);
16591 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16592
16593 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16594 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16595
16596 TREE_TYPE (decl) = stype;
16597
16598 if (DECL_ARGUMENTS (decl))
16599 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16600 DECL_STATIC_FUNCTION_P (decl) = 1;
16601 }
16602
16603 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16604 one of the language-independent trees. */
16605
16606 enum cp_tree_node_structure_enum
16607 cp_tree_node_structure (union lang_tree_node * t)
16608 {
16609 switch (TREE_CODE (&t->generic))
16610 {
16611 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16612 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16613 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16614 case OVERLOAD: return TS_CP_OVERLOAD;
16615 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16616 case PTRMEM_CST: return TS_CP_PTRMEM;
16617 case BASELINK: return TS_CP_BASELINK;
16618 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16619 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16620 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16621 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16622 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16623 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16624 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16625 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16626 default: return TS_CP_GENERIC;
16627 }
16628 }
16629
16630 /* Build the void_list_node (void_type_node having been created). */
16631 tree
16632 build_void_list_node (void)
16633 {
16634 tree t = build_tree_list (NULL_TREE, void_type_node);
16635 return t;
16636 }
16637
16638 bool
16639 cp_missing_noreturn_ok_p (tree decl)
16640 {
16641 /* A missing noreturn is ok for the `main' function. */
16642 return DECL_MAIN_P (decl);
16643 }
16644
16645 /* Return the decl used to identify the COMDAT group into which DECL should
16646 be placed. */
16647
16648 tree
16649 cxx_comdat_group (tree decl)
16650 {
16651 /* Virtual tables, construction virtual tables, and virtual table
16652 tables all go in a single COMDAT group, named after the primary
16653 virtual table. */
16654 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16655 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16656 /* For all other DECLs, the COMDAT group is the mangled name of the
16657 declaration itself. */
16658 else
16659 {
16660 while (DECL_THUNK_P (decl))
16661 {
16662 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16663 into the same section as the target function. In that case
16664 we must return target's name. */
16665 tree target = THUNK_TARGET (decl);
16666 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16667 && DECL_SECTION_NAME (target) != NULL
16668 && DECL_ONE_ONLY (target))
16669 decl = target;
16670 else
16671 break;
16672 }
16673 }
16674
16675 return decl;
16676 }
16677
16678 /* Returns the return type for FN as written by the user, which may include
16679 a placeholder for a deduced return type. */
16680
16681 tree
16682 fndecl_declared_return_type (tree fn)
16683 {
16684 fn = STRIP_TEMPLATE (fn);
16685 if (FNDECL_USED_AUTO (fn))
16686 return DECL_SAVED_AUTO_RETURN_TYPE (fn);
16687
16688 return TREE_TYPE (TREE_TYPE (fn));
16689 }
16690
16691 /* Returns true iff DECL is a variable or function declared with an auto type
16692 that has not yet been deduced to a real type. */
16693
16694 bool
16695 undeduced_auto_decl (tree decl)
16696 {
16697 if (cxx_dialect < cxx11)
16698 return false;
16699 STRIP_ANY_LOCATION_WRAPPER (decl);
16700 return ((VAR_OR_FUNCTION_DECL_P (decl)
16701 || TREE_CODE (decl) == TEMPLATE_DECL)
16702 && type_uses_auto (TREE_TYPE (decl)));
16703 }
16704
16705 /* Complain if DECL has an undeduced return type. */
16706
16707 bool
16708 require_deduced_type (tree decl, tsubst_flags_t complain)
16709 {
16710 if (undeduced_auto_decl (decl))
16711 {
16712 if (complain & tf_error)
16713 error ("use of %qD before deduction of %<auto%>", decl);
16714 return false;
16715 }
16716 return true;
16717 }
16718
16719 /* Create a representation of the explicit-specifier with
16720 constant-expression of EXPR. COMPLAIN is as for tsubst. */
16721
16722 tree
16723 build_explicit_specifier (tree expr, tsubst_flags_t complain)
16724 {
16725 if (instantiation_dependent_expression_p (expr))
16726 /* Wait for instantiation, tsubst_function_decl will handle it. */
16727 return expr;
16728
16729 expr = instantiate_non_dependent_expr_sfinae (expr, complain);
16730 /* Don't let convert_like_real create more template codes. */
16731 processing_template_decl_sentinel s;
16732 expr = build_converted_constant_bool_expr (expr, complain);
16733 expr = cxx_constant_value (expr);
16734 return expr;
16735 }
16736
16737 #include "gt-cp-decl.h"