]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/cp/decl.c
Come up with fndecl_built_in_p.
[thirdparty/gcc.git] / gcc / cp / decl.c
1 /* Process declarations and variables for C++ compiler.
2 Copyright (C) 1988-2018 Free Software Foundation, Inc.
3 Contributed by Michael Tiemann (tiemann@cygnus.com)
4
5 This file is part of GCC.
6
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
16
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
20
21
22 /* Process declarations and symbol lookup for C++ front end.
23 Also constructs types; the standard scalar types at initialization,
24 and structure, union, array and enum types when they are declared. */
25
26 /* ??? not all decl nodes are given the most useful possible
27 line numbers. For example, the CONST_DECLs for enum values. */
28
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "target.h"
33 #include "c-family/c-target.h"
34 #include "cp-tree.h"
35 #include "timevar.h"
36 #include "stringpool.h"
37 #include "cgraph.h"
38 #include "stor-layout.h"
39 #include "varasm.h"
40 #include "attribs.h"
41 #include "flags.h"
42 #include "tree-iterator.h"
43 #include "decl.h"
44 #include "intl.h"
45 #include "toplev.h"
46 #include "c-family/c-objc.h"
47 #include "c-family/c-pragma.h"
48 #include "c-family/c-ubsan.h"
49 #include "debug.h"
50 #include "plugin.h"
51 #include "builtins.h"
52 #include "gimplify.h"
53 #include "asan.h"
54 #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 void push_local_name (tree);
70 static tree grok_reference_init (tree, tree, tree, int);
71 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
72 int, int, int, bool, int, tree);
73 static void check_static_variable_definition (tree, tree);
74 static void record_unknown_type (tree, const char *);
75 static tree builtin_function_1 (tree, tree, bool);
76 static int member_function_or_else (tree, tree, enum overload_flags);
77 static tree local_variable_p_walkfn (tree *, int *, void *);
78 static const char *tag_name (enum tag_types);
79 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
80 static void maybe_deduce_size_from_array_init (tree, tree);
81 static void layout_var_decl (tree);
82 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
83 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
84 static void save_function_data (tree);
85 static void copy_type_enum (tree , tree);
86 static void check_function_type (tree, tree);
87 static void finish_constructor_body (void);
88 static void begin_destructor_body (void);
89 static void finish_destructor_body (void);
90 static void record_key_method_defined (tree);
91 static tree create_array_type_for_decl (tree, tree, tree);
92 static tree get_atexit_node (void);
93 static tree get_dso_handle_node (void);
94 static tree start_cleanup_fn (void);
95 static void end_cleanup_fn (void);
96 static tree cp_make_fname_decl (location_t, tree, int);
97 static void initialize_predefined_identifiers (void);
98 static tree check_special_function_return_type
99 (special_function_kind, tree, tree, int, const location_t*);
100 static tree push_cp_library_fn (enum tree_code, tree, int);
101 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
102 static void store_parm_decls (tree);
103 static void initialize_local_var (tree, tree);
104 static void expand_static_init (tree, tree);
105
106 /* The following symbols are subsumed in the cp_global_trees array, and
107 listed here individually for documentation purposes.
108
109 C++ extensions
110 tree wchar_decl_node;
111
112 tree vtable_entry_type;
113 tree delta_type_node;
114 tree __t_desc_type_node;
115
116 tree class_type_node;
117 tree unknown_type_node;
118
119 Array type `vtable_entry_type[]'
120
121 tree vtbl_type_node;
122 tree vtbl_ptr_type_node;
123
124 Namespaces,
125
126 tree std_node;
127 tree abi_node;
128
129 A FUNCTION_DECL which can call `abort'. Not necessarily the
130 one that the user will declare, but sufficient to be called
131 by routines that want to abort the program.
132
133 tree abort_fndecl;
134
135 Used by RTTI
136 tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
137 tree tinfo_var_id; */
138
139 tree cp_global_trees[CPTI_MAX];
140
141 #define local_names cp_function_chain->x_local_names
142
143 /* A list of objects which have constructors or destructors
144 which reside in the global scope. The decl is stored in
145 the TREE_VALUE slot and the initializer is stored
146 in the TREE_PURPOSE slot. */
147 tree static_aggregates;
148
149 /* Like static_aggregates, but for thread_local variables. */
150 tree tls_aggregates;
151
152 /* -- end of C++ */
153
154 /* A node for the integer constant 2. */
155
156 tree integer_two_node;
157
158 /* vector of static decls. */
159 vec<tree, va_gc> *static_decls;
160
161 /* vector of keyed classes. */
162 vec<tree, va_gc> *keyed_classes;
163
164 /* Used only for jumps to as-yet undefined labels, since jumps to
165 defined labels can have their validity checked immediately. */
166
167 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
168 struct named_label_use_entry *next;
169 /* The binding level to which this entry is *currently* attached.
170 This is initially the binding level in which the goto appeared,
171 but is modified as scopes are closed. */
172 cp_binding_level *binding_level;
173 /* The head of the names list that was current when the goto appeared,
174 or the inner scope popped. These are the decls that will *not* be
175 skipped when jumping to the label. */
176 tree names_in_scope;
177 /* The location of the goto, for error reporting. */
178 location_t o_goto_locus;
179 /* True if an OpenMP structured block scope has been closed since
180 the goto appeared. This means that the branch from the label will
181 illegally exit an OpenMP scope. */
182 bool in_omp_scope;
183 };
184
185 /* A list of all LABEL_DECLs in the function that have names. Here so
186 we can clear out their names' definitions at the end of the
187 function, and so we can check the validity of jumps to these labels. */
188
189 struct GTY((for_user)) named_label_entry {
190
191 tree name; /* Name of decl. */
192
193 tree label_decl; /* LABEL_DECL, unless deleted local label. */
194
195 named_label_entry *outer; /* Outer shadowed chain. */
196
197 /* The binding level to which the label is *currently* attached.
198 This is initially set to the binding level in which the label
199 is defined, but is modified as scopes are closed. */
200 cp_binding_level *binding_level;
201
202 /* The head of the names list that was current when the label was
203 defined, or the inner scope popped. These are the decls that will
204 be skipped when jumping to the label. */
205 tree names_in_scope;
206
207 /* A vector of all decls from all binding levels that would be
208 crossed by a backward branch to the label. */
209 vec<tree, va_gc> *bad_decls;
210
211 /* A list of uses of the label, before the label is defined. */
212 named_label_use_entry *uses;
213
214 /* The following bits are set after the label is defined, and are
215 updated as scopes are popped. They indicate that a jump to the
216 label will illegally enter a scope of the given flavor. */
217 bool in_try_scope;
218 bool in_catch_scope;
219 bool in_omp_scope;
220 bool in_transaction_scope;
221 bool in_constexpr_if;
222 };
223
224 #define named_labels cp_function_chain->x_named_labels
225 \f
226 /* The number of function bodies which we are currently processing.
227 (Zero if we are at namespace scope, one inside the body of a
228 function, two inside the body of a function in a local class, etc.) */
229 int function_depth;
230
231 /* Whether the exception-specifier is part of a function type (i.e. C++17). */
232 bool flag_noexcept_type;
233
234 /* States indicating how grokdeclarator() should handle declspecs marked
235 with __attribute__((deprecated)). An object declared as
236 __attribute__((deprecated)) suppresses warnings of uses of other
237 deprecated items. */
238 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
239
240 \f
241 /* A list of VAR_DECLs whose type was incomplete at the time the
242 variable was declared. */
243
244 struct GTY(()) incomplete_var {
245 tree decl;
246 tree incomplete_type;
247 };
248
249
250 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
251 \f
252 /* Returns the kind of template specialization we are currently
253 processing, given that it's declaration contained N_CLASS_SCOPES
254 explicit scope qualifications. */
255
256 tmpl_spec_kind
257 current_tmpl_spec_kind (int n_class_scopes)
258 {
259 int n_template_parm_scopes = 0;
260 int seen_specialization_p = 0;
261 int innermost_specialization_p = 0;
262 cp_binding_level *b;
263
264 /* Scan through the template parameter scopes. */
265 for (b = current_binding_level;
266 b->kind == sk_template_parms;
267 b = b->level_chain)
268 {
269 /* If we see a specialization scope inside a parameter scope,
270 then something is wrong. That corresponds to a declaration
271 like:
272
273 template <class T> template <> ...
274
275 which is always invalid since [temp.expl.spec] forbids the
276 specialization of a class member template if the enclosing
277 class templates are not explicitly specialized as well. */
278 if (b->explicit_spec_p)
279 {
280 if (n_template_parm_scopes == 0)
281 innermost_specialization_p = 1;
282 else
283 seen_specialization_p = 1;
284 }
285 else if (seen_specialization_p == 1)
286 return tsk_invalid_member_spec;
287
288 ++n_template_parm_scopes;
289 }
290
291 /* Handle explicit instantiations. */
292 if (processing_explicit_instantiation)
293 {
294 if (n_template_parm_scopes != 0)
295 /* We've seen a template parameter list during an explicit
296 instantiation. For example:
297
298 template <class T> template void f(int);
299
300 This is erroneous. */
301 return tsk_invalid_expl_inst;
302 else
303 return tsk_expl_inst;
304 }
305
306 if (n_template_parm_scopes < n_class_scopes)
307 /* We've not seen enough template headers to match all the
308 specialized classes present. For example:
309
310 template <class T> void R<T>::S<T>::f(int);
311
312 This is invalid; there needs to be one set of template
313 parameters for each class. */
314 return tsk_insufficient_parms;
315 else if (n_template_parm_scopes == n_class_scopes)
316 /* We're processing a non-template declaration (even though it may
317 be a member of a template class.) For example:
318
319 template <class T> void S<T>::f(int);
320
321 The `class T' matches the `S<T>', leaving no template headers
322 corresponding to the `f'. */
323 return tsk_none;
324 else if (n_template_parm_scopes > n_class_scopes + 1)
325 /* We've got too many template headers. For example:
326
327 template <> template <class T> void f (T);
328
329 There need to be more enclosing classes. */
330 return tsk_excessive_parms;
331 else
332 /* This must be a template. It's of the form:
333
334 template <class T> template <class U> void S<T>::f(U);
335
336 This is a specialization if the innermost level was a
337 specialization; otherwise it's just a definition of the
338 template. */
339 return innermost_specialization_p ? tsk_expl_spec : tsk_template;
340 }
341
342 /* Exit the current scope. */
343
344 void
345 finish_scope (void)
346 {
347 poplevel (0, 0, 0);
348 }
349
350 /* When a label goes out of scope, check to see if that label was used
351 in a valid manner, and issue any appropriate warnings or errors. */
352
353 static void
354 check_label_used (tree label)
355 {
356 if (!processing_template_decl)
357 {
358 if (DECL_INITIAL (label) == NULL_TREE)
359 {
360 location_t location;
361
362 error ("label %q+D used but not defined", label);
363 location = input_location;
364 /* FIXME want (LOCATION_FILE (input_location), (line)0) */
365 /* Avoid crashing later. */
366 define_label (location, DECL_NAME (label));
367 }
368 else
369 warn_for_unused_label (label);
370 }
371 }
372
373 /* Helper function to sort named label entries in a vector by DECL_UID. */
374
375 static int
376 sort_labels (const void *a, const void *b)
377 {
378 tree label1 = *(tree const *) a;
379 tree label2 = *(tree const *) b;
380
381 /* DECL_UIDs can never be equal. */
382 return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1;
383 }
384
385 /* At the end of a function, all labels declared within the function
386 go out of scope. BLOCK is the top-level block for the
387 function. */
388
389 static void
390 pop_labels (tree block)
391 {
392 if (!named_labels)
393 return;
394
395 /* We need to add the labels to the block chain, so debug
396 information is emitted. But, we want the order to be stable so
397 need to sort them first. Otherwise the debug output could be
398 randomly ordered. I guess it's mostly stable, unless the hash
399 table implementation changes. */
400 auto_vec<tree, 32> labels (named_labels->elements ());
401 hash_table<named_label_hash>::iterator end (named_labels->end ());
402 for (hash_table<named_label_hash>::iterator iter
403 (named_labels->begin ()); iter != end; ++iter)
404 {
405 named_label_entry *ent = *iter;
406
407 gcc_checking_assert (!ent->outer);
408 if (ent->label_decl)
409 labels.quick_push (ent->label_decl);
410 ggc_free (ent);
411 }
412 named_labels = NULL;
413 labels.qsort (sort_labels);
414
415 while (labels.length ())
416 {
417 tree label = labels.pop ();
418
419 DECL_CHAIN (label) = BLOCK_VARS (block);
420 BLOCK_VARS (block) = label;
421
422 check_label_used (label);
423 }
424 }
425
426 /* At the end of a block with local labels, restore the outer definition. */
427
428 static void
429 pop_local_label (tree id, tree label)
430 {
431 check_label_used (label);
432 named_label_entry **slot = named_labels->find_slot_with_hash
433 (id, IDENTIFIER_HASH_VALUE (id), NO_INSERT);
434 named_label_entry *ent = *slot;
435
436 if (ent->outer)
437 ent = ent->outer;
438 else
439 {
440 ent = ggc_cleared_alloc<named_label_entry> ();
441 ent->name = id;
442 }
443 *slot = ent;
444 }
445
446 /* The following two routines are used to interface to Objective-C++.
447 The binding level is purposely treated as an opaque type. */
448
449 void *
450 objc_get_current_scope (void)
451 {
452 return current_binding_level;
453 }
454
455 /* The following routine is used by the NeXT-style SJLJ exceptions;
456 variables get marked 'volatile' so as to not be clobbered by
457 _setjmp()/_longjmp() calls. All variables in the current scope,
458 as well as parent scopes up to (but not including) ENCLOSING_BLK
459 shall be thusly marked. */
460
461 void
462 objc_mark_locals_volatile (void *enclosing_blk)
463 {
464 cp_binding_level *scope;
465
466 for (scope = current_binding_level;
467 scope && scope != enclosing_blk;
468 scope = scope->level_chain)
469 {
470 tree decl;
471
472 for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
473 objc_volatilize_decl (decl);
474
475 /* Do not climb up past the current function. */
476 if (scope->kind == sk_function_parms)
477 break;
478 }
479 }
480
481 /* True if B is the level for the condition of a constexpr if. */
482
483 static bool
484 level_for_constexpr_if (cp_binding_level *b)
485 {
486 return (b->kind == sk_cond && b->this_entity
487 && TREE_CODE (b->this_entity) == IF_STMT
488 && IF_STMT_CONSTEXPR_P (b->this_entity));
489 }
490
491 /* Update data for defined and undefined labels when leaving a scope. */
492
493 int
494 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
495 {
496 named_label_entry *ent = *slot;
497 cp_binding_level *obl = bl->level_chain;
498
499 if (ent->binding_level == bl)
500 {
501 tree decl;
502
503 /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
504 TREE_LISTs representing OVERLOADs, so be careful. */
505 for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
506 ? DECL_CHAIN (decl)
507 : TREE_CHAIN (decl)))
508 if (decl_jump_unsafe (decl))
509 vec_safe_push (ent->bad_decls, decl);
510
511 ent->binding_level = obl;
512 ent->names_in_scope = obl->names;
513 switch (bl->kind)
514 {
515 case sk_try:
516 ent->in_try_scope = true;
517 break;
518 case sk_catch:
519 ent->in_catch_scope = true;
520 break;
521 case sk_omp:
522 ent->in_omp_scope = true;
523 break;
524 case sk_transaction:
525 ent->in_transaction_scope = true;
526 break;
527 case sk_block:
528 if (level_for_constexpr_if (bl->level_chain))
529 ent->in_constexpr_if = true;
530 break;
531 default:
532 break;
533 }
534 }
535 else if (ent->uses)
536 {
537 struct named_label_use_entry *use;
538
539 for (use = ent->uses; use ; use = use->next)
540 if (use->binding_level == bl)
541 {
542 use->binding_level = obl;
543 use->names_in_scope = obl->names;
544 if (bl->kind == sk_omp)
545 use->in_omp_scope = true;
546 }
547 }
548
549 return 1;
550 }
551
552 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
553 when errors were reported, except for -Werror-unused-but-set-*. */
554 static int unused_but_set_errorcount;
555
556 /* Exit a binding level.
557 Pop the level off, and restore the state of the identifier-decl mappings
558 that were in effect when this level was entered.
559
560 If KEEP == 1, this level had explicit declarations, so
561 and create a "block" (a BLOCK node) for the level
562 to record its declarations and subblocks for symbol table output.
563
564 If FUNCTIONBODY is nonzero, this level is the body of a function,
565 so create a block as if KEEP were set and also clear out all
566 label names.
567
568 If REVERSE is nonzero, reverse the order of decls before putting
569 them into the BLOCK. */
570
571 tree
572 poplevel (int keep, int reverse, int functionbody)
573 {
574 tree link;
575 /* The chain of decls was accumulated in reverse order.
576 Put it into forward order, just for cleanliness. */
577 tree decls;
578 tree subblocks;
579 tree block;
580 tree decl;
581 scope_kind kind;
582
583 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
584 restart:
585
586 block = NULL_TREE;
587
588 gcc_assert (current_binding_level->kind != sk_class
589 && current_binding_level->kind != sk_namespace);
590
591 if (current_binding_level->kind == sk_cleanup)
592 functionbody = 0;
593 subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
594
595 gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
596
597 /* We used to use KEEP == 2 to indicate that the new block should go
598 at the beginning of the list of blocks at this binding level,
599 rather than the end. This hack is no longer used. */
600 gcc_assert (keep == 0 || keep == 1);
601
602 if (current_binding_level->keep)
603 keep = 1;
604
605 /* Any uses of undefined labels, and any defined labels, now operate
606 under constraints of next binding contour. */
607 if (cfun && !functionbody && named_labels)
608 named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
609 (current_binding_level);
610
611 /* Get the decls in the order they were written.
612 Usually current_binding_level->names is in reverse order.
613 But parameter decls were previously put in forward order. */
614
615 decls = current_binding_level->names;
616 if (reverse)
617 {
618 decls = nreverse (decls);
619 current_binding_level->names = decls;
620 }
621
622 /* If there were any declarations or structure tags in that level,
623 or if this level is a function body,
624 create a BLOCK to record them for the life of this function. */
625 block = NULL_TREE;
626 /* Avoid function body block if possible. */
627 if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
628 keep = 0;
629 else if (keep == 1 || functionbody)
630 block = make_node (BLOCK);
631 if (block != NULL_TREE)
632 {
633 BLOCK_VARS (block) = decls;
634 BLOCK_SUBBLOCKS (block) = subblocks;
635 }
636
637 /* In each subblock, record that this is its superior. */
638 if (keep >= 0)
639 for (link = subblocks; link; link = BLOCK_CHAIN (link))
640 BLOCK_SUPERCONTEXT (link) = block;
641
642 /* Before we remove the declarations first check for unused variables. */
643 if ((warn_unused_variable || warn_unused_but_set_variable)
644 && current_binding_level->kind != sk_template_parms
645 && !processing_template_decl)
646 for (tree d = get_local_decls (); d; d = TREE_CHAIN (d))
647 {
648 /* There are cases where D itself is a TREE_LIST. See in
649 push_local_binding where the list of decls returned by
650 getdecls is built. */
651 decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
652
653 tree type = TREE_TYPE (decl);
654 if (VAR_P (decl)
655 && (! TREE_USED (decl) || !DECL_READ_P (decl))
656 && ! DECL_IN_SYSTEM_HEADER (decl)
657 /* For structured bindings, consider only real variables, not
658 subobjects. */
659 && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl)
660 : (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)))
661 && type != error_mark_node
662 && (!CLASS_TYPE_P (type)
663 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
664 || lookup_attribute ("warn_unused",
665 TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
666 {
667 if (! TREE_USED (decl))
668 {
669 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
670 warning_at (DECL_SOURCE_LOCATION (decl),
671 OPT_Wunused_variable,
672 "unused structured binding declaration");
673 else
674 warning_at (DECL_SOURCE_LOCATION (decl),
675 OPT_Wunused_variable, "unused variable %qD", decl);
676 }
677 else if (DECL_CONTEXT (decl) == current_function_decl
678 // For -Wunused-but-set-variable leave references alone.
679 && !TYPE_REF_P (TREE_TYPE (decl))
680 && errorcount == unused_but_set_errorcount)
681 {
682 if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
683 warning_at (DECL_SOURCE_LOCATION (decl),
684 OPT_Wunused_but_set_variable, "structured "
685 "binding declaration set but not used");
686 else
687 warning_at (DECL_SOURCE_LOCATION (decl),
688 OPT_Wunused_but_set_variable,
689 "variable %qD set but not used", decl);
690 unused_but_set_errorcount = errorcount;
691 }
692 }
693 }
694
695 /* Remove declarations for all the DECLs in this level. */
696 for (link = decls; link; link = TREE_CHAIN (link))
697 {
698 decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link;
699 tree name = OVL_NAME (decl);
700
701 /* Remove the binding. */
702 if (TREE_CODE (decl) == LABEL_DECL)
703 pop_local_label (name, decl);
704 else
705 pop_local_binding (name, decl);
706 }
707
708 /* Restore the IDENTIFIER_TYPE_VALUEs. */
709 for (link = current_binding_level->type_shadowed;
710 link; link = TREE_CHAIN (link))
711 SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
712
713 /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
714 list if a `using' declaration put them there. The debugging
715 back ends won't understand OVERLOAD, so we remove them here.
716 Because the BLOCK_VARS are (temporarily) shared with
717 CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
718 popped all the bindings. Also remove undeduced 'auto' decls,
719 which LTO doesn't understand, and can't have been used by anything. */
720 if (block)
721 {
722 tree* d;
723
724 for (d = &BLOCK_VARS (block); *d; )
725 {
726 if (TREE_CODE (*d) == TREE_LIST
727 || (!processing_template_decl
728 && undeduced_auto_decl (*d)))
729 *d = TREE_CHAIN (*d);
730 else
731 d = &DECL_CHAIN (*d);
732 }
733 }
734
735 /* If the level being exited is the top level of a function,
736 check over all the labels. */
737 if (functionbody)
738 {
739 if (block)
740 {
741 /* Since this is the top level block of a function, the vars are
742 the function's parameters. Don't leave them in the BLOCK
743 because they are found in the FUNCTION_DECL instead. */
744 BLOCK_VARS (block) = 0;
745 pop_labels (block);
746 }
747 else
748 pop_labels (subblocks);
749 }
750
751 kind = current_binding_level->kind;
752 if (kind == sk_cleanup)
753 {
754 tree stmt;
755
756 /* If this is a temporary binding created for a cleanup, then we'll
757 have pushed a statement list level. Pop that, create a new
758 BIND_EXPR for the block, and insert it into the stream. */
759 stmt = pop_stmt_list (current_binding_level->statement_list);
760 stmt = c_build_bind_expr (input_location, block, stmt);
761 add_stmt (stmt);
762 }
763
764 leave_scope ();
765 if (functionbody)
766 {
767 /* The current function is being defined, so its DECL_INITIAL
768 should be error_mark_node. */
769 gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
770 DECL_INITIAL (current_function_decl) = block ? block : subblocks;
771 if (subblocks)
772 {
773 if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
774 {
775 if (BLOCK_SUBBLOCKS (subblocks))
776 BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
777 }
778 else
779 BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
780 }
781 }
782 else if (block)
783 current_binding_level->blocks
784 = block_chainon (current_binding_level->blocks, block);
785
786 /* If we did not make a block for the level just exited,
787 any blocks made for inner levels
788 (since they cannot be recorded as subblocks in that level)
789 must be carried forward so they will later become subblocks
790 of something else. */
791 else if (subblocks)
792 current_binding_level->blocks
793 = block_chainon (current_binding_level->blocks, subblocks);
794
795 /* Each and every BLOCK node created here in `poplevel' is important
796 (e.g. for proper debugging information) so if we created one
797 earlier, mark it as "used". */
798 if (block)
799 TREE_USED (block) = 1;
800
801 /* All temporary bindings created for cleanups are popped silently. */
802 if (kind == sk_cleanup)
803 goto restart;
804
805 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
806 return block;
807 }
808
809 /* Call wrapup_globals_declarations for the globals in NAMESPACE. */
810 /* Diagnose odr-used extern inline variables without definitions
811 in the current TU. */
812
813 int
814 wrapup_namespace_globals ()
815 {
816 if (vec<tree, va_gc> *statics = static_decls)
817 {
818 tree decl;
819 unsigned int i;
820 FOR_EACH_VEC_ELT (*statics, i, decl)
821 {
822 if (warn_unused_function
823 && TREE_CODE (decl) == FUNCTION_DECL
824 && DECL_INITIAL (decl) == 0
825 && DECL_EXTERNAL (decl)
826 && !TREE_PUBLIC (decl)
827 && !DECL_ARTIFICIAL (decl)
828 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
829 && !TREE_NO_WARNING (decl))
830 warning_at (DECL_SOURCE_LOCATION (decl),
831 OPT_Wunused_function,
832 "%qF declared %<static%> but never defined", decl);
833
834 if (VAR_P (decl)
835 && DECL_EXTERNAL (decl)
836 && DECL_INLINE_VAR_P (decl)
837 && DECL_ODR_USED (decl))
838 error_at (DECL_SOURCE_LOCATION (decl),
839 "odr-used inline variable %qD is not defined", decl);
840 }
841
842 /* Clear out the list, so we don't rescan next time. */
843 static_decls = NULL;
844
845 /* Write out any globals that need to be output. */
846 return wrapup_global_declarations (statics->address (),
847 statics->length ());
848 }
849 return 0;
850 }
851 \f
852 /* In C++, you don't have to write `struct S' to refer to `S'; you
853 can just use `S'. We accomplish this by creating a TYPE_DECL as
854 if the user had written `typedef struct S S'. Create and return
855 the TYPE_DECL for TYPE. */
856
857 tree
858 create_implicit_typedef (tree name, tree type)
859 {
860 tree decl;
861
862 decl = build_decl (input_location, TYPE_DECL, name, type);
863 DECL_ARTIFICIAL (decl) = 1;
864 /* There are other implicit type declarations, like the one *within*
865 a class that allows you to write `S::S'. We must distinguish
866 amongst these. */
867 SET_DECL_IMPLICIT_TYPEDEF_P (decl);
868 TYPE_NAME (type) = decl;
869 TYPE_STUB_DECL (type) = decl;
870
871 return decl;
872 }
873
874 /* Remember a local name for name-mangling purposes. */
875
876 static void
877 push_local_name (tree decl)
878 {
879 size_t i, nelts;
880 tree t, name;
881
882 timevar_start (TV_NAME_LOOKUP);
883
884 name = DECL_NAME (decl);
885
886 nelts = vec_safe_length (local_names);
887 for (i = 0; i < nelts; i++)
888 {
889 t = (*local_names)[i];
890 if (DECL_NAME (t) == name)
891 {
892 retrofit_lang_decl (decl);
893 DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
894 if (DECL_DISCRIMINATOR_SET_P (t))
895 DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
896 else
897 DECL_DISCRIMINATOR (decl) = 1;
898
899 (*local_names)[i] = decl;
900 timevar_stop (TV_NAME_LOOKUP);
901 return;
902 }
903 }
904
905 vec_safe_push (local_names, decl);
906 timevar_stop (TV_NAME_LOOKUP);
907 }
908 \f
909 /* Subroutine of duplicate_decls: return truthvalue of whether
910 or not types of these decls match.
911
912 For C++, we must compare the parameter list so that `int' can match
913 `int&' in a parameter position, but `int&' is not confused with
914 `const int&'. */
915
916 int
917 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
918 {
919 int types_match;
920
921 if (newdecl == olddecl)
922 return 1;
923
924 if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
925 /* If the two DECLs are not even the same kind of thing, we're not
926 interested in their types. */
927 return 0;
928
929 gcc_assert (DECL_P (newdecl));
930
931 if (TREE_CODE (newdecl) == FUNCTION_DECL)
932 {
933 tree f1 = TREE_TYPE (newdecl);
934 tree f2 = TREE_TYPE (olddecl);
935 tree p1 = TYPE_ARG_TYPES (f1);
936 tree p2 = TYPE_ARG_TYPES (f2);
937 tree r2;
938
939 /* Specializations of different templates are different functions
940 even if they have the same type. */
941 tree t1 = (DECL_USE_TEMPLATE (newdecl)
942 ? DECL_TI_TEMPLATE (newdecl)
943 : NULL_TREE);
944 tree t2 = (DECL_USE_TEMPLATE (olddecl)
945 ? DECL_TI_TEMPLATE (olddecl)
946 : NULL_TREE);
947 if (t1 != t2)
948 return 0;
949
950 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
951 && ! (DECL_EXTERN_C_P (newdecl)
952 && DECL_EXTERN_C_P (olddecl)))
953 return 0;
954
955 /* A new declaration doesn't match a built-in one unless it
956 is also extern "C". */
957 if (DECL_IS_BUILTIN (olddecl)
958 && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
959 return 0;
960
961 if (TREE_CODE (f1) != TREE_CODE (f2))
962 return 0;
963
964 /* A declaration with deduced return type should use its pre-deduction
965 type for declaration matching. */
966 r2 = fndecl_declared_return_type (olddecl);
967
968 if (same_type_p (TREE_TYPE (f1), r2))
969 {
970 if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
971 && (fndecl_built_in_p (olddecl)
972 #ifdef SYSTEM_IMPLICIT_EXTERN_C
973 || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
974 || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
975 #endif
976 ))
977 {
978 types_match = self_promoting_args_p (p1);
979 if (p1 == void_list_node)
980 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
981 }
982 #ifdef SYSTEM_IMPLICIT_EXTERN_C
983 else if (!prototype_p (f1)
984 && (DECL_EXTERN_C_P (olddecl)
985 && DECL_IN_SYSTEM_HEADER (olddecl)
986 && !DECL_CLASS_SCOPE_P (olddecl))
987 && (DECL_EXTERN_C_P (newdecl)
988 && DECL_IN_SYSTEM_HEADER (newdecl)
989 && !DECL_CLASS_SCOPE_P (newdecl)))
990 {
991 types_match = self_promoting_args_p (p2);
992 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
993 }
994 #endif
995 else
996 types_match =
997 compparms (p1, p2)
998 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
999 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1000 || comp_type_attributes (TREE_TYPE (newdecl),
1001 TREE_TYPE (olddecl)) != 0);
1002 }
1003 else
1004 types_match = 0;
1005
1006 /* The decls dont match if they correspond to two different versions
1007 of the same function. Disallow extern "C" functions to be
1008 versions for now. */
1009 if (types_match
1010 && !DECL_EXTERN_C_P (newdecl)
1011 && !DECL_EXTERN_C_P (olddecl)
1012 && record_versions
1013 && maybe_version_functions (newdecl, olddecl,
1014 (!DECL_FUNCTION_VERSIONED (newdecl)
1015 || !DECL_FUNCTION_VERSIONED (olddecl))))
1016 return 0;
1017 }
1018 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1019 {
1020 tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1021 tree newres = DECL_TEMPLATE_RESULT (newdecl);
1022
1023 if (TREE_CODE (newres) != TREE_CODE (oldres))
1024 return 0;
1025
1026 if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1027 DECL_TEMPLATE_PARMS (olddecl)))
1028 return 0;
1029
1030 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1031 types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres))
1032 && equivalently_constrained (olddecl, newdecl));
1033 else
1034 // We don't need to check equivalently_constrained for variable and
1035 // function templates because we check it on the results.
1036 types_match = decls_match (oldres, newres);
1037 }
1038 else
1039 {
1040 /* Need to check scope for variable declaration (VAR_DECL).
1041 For typedef (TYPE_DECL), scope is ignored. */
1042 if (VAR_P (newdecl)
1043 && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1044 /* [dcl.link]
1045 Two declarations for an object with C language linkage
1046 with the same name (ignoring the namespace that qualify
1047 it) that appear in different namespace scopes refer to
1048 the same object. */
1049 && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1050 return 0;
1051
1052 if (TREE_TYPE (newdecl) == error_mark_node)
1053 types_match = TREE_TYPE (olddecl) == error_mark_node;
1054 else if (TREE_TYPE (olddecl) == NULL_TREE)
1055 types_match = TREE_TYPE (newdecl) == NULL_TREE;
1056 else if (TREE_TYPE (newdecl) == NULL_TREE)
1057 types_match = 0;
1058 else
1059 types_match = comptypes (TREE_TYPE (newdecl),
1060 TREE_TYPE (olddecl),
1061 COMPARE_REDECLARATION);
1062 }
1063
1064 // Normal functions can be constrained, as can variable partial
1065 // specializations.
1066 if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl))
1067 types_match = equivalently_constrained (newdecl, olddecl);
1068
1069 return types_match;
1070 }
1071
1072 /* NEWDECL and OLDDECL have identical signatures. If they are
1073 different versions adjust them and return true.
1074 If RECORD is set to true, record function versions. */
1075
1076 bool
1077 maybe_version_functions (tree newdecl, tree olddecl, bool record)
1078 {
1079 if (!targetm.target_option.function_versions (newdecl, olddecl))
1080 return false;
1081
1082 if (!DECL_FUNCTION_VERSIONED (olddecl))
1083 {
1084 DECL_FUNCTION_VERSIONED (olddecl) = 1;
1085 if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1086 mangle_decl (olddecl);
1087 }
1088
1089 if (!DECL_FUNCTION_VERSIONED (newdecl))
1090 {
1091 DECL_FUNCTION_VERSIONED (newdecl) = 1;
1092 if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1093 mangle_decl (newdecl);
1094 }
1095
1096 if (record)
1097 cgraph_node::record_function_versions (olddecl, newdecl);
1098
1099 return true;
1100 }
1101
1102 /* If NEWDECL is `static' and an `extern' was seen previously,
1103 warn about it. OLDDECL is the previous declaration.
1104
1105 Note that this does not apply to the C++ case of declaring
1106 a variable `extern const' and then later `const'.
1107
1108 Don't complain about built-in functions, since they are beyond
1109 the user's control. */
1110
1111 void
1112 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1113 {
1114 if (TREE_CODE (newdecl) == TYPE_DECL
1115 || TREE_CODE (newdecl) == TEMPLATE_DECL
1116 || TREE_CODE (newdecl) == CONST_DECL
1117 || TREE_CODE (newdecl) == NAMESPACE_DECL)
1118 return;
1119
1120 /* Don't get confused by static member functions; that's a different
1121 use of `static'. */
1122 if (TREE_CODE (newdecl) == FUNCTION_DECL
1123 && DECL_STATIC_FUNCTION_P (newdecl))
1124 return;
1125
1126 /* If the old declaration was `static', or the new one isn't, then
1127 everything is OK. */
1128 if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1129 return;
1130
1131 /* It's OK to declare a builtin function as `static'. */
1132 if (TREE_CODE (olddecl) == FUNCTION_DECL
1133 && DECL_ARTIFICIAL (olddecl))
1134 return;
1135
1136 auto_diagnostic_group d;
1137 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1138 "%qD was declared %<extern%> and later %<static%>", newdecl))
1139 inform (DECL_SOURCE_LOCATION (olddecl),
1140 "previous declaration of %qD", olddecl);
1141 }
1142
1143 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1144 function templates. If their exception specifications do not
1145 match, issue a diagnostic. */
1146
1147 static void
1148 check_redeclaration_exception_specification (tree new_decl,
1149 tree old_decl)
1150 {
1151 tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1152 tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1153
1154 /* Two default specs are equivalent, don't force evaluation. */
1155 if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1156 && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1157 return;
1158
1159 if (!type_dependent_expression_p (old_decl))
1160 {
1161 maybe_instantiate_noexcept (new_decl);
1162 maybe_instantiate_noexcept (old_decl);
1163 }
1164 new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1165 old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1166
1167 /* [except.spec]
1168
1169 If any declaration of a function has an exception-specification,
1170 all declarations, including the definition and an explicit
1171 specialization, of that function shall have an
1172 exception-specification with the same set of type-ids. */
1173 if (! DECL_IS_BUILTIN (old_decl)
1174 && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1175 {
1176 const char *const msg
1177 = G_("declaration of %qF has a different exception specifier");
1178 bool complained = true;
1179 location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1180 auto_diagnostic_group d;
1181 if (DECL_IN_SYSTEM_HEADER (old_decl))
1182 complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl);
1183 else if (!flag_exceptions)
1184 /* We used to silently permit mismatched eh specs with
1185 -fno-exceptions, so make them a pedwarn now. */
1186 complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl);
1187 else
1188 error_at (new_loc, msg, new_decl);
1189 if (complained)
1190 inform (DECL_SOURCE_LOCATION (old_decl),
1191 "from previous declaration %qF", old_decl);
1192 }
1193 }
1194
1195 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1196 Otherwise issue diagnostics. */
1197
1198 static bool
1199 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1200 {
1201 old_decl = STRIP_TEMPLATE (old_decl);
1202 new_decl = STRIP_TEMPLATE (new_decl);
1203 if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1204 || !VAR_OR_FUNCTION_DECL_P (new_decl))
1205 return true;
1206 if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1207 == DECL_DECLARED_CONSTEXPR_P (new_decl))
1208 return true;
1209 if (TREE_CODE (old_decl) == FUNCTION_DECL)
1210 {
1211 if (fndecl_built_in_p (old_decl))
1212 {
1213 /* Hide a built-in declaration. */
1214 DECL_DECLARED_CONSTEXPR_P (old_decl)
1215 = DECL_DECLARED_CONSTEXPR_P (new_decl);
1216 return true;
1217 }
1218 /* 7.1.5 [dcl.constexpr]
1219 Note: An explicit specialization can differ from the template
1220 declaration with respect to the constexpr specifier. */
1221 if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1222 && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1223 return true;
1224
1225 error_at (DECL_SOURCE_LOCATION (new_decl),
1226 "redeclaration %qD differs in %<constexpr%> "
1227 "from previous declaration", new_decl);
1228 inform (DECL_SOURCE_LOCATION (old_decl),
1229 "previous declaration %qD", old_decl);
1230 return false;
1231 }
1232 return true;
1233 }
1234
1235 // If OLDDECL and NEWDECL are concept declarations with the same type
1236 // (i.e., and template parameters), but different requirements,
1237 // emit diagnostics and return true. Otherwise, return false.
1238 static inline bool
1239 check_concept_refinement (tree olddecl, tree newdecl)
1240 {
1241 if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1242 return false;
1243
1244 tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1245 tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1246 if (TREE_CODE (d1) != TREE_CODE (d2))
1247 return false;
1248
1249 tree t1 = TREE_TYPE (d1);
1250 tree t2 = TREE_TYPE (d2);
1251 if (TREE_CODE (d1) == FUNCTION_DECL)
1252 {
1253 if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1254 && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1255 DECL_TEMPLATE_PARMS (newdecl))
1256 && !equivalently_constrained (olddecl, newdecl))
1257 {
1258 error ("cannot specialize concept %q#D", olddecl);
1259 return true;
1260 }
1261 }
1262 return false;
1263 }
1264
1265 /* DECL is a redeclaration of a function or function template. If
1266 it does have default arguments issue a diagnostic. Note: this
1267 function is used to enforce the requirements in C++11 8.3.6 about
1268 no default arguments in redeclarations. */
1269
1270 static void
1271 check_redeclaration_no_default_args (tree decl)
1272 {
1273 gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1274
1275 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1276 t && t != void_list_node; t = TREE_CHAIN (t))
1277 if (TREE_PURPOSE (t))
1278 {
1279 permerror (DECL_SOURCE_LOCATION (decl),
1280 "redeclaration of %q#D may not have default "
1281 "arguments", decl);
1282 return;
1283 }
1284 }
1285
1286 /* NEWDECL is a redeclaration of a function or function template OLDDECL,
1287 in any case represented as FUNCTION_DECLs (the DECL_TEMPLATE_RESULTs of
1288 the TEMPLATE_DECLs in case of function templates). This function is used
1289 to enforce the final part of C++17 11.3.6/4, about a single declaration:
1290 "If a friend declaration specifies a default argument expression, that
1291 declaration shall be a definition and shall be the only declaration of
1292 the function or function template in the translation unit." */
1293
1294 static void
1295 check_no_redeclaration_friend_default_args (tree olddecl, tree newdecl,
1296 bool olddecl_hidden_friend_p)
1297 {
1298 if (!olddecl_hidden_friend_p && !DECL_FRIEND_P (newdecl))
1299 return;
1300
1301 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1302 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1303
1304 for (; t1 && t1 != void_list_node;
1305 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1306 if ((olddecl_hidden_friend_p && TREE_PURPOSE (t1))
1307 || (DECL_FRIEND_P (newdecl) && TREE_PURPOSE (t2)))
1308 {
1309 auto_diagnostic_group d;
1310 if (permerror (DECL_SOURCE_LOCATION (newdecl),
1311 "friend declaration of %q#D specifies default "
1312 "arguments and isn't the only declaration", newdecl))
1313 inform (DECL_SOURCE_LOCATION (olddecl),
1314 "previous declaration of %q#D", olddecl);
1315 return;
1316 }
1317 }
1318
1319 /* Merge tree bits that correspond to attributes noreturn, nothrow,
1320 const, malloc, and pure from NEWDECL with those of OLDDECL. */
1321
1322 static void
1323 merge_attribute_bits (tree newdecl, tree olddecl)
1324 {
1325 TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1326 TREE_THIS_VOLATILE (olddecl) |= TREE_THIS_VOLATILE (newdecl);
1327 TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1328 TREE_NOTHROW (olddecl) |= TREE_NOTHROW (newdecl);
1329 TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1330 TREE_READONLY (olddecl) |= TREE_READONLY (newdecl);
1331 DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1332 DECL_IS_MALLOC (olddecl) |= DECL_IS_MALLOC (newdecl);
1333 DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1334 DECL_PURE_P (olddecl) |= DECL_PURE_P (newdecl);
1335 DECL_UNINLINABLE (newdecl) |= DECL_UNINLINABLE (olddecl);
1336 DECL_UNINLINABLE (olddecl) |= DECL_UNINLINABLE (newdecl);
1337 }
1338
1339 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn) \
1340 && lookup_attribute ("gnu_inline", \
1341 DECL_ATTRIBUTES (fn)))
1342
1343 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1344 If the redeclaration is invalid, a diagnostic is issued, and the
1345 error_mark_node is returned. Otherwise, OLDDECL is returned.
1346
1347 If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1348 returned.
1349
1350 NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend. */
1351
1352 tree
1353 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1354 {
1355 unsigned olddecl_uid = DECL_UID (olddecl);
1356 int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1357 int olddecl_hidden_friend = 0;
1358 int new_defines_function = 0;
1359 tree new_template_info;
1360 location_t olddecl_loc = DECL_SOURCE_LOCATION (olddecl);
1361 location_t newdecl_loc = DECL_SOURCE_LOCATION (newdecl);
1362
1363 if (newdecl == olddecl)
1364 return olddecl;
1365
1366 types_match = decls_match (newdecl, olddecl);
1367
1368 /* If either the type of the new decl or the type of the old decl is an
1369 error_mark_node, then that implies that we have already issued an
1370 error (earlier) for some bogus type specification, and in that case,
1371 it is rather pointless to harass the user with yet more error message
1372 about the same declaration, so just pretend the types match here. */
1373 if (TREE_TYPE (newdecl) == error_mark_node
1374 || TREE_TYPE (olddecl) == error_mark_node)
1375 return error_mark_node;
1376
1377 if (DECL_NAME (newdecl)
1378 && DECL_NAME (olddecl)
1379 && UDLIT_OPER_P (DECL_NAME (newdecl))
1380 && UDLIT_OPER_P (DECL_NAME (olddecl)))
1381 {
1382 if (TREE_CODE (newdecl) == TEMPLATE_DECL
1383 && TREE_CODE (olddecl) != TEMPLATE_DECL
1384 && check_raw_literal_operator (olddecl))
1385 error_at (newdecl_loc,
1386 "literal operator template %qD conflicts with"
1387 " raw literal operator %qD", newdecl, olddecl);
1388 else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1389 && TREE_CODE (olddecl) == TEMPLATE_DECL
1390 && check_raw_literal_operator (newdecl))
1391 error_at (newdecl_loc,
1392 "raw literal operator %qD conflicts with"
1393 " literal operator template %qD", newdecl, olddecl);
1394 }
1395
1396 /* True to merge attributes between the declarations, false to
1397 set OLDDECL's attributes to those of NEWDECL (for template
1398 explicit specializations that specify their own attributes
1399 independent of those specified for the primary template). */
1400 const bool merge_attr = (TREE_CODE (newdecl) != FUNCTION_DECL
1401 || !DECL_TEMPLATE_SPECIALIZATION (newdecl)
1402 || DECL_TEMPLATE_SPECIALIZATION (olddecl));
1403
1404 if (DECL_P (olddecl)
1405 && TREE_CODE (newdecl) == FUNCTION_DECL
1406 && TREE_CODE (olddecl) == FUNCTION_DECL
1407 && merge_attr
1408 && diagnose_mismatched_attributes (olddecl, newdecl))
1409 {
1410 if (DECL_INITIAL (olddecl))
1411 inform (olddecl_loc,
1412 "previous definition of %qD was here", olddecl);
1413 else
1414 inform (olddecl_loc,
1415 "previous declaration of %qD was here", olddecl);
1416 }
1417
1418 /* Check for redeclaration and other discrepancies. */
1419 if (TREE_CODE (olddecl) == FUNCTION_DECL
1420 && DECL_ARTIFICIAL (olddecl))
1421 {
1422 gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1423 if (TREE_CODE (newdecl) != FUNCTION_DECL)
1424 {
1425 /* Avoid warnings redeclaring built-ins which have not been
1426 explicitly declared. */
1427 if (DECL_ANTICIPATED (olddecl))
1428 {
1429 if (TREE_PUBLIC (newdecl)
1430 && CP_DECL_CONTEXT (newdecl) == global_namespace)
1431 warning_at (newdecl_loc,
1432 OPT_Wbuiltin_declaration_mismatch,
1433 "built-in function %qD declared as non-function",
1434 newdecl);
1435 return NULL_TREE;
1436 }
1437
1438 /* If you declare a built-in or predefined function name as static,
1439 the old definition is overridden, but optionally warn this was a
1440 bad choice of name. */
1441 if (! TREE_PUBLIC (newdecl))
1442 {
1443 warning_at (newdecl_loc,
1444 OPT_Wshadow,
1445 fndecl_built_in_p (olddecl)
1446 ? G_("shadowing built-in function %q#D")
1447 : G_("shadowing library function %q#D"), olddecl);
1448 /* Discard the old built-in function. */
1449 return NULL_TREE;
1450 }
1451 /* If the built-in is not ansi, then programs can override
1452 it even globally without an error. */
1453 else if (! fndecl_built_in_p (olddecl))
1454 warning_at (newdecl_loc, 0,
1455 "library function %q#D redeclared as non-function %q#D",
1456 olddecl, newdecl);
1457 else
1458 error_at (newdecl_loc,
1459 "declaration of %q#D conflicts with built-in "
1460 "declaration %q#D", newdecl, olddecl);
1461 return NULL_TREE;
1462 }
1463 else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1464 {
1465 gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1466 error_at (newdecl_loc,
1467 "redeclaration of %<pragma omp declare reduction%>");
1468 inform (olddecl_loc,
1469 "previous %<pragma omp declare reduction%> declaration");
1470 return error_mark_node;
1471 }
1472 else if (!types_match)
1473 {
1474 /* Avoid warnings redeclaring built-ins which have not been
1475 explicitly declared. */
1476 if (DECL_ANTICIPATED (olddecl))
1477 {
1478 tree t1, t2;
1479
1480 /* A new declaration doesn't match a built-in one unless it
1481 is also extern "C". */
1482 gcc_assert (DECL_IS_BUILTIN (olddecl));
1483 gcc_assert (DECL_EXTERN_C_P (olddecl));
1484 if (!DECL_EXTERN_C_P (newdecl))
1485 return NULL_TREE;
1486
1487 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1488 t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1489 t1 || t2;
1490 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1491 {
1492 if (!t1 || !t2)
1493 break;
1494 /* FILE, tm types are not known at the time
1495 we create the builtins. */
1496 for (unsigned i = 0;
1497 i < sizeof (builtin_structptr_types)
1498 / sizeof (builtin_structptr_type);
1499 ++i)
1500 if (TREE_VALUE (t2) == builtin_structptr_types[i].node)
1501 {
1502 tree t = TREE_VALUE (t1);
1503
1504 if (TYPE_PTR_P (t)
1505 && TYPE_IDENTIFIER (TREE_TYPE (t))
1506 == get_identifier (builtin_structptr_types[i].str)
1507 && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1508 {
1509 tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1510
1511 TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1512 = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1513 types_match = decls_match (newdecl, olddecl);
1514 if (types_match)
1515 return duplicate_decls (newdecl, olddecl,
1516 newdecl_is_friend);
1517 TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1518 }
1519 goto next_arg;
1520 }
1521
1522 if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1523 break;
1524 next_arg:;
1525 }
1526
1527 warning_at (newdecl_loc,
1528 OPT_Wbuiltin_declaration_mismatch,
1529 "declaration of %q#D conflicts with built-in "
1530 "declaration %q#D", newdecl, olddecl);
1531 }
1532 else if ((DECL_EXTERN_C_P (newdecl)
1533 && DECL_EXTERN_C_P (olddecl))
1534 || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1535 TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1536 {
1537 /* Don't really override olddecl for __* prefixed builtins
1538 except for __[^b]*_chk, the compiler might be using those
1539 explicitly. */
1540 if (fndecl_built_in_p (olddecl))
1541 {
1542 tree id = DECL_NAME (olddecl);
1543 const char *name = IDENTIFIER_POINTER (id);
1544 size_t len;
1545
1546 if (name[0] == '_'
1547 && name[1] == '_'
1548 && (strncmp (name + 2, "builtin_",
1549 strlen ("builtin_")) == 0
1550 || (len = strlen (name)) <= strlen ("___chk")
1551 || memcmp (name + len - strlen ("_chk"),
1552 "_chk", strlen ("_chk") + 1) != 0))
1553 {
1554 if (DECL_INITIAL (newdecl))
1555 {
1556 error_at (newdecl_loc,
1557 "definition of %q#D ambiguates built-in "
1558 "declaration %q#D", newdecl, olddecl);
1559 return error_mark_node;
1560 }
1561 auto_diagnostic_group d;
1562 if (permerror (newdecl_loc,
1563 "new declaration %q#D ambiguates built-in"
1564 " declaration %q#D", newdecl, olddecl)
1565 && flag_permissive)
1566 inform (newdecl_loc,
1567 "ignoring the %q#D declaration", newdecl);
1568 return flag_permissive ? olddecl : error_mark_node;
1569 }
1570 }
1571
1572 /* A near match; override the builtin. */
1573
1574 if (TREE_PUBLIC (newdecl))
1575 warning_at (newdecl_loc,
1576 OPT_Wbuiltin_declaration_mismatch,
1577 "new declaration %q#D ambiguates built-in "
1578 "declaration %q#D", newdecl, olddecl);
1579 else
1580 warning (OPT_Wshadow,
1581 fndecl_built_in_p (olddecl)
1582 ? G_("shadowing built-in function %q#D")
1583 : G_("shadowing library function %q#D"), olddecl);
1584 }
1585 else
1586 /* Discard the old built-in function. */
1587 return NULL_TREE;
1588
1589 /* Replace the old RTL to avoid problems with inlining. */
1590 COPY_DECL_RTL (newdecl, olddecl);
1591 }
1592 /* Even if the types match, prefer the new declarations type for
1593 built-ins which have not been explicitly declared, for
1594 exception lists, etc... */
1595 else if (DECL_IS_BUILTIN (olddecl))
1596 {
1597 tree type = TREE_TYPE (newdecl);
1598 tree attribs = (*targetm.merge_type_attributes)
1599 (TREE_TYPE (olddecl), type);
1600
1601 type = cp_build_type_attribute_variant (type, attribs);
1602 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1603 }
1604
1605 /* If a function is explicitly declared "throw ()", propagate that to
1606 the corresponding builtin. */
1607 if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1608 && DECL_ANTICIPATED (olddecl)
1609 && TREE_NOTHROW (newdecl)
1610 && !TREE_NOTHROW (olddecl))
1611 {
1612 enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1613 tree tmpdecl = builtin_decl_explicit (fncode);
1614 if (tmpdecl && tmpdecl != olddecl && types_match)
1615 TREE_NOTHROW (tmpdecl) = 1;
1616 }
1617
1618 /* Whether or not the builtin can throw exceptions has no
1619 bearing on this declarator. */
1620 TREE_NOTHROW (olddecl) = 0;
1621
1622 if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1623 {
1624 /* If a builtin function is redeclared as `static', merge
1625 the declarations, but make the original one static. */
1626 DECL_THIS_STATIC (olddecl) = 1;
1627 TREE_PUBLIC (olddecl) = 0;
1628
1629 /* Make the old declaration consistent with the new one so
1630 that all remnants of the builtin-ness of this function
1631 will be banished. */
1632 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1633 COPY_DECL_RTL (newdecl, olddecl);
1634 }
1635 }
1636 else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1637 {
1638 /* C++ Standard, 3.3, clause 4:
1639 "[Note: a namespace name or a class template name must be unique
1640 in its declarative region (7.3.2, clause 14). ]" */
1641 if (TREE_CODE (olddecl) != NAMESPACE_DECL
1642 && TREE_CODE (newdecl) != NAMESPACE_DECL
1643 && (TREE_CODE (olddecl) != TEMPLATE_DECL
1644 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1645 && (TREE_CODE (newdecl) != TEMPLATE_DECL
1646 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1647 {
1648 if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1649 && TREE_CODE (newdecl) != TYPE_DECL)
1650 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1651 && TREE_CODE (olddecl) != TYPE_DECL))
1652 {
1653 /* We do nothing special here, because C++ does such nasty
1654 things with TYPE_DECLs. Instead, just let the TYPE_DECL
1655 get shadowed, and know that if we need to find a TYPE_DECL
1656 for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1657 slot of the identifier. */
1658 return NULL_TREE;
1659 }
1660
1661 if ((TREE_CODE (newdecl) == FUNCTION_DECL
1662 && DECL_FUNCTION_TEMPLATE_P (olddecl))
1663 || (TREE_CODE (olddecl) == FUNCTION_DECL
1664 && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1665 return NULL_TREE;
1666 }
1667
1668 error ("%q#D redeclared as different kind of symbol", newdecl);
1669 if (TREE_CODE (olddecl) == TREE_LIST)
1670 olddecl = TREE_VALUE (olddecl);
1671 inform (olddecl_loc,
1672 "previous declaration %q#D", olddecl);
1673
1674 return error_mark_node;
1675 }
1676 else if (!types_match)
1677 {
1678 if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1679 /* These are certainly not duplicate declarations; they're
1680 from different scopes. */
1681 return NULL_TREE;
1682
1683 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1684 {
1685 /* The name of a class template may not be declared to refer to
1686 any other template, class, function, object, namespace, value,
1687 or type in the same scope. */
1688 if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1689 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1690 {
1691 error_at (newdecl_loc,
1692 "conflicting declaration of template %q#D", newdecl);
1693 inform (olddecl_loc,
1694 "previous declaration %q#D", olddecl);
1695 return error_mark_node;
1696 }
1697 else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1698 && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1699 && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1700 TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1701 && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1702 DECL_TEMPLATE_PARMS (olddecl))
1703 /* Template functions can be disambiguated by
1704 return type. */
1705 && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1706 TREE_TYPE (TREE_TYPE (olddecl)))
1707 // Template functions can also be disambiguated by
1708 // constraints.
1709 && equivalently_constrained (olddecl, newdecl))
1710 {
1711 error_at (newdecl_loc, "ambiguating new declaration %q#D",
1712 newdecl);
1713 inform (olddecl_loc,
1714 "old declaration %q#D", olddecl);
1715 }
1716 else if (check_concept_refinement (olddecl, newdecl))
1717 return error_mark_node;
1718 return NULL_TREE;
1719 }
1720 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1721 {
1722 if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1723 {
1724 error_at (newdecl_loc,
1725 "conflicting declaration of C function %q#D",
1726 newdecl);
1727 inform (olddecl_loc,
1728 "previous declaration %q#D", olddecl);
1729 return NULL_TREE;
1730 }
1731 /* For function versions, params and types match, but they
1732 are not ambiguous. */
1733 else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1734 && !DECL_FUNCTION_VERSIONED (olddecl))
1735 // The functions have the same parameter types.
1736 && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1737 TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1738 // And the same constraints.
1739 && equivalently_constrained (newdecl, olddecl))
1740 {
1741 error_at (newdecl_loc,
1742 "ambiguating new declaration of %q#D", newdecl);
1743 inform (olddecl_loc,
1744 "old declaration %q#D", olddecl);
1745 return error_mark_node;
1746 }
1747 else
1748 return NULL_TREE;
1749 }
1750 else
1751 {
1752 error_at (newdecl_loc, "conflicting declaration %q#D", newdecl);
1753 inform (olddecl_loc,
1754 "previous declaration as %q#D", olddecl);
1755 return error_mark_node;
1756 }
1757 }
1758 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1759 && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1760 && (!DECL_TEMPLATE_INFO (newdecl)
1761 || (DECL_TI_TEMPLATE (newdecl)
1762 != DECL_TI_TEMPLATE (olddecl))))
1763 || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1764 && (!DECL_TEMPLATE_INFO (olddecl)
1765 || (DECL_TI_TEMPLATE (olddecl)
1766 != DECL_TI_TEMPLATE (newdecl))))))
1767 /* It's OK to have a template specialization and a non-template
1768 with the same type, or to have specializations of two
1769 different templates with the same type. Note that if one is a
1770 specialization, and the other is an instantiation of the same
1771 template, that we do not exit at this point. That situation
1772 can occur if we instantiate a template class, and then
1773 specialize one of its methods. This situation is valid, but
1774 the declarations must be merged in the usual way. */
1775 return NULL_TREE;
1776 else if (TREE_CODE (newdecl) == FUNCTION_DECL
1777 && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1778 && !DECL_USE_TEMPLATE (newdecl))
1779 || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1780 && !DECL_USE_TEMPLATE (olddecl))))
1781 /* One of the declarations is a template instantiation, and the
1782 other is not a template at all. That's OK. */
1783 return NULL_TREE;
1784 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1785 {
1786 /* In [namespace.alias] we have:
1787
1788 In a declarative region, a namespace-alias-definition can be
1789 used to redefine a namespace-alias declared in that declarative
1790 region to refer only to the namespace to which it already
1791 refers.
1792
1793 Therefore, if we encounter a second alias directive for the same
1794 alias, we can just ignore the second directive. */
1795 if (DECL_NAMESPACE_ALIAS (newdecl)
1796 && (DECL_NAMESPACE_ALIAS (newdecl)
1797 == DECL_NAMESPACE_ALIAS (olddecl)))
1798 return olddecl;
1799
1800 /* Leave it to update_binding to merge or report error. */
1801 return NULL_TREE;
1802 }
1803 else
1804 {
1805 const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1806 if (errmsg)
1807 {
1808 auto_diagnostic_group d;
1809 error_at (newdecl_loc, errmsg, newdecl);
1810 if (DECL_NAME (olddecl) != NULL_TREE)
1811 inform (olddecl_loc,
1812 (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1813 ? G_("%q#D previously defined here")
1814 : G_("%q#D previously declared here"), olddecl);
1815 return error_mark_node;
1816 }
1817 else if (TREE_CODE (olddecl) == FUNCTION_DECL
1818 && DECL_INITIAL (olddecl) != NULL_TREE
1819 && !prototype_p (TREE_TYPE (olddecl))
1820 && prototype_p (TREE_TYPE (newdecl)))
1821 {
1822 /* Prototype decl follows defn w/o prototype. */
1823 auto_diagnostic_group d;
1824 if (warning_at (newdecl_loc, 0,
1825 "prototype specified for %q#D", newdecl))
1826 inform (olddecl_loc,
1827 "previous non-prototype definition here");
1828 }
1829 else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1830 && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1831 {
1832 /* [dcl.link]
1833 If two declarations of the same function or object
1834 specify different linkage-specifications ..., the program
1835 is ill-formed.... Except for functions with C++ linkage,
1836 a function declaration without a linkage specification
1837 shall not precede the first linkage specification for
1838 that function. A function can be declared without a
1839 linkage specification after an explicit linkage
1840 specification has been seen; the linkage explicitly
1841 specified in the earlier declaration is not affected by
1842 such a function declaration.
1843
1844 DR 563 raises the question why the restrictions on
1845 functions should not also apply to objects. Older
1846 versions of G++ silently ignore the linkage-specification
1847 for this example:
1848
1849 namespace N {
1850 extern int i;
1851 extern "C" int i;
1852 }
1853
1854 which is clearly wrong. Therefore, we now treat objects
1855 like functions. */
1856 if (current_lang_depth () == 0)
1857 {
1858 /* There is no explicit linkage-specification, so we use
1859 the linkage from the previous declaration. */
1860 retrofit_lang_decl (newdecl);
1861 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1862 }
1863 else
1864 {
1865 auto_diagnostic_group d;
1866 error_at (newdecl_loc,
1867 "conflicting declaration of %q#D with %qL linkage",
1868 newdecl, DECL_LANGUAGE (newdecl));
1869 inform (olddecl_loc,
1870 "previous declaration with %qL linkage",
1871 DECL_LANGUAGE (olddecl));
1872 }
1873 }
1874
1875 if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1876 ;
1877 else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1878 {
1879 /* Note: free functions, as TEMPLATE_DECLs, are handled below. */
1880 if (DECL_FUNCTION_MEMBER_P (olddecl)
1881 && (/* grokfndecl passes member function templates too
1882 as FUNCTION_DECLs. */
1883 DECL_TEMPLATE_INFO (olddecl)
1884 /* C++11 8.3.6/6.
1885 Default arguments for a member function of a class
1886 template shall be specified on the initial declaration
1887 of the member function within the class template. */
1888 || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1889 check_redeclaration_no_default_args (newdecl);
1890 else
1891 {
1892 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1893 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1894 int i = 1;
1895
1896 for (; t1 && t1 != void_list_node;
1897 t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1898 if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1899 {
1900 if (simple_cst_equal (TREE_PURPOSE (t1),
1901 TREE_PURPOSE (t2)) == 1)
1902 {
1903 auto_diagnostic_group d;
1904 if (permerror (newdecl_loc,
1905 "default argument given for parameter "
1906 "%d of %q#D", i, newdecl))
1907 inform (olddecl_loc,
1908 "previous specification in %q#D here",
1909 olddecl);
1910 }
1911 else
1912 {
1913 auto_diagnostic_group d;
1914 error_at (newdecl_loc,
1915 "default argument given for parameter %d "
1916 "of %q#D", i, newdecl);
1917 inform (olddecl_loc,
1918 "previous specification in %q#D here",
1919 olddecl);
1920 }
1921 }
1922
1923 /* C++17 11.3.6/4: "If a friend declaration specifies a default
1924 argument expression, that declaration... shall be the only
1925 declaration of the function or function template in the
1926 translation unit." */
1927 check_no_redeclaration_friend_default_args
1928 (olddecl, newdecl, DECL_HIDDEN_FRIEND_P (olddecl));
1929 }
1930 }
1931 }
1932
1933 /* Do not merge an implicit typedef with an explicit one. In:
1934
1935 class A;
1936 ...
1937 typedef class A A __attribute__ ((foo));
1938
1939 the attribute should apply only to the typedef. */
1940 if (TREE_CODE (olddecl) == TYPE_DECL
1941 && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1942 || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1943 return NULL_TREE;
1944
1945 /* If new decl is `static' and an `extern' was seen previously,
1946 warn about it. */
1947 warn_extern_redeclared_static (newdecl, olddecl);
1948
1949 if (!validate_constexpr_redeclaration (olddecl, newdecl))
1950 return error_mark_node;
1951
1952 /* We have committed to returning 1 at this point. */
1953 if (TREE_CODE (newdecl) == FUNCTION_DECL)
1954 {
1955 /* Now that functions must hold information normally held
1956 by field decls, there is extra work to do so that
1957 declaration information does not get destroyed during
1958 definition. */
1959 if (DECL_VINDEX (olddecl))
1960 DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1961 if (DECL_CONTEXT (olddecl))
1962 DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1963 DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1964 DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1965 DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1966 DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1967 DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1968 DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1969 DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1970 DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1971 if (DECL_OVERLOADED_OPERATOR_P (olddecl))
1972 DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
1973 = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
1974 new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1975
1976 /* Optionally warn about more than one declaration for the same
1977 name, but don't warn about a function declaration followed by a
1978 definition. */
1979 if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1980 && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1981 /* Don't warn about extern decl followed by definition. */
1982 && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1983 /* Don't warn about friends, let add_friend take care of it. */
1984 && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
1985 /* Don't warn about declaration followed by specialization. */
1986 && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
1987 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
1988 {
1989 auto_diagnostic_group d;
1990 if (warning_at (newdecl_loc,
1991 OPT_Wredundant_decls,
1992 "redundant redeclaration of %qD in same scope",
1993 newdecl))
1994 inform (olddecl_loc,
1995 "previous declaration of %qD", olddecl);
1996 }
1997
1998 if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
1999 && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
2000 {
2001 if (DECL_DELETED_FN (newdecl))
2002 {
2003 auto_diagnostic_group d;
2004 error_at (newdecl_loc, "deleted definition of %qD", newdecl);
2005 inform (olddecl_loc,
2006 "previous declaration of %qD", olddecl);
2007 }
2008 DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
2009 }
2010 }
2011
2012 /* Deal with C++: must preserve virtual function table size. */
2013 if (TREE_CODE (olddecl) == TYPE_DECL)
2014 {
2015 tree newtype = TREE_TYPE (newdecl);
2016 tree oldtype = TREE_TYPE (olddecl);
2017
2018 if (newtype != error_mark_node && oldtype != error_mark_node
2019 && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
2020 CLASSTYPE_FRIEND_CLASSES (newtype)
2021 = CLASSTYPE_FRIEND_CLASSES (oldtype);
2022
2023 DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
2024 }
2025
2026 /* Copy all the DECL_... slots specified in the new decl except for
2027 any that we copy here from the old type. */
2028 if (merge_attr)
2029 DECL_ATTRIBUTES (newdecl)
2030 = (*targetm.merge_decl_attributes) (olddecl, newdecl);
2031 else
2032 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2033
2034 if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
2035 {
2036 olddecl_friend = DECL_FRIEND_P (olddecl);
2037 olddecl_hidden_friend = DECL_HIDDEN_FRIEND_P (olddecl);
2038 hidden_friend = (DECL_ANTICIPATED (olddecl)
2039 && DECL_HIDDEN_FRIEND_P (olddecl)
2040 && newdecl_is_friend);
2041 if (!hidden_friend)
2042 {
2043 DECL_ANTICIPATED (olddecl) = 0;
2044 DECL_HIDDEN_FRIEND_P (olddecl) = 0;
2045 }
2046 }
2047
2048 if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2049 {
2050 tree old_result = DECL_TEMPLATE_RESULT (olddecl);
2051 tree new_result = DECL_TEMPLATE_RESULT (newdecl);
2052 TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2053 DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
2054 = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
2055 DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2056
2057 DECL_ATTRIBUTES (old_result)
2058 = (*targetm.merge_decl_attributes) (old_result, new_result);
2059
2060 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2061 {
2062 if (DECL_SOURCE_LOCATION (newdecl)
2063 != DECL_SOURCE_LOCATION (olddecl))
2064 {
2065 /* Per C++11 8.3.6/4, default arguments cannot be added in
2066 later declarations of a function template. */
2067 check_redeclaration_no_default_args (newdecl);
2068 /* C++17 11.3.6/4: "If a friend declaration specifies a default
2069 argument expression, that declaration... shall be the only
2070 declaration of the function or function template in the
2071 translation unit." */
2072 check_no_redeclaration_friend_default_args
2073 (old_result, new_result, olddecl_hidden_friend);
2074 }
2075
2076 check_default_args (newdecl);
2077
2078 if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2079 && DECL_INITIAL (new_result))
2080 {
2081 if (DECL_INITIAL (old_result))
2082 DECL_UNINLINABLE (old_result) = 1;
2083 else
2084 DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2085 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2086 DECL_NOT_REALLY_EXTERN (old_result)
2087 = DECL_NOT_REALLY_EXTERN (new_result);
2088 DECL_INTERFACE_KNOWN (old_result)
2089 = DECL_INTERFACE_KNOWN (new_result);
2090 DECL_DECLARED_INLINE_P (old_result)
2091 = DECL_DECLARED_INLINE_P (new_result);
2092 DECL_DISREGARD_INLINE_LIMITS (old_result)
2093 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2094
2095 }
2096 else
2097 {
2098 DECL_DECLARED_INLINE_P (old_result)
2099 |= DECL_DECLARED_INLINE_P (new_result);
2100 DECL_DISREGARD_INLINE_LIMITS (old_result)
2101 |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2102 check_redeclaration_exception_specification (newdecl, olddecl);
2103
2104 merge_attribute_bits (new_result, old_result);
2105 }
2106 }
2107
2108 /* If the new declaration is a definition, update the file and
2109 line information on the declaration, and also make
2110 the old declaration the same definition. */
2111 if (DECL_INITIAL (new_result) != NULL_TREE)
2112 {
2113 DECL_SOURCE_LOCATION (olddecl)
2114 = DECL_SOURCE_LOCATION (old_result)
2115 = DECL_SOURCE_LOCATION (newdecl);
2116 DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2117 if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2118 {
2119 tree parm;
2120 DECL_ARGUMENTS (old_result)
2121 = DECL_ARGUMENTS (new_result);
2122 for (parm = DECL_ARGUMENTS (old_result); parm;
2123 parm = DECL_CHAIN (parm))
2124 DECL_CONTEXT (parm) = old_result;
2125 }
2126 }
2127
2128 return olddecl;
2129 }
2130
2131 if (types_match)
2132 {
2133 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2134 check_redeclaration_exception_specification (newdecl, olddecl);
2135
2136 /* Automatically handles default parameters. */
2137 tree oldtype = TREE_TYPE (olddecl);
2138 tree newtype;
2139
2140 /* For typedefs use the old type, as the new type's DECL_NAME points
2141 at newdecl, which will be ggc_freed. */
2142 if (TREE_CODE (newdecl) == TYPE_DECL)
2143 {
2144 /* But NEWTYPE might have an attribute, honor that. */
2145 tree tem = TREE_TYPE (newdecl);
2146 newtype = oldtype;
2147
2148 if (TYPE_USER_ALIGN (tem))
2149 {
2150 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2151 SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2152 TYPE_USER_ALIGN (newtype) = true;
2153 }
2154
2155 /* And remove the new type from the variants list. */
2156 if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2157 {
2158 tree remove = TREE_TYPE (newdecl);
2159 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2160 t = TYPE_NEXT_VARIANT (t))
2161 if (TYPE_NEXT_VARIANT (t) == remove)
2162 {
2163 TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2164 break;
2165 }
2166 }
2167 }
2168 else if (merge_attr)
2169 newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2170 else
2171 newtype = TREE_TYPE (newdecl);
2172
2173 if (VAR_P (newdecl))
2174 {
2175 DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2176 /* For already initialized vars, TREE_READONLY could have been
2177 cleared in cp_finish_decl, because the var needs runtime
2178 initialization or destruction. Make sure not to set
2179 TREE_READONLY on it again. */
2180 if (DECL_INITIALIZED_P (olddecl)
2181 && !DECL_EXTERNAL (olddecl)
2182 && !TREE_READONLY (olddecl))
2183 TREE_READONLY (newdecl) = 0;
2184 DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2185 DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2186 |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2187 if (DECL_DEPENDENT_INIT_P (olddecl))
2188 SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2189 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2190 |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2191 if (DECL_CLASS_SCOPE_P (olddecl))
2192 DECL_DECLARED_CONSTEXPR_P (newdecl)
2193 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2194
2195 /* Merge the threadprivate attribute from OLDDECL into NEWDECL. */
2196 if (DECL_LANG_SPECIFIC (olddecl)
2197 && CP_DECL_THREADPRIVATE_P (olddecl))
2198 {
2199 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed. */
2200 retrofit_lang_decl (newdecl);
2201 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2202 }
2203 }
2204
2205 /* An explicit specialization of a function template or of a member
2206 function of a class template can be declared transaction_safe
2207 independently of whether the corresponding template entity is declared
2208 transaction_safe. */
2209 if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2210 && DECL_TEMPLATE_INSTANTIATION (olddecl)
2211 && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2212 && tx_safe_fn_type_p (newtype)
2213 && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2214 newtype = tx_unsafe_fn_variant (newtype);
2215
2216 TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2217
2218 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2219 check_default_args (newdecl);
2220
2221 /* Lay the type out, unless already done. */
2222 if (! same_type_p (newtype, oldtype)
2223 && TREE_TYPE (newdecl) != error_mark_node
2224 && !(processing_template_decl && uses_template_parms (newdecl)))
2225 layout_type (TREE_TYPE (newdecl));
2226
2227 if ((VAR_P (newdecl)
2228 || TREE_CODE (newdecl) == PARM_DECL
2229 || TREE_CODE (newdecl) == RESULT_DECL
2230 || TREE_CODE (newdecl) == FIELD_DECL
2231 || TREE_CODE (newdecl) == TYPE_DECL)
2232 && !(processing_template_decl && uses_template_parms (newdecl)))
2233 layout_decl (newdecl, 0);
2234
2235 /* Merge deprecatedness. */
2236 if (TREE_DEPRECATED (newdecl))
2237 TREE_DEPRECATED (olddecl) = 1;
2238
2239 /* Preserve function specific target and optimization options */
2240 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2241 {
2242 if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2243 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2244 DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2245 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2246
2247 if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2248 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2249 DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2250 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2251 }
2252 else
2253 {
2254 /* Merge the const type qualifier. */
2255 if (TREE_READONLY (newdecl))
2256 TREE_READONLY (olddecl) = 1;
2257 /* Merge the volatile type qualifier. */
2258 if (TREE_THIS_VOLATILE (newdecl))
2259 TREE_THIS_VOLATILE (olddecl) = 1;
2260 }
2261
2262 /* Merge the initialization information. */
2263 if (DECL_INITIAL (newdecl) == NULL_TREE
2264 && DECL_INITIAL (olddecl) != NULL_TREE)
2265 {
2266 DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2267 DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2268 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2269 {
2270 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2271 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2272 }
2273 }
2274
2275 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2276 {
2277 DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2278 |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2279 DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2280 DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2281 DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2282 |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2283
2284 if (merge_attr)
2285 merge_attribute_bits (newdecl, olddecl);
2286 else
2287 {
2288 /* Merge the noreturn bit. */
2289 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2290 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2291 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2292 DECL_IS_MALLOC (olddecl) = DECL_IS_MALLOC (newdecl);
2293 DECL_PURE_P (olddecl) = DECL_PURE_P (newdecl);
2294 }
2295 /* Keep the old RTL. */
2296 COPY_DECL_RTL (olddecl, newdecl);
2297 }
2298 else if (VAR_P (newdecl)
2299 && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2300 {
2301 /* Keep the old RTL. We cannot keep the old RTL if the old
2302 declaration was for an incomplete object and the new
2303 declaration is not since many attributes of the RTL will
2304 change. */
2305 COPY_DECL_RTL (olddecl, newdecl);
2306 }
2307 }
2308 /* If cannot merge, then use the new type and qualifiers,
2309 and don't preserve the old rtl. */
2310 else
2311 {
2312 /* Clean out any memory we had of the old declaration. */
2313 tree oldstatic = value_member (olddecl, static_aggregates);
2314 if (oldstatic)
2315 TREE_VALUE (oldstatic) = error_mark_node;
2316
2317 TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2318 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2319 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2320 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2321 TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2322 }
2323
2324 /* Merge the storage class information. */
2325 merge_weak (newdecl, olddecl);
2326
2327 DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2328 TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2329 TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2330 if (! DECL_EXTERNAL (olddecl))
2331 DECL_EXTERNAL (newdecl) = 0;
2332 if (! DECL_COMDAT (olddecl))
2333 DECL_COMDAT (newdecl) = 0;
2334
2335 new_template_info = NULL_TREE;
2336 if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2337 {
2338 bool new_redefines_gnu_inline = false;
2339
2340 if (new_defines_function
2341 && ((DECL_INTERFACE_KNOWN (olddecl)
2342 && TREE_CODE (olddecl) == FUNCTION_DECL)
2343 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2344 && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2345 == FUNCTION_DECL))))
2346 {
2347 tree fn = olddecl;
2348
2349 if (TREE_CODE (fn) == TEMPLATE_DECL)
2350 fn = DECL_TEMPLATE_RESULT (olddecl);
2351
2352 new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2353 }
2354
2355 if (!new_redefines_gnu_inline)
2356 {
2357 DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2358 DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2359 DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2360 }
2361 DECL_TEMPLATE_INSTANTIATED (newdecl)
2362 |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2363 DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2364
2365 /* If the OLDDECL is an instantiation and/or specialization,
2366 then the NEWDECL must be too. But, it may not yet be marked
2367 as such if the caller has created NEWDECL, but has not yet
2368 figured out that it is a redeclaration. */
2369 if (!DECL_USE_TEMPLATE (newdecl))
2370 DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2371
2372 /* Don't really know how much of the language-specific
2373 values we should copy from old to new. */
2374 DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2375 DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2376 DECL_INITIALIZED_IN_CLASS_P (newdecl)
2377 |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2378
2379 if (LANG_DECL_HAS_MIN (newdecl))
2380 {
2381 DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2382 DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2383 if (DECL_TEMPLATE_INFO (newdecl))
2384 {
2385 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2386 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2387 && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2388 /* Remember the presence of explicit specialization args. */
2389 TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2390 = TINFO_USED_TEMPLATE_ID (new_template_info);
2391 }
2392 DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2393 }
2394 /* Only functions have these fields. */
2395 if (DECL_DECLARES_FUNCTION_P (newdecl))
2396 {
2397 DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2398 DECL_BEFRIENDING_CLASSES (newdecl)
2399 = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2400 DECL_BEFRIENDING_CLASSES (olddecl));
2401 /* DECL_THUNKS is only valid for virtual functions,
2402 otherwise it is a DECL_FRIEND_CONTEXT. */
2403 if (DECL_VIRTUAL_P (newdecl))
2404 SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2405 }
2406 /* Only variables have this field. */
2407 else if (VAR_P (newdecl)
2408 && VAR_HAD_UNKNOWN_BOUND (olddecl))
2409 SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2410 }
2411
2412 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2413 {
2414 tree parm;
2415
2416 /* Merge parameter attributes. */
2417 tree oldarg, newarg;
2418 for (oldarg = DECL_ARGUMENTS(olddecl),
2419 newarg = DECL_ARGUMENTS(newdecl);
2420 oldarg && newarg;
2421 oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2422 DECL_ATTRIBUTES (newarg)
2423 = (*targetm.merge_decl_attributes) (oldarg, newarg);
2424 DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2425 }
2426
2427 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2428 && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2429 {
2430 /* If newdecl is not a specialization, then it is not a
2431 template-related function at all. And that means that we
2432 should have exited above, returning 0. */
2433 gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2434
2435 if (DECL_ODR_USED (olddecl))
2436 /* From [temp.expl.spec]:
2437
2438 If a template, a member template or the member of a class
2439 template is explicitly specialized then that
2440 specialization shall be declared before the first use of
2441 that specialization that would cause an implicit
2442 instantiation to take place, in every translation unit in
2443 which such a use occurs. */
2444 error ("explicit specialization of %qD after first use",
2445 olddecl);
2446
2447 SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2448 DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2449 && DECL_DECLARED_INLINE_P (newdecl));
2450
2451 /* Don't propagate visibility from the template to the
2452 specialization here. We'll do that in determine_visibility if
2453 appropriate. */
2454 DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2455
2456 /* [temp.expl.spec/14] We don't inline explicit specialization
2457 just because the primary template says so. */
2458 gcc_assert (!merge_attr);
2459
2460 DECL_DECLARED_INLINE_P (olddecl)
2461 = DECL_DECLARED_INLINE_P (newdecl);
2462
2463 DECL_DISREGARD_INLINE_LIMITS (olddecl)
2464 = DECL_DISREGARD_INLINE_LIMITS (newdecl);
2465
2466 DECL_UNINLINABLE (olddecl) = DECL_UNINLINABLE (newdecl);
2467 }
2468 else if (new_defines_function && DECL_INITIAL (olddecl))
2469 {
2470 /* Never inline re-defined extern inline functions.
2471 FIXME: this could be better handled by keeping both
2472 function as separate declarations. */
2473 DECL_UNINLINABLE (newdecl) = 1;
2474 }
2475 else
2476 {
2477 if (DECL_PENDING_INLINE_P (olddecl))
2478 {
2479 DECL_PENDING_INLINE_P (newdecl) = 1;
2480 DECL_PENDING_INLINE_INFO (newdecl)
2481 = DECL_PENDING_INLINE_INFO (olddecl);
2482 }
2483 else if (DECL_PENDING_INLINE_P (newdecl))
2484 ;
2485 else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
2486 DECL_SAVED_FUNCTION_DATA (newdecl)
2487 = DECL_SAVED_FUNCTION_DATA (olddecl);
2488
2489 DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2490
2491 DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2492 = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2493
2494 DECL_DISREGARD_INLINE_LIMITS (newdecl)
2495 = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2496 = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2497 || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2498 }
2499
2500 /* Preserve abstractness on cloned [cd]tors. */
2501 DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2502
2503 /* Update newdecl's parms to point at olddecl. */
2504 for (parm = DECL_ARGUMENTS (newdecl); parm;
2505 parm = DECL_CHAIN (parm))
2506 DECL_CONTEXT (parm) = olddecl;
2507
2508 if (! types_match)
2509 {
2510 SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2511 COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2512 COPY_DECL_RTL (newdecl, olddecl);
2513 }
2514 if (! types_match || new_defines_function)
2515 {
2516 /* These need to be copied so that the names are available.
2517 Note that if the types do match, we'll preserve inline
2518 info and other bits, but if not, we won't. */
2519 DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2520 DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2521 }
2522 /* If redeclaring a builtin function, it stays built in
2523 if newdecl is a gnu_inline definition, or if newdecl is just
2524 a declaration. */
2525 if (fndecl_built_in_p (olddecl)
2526 && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2527 {
2528 DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2529 DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2530 /* If we're keeping the built-in definition, keep the rtl,
2531 regardless of declaration matches. */
2532 COPY_DECL_RTL (olddecl, newdecl);
2533 if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2534 {
2535 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2536 switch (fncode)
2537 {
2538 /* If a compatible prototype of these builtin functions
2539 is seen, assume the runtime implements it with the
2540 expected semantics. */
2541 case BUILT_IN_STPCPY:
2542 if (builtin_decl_explicit_p (fncode))
2543 set_builtin_decl_implicit_p (fncode, true);
2544 break;
2545 default:
2546 if (builtin_decl_explicit_p (fncode))
2547 set_builtin_decl_declared_p (fncode, true);
2548 break;
2549 }
2550 }
2551
2552 copy_attributes_to_builtin (newdecl);
2553 }
2554 if (new_defines_function)
2555 /* If defining a function declared with other language
2556 linkage, use the previously declared language linkage. */
2557 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2558 else if (types_match)
2559 {
2560 DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2561 /* Don't clear out the arguments if we're just redeclaring a
2562 function. */
2563 if (DECL_ARGUMENTS (olddecl))
2564 DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2565 }
2566 }
2567 else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2568 NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2569
2570 /* Now preserve various other info from the definition. */
2571 TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2572 TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2573 DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2574 COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2575
2576 /* Warn about conflicting visibility specifications. */
2577 if (DECL_VISIBILITY_SPECIFIED (olddecl)
2578 && DECL_VISIBILITY_SPECIFIED (newdecl)
2579 && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2580 {
2581 auto_diagnostic_group d;
2582 if (warning_at (newdecl_loc, OPT_Wattributes,
2583 "%qD: visibility attribute ignored because it "
2584 "conflicts with previous declaration", newdecl))
2585 inform (olddecl_loc,
2586 "previous declaration of %qD", olddecl);
2587 }
2588 /* Choose the declaration which specified visibility. */
2589 if (DECL_VISIBILITY_SPECIFIED (olddecl))
2590 {
2591 DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2592 DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2593 }
2594 /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2595 so keep this behavior. */
2596 if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2597 {
2598 SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2599 DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2600 }
2601 /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED. */
2602 if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2603 {
2604 SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2605 DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2606 }
2607 DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2608 if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2609 > DECL_WARN_IF_NOT_ALIGN (newdecl))
2610 SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2611 DECL_WARN_IF_NOT_ALIGN (olddecl));
2612 if (TREE_CODE (newdecl) == FIELD_DECL)
2613 DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2614
2615 /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2616 with that from NEWDECL below. */
2617 if (DECL_LANG_SPECIFIC (olddecl))
2618 {
2619 gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2620 != DECL_LANG_SPECIFIC (newdecl));
2621 ggc_free (DECL_LANG_SPECIFIC (olddecl));
2622 }
2623
2624 /* Merge the USED information. */
2625 if (TREE_USED (olddecl))
2626 TREE_USED (newdecl) = 1;
2627 else if (TREE_USED (newdecl))
2628 TREE_USED (olddecl) = 1;
2629 if (VAR_P (newdecl))
2630 {
2631 if (DECL_READ_P (olddecl))
2632 DECL_READ_P (newdecl) = 1;
2633 else if (DECL_READ_P (newdecl))
2634 DECL_READ_P (olddecl) = 1;
2635 }
2636 if (DECL_PRESERVE_P (olddecl))
2637 DECL_PRESERVE_P (newdecl) = 1;
2638 else if (DECL_PRESERVE_P (newdecl))
2639 DECL_PRESERVE_P (olddecl) = 1;
2640
2641 /* Merge the DECL_FUNCTION_VERSIONED information. newdecl will be copied
2642 to olddecl and deleted. */
2643 if (TREE_CODE (newdecl) == FUNCTION_DECL
2644 && DECL_FUNCTION_VERSIONED (olddecl))
2645 {
2646 /* Set the flag for newdecl so that it gets copied to olddecl. */
2647 DECL_FUNCTION_VERSIONED (newdecl) = 1;
2648 /* newdecl will be purged after copying to olddecl and is no longer
2649 a version. */
2650 cgraph_node::delete_function_version_by_decl (newdecl);
2651 }
2652
2653 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2654 {
2655 int function_size;
2656 struct symtab_node *snode = symtab_node::get (olddecl);
2657
2658 function_size = sizeof (struct tree_decl_common);
2659
2660 memcpy ((char *) olddecl + sizeof (struct tree_common),
2661 (char *) newdecl + sizeof (struct tree_common),
2662 function_size - sizeof (struct tree_common));
2663
2664 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2665 (char *) newdecl + sizeof (struct tree_decl_common),
2666 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2667
2668 /* Preserve symtab node mapping. */
2669 olddecl->decl_with_vis.symtab_node = snode;
2670
2671 if (new_template_info)
2672 /* If newdecl is a template instantiation, it is possible that
2673 the following sequence of events has occurred:
2674
2675 o A friend function was declared in a class template. The
2676 class template was instantiated.
2677
2678 o The instantiation of the friend declaration was
2679 recorded on the instantiation list, and is newdecl.
2680
2681 o Later, however, instantiate_class_template called pushdecl
2682 on the newdecl to perform name injection. But, pushdecl in
2683 turn called duplicate_decls when it discovered that another
2684 declaration of a global function with the same name already
2685 existed.
2686
2687 o Here, in duplicate_decls, we decided to clobber newdecl.
2688
2689 If we're going to do that, we'd better make sure that
2690 olddecl, and not newdecl, is on the list of
2691 instantiations so that if we try to do the instantiation
2692 again we won't get the clobbered declaration. */
2693 reregister_specialization (newdecl,
2694 new_template_info,
2695 olddecl);
2696 }
2697 else
2698 {
2699 size_t size = tree_code_size (TREE_CODE (newdecl));
2700
2701 memcpy ((char *) olddecl + sizeof (struct tree_common),
2702 (char *) newdecl + sizeof (struct tree_common),
2703 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2704 switch (TREE_CODE (newdecl))
2705 {
2706 case LABEL_DECL:
2707 case VAR_DECL:
2708 case RESULT_DECL:
2709 case PARM_DECL:
2710 case FIELD_DECL:
2711 case TYPE_DECL:
2712 case CONST_DECL:
2713 {
2714 struct symtab_node *snode = NULL;
2715
2716 if (VAR_P (newdecl)
2717 && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2718 || DECL_EXTERNAL (olddecl)))
2719 snode = symtab_node::get (olddecl);
2720 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2721 (char *) newdecl + sizeof (struct tree_decl_common),
2722 size - sizeof (struct tree_decl_common)
2723 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2724 if (VAR_P (newdecl))
2725 olddecl->decl_with_vis.symtab_node = snode;
2726 }
2727 break;
2728 default:
2729 memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2730 (char *) newdecl + sizeof (struct tree_decl_common),
2731 sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2732 + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2733 break;
2734 }
2735 }
2736
2737 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2738 {
2739 if (DECL_EXTERNAL (olddecl)
2740 || TREE_PUBLIC (olddecl)
2741 || TREE_STATIC (olddecl))
2742 {
2743 /* Merge the section attribute.
2744 We want to issue an error if the sections conflict but that must be
2745 done later in decl_attributes since we are called before attributes
2746 are assigned. */
2747 if (DECL_SECTION_NAME (newdecl) != NULL)
2748 set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2749
2750 if (DECL_ONE_ONLY (newdecl))
2751 {
2752 struct symtab_node *oldsym, *newsym;
2753 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2754 oldsym = cgraph_node::get_create (olddecl);
2755 else
2756 oldsym = varpool_node::get_create (olddecl);
2757 newsym = symtab_node::get (newdecl);
2758 oldsym->set_comdat_group (newsym->get_comdat_group ());
2759 }
2760 }
2761
2762 if (VAR_P (newdecl)
2763 && CP_DECL_THREAD_LOCAL_P (newdecl))
2764 {
2765 CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2766 if (!processing_template_decl)
2767 set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2768 }
2769 }
2770
2771 DECL_UID (olddecl) = olddecl_uid;
2772 if (olddecl_friend)
2773 DECL_FRIEND_P (olddecl) = 1;
2774 if (hidden_friend)
2775 {
2776 DECL_ANTICIPATED (olddecl) = 1;
2777 DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2778 }
2779
2780 /* NEWDECL contains the merged attribute lists.
2781 Update OLDDECL to be the same. */
2782 DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2783
2784 /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2785 so that encode_section_info has a chance to look at the new decl
2786 flags and attributes. */
2787 if (DECL_RTL_SET_P (olddecl)
2788 && (TREE_CODE (olddecl) == FUNCTION_DECL
2789 || (VAR_P (olddecl)
2790 && TREE_STATIC (olddecl))))
2791 make_decl_rtl (olddecl);
2792
2793 /* The NEWDECL will no longer be needed. Because every out-of-class
2794 declaration of a member results in a call to duplicate_decls,
2795 freeing these nodes represents in a significant savings.
2796
2797 Before releasing the node, be sore to remove function from symbol
2798 table that might have been inserted there to record comdat group.
2799 Be sure to however do not free DECL_STRUCT_FUNCTION because this
2800 structure is shared in between newdecl and oldecl. */
2801 if (TREE_CODE (newdecl) == FUNCTION_DECL)
2802 DECL_STRUCT_FUNCTION (newdecl) = NULL;
2803 if (VAR_OR_FUNCTION_DECL_P (newdecl))
2804 {
2805 struct symtab_node *snode = symtab_node::get (newdecl);
2806 if (snode)
2807 snode->remove ();
2808 }
2809
2810 /* Remove the associated constraints for newdecl, if any, before
2811 reclaiming memory. */
2812 if (flag_concepts)
2813 remove_constraints (newdecl);
2814
2815 ggc_free (newdecl);
2816
2817 return olddecl;
2818 }
2819 \f
2820 /* Return zero if the declaration NEWDECL is valid
2821 when the declaration OLDDECL (assumed to be for the same name)
2822 has already been seen.
2823 Otherwise return an error message format string with a %s
2824 where the identifier should go. */
2825
2826 static const char *
2827 redeclaration_error_message (tree newdecl, tree olddecl)
2828 {
2829 if (TREE_CODE (newdecl) == TYPE_DECL)
2830 {
2831 /* Because C++ can put things into name space for free,
2832 constructs like "typedef struct foo { ... } foo"
2833 would look like an erroneous redeclaration. */
2834 if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2835 return NULL;
2836 else
2837 return G_("redefinition of %q#D");
2838 }
2839 else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2840 {
2841 /* If this is a pure function, its olddecl will actually be
2842 the original initialization to `0' (which we force to call
2843 abort()). Don't complain about redefinition in this case. */
2844 if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2845 && DECL_INITIAL (olddecl) == NULL_TREE)
2846 return NULL;
2847
2848 /* If both functions come from different namespaces, this is not
2849 a redeclaration - this is a conflict with a used function. */
2850 if (DECL_NAMESPACE_SCOPE_P (olddecl)
2851 && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2852 && ! decls_match (olddecl, newdecl))
2853 return G_("%qD conflicts with used function");
2854
2855 /* We'll complain about linkage mismatches in
2856 warn_extern_redeclared_static. */
2857
2858 /* Defining the same name twice is no good. */
2859 if (decl_defined_p (olddecl)
2860 && decl_defined_p (newdecl))
2861 {
2862 if (DECL_NAME (olddecl) == NULL_TREE)
2863 return G_("%q#D not declared in class");
2864 else if (!GNU_INLINE_P (olddecl)
2865 || GNU_INLINE_P (newdecl))
2866 return G_("redefinition of %q#D");
2867 }
2868
2869 if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2870 {
2871 bool olda = GNU_INLINE_P (olddecl);
2872 bool newa = GNU_INLINE_P (newdecl);
2873
2874 if (olda != newa)
2875 {
2876 if (newa)
2877 return G_("%q+D redeclared inline with "
2878 "%<gnu_inline%> attribute");
2879 else
2880 return G_("%q+D redeclared inline without "
2881 "%<gnu_inline%> attribute");
2882 }
2883 }
2884
2885 check_abi_tag_redeclaration
2886 (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2887 lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2888
2889 return NULL;
2890 }
2891 else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2892 {
2893 tree nt, ot;
2894
2895 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2896 {
2897 if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2898 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2899 return G_("redefinition of %q#D");
2900 return NULL;
2901 }
2902
2903 if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2904 || (DECL_TEMPLATE_RESULT (newdecl)
2905 == DECL_TEMPLATE_RESULT (olddecl)))
2906 return NULL;
2907
2908 nt = DECL_TEMPLATE_RESULT (newdecl);
2909 if (DECL_TEMPLATE_INFO (nt))
2910 nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2911 ot = DECL_TEMPLATE_RESULT (olddecl);
2912 if (DECL_TEMPLATE_INFO (ot))
2913 ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2914 if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2915 && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2916 return G_("redefinition of %q#D");
2917
2918 if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2919 {
2920 bool olda = GNU_INLINE_P (ot);
2921 bool newa = GNU_INLINE_P (nt);
2922
2923 if (olda != newa)
2924 {
2925 if (newa)
2926 return G_("%q+D redeclared inline with "
2927 "%<gnu_inline%> attribute");
2928 else
2929 return G_("%q+D redeclared inline without "
2930 "%<gnu_inline%> attribute");
2931 }
2932 }
2933
2934 /* Core issue #226 (C++0x):
2935
2936 If a friend function template declaration specifies a
2937 default template-argument, that declaration shall be a
2938 definition and shall be the only declaration of the
2939 function template in the translation unit. */
2940 if ((cxx_dialect != cxx98)
2941 && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2942 && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2943 /*is_primary=*/true,
2944 /*is_partial=*/false,
2945 /*is_friend_decl=*/2))
2946 return G_("redeclaration of friend %q#D "
2947 "may not have default template arguments");
2948
2949 return NULL;
2950 }
2951 else if (VAR_P (newdecl)
2952 && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2953 && (! DECL_LANG_SPECIFIC (olddecl)
2954 || ! CP_DECL_THREADPRIVATE_P (olddecl)
2955 || CP_DECL_THREAD_LOCAL_P (newdecl)))
2956 {
2957 /* Only variables can be thread-local, and all declarations must
2958 agree on this property. */
2959 if (CP_DECL_THREAD_LOCAL_P (newdecl))
2960 return G_("thread-local declaration of %q#D follows "
2961 "non-thread-local declaration");
2962 else
2963 return G_("non-thread-local declaration of %q#D follows "
2964 "thread-local declaration");
2965 }
2966 else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2967 {
2968 /* The objects have been declared at namespace scope. If either
2969 is a member of an anonymous union, then this is an invalid
2970 redeclaration. For example:
2971
2972 int i;
2973 union { int i; };
2974
2975 is invalid. */
2976 if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2977 || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2978 return G_("redeclaration of %q#D");
2979 /* If at least one declaration is a reference, there is no
2980 conflict. For example:
2981
2982 int i = 3;
2983 extern int i;
2984
2985 is valid. */
2986 if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2987 return NULL;
2988
2989 /* Static data member declared outside a class definition
2990 if the variable is defined within the class with constexpr
2991 specifier is declaration rather than definition (and
2992 deprecated). */
2993 if (cxx_dialect >= cxx17
2994 && VAR_P (olddecl)
2995 && DECL_CLASS_SCOPE_P (olddecl)
2996 && DECL_DECLARED_CONSTEXPR_P (olddecl)
2997 && !DECL_INITIAL (newdecl))
2998 {
2999 DECL_EXTERNAL (newdecl) = 1;
3000 /* For now, only warn with explicit -Wdeprecated. */
3001 if (global_options_set.x_warn_deprecated)
3002 {
3003 auto_diagnostic_group d;
3004 if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
3005 "redundant redeclaration of %<constexpr%> "
3006 "static data member %qD", newdecl))
3007 inform (DECL_SOURCE_LOCATION (olddecl),
3008 "previous declaration of %qD", olddecl);
3009 }
3010 return NULL;
3011 }
3012
3013 /* Reject two definitions. */
3014 return G_("redefinition of %q#D");
3015 }
3016 else
3017 {
3018 /* Objects declared with block scope: */
3019 /* Reject two definitions, and reject a definition
3020 together with an external reference. */
3021 if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3022 return G_("redeclaration of %q#D");
3023 return NULL;
3024 }
3025 }
3026 \f
3027
3028 /* Hash and equality functions for the named_label table. */
3029
3030 hashval_t
3031 named_label_hash::hash (const value_type entry)
3032 {
3033 return IDENTIFIER_HASH_VALUE (entry->name);
3034 }
3035
3036 bool
3037 named_label_hash::equal (const value_type entry, compare_type name)
3038 {
3039 return name == entry->name;
3040 }
3041
3042 /* Look for a label named ID in the current function. If one cannot
3043 be found, create one. Return the named_label_entry, or NULL on
3044 failure. */
3045
3046 static named_label_entry *
3047 lookup_label_1 (tree id, bool making_local_p)
3048 {
3049 /* You can't use labels at global scope. */
3050 if (current_function_decl == NULL_TREE)
3051 {
3052 error ("label %qE referenced outside of any function", id);
3053 return NULL;
3054 }
3055
3056 if (!named_labels)
3057 named_labels = hash_table<named_label_hash>::create_ggc (13);
3058
3059 hashval_t hash = IDENTIFIER_HASH_VALUE (id);
3060 named_label_entry **slot
3061 = named_labels->find_slot_with_hash (id, hash, INSERT);
3062 named_label_entry *old = *slot;
3063
3064 if (old && old->label_decl)
3065 {
3066 if (!making_local_p)
3067 return old;
3068
3069 if (old->binding_level == current_binding_level)
3070 {
3071 error ("local label %qE conflicts with existing label", id);
3072 inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
3073 return NULL;
3074 }
3075 }
3076
3077 /* We are making a new decl, create or reuse the named_label_entry */
3078 named_label_entry *ent = NULL;
3079 if (old && !old->label_decl)
3080 ent = old;
3081 else
3082 {
3083 ent = ggc_cleared_alloc<named_label_entry> ();
3084 ent->name = id;
3085 ent->outer = old;
3086 *slot = ent;
3087 }
3088
3089 /* Now create the LABEL_DECL. */
3090 tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3091
3092 DECL_CONTEXT (decl) = current_function_decl;
3093 SET_DECL_MODE (decl, VOIDmode);
3094 if (making_local_p)
3095 {
3096 C_DECLARED_LABEL_FLAG (decl) = true;
3097 DECL_CHAIN (decl) = current_binding_level->names;
3098 current_binding_level->names = decl;
3099 }
3100
3101 ent->label_decl = decl;
3102
3103 return ent;
3104 }
3105
3106 /* Wrapper for lookup_label_1. */
3107
3108 tree
3109 lookup_label (tree id)
3110 {
3111 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3112 named_label_entry *ent = lookup_label_1 (id, false);
3113 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3114 return ent ? ent->label_decl : NULL_TREE;
3115 }
3116
3117 tree
3118 declare_local_label (tree id)
3119 {
3120 bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3121 named_label_entry *ent = lookup_label_1 (id, true);
3122 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3123 return ent ? ent->label_decl : NULL_TREE;
3124 }
3125
3126 /* Returns nonzero if it is ill-formed to jump past the declaration of
3127 DECL. Returns 2 if it's also a real problem. */
3128
3129 static int
3130 decl_jump_unsafe (tree decl)
3131 {
3132 /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3133 with automatic storage duration is not in scope to a point where it is
3134 in scope is ill-formed unless the variable has scalar type, class type
3135 with a trivial default constructor and a trivial destructor, a
3136 cv-qualified version of one of these types, or an array of one of the
3137 preceding types and is declared without an initializer (8.5). */
3138 tree type = TREE_TYPE (decl);
3139
3140 if (!VAR_P (decl) || TREE_STATIC (decl)
3141 || type == error_mark_node)
3142 return 0;
3143
3144 if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3145 || variably_modified_type_p (type, NULL_TREE))
3146 return 2;
3147
3148 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3149 return 1;
3150
3151 return 0;
3152 }
3153
3154 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3155 to the user. */
3156
3157 static bool
3158 identify_goto (tree decl, location_t loc, const location_t *locus,
3159 diagnostic_t diag_kind)
3160 {
3161 bool complained
3162 = emit_diagnostic (diag_kind, loc, 0,
3163 decl ? N_("jump to label %qD")
3164 : N_("jump to case label"), decl);
3165 if (complained && locus)
3166 inform (*locus, " from here");
3167 return complained;
3168 }
3169
3170 /* Check that a single previously seen jump to a newly defined label
3171 is OK. DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3172 the jump context; NAMES are the names in scope in LEVEL at the jump
3173 context; LOCUS is the source position of the jump or 0. Returns
3174 true if all is well. */
3175
3176 static bool
3177 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3178 bool exited_omp, const location_t *locus)
3179 {
3180 cp_binding_level *b;
3181 bool complained = false;
3182 int identified = 0;
3183 bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3184
3185 if (exited_omp)
3186 {
3187 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3188 if (complained)
3189 inform (input_location, " exits OpenMP structured block");
3190 saw_omp = true;
3191 identified = 2;
3192 }
3193
3194 for (b = current_binding_level; b ; b = b->level_chain)
3195 {
3196 tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3197
3198 for (new_decls = b->names; new_decls != old_decls;
3199 new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3200 : TREE_CHAIN (new_decls)))
3201 {
3202 int problem = decl_jump_unsafe (new_decls);
3203 if (! problem)
3204 continue;
3205
3206 if (!identified)
3207 {
3208 complained = identify_goto (decl, input_location, locus,
3209 problem > 1
3210 ? DK_ERROR : DK_PERMERROR);
3211 identified = 1;
3212 }
3213 if (complained)
3214 {
3215 if (problem > 1)
3216 inform (DECL_SOURCE_LOCATION (new_decls),
3217 " crosses initialization of %q#D", new_decls);
3218 else
3219 inform (DECL_SOURCE_LOCATION (new_decls),
3220 " enters scope of %q#D, which has "
3221 "non-trivial destructor", new_decls);
3222 }
3223 }
3224
3225 if (b == level)
3226 break;
3227
3228 const char *inf = NULL;
3229 location_t loc = input_location;
3230 switch (b->kind)
3231 {
3232 case sk_try:
3233 if (!saw_eh)
3234 inf = N_("enters try block");
3235 saw_eh = true;
3236 break;
3237
3238 case sk_catch:
3239 if (!saw_eh)
3240 inf = N_("enters catch block");
3241 saw_eh = true;
3242 break;
3243
3244 case sk_omp:
3245 if (!saw_omp)
3246 inf = N_("enters OpenMP structured block");
3247 saw_omp = true;
3248 break;
3249
3250 case sk_transaction:
3251 if (!saw_tm)
3252 inf = N_("enters synchronized or atomic statement");
3253 saw_tm = true;
3254 break;
3255
3256 case sk_block:
3257 if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3258 {
3259 inf = N_("enters constexpr if statement");
3260 loc = EXPR_LOCATION (b->level_chain->this_entity);
3261 saw_cxif = true;
3262 }
3263 break;
3264
3265 default:
3266 break;
3267 }
3268
3269 if (inf)
3270 {
3271 if (identified < 2)
3272 complained = identify_goto (decl, input_location, locus, DK_ERROR);
3273 identified = 2;
3274 if (complained)
3275 inform (loc, " %s", inf);
3276 }
3277 }
3278
3279 return !identified;
3280 }
3281
3282 static void
3283 check_previous_goto (tree decl, struct named_label_use_entry *use)
3284 {
3285 check_previous_goto_1 (decl, use->binding_level,
3286 use->names_in_scope, use->in_omp_scope,
3287 &use->o_goto_locus);
3288 }
3289
3290 static bool
3291 check_switch_goto (cp_binding_level* level)
3292 {
3293 return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3294 }
3295
3296 /* Check that a new jump to a label DECL is OK. Called by
3297 finish_goto_stmt. */
3298
3299 void
3300 check_goto (tree decl)
3301 {
3302 /* We can't know where a computed goto is jumping.
3303 So we assume that it's OK. */
3304 if (TREE_CODE (decl) != LABEL_DECL)
3305 return;
3306
3307 /* We didn't record any information about this label when we created it,
3308 and there's not much point since it's trivial to analyze as a return. */
3309 if (decl == cdtor_label)
3310 return;
3311
3312 hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3313 named_label_entry **slot
3314 = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3315 named_label_entry *ent = *slot;
3316
3317 /* If the label hasn't been defined yet, defer checking. */
3318 if (! DECL_INITIAL (decl))
3319 {
3320 /* Don't bother creating another use if the last goto had the
3321 same data, and will therefore create the same set of errors. */
3322 if (ent->uses
3323 && ent->uses->names_in_scope == current_binding_level->names)
3324 return;
3325
3326 named_label_use_entry *new_use
3327 = ggc_alloc<named_label_use_entry> ();
3328 new_use->binding_level = current_binding_level;
3329 new_use->names_in_scope = current_binding_level->names;
3330 new_use->o_goto_locus = input_location;
3331 new_use->in_omp_scope = false;
3332
3333 new_use->next = ent->uses;
3334 ent->uses = new_use;
3335 return;
3336 }
3337
3338 bool saw_catch = false, complained = false;
3339 int identified = 0;
3340 tree bad;
3341 unsigned ix;
3342
3343 if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3344 || ent->in_constexpr_if
3345 || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3346 {
3347 diagnostic_t diag_kind = DK_PERMERROR;
3348 if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3349 || ent->in_transaction_scope || ent->in_omp_scope)
3350 diag_kind = DK_ERROR;
3351 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3352 &input_location, diag_kind);
3353 identified = 1 + (diag_kind == DK_ERROR);
3354 }
3355
3356 FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3357 {
3358 int u = decl_jump_unsafe (bad);
3359
3360 if (u > 1 && DECL_ARTIFICIAL (bad))
3361 {
3362 /* Can't skip init of __exception_info. */
3363 if (identified == 1)
3364 {
3365 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3366 &input_location, DK_ERROR);
3367 identified = 2;
3368 }
3369 if (complained)
3370 inform (DECL_SOURCE_LOCATION (bad), " enters catch block");
3371 saw_catch = true;
3372 }
3373 else if (complained)
3374 {
3375 if (u > 1)
3376 inform (DECL_SOURCE_LOCATION (bad),
3377 " skips initialization of %q#D", bad);
3378 else
3379 inform (DECL_SOURCE_LOCATION (bad),
3380 " enters scope of %q#D which has "
3381 "non-trivial destructor", bad);
3382 }
3383 }
3384
3385 if (complained)
3386 {
3387 if (ent->in_try_scope)
3388 inform (input_location, " enters try block");
3389 else if (ent->in_catch_scope && !saw_catch)
3390 inform (input_location, " enters catch block");
3391 else if (ent->in_transaction_scope)
3392 inform (input_location, " enters synchronized or atomic statement");
3393 else if (ent->in_constexpr_if)
3394 inform (input_location, " enters %<constexpr%> if statement");
3395 }
3396
3397 if (ent->in_omp_scope)
3398 {
3399 if (complained)
3400 inform (input_location, " enters OpenMP structured block");
3401 }
3402 else if (flag_openmp)
3403 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3404 {
3405 if (b == ent->binding_level)
3406 break;
3407 if (b->kind == sk_omp)
3408 {
3409 if (identified < 2)
3410 {
3411 complained = identify_goto (decl,
3412 DECL_SOURCE_LOCATION (decl),
3413 &input_location, DK_ERROR);
3414 identified = 2;
3415 }
3416 if (complained)
3417 inform (input_location, " exits OpenMP structured block");
3418 break;
3419 }
3420 }
3421 }
3422
3423 /* Check that a return is ok wrt OpenMP structured blocks.
3424 Called by finish_return_stmt. Returns true if all is well. */
3425
3426 bool
3427 check_omp_return (void)
3428 {
3429 for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3430 if (b->kind == sk_omp)
3431 {
3432 error ("invalid exit from OpenMP structured block");
3433 return false;
3434 }
3435 else if (b->kind == sk_function_parms)
3436 break;
3437 return true;
3438 }
3439
3440 /* Define a label, specifying the location in the source file.
3441 Return the LABEL_DECL node for the label. */
3442
3443 static tree
3444 define_label_1 (location_t location, tree name)
3445 {
3446 /* After labels, make any new cleanups in the function go into their
3447 own new (temporary) binding contour. */
3448 for (cp_binding_level *p = current_binding_level;
3449 p->kind != sk_function_parms;
3450 p = p->level_chain)
3451 p->more_cleanups_ok = 0;
3452
3453 named_label_entry *ent = lookup_label_1 (name, false);
3454 tree decl = ent->label_decl;
3455
3456 if (DECL_INITIAL (decl) != NULL_TREE)
3457 {
3458 error ("duplicate label %qD", decl);
3459 return error_mark_node;
3460 }
3461 else
3462 {
3463 /* Mark label as having been defined. */
3464 DECL_INITIAL (decl) = error_mark_node;
3465 /* Say where in the source. */
3466 DECL_SOURCE_LOCATION (decl) = location;
3467
3468 ent->binding_level = current_binding_level;
3469 ent->names_in_scope = current_binding_level->names;
3470
3471 for (named_label_use_entry *use = ent->uses; use; use = use->next)
3472 check_previous_goto (decl, use);
3473 ent->uses = NULL;
3474 }
3475
3476 return decl;
3477 }
3478
3479 /* Wrapper for define_label_1. */
3480
3481 tree
3482 define_label (location_t location, tree name)
3483 {
3484 bool running = timevar_cond_start (TV_NAME_LOOKUP);
3485 tree ret = define_label_1 (location, name);
3486 timevar_cond_stop (TV_NAME_LOOKUP, running);
3487 return ret;
3488 }
3489
3490
3491 struct cp_switch
3492 {
3493 cp_binding_level *level;
3494 struct cp_switch *next;
3495 /* The SWITCH_STMT being built. */
3496 tree switch_stmt;
3497 /* A splay-tree mapping the low element of a case range to the high
3498 element, or NULL_TREE if there is no high element. Used to
3499 determine whether or not a new case label duplicates an old case
3500 label. We need a tree, rather than simply a hash table, because
3501 of the GNU case range extension. */
3502 splay_tree cases;
3503 /* Remember whether there was a case value that is outside the
3504 range of the original type of the controlling expression. */
3505 bool outside_range_p;
3506 /* Remember whether a default: case label has been seen. */
3507 bool has_default_p;
3508 /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT. */
3509 bool break_stmt_seen_p;
3510 /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3511 where BREAK_STMT doesn't belong to the SWITCH_STMT. */
3512 bool in_loop_body_p;
3513 };
3514
3515 /* A stack of the currently active switch statements. The innermost
3516 switch statement is on the top of the stack. There is no need to
3517 mark the stack for garbage collection because it is only active
3518 during the processing of the body of a function, and we never
3519 collect at that point. */
3520
3521 static struct cp_switch *switch_stack;
3522
3523 /* Called right after a switch-statement condition is parsed.
3524 SWITCH_STMT is the switch statement being parsed. */
3525
3526 void
3527 push_switch (tree switch_stmt)
3528 {
3529 struct cp_switch *p = XNEW (struct cp_switch);
3530 p->level = current_binding_level;
3531 p->next = switch_stack;
3532 p->switch_stmt = switch_stmt;
3533 p->cases = splay_tree_new (case_compare, NULL, NULL);
3534 p->outside_range_p = false;
3535 p->has_default_p = false;
3536 p->break_stmt_seen_p = false;
3537 p->in_loop_body_p = false;
3538 switch_stack = p;
3539 }
3540
3541 void
3542 pop_switch (void)
3543 {
3544 struct cp_switch *cs = switch_stack;
3545 location_t switch_location;
3546
3547 /* Emit warnings as needed. */
3548 switch_location = cp_expr_loc_or_loc (cs->switch_stmt, input_location);
3549 const bool bool_cond_p
3550 = (SWITCH_STMT_TYPE (cs->switch_stmt)
3551 && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3552 if (!processing_template_decl)
3553 c_do_switch_warnings (cs->cases, switch_location,
3554 SWITCH_STMT_TYPE (cs->switch_stmt),
3555 SWITCH_STMT_COND (cs->switch_stmt),
3556 bool_cond_p, cs->outside_range_p);
3557
3558 /* For the benefit of block_may_fallthru remember if the switch body
3559 case labels cover all possible values and if there are break; stmts. */
3560 if (cs->has_default_p
3561 || (!processing_template_decl
3562 && c_switch_covers_all_cases_p (cs->cases,
3563 SWITCH_STMT_TYPE (cs->switch_stmt))))
3564 SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3565 if (!cs->break_stmt_seen_p)
3566 SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3567 gcc_assert (!cs->in_loop_body_p);
3568 splay_tree_delete (cs->cases);
3569 switch_stack = switch_stack->next;
3570 free (cs);
3571 }
3572
3573 /* Note that a BREAK_STMT is about to be added. If it is inside of
3574 a SWITCH_STMT and not inside of a loop body inside of it, note
3575 in switch_stack we've seen a BREAK_STMT. */
3576
3577 void
3578 note_break_stmt (void)
3579 {
3580 if (switch_stack && !switch_stack->in_loop_body_p)
3581 switch_stack->break_stmt_seen_p = true;
3582 }
3583
3584 /* Note the start of processing of an iteration statement's body.
3585 The note_break_stmt function will do nothing while processing it.
3586 Return a flag that should be passed to note_iteration_stmt_body_end. */
3587
3588 bool
3589 note_iteration_stmt_body_start (void)
3590 {
3591 if (!switch_stack)
3592 return false;
3593 bool ret = switch_stack->in_loop_body_p;
3594 switch_stack->in_loop_body_p = true;
3595 return ret;
3596 }
3597
3598 /* Note the end of processing of an iteration statement's body. */
3599
3600 void
3601 note_iteration_stmt_body_end (bool prev)
3602 {
3603 if (switch_stack)
3604 switch_stack->in_loop_body_p = prev;
3605 }
3606
3607 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3608 condition. Note that if TYPE and VALUE are already integral we don't
3609 really do the conversion because the language-independent
3610 warning/optimization code will work better that way. */
3611
3612 static tree
3613 case_conversion (tree type, tree value)
3614 {
3615 if (value == NULL_TREE)
3616 return value;
3617
3618 value = mark_rvalue_use (value);
3619
3620 if (cxx_dialect >= cxx11
3621 && (SCOPED_ENUM_P (type)
3622 || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3623 {
3624 if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3625 type = type_promotes_to (type);
3626 value = (perform_implicit_conversion_flags
3627 (type, value, tf_warning_or_error,
3628 LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3629 }
3630 return cxx_constant_value (value);
3631 }
3632
3633 /* Note that we've seen a definition of a case label, and complain if this
3634 is a bad place for one. */
3635
3636 tree
3637 finish_case_label (location_t loc, tree low_value, tree high_value)
3638 {
3639 tree cond, r;
3640 cp_binding_level *p;
3641 tree type;
3642
3643 if (low_value == NULL_TREE && high_value == NULL_TREE)
3644 switch_stack->has_default_p = true;
3645
3646 if (processing_template_decl)
3647 {
3648 tree label;
3649
3650 /* For templates, just add the case label; we'll do semantic
3651 analysis at instantiation-time. */
3652 label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3653 return add_stmt (build_case_label (low_value, high_value, label));
3654 }
3655
3656 /* Find the condition on which this switch statement depends. */
3657 cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3658 if (cond && TREE_CODE (cond) == TREE_LIST)
3659 cond = TREE_VALUE (cond);
3660
3661 if (!check_switch_goto (switch_stack->level))
3662 return error_mark_node;
3663
3664 type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3665
3666 low_value = case_conversion (type, low_value);
3667 high_value = case_conversion (type, high_value);
3668
3669 r = c_add_case_label (loc, switch_stack->cases, cond, type,
3670 low_value, high_value,
3671 &switch_stack->outside_range_p);
3672
3673 /* After labels, make any new cleanups in the function go into their
3674 own new (temporary) binding contour. */
3675 for (p = current_binding_level;
3676 p->kind != sk_function_parms;
3677 p = p->level_chain)
3678 p->more_cleanups_ok = 0;
3679
3680 return r;
3681 }
3682 \f
3683 struct typename_info {
3684 tree scope;
3685 tree name;
3686 tree template_id;
3687 bool enum_p;
3688 bool class_p;
3689 };
3690
3691 struct typename_hasher : ggc_ptr_hash<tree_node>
3692 {
3693 typedef typename_info *compare_type;
3694
3695 /* Hash a TYPENAME_TYPE. */
3696
3697 static hashval_t
3698 hash (tree t)
3699 {
3700 hashval_t hash;
3701
3702 hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3703 ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3704
3705 return hash;
3706 }
3707
3708 /* Compare two TYPENAME_TYPEs. */
3709
3710 static bool
3711 equal (tree t1, const typename_info *t2)
3712 {
3713 return (TYPE_IDENTIFIER (t1) == t2->name
3714 && TYPE_CONTEXT (t1) == t2->scope
3715 && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3716 && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3717 && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3718 }
3719 };
3720
3721 /* Build a TYPENAME_TYPE. If the type is `typename T::t', CONTEXT is
3722 the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3723
3724 Returns the new TYPENAME_TYPE. */
3725
3726 static GTY (()) hash_table<typename_hasher> *typename_htab;
3727
3728 tree
3729 build_typename_type (tree context, tree name, tree fullname,
3730 enum tag_types tag_type)
3731 {
3732 tree t;
3733 tree d;
3734 typename_info ti;
3735 tree *e;
3736 hashval_t hash;
3737
3738 if (typename_htab == NULL)
3739 typename_htab = hash_table<typename_hasher>::create_ggc (61);
3740
3741 ti.scope = FROB_CONTEXT (context);
3742 ti.name = name;
3743 ti.template_id = fullname;
3744 ti.enum_p = tag_type == enum_type;
3745 ti.class_p = (tag_type == class_type
3746 || tag_type == record_type
3747 || tag_type == union_type);
3748 hash = (htab_hash_pointer (ti.scope)
3749 ^ htab_hash_pointer (ti.name));
3750
3751 /* See if we already have this type. */
3752 e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3753 if (*e)
3754 t = *e;
3755 else
3756 {
3757 /* Build the TYPENAME_TYPE. */
3758 t = cxx_make_type (TYPENAME_TYPE);
3759 TYPE_CONTEXT (t) = ti.scope;
3760 TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3761 TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3762 TYPENAME_IS_CLASS_P (t) = ti.class_p;
3763
3764 /* Build the corresponding TYPE_DECL. */
3765 d = build_decl (input_location, TYPE_DECL, name, t);
3766 TYPE_NAME (TREE_TYPE (d)) = d;
3767 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3768 DECL_CONTEXT (d) = FROB_CONTEXT (context);
3769 DECL_ARTIFICIAL (d) = 1;
3770
3771 /* Store it in the hash table. */
3772 *e = t;
3773
3774 /* TYPENAME_TYPEs must always be compared structurally, because
3775 they may or may not resolve down to another type depending on
3776 the currently open classes. */
3777 SET_TYPE_STRUCTURAL_EQUALITY (t);
3778 }
3779
3780 return t;
3781 }
3782
3783 /* Resolve `typename CONTEXT::NAME'. TAG_TYPE indicates the tag
3784 provided to name the type. Returns an appropriate type, unless an
3785 error occurs, in which case error_mark_node is returned. If we
3786 locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3787 return that, rather than the _TYPE it corresponds to, in other
3788 cases we look through the type decl. If TF_ERROR is set, complain
3789 about errors, otherwise be quiet. */
3790
3791 tree
3792 make_typename_type (tree context, tree name, enum tag_types tag_type,
3793 tsubst_flags_t complain)
3794 {
3795 tree fullname;
3796 tree t;
3797 bool want_template;
3798
3799 if (name == error_mark_node
3800 || context == NULL_TREE
3801 || context == error_mark_node)
3802 return error_mark_node;
3803
3804 if (TYPE_P (name))
3805 {
3806 if (!(TYPE_LANG_SPECIFIC (name)
3807 && (CLASSTYPE_IS_TEMPLATE (name)
3808 || CLASSTYPE_USE_TEMPLATE (name))))
3809 name = TYPE_IDENTIFIER (name);
3810 else
3811 /* Create a TEMPLATE_ID_EXPR for the type. */
3812 name = build_nt (TEMPLATE_ID_EXPR,
3813 CLASSTYPE_TI_TEMPLATE (name),
3814 CLASSTYPE_TI_ARGS (name));
3815 }
3816 else if (TREE_CODE (name) == TYPE_DECL)
3817 name = DECL_NAME (name);
3818
3819 fullname = name;
3820
3821 if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3822 {
3823 name = TREE_OPERAND (name, 0);
3824 if (DECL_TYPE_TEMPLATE_P (name))
3825 name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3826 if (TREE_CODE (name) != IDENTIFIER_NODE)
3827 {
3828 if (complain & tf_error)
3829 error ("%qD is not a type", name);
3830 return error_mark_node;
3831 }
3832 }
3833 if (TREE_CODE (name) == TEMPLATE_DECL)
3834 {
3835 if (complain & tf_error)
3836 error ("%qD used without template arguments", name);
3837 return error_mark_node;
3838 }
3839 gcc_assert (identifier_p (name));
3840 gcc_assert (TYPE_P (context));
3841
3842 if (!MAYBE_CLASS_TYPE_P (context))
3843 {
3844 if (complain & tf_error)
3845 error ("%q#T is not a class", context);
3846 return error_mark_node;
3847 }
3848
3849 /* When the CONTEXT is a dependent type, NAME could refer to a
3850 dependent base class of CONTEXT. But look inside it anyway
3851 if CONTEXT is a currently open scope, in case it refers to a
3852 member of the current instantiation or a non-dependent base;
3853 lookup will stop when we hit a dependent base. */
3854 if (!dependent_scope_p (context))
3855 /* We should only set WANT_TYPE when we're a nested typename type.
3856 Then we can give better diagnostics if we find a non-type. */
3857 t = lookup_field (context, name, 2, /*want_type=*/true);
3858 else
3859 t = NULL_TREE;
3860
3861 if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3862 return build_typename_type (context, name, fullname, tag_type);
3863
3864 want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3865
3866 if (!t)
3867 {
3868 if (complain & tf_error)
3869 {
3870 if (!COMPLETE_TYPE_P (context))
3871 cxx_incomplete_type_error (NULL_TREE, context);
3872 else
3873 error (want_template ? G_("no class template named %q#T in %q#T")
3874 : G_("no type named %q#T in %q#T"), name, context);
3875 }
3876 return error_mark_node;
3877 }
3878
3879 /* Pull out the template from an injected-class-name (or multiple). */
3880 if (want_template)
3881 t = maybe_get_template_decl_from_type_decl (t);
3882
3883 if (TREE_CODE (t) == TREE_LIST)
3884 {
3885 if (complain & tf_error)
3886 {
3887 error ("lookup of %qT in %qT is ambiguous", name, context);
3888 print_candidates (t);
3889 }
3890 return error_mark_node;
3891 }
3892
3893 if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3894 {
3895 if (complain & tf_error)
3896 error ("%<typename %T::%D%> names %q#T, which is not a class template",
3897 context, name, t);
3898 return error_mark_node;
3899 }
3900 if (!want_template && TREE_CODE (t) != TYPE_DECL)
3901 {
3902 if (complain & tf_error)
3903 error ("%<typename %T::%D%> names %q#T, which is not a type",
3904 context, name, t);
3905 return error_mark_node;
3906 }
3907
3908 if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3909 return error_mark_node;
3910
3911 /* If we are currently parsing a template and if T is a typedef accessed
3912 through CONTEXT then we need to remember and check access of T at
3913 template instantiation time. */
3914 add_typedef_to_current_template_for_access_check (t, context, input_location);
3915
3916 if (want_template)
3917 return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3918 NULL_TREE, context,
3919 /*entering_scope=*/0,
3920 complain | tf_user);
3921
3922 if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3923 t = TREE_TYPE (t);
3924
3925 maybe_record_typedef_use (t);
3926
3927 return t;
3928 }
3929
3930 /* Resolve `CONTEXT::template NAME'. Returns a TEMPLATE_DECL if the name
3931 can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3932 in which case error_mark_node is returned.
3933
3934 If PARM_LIST is non-NULL, also make sure that the template parameter
3935 list of TEMPLATE_DECL matches.
3936
3937 If COMPLAIN zero, don't complain about any errors that occur. */
3938
3939 tree
3940 make_unbound_class_template (tree context, tree name, tree parm_list,
3941 tsubst_flags_t complain)
3942 {
3943 tree t;
3944 tree d;
3945
3946 if (TYPE_P (name))
3947 name = TYPE_IDENTIFIER (name);
3948 else if (DECL_P (name))
3949 name = DECL_NAME (name);
3950 gcc_assert (identifier_p (name));
3951
3952 if (!dependent_type_p (context)
3953 || currently_open_class (context))
3954 {
3955 tree tmpl = NULL_TREE;
3956
3957 if (MAYBE_CLASS_TYPE_P (context))
3958 tmpl = lookup_field (context, name, 0, false);
3959
3960 if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3961 tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3962
3963 if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3964 {
3965 if (complain & tf_error)
3966 error ("no class template named %q#T in %q#T", name, context);
3967 return error_mark_node;
3968 }
3969
3970 if (parm_list
3971 && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3972 {
3973 if (complain & tf_error)
3974 {
3975 error ("template parameters do not match template %qD", tmpl);
3976 inform (DECL_SOURCE_LOCATION (tmpl),
3977 "%qD declared here", tmpl);
3978 }
3979 return error_mark_node;
3980 }
3981
3982 if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3983 complain))
3984 return error_mark_node;
3985
3986 return tmpl;
3987 }
3988
3989 /* Build the UNBOUND_CLASS_TEMPLATE. */
3990 t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3991 TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3992 TREE_TYPE (t) = NULL_TREE;
3993 SET_TYPE_STRUCTURAL_EQUALITY (t);
3994
3995 /* Build the corresponding TEMPLATE_DECL. */
3996 d = build_decl (input_location, TEMPLATE_DECL, name, t);
3997 TYPE_NAME (TREE_TYPE (d)) = d;
3998 TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3999 DECL_CONTEXT (d) = FROB_CONTEXT (context);
4000 DECL_ARTIFICIAL (d) = 1;
4001 DECL_TEMPLATE_PARMS (d) = parm_list;
4002
4003 return t;
4004 }
4005
4006 \f
4007
4008 /* Push the declarations of builtin types into the global namespace.
4009 RID_INDEX is the index of the builtin type in the array
4010 RID_POINTERS. NAME is the name used when looking up the builtin
4011 type. TYPE is the _TYPE node for the builtin type.
4012
4013 The calls to set_global_binding below should be
4014 eliminated. Built-in types should not be looked up name; their
4015 names are keywords that the parser can recognize. However, there
4016 is code in c-common.c that uses identifier_global_value to look up
4017 built-in types by name. */
4018
4019 void
4020 record_builtin_type (enum rid rid_index,
4021 const char* name,
4022 tree type)
4023 {
4024 tree decl = NULL_TREE;
4025
4026 if (name)
4027 {
4028 tree tname = get_identifier (name);
4029 tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
4030 DECL_ARTIFICIAL (tdecl) = 1;
4031 set_global_binding (tdecl);
4032 decl = tdecl;
4033 }
4034
4035 if ((int) rid_index < (int) RID_MAX)
4036 if (tree rname = ridpointers[(int) rid_index])
4037 if (!decl || DECL_NAME (decl) != rname)
4038 {
4039 tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
4040 DECL_ARTIFICIAL (rdecl) = 1;
4041 set_global_binding (rdecl);
4042 if (!decl)
4043 decl = rdecl;
4044 }
4045
4046 if (decl)
4047 {
4048 if (!TYPE_NAME (type))
4049 TYPE_NAME (type) = decl;
4050 debug_hooks->type_decl (decl, 0);
4051 }
4052 }
4053
4054 /* Push a type into the namespace so that the back ends ignore it. */
4055
4056 static void
4057 record_unknown_type (tree type, const char* name)
4058 {
4059 tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
4060 TYPE_DECL, get_identifier (name), type));
4061 /* Make sure the "unknown type" typedecl gets ignored for debug info. */
4062 DECL_IGNORED_P (decl) = 1;
4063 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4064 TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
4065 SET_TYPE_ALIGN (type, 1);
4066 TYPE_USER_ALIGN (type) = 0;
4067 SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
4068 }
4069
4070 /* Create all the predefined identifiers. */
4071
4072 static void
4073 initialize_predefined_identifiers (void)
4074 {
4075 struct predefined_identifier
4076 {
4077 const char *name; /* Name. */
4078 tree *node; /* Node to store it in. */
4079 cp_identifier_kind kind; /* Kind of identifier. */
4080 };
4081
4082 /* A table of identifiers to create at startup. */
4083 static const predefined_identifier predefined_identifiers[] = {
4084 {"C++", &lang_name_cplusplus, cik_normal},
4085 {"C", &lang_name_c, cik_normal},
4086 /* Some of these names have a trailing space so that it is
4087 impossible for them to conflict with names written by users. */
4088 {"__ct ", &ctor_identifier, cik_ctor},
4089 {"__ct_base ", &base_ctor_identifier, cik_ctor},
4090 {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4091 {"__dt ", &dtor_identifier, cik_dtor},
4092 {"__dt_base ", &base_dtor_identifier, cik_dtor},
4093 {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4094 {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4095 {"__conv_op ", &conv_op_identifier, cik_conv_op},
4096 {"__in_chrg", &in_charge_identifier, cik_normal},
4097 {"this", &this_identifier, cik_normal},
4098 {"__delta", &delta_identifier, cik_normal},
4099 {"__pfn", &pfn_identifier, cik_normal},
4100 {"_vptr", &vptr_identifier, cik_normal},
4101 {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4102 {"::", &global_identifier, cik_normal},
4103 {"std", &std_identifier, cik_normal},
4104 /* The demangler expects anonymous namespaces to be called
4105 something starting with '_GLOBAL__N_'. It no longer needs
4106 to be unique to the TU. */
4107 {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4108 {"auto", &auto_identifier, cik_normal},
4109 {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4110 {"initializer_list", &init_list_identifier, cik_normal},
4111 {"__for_range ", &for_range__identifier, cik_normal},
4112 {"__for_begin ", &for_begin__identifier, cik_normal},
4113 {"__for_end ", &for_end__identifier, cik_normal},
4114 {"__for_range", &for_range_identifier, cik_normal},
4115 {"__for_begin", &for_begin_identifier, cik_normal},
4116 {"__for_end", &for_end_identifier, cik_normal},
4117 {"abi_tag", &abi_tag_identifier, cik_normal},
4118 {"aligned", &aligned_identifier, cik_normal},
4119 {"begin", &begin_identifier, cik_normal},
4120 {"end", &end_identifier, cik_normal},
4121 {"get", &get__identifier, cik_normal},
4122 {"gnu", &gnu_identifier, cik_normal},
4123 {"tuple_element", &tuple_element_identifier, cik_normal},
4124 {"tuple_size", &tuple_size_identifier, cik_normal},
4125 {"type", &type_identifier, cik_normal},
4126 {"value", &value_identifier, cik_normal},
4127 {"_FUN", &fun_identifier, cik_normal},
4128 {"__closure", &closure_identifier, cik_normal},
4129 {NULL, NULL, cik_normal}
4130 };
4131
4132 for (const predefined_identifier *pid = predefined_identifiers;
4133 pid->name; ++pid)
4134 {
4135 *pid->node = get_identifier (pid->name);
4136 /* Some of these identifiers already have a special kind. */
4137 if (pid->kind != cik_normal)
4138 set_identifier_kind (*pid->node, pid->kind);
4139 }
4140 }
4141
4142 /* Create the predefined scalar types of C,
4143 and some nodes representing standard constants (0, 1, (void *)0).
4144 Initialize the global binding level.
4145 Make definitions for built-in primitive functions. */
4146
4147 void
4148 cxx_init_decl_processing (void)
4149 {
4150 tree void_ftype;
4151 tree void_ftype_ptr;
4152
4153 /* Create all the identifiers we need. */
4154 initialize_predefined_identifiers ();
4155
4156 /* Create the global variables. */
4157 push_to_top_level ();
4158
4159 current_function_decl = NULL_TREE;
4160 current_binding_level = NULL;
4161 /* Enter the global namespace. */
4162 gcc_assert (global_namespace == NULL_TREE);
4163 global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4164 void_type_node);
4165 TREE_PUBLIC (global_namespace) = 1;
4166 DECL_CONTEXT (global_namespace)
4167 = build_translation_unit_decl (get_identifier (main_input_filename));
4168 /* Remember whether we want the empty class passing ABI change warning
4169 in this TU. */
4170 TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4171 = warn_abi && abi_version_crosses (12);
4172 debug_hooks->register_main_translation_unit
4173 (DECL_CONTEXT (global_namespace));
4174 begin_scope (sk_namespace, global_namespace);
4175 current_namespace = global_namespace;
4176
4177 if (flag_visibility_ms_compat)
4178 default_visibility = VISIBILITY_HIDDEN;
4179
4180 /* Initially, C. */
4181 current_lang_name = lang_name_c;
4182
4183 /* Create the `std' namespace. */
4184 push_namespace (std_identifier);
4185 std_node = current_namespace;
4186 pop_namespace ();
4187
4188 flag_noexcept_type = (cxx_dialect >= cxx17);
4189
4190 c_common_nodes_and_builtins ();
4191
4192 tree bool_ftype = build_function_type_list (boolean_type_node, NULL_TREE);
4193 tree decl
4194 = add_builtin_function ("__builtin_is_constant_evaluated",
4195 bool_ftype, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
4196 BUILT_IN_FRONTEND, NULL, NULL_TREE);
4197 set_call_expr_flags (decl, ECF_CONST | ECF_NOTHROW | ECF_LEAF);
4198
4199 integer_two_node = build_int_cst (NULL_TREE, 2);
4200
4201 /* Guess at the initial static decls size. */
4202 vec_alloc (static_decls, 500);
4203
4204 /* ... and keyed classes. */
4205 vec_alloc (keyed_classes, 100);
4206
4207 record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4208 truthvalue_type_node = boolean_type_node;
4209 truthvalue_false_node = boolean_false_node;
4210 truthvalue_true_node = boolean_true_node;
4211
4212 empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4213 noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4214 noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4215 noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4216 NULL_TREE);
4217
4218 #if 0
4219 record_builtin_type (RID_MAX, NULL, string_type_node);
4220 #endif
4221
4222 delta_type_node = ptrdiff_type_node;
4223 vtable_index_type = ptrdiff_type_node;
4224
4225 vtt_parm_type = build_pointer_type (const_ptr_type_node);
4226 void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4227 void_ftype_ptr = build_function_type_list (void_type_node,
4228 ptr_type_node, NULL_TREE);
4229 void_ftype_ptr
4230 = build_exception_variant (void_ftype_ptr, empty_except_spec);
4231
4232 /* Create the conversion operator marker. This operator's DECL_NAME
4233 is in the identifier table, so we can use identifier equality to
4234 find it. */
4235 conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4236 void_ftype);
4237
4238 /* C++ extensions */
4239
4240 unknown_type_node = make_node (LANG_TYPE);
4241 record_unknown_type (unknown_type_node, "unknown type");
4242
4243 /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node. */
4244 TREE_TYPE (unknown_type_node) = unknown_type_node;
4245
4246 /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4247 result. */
4248 TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4249 TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4250
4251 init_list_type_node = make_node (LANG_TYPE);
4252 record_unknown_type (init_list_type_node, "init list");
4253
4254 {
4255 /* Make sure we get a unique function type, so we can give
4256 its pointer type a name. (This wins for gdb.) */
4257 tree vfunc_type = make_node (FUNCTION_TYPE);
4258 TREE_TYPE (vfunc_type) = integer_type_node;
4259 TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4260 layout_type (vfunc_type);
4261
4262 vtable_entry_type = build_pointer_type (vfunc_type);
4263 }
4264 record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4265
4266 vtbl_type_node
4267 = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4268 layout_type (vtbl_type_node);
4269 vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4270 record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4271 vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4272 layout_type (vtbl_ptr_type_node);
4273 record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4274
4275 push_namespace (get_identifier ("__cxxabiv1"));
4276 abi_node = current_namespace;
4277 pop_namespace ();
4278
4279 global_type_node = make_node (LANG_TYPE);
4280 record_unknown_type (global_type_node, "global type");
4281
4282 any_targ_node = make_node (LANG_TYPE);
4283 record_unknown_type (any_targ_node, "any type");
4284
4285 /* Now, C++. */
4286 current_lang_name = lang_name_cplusplus;
4287
4288 if (aligned_new_threshold > 1
4289 && !pow2p_hwi (aligned_new_threshold))
4290 {
4291 error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4292 aligned_new_threshold = 1;
4293 }
4294 if (aligned_new_threshold == -1)
4295 aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4296 if (aligned_new_threshold == 1)
4297 aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4298
4299 {
4300 tree newattrs, extvisattr;
4301 tree newtype, deltype;
4302 tree ptr_ftype_sizetype;
4303 tree new_eh_spec;
4304
4305 ptr_ftype_sizetype
4306 = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4307 if (cxx_dialect == cxx98)
4308 {
4309 tree bad_alloc_id;
4310 tree bad_alloc_type_node;
4311 tree bad_alloc_decl;
4312
4313 push_namespace (std_identifier);
4314 bad_alloc_id = get_identifier ("bad_alloc");
4315 bad_alloc_type_node = make_class_type (RECORD_TYPE);
4316 TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4317 bad_alloc_decl
4318 = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4319 DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4320 pop_namespace ();
4321
4322 new_eh_spec
4323 = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4324 }
4325 else
4326 new_eh_spec = noexcept_false_spec;
4327
4328 /* Ensure attribs.c is initialized. */
4329 init_attributes ();
4330
4331 /* Ensure constraint.cc is initialized. */
4332 init_constraint_processing ();
4333
4334 extvisattr = build_tree_list (get_identifier ("externally_visible"),
4335 NULL_TREE);
4336 newattrs = tree_cons (get_identifier ("alloc_size"),
4337 build_tree_list (NULL_TREE, integer_one_node),
4338 extvisattr);
4339 newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4340 newtype = build_exception_variant (newtype, new_eh_spec);
4341 deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4342 deltype = build_exception_variant (deltype, empty_except_spec);
4343 tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4344 DECL_IS_MALLOC (opnew) = 1;
4345 DECL_IS_OPERATOR_NEW (opnew) = 1;
4346 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4347 DECL_IS_MALLOC (opnew) = 1;
4348 DECL_IS_OPERATOR_NEW (opnew) = 1;
4349 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4350 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4351 if (flag_sized_deallocation)
4352 {
4353 /* Also push the sized deallocation variants:
4354 void operator delete(void*, std::size_t) throw();
4355 void operator delete[](void*, std::size_t) throw(); */
4356 tree void_ftype_ptr_size
4357 = build_function_type_list (void_type_node, ptr_type_node,
4358 size_type_node, NULL_TREE);
4359 deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4360 extvisattr);
4361 deltype = build_exception_variant (deltype, empty_except_spec);
4362 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4363 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4364 }
4365
4366 if (aligned_new_threshold)
4367 {
4368 push_namespace (std_identifier);
4369 tree align_id = get_identifier ("align_val_t");
4370 align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4371 NULL_TREE, /*scoped*/true, NULL);
4372 pop_namespace ();
4373
4374 /* operator new (size_t, align_val_t); */
4375 newtype = build_function_type_list (ptr_type_node, size_type_node,
4376 align_type_node, NULL_TREE);
4377 newtype = cp_build_type_attribute_variant (newtype, newattrs);
4378 newtype = build_exception_variant (newtype, new_eh_spec);
4379 opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4380 DECL_IS_MALLOC (opnew) = 1;
4381 DECL_IS_OPERATOR_NEW (opnew) = 1;
4382 opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4383 DECL_IS_MALLOC (opnew) = 1;
4384 DECL_IS_OPERATOR_NEW (opnew) = 1;
4385
4386 /* operator delete (void *, align_val_t); */
4387 deltype = build_function_type_list (void_type_node, ptr_type_node,
4388 align_type_node, NULL_TREE);
4389 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4390 deltype = build_exception_variant (deltype, empty_except_spec);
4391 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4392 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4393
4394 if (flag_sized_deallocation)
4395 {
4396 /* operator delete (void *, size_t, align_val_t); */
4397 deltype = build_function_type_list (void_type_node, ptr_type_node,
4398 size_type_node, align_type_node,
4399 NULL_TREE);
4400 deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4401 deltype = build_exception_variant (deltype, empty_except_spec);
4402 push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4403 push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4404 }
4405 }
4406
4407 nullptr_type_node = make_node (NULLPTR_TYPE);
4408 TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4409 TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4410 TYPE_UNSIGNED (nullptr_type_node) = 1;
4411 TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4412 if (abi_version_at_least (9))
4413 SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4414 SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4415 record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4416 nullptr_node = build_int_cst (nullptr_type_node, 0);
4417 }
4418
4419 abort_fndecl
4420 = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4421 ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4422
4423 /* Perform other language dependent initializations. */
4424 init_class_processing ();
4425 init_rtti_processing ();
4426 init_template_processing ();
4427
4428 if (flag_exceptions)
4429 init_exception_processing ();
4430
4431 if (! supports_one_only ())
4432 flag_weak = 0;
4433
4434 make_fname_decl = cp_make_fname_decl;
4435 start_fname_decls ();
4436
4437 /* Show we use EH for cleanups. */
4438 if (flag_exceptions)
4439 using_eh_for_cleanups ();
4440 }
4441
4442 /* Generate an initializer for a function naming variable from
4443 NAME. NAME may be NULL, to indicate a dependent name. TYPE_P is
4444 filled in with the type of the init. */
4445
4446 tree
4447 cp_fname_init (const char* name, tree *type_p)
4448 {
4449 tree domain = NULL_TREE;
4450 tree type;
4451 tree init = NULL_TREE;
4452 size_t length = 0;
4453
4454 if (name)
4455 {
4456 length = strlen (name);
4457 domain = build_index_type (size_int (length));
4458 init = build_string (length + 1, name);
4459 }
4460
4461 type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4462 type = build_cplus_array_type (type, domain);
4463
4464 *type_p = type;
4465
4466 if (init)
4467 TREE_TYPE (init) = type;
4468 else
4469 init = error_mark_node;
4470
4471 return init;
4472 }
4473
4474 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4475 the decl, LOC is the location to give the decl, NAME is the
4476 initialization string and TYPE_DEP indicates whether NAME depended
4477 on the type of the function. We make use of that to detect
4478 __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4479 at the point of first use, so we mustn't push the decl now. */
4480
4481 static tree
4482 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4483 {
4484 const char *const name = (type_dep && processing_template_decl
4485 ? NULL : fname_as_string (type_dep));
4486 tree type;
4487 tree init = cp_fname_init (name, &type);
4488 tree decl = build_decl (loc, VAR_DECL, id, type);
4489
4490 if (name)
4491 free (CONST_CAST (char *, name));
4492
4493 TREE_STATIC (decl) = 1;
4494 TREE_READONLY (decl) = 1;
4495 DECL_ARTIFICIAL (decl) = 1;
4496
4497 TREE_USED (decl) = 1;
4498
4499 if (current_function_decl)
4500 {
4501 DECL_CONTEXT (decl) = current_function_decl;
4502 decl = pushdecl_outermost_localscope (decl);
4503 cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4504 LOOKUP_ONLYCONVERTING);
4505 }
4506 else
4507 {
4508 DECL_THIS_STATIC (decl) = true;
4509 pushdecl_top_level_and_finish (decl, init);
4510 }
4511
4512 return decl;
4513 }
4514
4515 static tree
4516 builtin_function_1 (tree decl, tree context, bool is_global)
4517 {
4518 tree id = DECL_NAME (decl);
4519 const char *name = IDENTIFIER_POINTER (id);
4520
4521 retrofit_lang_decl (decl);
4522
4523 DECL_ARTIFICIAL (decl) = 1;
4524 SET_DECL_LANGUAGE (decl, lang_c);
4525 /* Runtime library routines are, by definition, available in an
4526 external shared object. */
4527 DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4528 DECL_VISIBILITY_SPECIFIED (decl) = 1;
4529
4530 DECL_CONTEXT (decl) = context;
4531
4532 /* A function in the user's namespace should have an explicit
4533 declaration before it is used. Mark the built-in function as
4534 anticipated but not actually declared. */
4535 if (name[0] != '_' || name[1] != '_')
4536 DECL_ANTICIPATED (decl) = 1;
4537 else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4538 {
4539 size_t len = strlen (name);
4540
4541 /* Treat __*_chk fortification functions as anticipated as well,
4542 unless they are __builtin_*. */
4543 if (len > strlen ("___chk")
4544 && memcmp (name + len - strlen ("_chk"),
4545 "_chk", strlen ("_chk") + 1) == 0)
4546 DECL_ANTICIPATED (decl) = 1;
4547 }
4548
4549 if (is_global)
4550 pushdecl_top_level (decl);
4551 else
4552 pushdecl (decl);
4553
4554 return decl;
4555 }
4556
4557 tree
4558 cxx_builtin_function (tree decl)
4559 {
4560 tree id = DECL_NAME (decl);
4561 const char *name = IDENTIFIER_POINTER (id);
4562 /* All builtins that don't begin with an '_' should additionally
4563 go in the 'std' namespace. */
4564 if (name[0] != '_')
4565 {
4566 tree decl2 = copy_node(decl);
4567 push_namespace (std_identifier);
4568 builtin_function_1 (decl2, std_node, false);
4569 pop_namespace ();
4570 }
4571
4572 return builtin_function_1 (decl, NULL_TREE, false);
4573 }
4574
4575 /* Like cxx_builtin_function, but guarantee the function is added to the global
4576 scope. This is to allow function specific options to add new machine
4577 dependent builtins when the target ISA changes via attribute((target(...)))
4578 which saves space on program startup if the program does not use non-generic
4579 ISAs. */
4580
4581 tree
4582 cxx_builtin_function_ext_scope (tree decl)
4583 {
4584
4585 tree id = DECL_NAME (decl);
4586 const char *name = IDENTIFIER_POINTER (id);
4587 /* All builtins that don't begin with an '_' should additionally
4588 go in the 'std' namespace. */
4589 if (name[0] != '_')
4590 {
4591 tree decl2 = copy_node(decl);
4592 push_namespace (std_identifier);
4593 builtin_function_1 (decl2, std_node, true);
4594 pop_namespace ();
4595 }
4596
4597 return builtin_function_1 (decl, NULL_TREE, true);
4598 }
4599
4600 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4601 function. Not called directly. */
4602
4603 static tree
4604 build_library_fn (tree name, enum tree_code operator_code, tree type,
4605 int ecf_flags)
4606 {
4607 tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4608 DECL_EXTERNAL (fn) = 1;
4609 TREE_PUBLIC (fn) = 1;
4610 DECL_ARTIFICIAL (fn) = 1;
4611 DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4612 = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4613 SET_DECL_LANGUAGE (fn, lang_c);
4614 /* Runtime library routines are, by definition, available in an
4615 external shared object. */
4616 DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4617 DECL_VISIBILITY_SPECIFIED (fn) = 1;
4618 set_call_expr_flags (fn, ecf_flags);
4619 return fn;
4620 }
4621
4622 /* Returns the _DECL for a library function with C++ linkage. */
4623
4624 static tree
4625 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4626 int ecf_flags)
4627 {
4628 tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4629 DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4630 SET_DECL_LANGUAGE (fn, lang_cplusplus);
4631 return fn;
4632 }
4633
4634 /* Like build_library_fn, but takes a C string instead of an
4635 IDENTIFIER_NODE. */
4636
4637 tree
4638 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4639 {
4640 return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4641 }
4642
4643 /* Like build_cp_library_fn, but takes a C string instead of an
4644 IDENTIFIER_NODE. */
4645
4646 tree
4647 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4648 {
4649 return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4650 ecf_flags);
4651 }
4652
4653 /* Like build_library_fn, but also pushes the function so that we will
4654 be able to find it via get_global_binding. Also, the function
4655 may throw exceptions listed in RAISES. */
4656
4657 tree
4658 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4659 {
4660 tree fn;
4661
4662 if (raises)
4663 type = build_exception_variant (type, raises);
4664
4665 fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4666 pushdecl_top_level (fn);
4667 return fn;
4668 }
4669
4670 /* Like build_cp_library_fn, but also pushes the function so that it
4671 will be found by normal lookup. */
4672
4673 static tree
4674 push_cp_library_fn (enum tree_code operator_code, tree type,
4675 int ecf_flags)
4676 {
4677 tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4678 operator_code, type, ecf_flags);
4679 pushdecl (fn);
4680 if (flag_tm)
4681 apply_tm_attr (fn, get_identifier ("transaction_safe"));
4682 return fn;
4683 }
4684
4685 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4686 a FUNCTION_TYPE. */
4687
4688 tree
4689 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4690 {
4691 tree type = build_function_type (void_type_node, parmtypes);
4692 return push_library_fn (name, type, NULL_TREE, ecf_flags);
4693 }
4694
4695 /* Like push_library_fn, but also note that this function throws
4696 and does not return. Used for __throw_foo and the like. */
4697
4698 tree
4699 push_throw_library_fn (tree name, tree type)
4700 {
4701 tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4702 return fn;
4703 }
4704 \f
4705 /* When we call finish_struct for an anonymous union, we create
4706 default copy constructors and such. But, an anonymous union
4707 shouldn't have such things; this function undoes the damage to the
4708 anonymous union type T.
4709
4710 (The reason that we create the synthesized methods is that we don't
4711 distinguish `union { int i; }' from `typedef union { int i; } U'.
4712 The first is an anonymous union; the second is just an ordinary
4713 union type.) */
4714
4715 void
4716 fixup_anonymous_aggr (tree t)
4717 {
4718 /* Wipe out memory of synthesized methods. */
4719 TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4720 TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4721 TYPE_HAS_COPY_CTOR (t) = 0;
4722 TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4723 TYPE_HAS_COPY_ASSIGN (t) = 0;
4724 TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4725
4726 /* Splice the implicitly generated functions out of TYPE_FIELDS. */
4727 for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4728 if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4729 *prev_p = DECL_CHAIN (probe);
4730 else
4731 prev_p = &DECL_CHAIN (probe);
4732
4733 /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4734 assignment operators (because they cannot have these methods themselves).
4735 For anonymous unions this is already checked because they are not allowed
4736 in any union, otherwise we have to check it. */
4737 if (TREE_CODE (t) != UNION_TYPE)
4738 {
4739 tree field, type;
4740
4741 for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4742 if (TREE_CODE (field) == FIELD_DECL)
4743 {
4744 type = TREE_TYPE (field);
4745 if (CLASS_TYPE_P (type))
4746 {
4747 if (TYPE_NEEDS_CONSTRUCTING (type))
4748 error ("member %q+#D with constructor not allowed "
4749 "in anonymous aggregate", field);
4750 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4751 error ("member %q+#D with destructor not allowed "
4752 "in anonymous aggregate", field);
4753 if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4754 error ("member %q+#D with copy assignment operator "
4755 "not allowed in anonymous aggregate", field);
4756 }
4757 }
4758 }
4759 }
4760
4761 /* Warn for an attribute located at LOCATION that appertains to the
4762 class type CLASS_TYPE that has not been properly placed after its
4763 class-key, in it class-specifier. */
4764
4765 void
4766 warn_misplaced_attr_for_class_type (source_location location,
4767 tree class_type)
4768 {
4769 gcc_assert (OVERLOAD_TYPE_P (class_type));
4770
4771 auto_diagnostic_group d;
4772 if (warning_at (location, OPT_Wattributes,
4773 "attribute ignored in declaration "
4774 "of %q#T", class_type))
4775 inform (location,
4776 "attribute for %q#T must follow the %qs keyword",
4777 class_type, class_key_or_enum_as_string (class_type));
4778 }
4779
4780 /* Make sure that a declaration with no declarator is well-formed, i.e.
4781 just declares a tagged type or anonymous union.
4782
4783 Returns the type declared; or NULL_TREE if none. */
4784
4785 tree
4786 check_tag_decl (cp_decl_specifier_seq *declspecs,
4787 bool explicit_type_instantiation_p)
4788 {
4789 int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4790 int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4791 /* If a class, struct, or enum type is declared by the DECLSPECS
4792 (i.e, if a class-specifier, enum-specifier, or non-typename
4793 elaborated-type-specifier appears in the DECLSPECS),
4794 DECLARED_TYPE is set to the corresponding type. */
4795 tree declared_type = NULL_TREE;
4796 bool error_p = false;
4797
4798 if (declspecs->multiple_types_p)
4799 error ("multiple types in one declaration");
4800 else if (declspecs->redefined_builtin_type)
4801 {
4802 if (!in_system_header_at (input_location))
4803 permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4804 "redeclaration of C++ built-in type %qT",
4805 declspecs->redefined_builtin_type);
4806 return NULL_TREE;
4807 }
4808
4809 if (declspecs->type
4810 && TYPE_P (declspecs->type)
4811 && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4812 && MAYBE_CLASS_TYPE_P (declspecs->type))
4813 || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4814 declared_type = declspecs->type;
4815 else if (declspecs->type == error_mark_node)
4816 error_p = true;
4817 if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4818 permerror (input_location, "declaration does not declare anything");
4819 else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4820 {
4821 error_at (declspecs->locations[ds_type_spec],
4822 "%<auto%> can only be specified for variables "
4823 "or function declarations");
4824 return error_mark_node;
4825 }
4826 /* Check for an anonymous union. */
4827 else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4828 && TYPE_UNNAMED_P (declared_type))
4829 {
4830 /* 7/3 In a simple-declaration, the optional init-declarator-list
4831 can be omitted only when declaring a class (clause 9) or
4832 enumeration (7.2), that is, when the decl-specifier-seq contains
4833 either a class-specifier, an elaborated-type-specifier with
4834 a class-key (9.1), or an enum-specifier. In these cases and
4835 whenever a class-specifier or enum-specifier is present in the
4836 decl-specifier-seq, the identifiers in these specifiers are among
4837 the names being declared by the declaration (as class-name,
4838 enum-names, or enumerators, depending on the syntax). In such
4839 cases, and except for the declaration of an unnamed bit-field (9.6),
4840 the decl-specifier-seq shall introduce one or more names into the
4841 program, or shall redeclare a name introduced by a previous
4842 declaration. [Example:
4843 enum { }; // ill-formed
4844 typedef class { }; // ill-formed
4845 --end example] */
4846 if (saw_typedef)
4847 {
4848 error ("missing type-name in typedef-declaration");
4849 return NULL_TREE;
4850 }
4851 /* Anonymous unions are objects, so they can have specifiers. */;
4852 SET_ANON_AGGR_TYPE_P (declared_type);
4853
4854 if (TREE_CODE (declared_type) != UNION_TYPE
4855 && !in_system_header_at (input_location))
4856 pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4857 }
4858
4859 else
4860 {
4861 if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4862 error_at (declspecs->locations[ds_inline],
4863 "%<inline%> can only be specified for functions");
4864 else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4865 error_at (declspecs->locations[ds_virtual],
4866 "%<virtual%> can only be specified for functions");
4867 else if (saw_friend
4868 && (!current_class_type
4869 || current_scope () != current_class_type))
4870 error_at (declspecs->locations[ds_friend],
4871 "%<friend%> can only be specified inside a class");
4872 else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4873 error_at (declspecs->locations[ds_explicit],
4874 "%<explicit%> can only be specified for constructors");
4875 else if (declspecs->storage_class)
4876 error_at (declspecs->locations[ds_storage_class],
4877 "a storage class can only be specified for objects "
4878 "and functions");
4879 else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4880 error_at (declspecs->locations[ds_const],
4881 "%<const%> can only be specified for objects and "
4882 "functions");
4883 else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4884 error_at (declspecs->locations[ds_volatile],
4885 "%<volatile%> can only be specified for objects and "
4886 "functions");
4887 else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4888 error_at (declspecs->locations[ds_restrict],
4889 "%<__restrict%> can only be specified for objects and "
4890 "functions");
4891 else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4892 error_at (declspecs->locations[ds_thread],
4893 "%<__thread%> can only be specified for objects "
4894 "and functions");
4895 else if (saw_typedef)
4896 warning_at (declspecs->locations[ds_typedef], 0,
4897 "%<typedef%> was ignored in this declaration");
4898 else if (decl_spec_seq_has_spec_p (declspecs, ds_constexpr))
4899 error_at (declspecs->locations[ds_constexpr],
4900 "%<constexpr%> cannot be used for type declarations");
4901 }
4902
4903 if (declspecs->attributes && warn_attributes && declared_type)
4904 {
4905 location_t loc;
4906 if (!CLASS_TYPE_P (declared_type)
4907 || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4908 /* For a non-template class, use the name location. */
4909 loc = location_of (declared_type);
4910 else
4911 /* For a template class (an explicit instantiation), use the
4912 current location. */
4913 loc = input_location;
4914
4915 if (explicit_type_instantiation_p)
4916 /* [dcl.attr.grammar]/4:
4917
4918 No attribute-specifier-seq shall appertain to an explicit
4919 instantiation. */
4920 {
4921 if (warning_at (loc, OPT_Wattributes,
4922 "attribute ignored in explicit instantiation %q#T",
4923 declared_type))
4924 inform (loc,
4925 "no attribute can be applied to "
4926 "an explicit instantiation");
4927 }
4928 else
4929 warn_misplaced_attr_for_class_type (loc, declared_type);
4930 }
4931
4932 return declared_type;
4933 }
4934
4935 /* Called when a declaration is seen that contains no names to declare.
4936 If its type is a reference to a structure, union or enum inherited
4937 from a containing scope, shadow that tag name for the current scope
4938 with a forward reference.
4939 If its type defines a new named structure or union
4940 or defines an enum, it is valid but we need not do anything here.
4941 Otherwise, it is an error.
4942
4943 C++: may have to grok the declspecs to learn about static,
4944 complain for anonymous unions.
4945
4946 Returns the TYPE declared -- or NULL_TREE if none. */
4947
4948 tree
4949 shadow_tag (cp_decl_specifier_seq *declspecs)
4950 {
4951 tree t = check_tag_decl (declspecs,
4952 /*explicit_type_instantiation_p=*/false);
4953
4954 if (!t)
4955 return NULL_TREE;
4956
4957 if (maybe_process_partial_specialization (t) == error_mark_node)
4958 return NULL_TREE;
4959
4960 /* This is where the variables in an anonymous union are
4961 declared. An anonymous union declaration looks like:
4962 union { ... } ;
4963 because there is no declarator after the union, the parser
4964 sends that declaration here. */
4965 if (ANON_AGGR_TYPE_P (t))
4966 {
4967 fixup_anonymous_aggr (t);
4968
4969 if (TYPE_FIELDS (t))
4970 {
4971 tree decl = grokdeclarator (/*declarator=*/NULL,
4972 declspecs, NORMAL, 0, NULL);
4973 finish_anon_union (decl);
4974 }
4975 }
4976
4977 return t;
4978 }
4979 \f
4980 /* Decode a "typename", such as "int **", returning a ..._TYPE node. */
4981
4982 tree
4983 groktypename (cp_decl_specifier_seq *type_specifiers,
4984 const cp_declarator *declarator,
4985 bool is_template_arg)
4986 {
4987 tree attrs;
4988 tree type;
4989 enum decl_context context
4990 = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4991 attrs = type_specifiers->attributes;
4992 type_specifiers->attributes = NULL_TREE;
4993 type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4994 if (attrs && type != error_mark_node)
4995 {
4996 if (CLASS_TYPE_P (type))
4997 warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4998 "outside of definition", type);
4999 else if (MAYBE_CLASS_TYPE_P (type))
5000 /* A template type parameter or other dependent type. */
5001 warning (OPT_Wattributes, "ignoring attributes applied to dependent "
5002 "type %qT without an associated declaration", type);
5003 else
5004 cplus_decl_attributes (&type, attrs, 0);
5005 }
5006 return type;
5007 }
5008
5009 /* Process a DECLARATOR for a function-scope variable declaration,
5010 namespace-scope variable declaration, or function declaration.
5011 (Function definitions go through start_function; class member
5012 declarations appearing in the body of the class go through
5013 grokfield.) The DECL corresponding to the DECLARATOR is returned.
5014 If an error occurs, the error_mark_node is returned instead.
5015
5016 DECLSPECS are the decl-specifiers for the declaration. INITIALIZED is
5017 SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
5018 for an explicitly defaulted function, or SD_DELETED for an explicitly
5019 deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
5020 implicitly initialized via a default constructor. ATTRIBUTES and
5021 PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
5022
5023 The scope represented by the context of the returned DECL is pushed
5024 (if it is not the global namespace) and is assigned to
5025 *PUSHED_SCOPE_P. The caller is then responsible for calling
5026 pop_scope on *PUSHED_SCOPE_P if it is set. */
5027
5028 tree
5029 start_decl (const cp_declarator *declarator,
5030 cp_decl_specifier_seq *declspecs,
5031 int initialized,
5032 tree attributes,
5033 tree prefix_attributes,
5034 tree *pushed_scope_p)
5035 {
5036 tree decl;
5037 tree context;
5038 bool was_public;
5039 int flags;
5040 bool alias;
5041
5042 *pushed_scope_p = NULL_TREE;
5043
5044 /* An object declared as __attribute__((deprecated)) suppresses
5045 warnings of uses of other deprecated items. */
5046 if (lookup_attribute ("deprecated", attributes))
5047 deprecated_state = DEPRECATED_SUPPRESS;
5048
5049 attributes = chainon (attributes, prefix_attributes);
5050
5051 decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5052 &attributes);
5053
5054 deprecated_state = DEPRECATED_NORMAL;
5055
5056 if (decl == NULL_TREE || VOID_TYPE_P (decl)
5057 || decl == error_mark_node)
5058 return error_mark_node;
5059
5060 context = CP_DECL_CONTEXT (decl);
5061 if (context != global_namespace)
5062 *pushed_scope_p = push_scope (context);
5063
5064 /* Is it valid for this decl to have an initializer at all?
5065 If not, set INITIALIZED to zero, which will indirectly
5066 tell `cp_finish_decl' to ignore the initializer once it is parsed. */
5067 if (initialized
5068 && TREE_CODE (decl) == TYPE_DECL)
5069 {
5070 error ("typedef %qD is initialized (use decltype instead)", decl);
5071 return error_mark_node;
5072 }
5073
5074 if (initialized)
5075 {
5076 if (! toplevel_bindings_p ()
5077 && DECL_EXTERNAL (decl))
5078 warning (0, "declaration of %q#D has %<extern%> and is initialized",
5079 decl);
5080 DECL_EXTERNAL (decl) = 0;
5081 if (toplevel_bindings_p ())
5082 TREE_STATIC (decl) = 1;
5083 }
5084 alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
5085
5086 if (alias && TREE_CODE (decl) == FUNCTION_DECL)
5087 record_key_method_defined (decl);
5088
5089 /* If this is a typedef that names the class for linkage purposes
5090 (7.1.3p8), apply any attributes directly to the type. */
5091 if (TREE_CODE (decl) == TYPE_DECL
5092 && OVERLOAD_TYPE_P (TREE_TYPE (decl))
5093 && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
5094 flags = ATTR_FLAG_TYPE_IN_PLACE;
5095 else
5096 flags = 0;
5097
5098 /* Set attributes here so if duplicate decl, will have proper attributes. */
5099 cplus_decl_attributes (&decl, attributes, flags);
5100
5101 /* Dllimported symbols cannot be defined. Static data members (which
5102 can be initialized in-class and dllimported) go through grokfield,
5103 not here, so we don't need to exclude those decls when checking for
5104 a definition. */
5105 if (initialized && DECL_DLLIMPORT_P (decl))
5106 {
5107 error ("definition of %q#D is marked %<dllimport%>", decl);
5108 DECL_DLLIMPORT_P (decl) = 0;
5109 }
5110
5111 /* If #pragma weak was used, mark the decl weak now. */
5112 if (!processing_template_decl && !DECL_DECOMPOSITION_P (decl))
5113 maybe_apply_pragma_weak (decl);
5114
5115 if (TREE_CODE (decl) == FUNCTION_DECL
5116 && DECL_DECLARED_INLINE_P (decl)
5117 && DECL_UNINLINABLE (decl)
5118 && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5119 warning_at (DECL_SOURCE_LOCATION (decl), 0,
5120 "inline function %qD given attribute noinline", decl);
5121
5122 if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5123 {
5124 bool this_tmpl = (processing_template_decl
5125 > template_class_depth (context));
5126 if (VAR_P (decl))
5127 {
5128 tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5129 if (field == NULL_TREE
5130 || !(VAR_P (field) || variable_template_p (field)))
5131 error ("%q+#D is not a static data member of %q#T", decl, context);
5132 else if (variable_template_p (field)
5133 && (DECL_LANG_SPECIFIC (decl)
5134 && DECL_TEMPLATE_SPECIALIZATION (decl)))
5135 /* OK, specialization was already checked. */;
5136 else if (variable_template_p (field) && !this_tmpl)
5137 {
5138 error_at (DECL_SOURCE_LOCATION (decl),
5139 "non-member-template declaration of %qD", decl);
5140 inform (DECL_SOURCE_LOCATION (field), "does not match "
5141 "member template declaration here");
5142 return error_mark_node;
5143 }
5144 else
5145 {
5146 if (variable_template_p (field))
5147 field = DECL_TEMPLATE_RESULT (field);
5148
5149 if (DECL_CONTEXT (field) != context)
5150 {
5151 if (!same_type_p (DECL_CONTEXT (field), context))
5152 permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5153 "to be defined as %<%T::%D%>",
5154 DECL_CONTEXT (field), DECL_NAME (decl),
5155 context, DECL_NAME (decl));
5156 DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5157 }
5158 /* Static data member are tricky; an in-class initialization
5159 still doesn't provide a definition, so the in-class
5160 declaration will have DECL_EXTERNAL set, but will have an
5161 initialization. Thus, duplicate_decls won't warn
5162 about this situation, and so we check here. */
5163 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5164 error ("duplicate initialization of %qD", decl);
5165 field = duplicate_decls (decl, field,
5166 /*newdecl_is_friend=*/false);
5167 if (field == error_mark_node)
5168 return error_mark_node;
5169 else if (field)
5170 decl = field;
5171 }
5172 }
5173 else
5174 {
5175 tree field = check_classfn (context, decl,
5176 this_tmpl
5177 ? current_template_parms
5178 : NULL_TREE);
5179 if (field && field != error_mark_node
5180 && duplicate_decls (decl, field,
5181 /*newdecl_is_friend=*/false))
5182 decl = field;
5183 }
5184
5185 /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set. */
5186 DECL_IN_AGGR_P (decl) = 0;
5187 /* Do not mark DECL as an explicit specialization if it was not
5188 already marked as an instantiation; a declaration should
5189 never be marked as a specialization unless we know what
5190 template is being specialized. */
5191 if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5192 {
5193 SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5194 if (TREE_CODE (decl) == FUNCTION_DECL)
5195 DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5196 && DECL_DECLARED_INLINE_P (decl));
5197 else
5198 DECL_COMDAT (decl) = false;
5199
5200 /* [temp.expl.spec] An explicit specialization of a static data
5201 member of a template is a definition if the declaration
5202 includes an initializer; otherwise, it is a declaration.
5203
5204 We check for processing_specialization so this only applies
5205 to the new specialization syntax. */
5206 if (!initialized && processing_specialization)
5207 DECL_EXTERNAL (decl) = 1;
5208 }
5209
5210 if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5211 /* Aliases are definitions. */
5212 && !alias)
5213 permerror (input_location, "declaration of %q#D outside of class is not definition",
5214 decl);
5215 }
5216
5217 was_public = TREE_PUBLIC (decl);
5218
5219 /* Enter this declaration into the symbol table. Don't push the plain
5220 VAR_DECL for a variable template. */
5221 if (!template_parm_scope_p ()
5222 || !VAR_P (decl))
5223 decl = maybe_push_decl (decl);
5224
5225 if (processing_template_decl)
5226 decl = push_template_decl (decl);
5227 if (decl == error_mark_node)
5228 return error_mark_node;
5229
5230 if (VAR_P (decl)
5231 && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5232 && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5233 {
5234 /* This is a const variable with implicit 'static'. Set
5235 DECL_THIS_STATIC so we can tell it from variables that are
5236 !TREE_PUBLIC because of the anonymous namespace. */
5237 gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5238 DECL_THIS_STATIC (decl) = 1;
5239 }
5240
5241 if (current_function_decl && VAR_P (decl)
5242 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5243 {
5244 bool ok = false;
5245 if (CP_DECL_THREAD_LOCAL_P (decl))
5246 error ("%qD declared %<thread_local%> in %<constexpr%> function",
5247 decl);
5248 else if (TREE_STATIC (decl))
5249 error ("%qD declared %<static%> in %<constexpr%> function", decl);
5250 else
5251 ok = true;
5252 if (!ok)
5253 cp_function_chain->invalid_constexpr = true;
5254 }
5255
5256 if (!processing_template_decl && VAR_P (decl))
5257 start_decl_1 (decl, initialized);
5258
5259 return decl;
5260 }
5261
5262 /* Process the declaration of a variable DECL. INITIALIZED is true
5263 iff DECL is explicitly initialized. (INITIALIZED is false if the
5264 variable is initialized via an implicitly-called constructor.)
5265 This function must be called for ordinary variables (including, for
5266 example, implicit instantiations of templates), but must not be
5267 called for template declarations. */
5268
5269 void
5270 start_decl_1 (tree decl, bool initialized)
5271 {
5272 tree type;
5273 bool complete_p;
5274 bool aggregate_definition_p;
5275
5276 gcc_assert (!processing_template_decl);
5277
5278 if (error_operand_p (decl))
5279 return;
5280
5281 gcc_assert (VAR_P (decl));
5282
5283 type = TREE_TYPE (decl);
5284 complete_p = COMPLETE_TYPE_P (type);
5285 aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5286
5287 /* If an explicit initializer is present, or if this is a definition
5288 of an aggregate, then we need a complete type at this point.
5289 (Scalars are always complete types, so there is nothing to
5290 check.) This code just sets COMPLETE_P; errors (if necessary)
5291 are issued below. */
5292 if ((initialized || aggregate_definition_p)
5293 && !complete_p
5294 && COMPLETE_TYPE_P (complete_type (type)))
5295 {
5296 complete_p = true;
5297 /* We will not yet have set TREE_READONLY on DECL if the type
5298 was "const", but incomplete, before this point. But, now, we
5299 have a complete type, so we can try again. */
5300 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5301 }
5302
5303 if (initialized)
5304 /* Is it valid for this decl to have an initializer at all? */
5305 {
5306 /* Don't allow initializations for incomplete types except for
5307 arrays which might be completed by the initialization. */
5308 if (complete_p)
5309 ; /* A complete type is ok. */
5310 else if (type_uses_auto (type))
5311 ; /* An auto type is ok. */
5312 else if (TREE_CODE (type) != ARRAY_TYPE)
5313 {
5314 error ("variable %q#D has initializer but incomplete type", decl);
5315 type = TREE_TYPE (decl) = error_mark_node;
5316 }
5317 else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5318 {
5319 if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5320 error ("elements of array %q#D have incomplete type", decl);
5321 /* else we already gave an error in start_decl. */
5322 }
5323 }
5324 else if (aggregate_definition_p && !complete_p)
5325 {
5326 if (type_uses_auto (type))
5327 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5328 else
5329 {
5330 error ("aggregate %q#D has incomplete type and cannot be defined",
5331 decl);
5332 /* Change the type so that assemble_variable will give
5333 DECL an rtl we can live with: (mem (const_int 0)). */
5334 type = TREE_TYPE (decl) = error_mark_node;
5335 }
5336 }
5337
5338 /* Create a new scope to hold this declaration if necessary.
5339 Whether or not a new scope is necessary cannot be determined
5340 until after the type has been completed; if the type is a
5341 specialization of a class template it is not until after
5342 instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5343 will be set correctly. */
5344 maybe_push_cleanup_level (type);
5345 }
5346
5347 /* Handle initialization of references. DECL, TYPE, and INIT have the
5348 same meaning as in cp_finish_decl. *CLEANUP must be NULL on entry,
5349 but will be set to a new CLEANUP_STMT if a temporary is created
5350 that must be destroyed subsequently.
5351
5352 Returns an initializer expression to use to initialize DECL, or
5353 NULL if the initialization can be performed statically.
5354
5355 Quotes on semantics can be found in ARM 8.4.3. */
5356
5357 static tree
5358 grok_reference_init (tree decl, tree type, tree init, int flags)
5359 {
5360 if (init == NULL_TREE)
5361 {
5362 if ((DECL_LANG_SPECIFIC (decl) == 0
5363 || DECL_IN_AGGR_P (decl) == 0)
5364 && ! DECL_THIS_EXTERN (decl))
5365 error ("%qD declared as reference but not initialized", decl);
5366 return NULL_TREE;
5367 }
5368
5369 if (TREE_CODE (init) == TREE_LIST)
5370 init = build_x_compound_expr_from_list (init, ELK_INIT,
5371 tf_warning_or_error);
5372
5373 tree ttype = TREE_TYPE (type);
5374 if (TREE_CODE (ttype) != ARRAY_TYPE
5375 && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5376 /* Note: default conversion is only called in very special cases. */
5377 init = decay_conversion (init, tf_warning_or_error);
5378
5379 /* check_initializer handles this for non-reference variables, but for
5380 references we need to do it here or the initializer will get the
5381 incomplete array type and confuse later calls to
5382 cp_complete_array_type. */
5383 if (TREE_CODE (ttype) == ARRAY_TYPE
5384 && TYPE_DOMAIN (ttype) == NULL_TREE
5385 && (BRACE_ENCLOSED_INITIALIZER_P (init)
5386 || TREE_CODE (init) == STRING_CST))
5387 {
5388 cp_complete_array_type (&ttype, init, false);
5389 if (ttype != TREE_TYPE (type))
5390 type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5391 }
5392
5393 /* Convert INIT to the reference type TYPE. This may involve the
5394 creation of a temporary, whose lifetime must be the same as that
5395 of the reference. If so, a DECL_EXPR for the temporary will be
5396 added just after the DECL_EXPR for DECL. That's why we don't set
5397 DECL_INITIAL for local references (instead assigning to them
5398 explicitly); we need to allow the temporary to be initialized
5399 first. */
5400 return initialize_reference (type, init, flags,
5401 tf_warning_or_error);
5402 }
5403
5404 /* Designated initializers in arrays are not supported in GNU C++.
5405 The parser cannot detect this error since it does not know whether
5406 a given brace-enclosed initializer is for a class type or for an
5407 array. This function checks that CE does not use a designated
5408 initializer. If it does, an error is issued. Returns true if CE
5409 is valid, i.e., does not have a designated initializer. */
5410
5411 bool
5412 check_array_designated_initializer (constructor_elt *ce,
5413 unsigned HOST_WIDE_INT index)
5414 {
5415 /* Designated initializers for array elements are not supported. */
5416 if (ce->index)
5417 {
5418 /* The parser only allows identifiers as designated
5419 initializers. */
5420 if (ce->index == error_mark_node)
5421 {
5422 error ("name used in a GNU-style designated "
5423 "initializer for an array");
5424 return false;
5425 }
5426 else if (identifier_p (ce->index))
5427 {
5428 error ("name %qD used in a GNU-style designated "
5429 "initializer for an array", ce->index);
5430 return false;
5431 }
5432
5433 tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5434 ce->index, true);
5435 if (ce_index
5436 && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5437 && (TREE_CODE (ce_index = fold_non_dependent_expr (ce_index))
5438 == INTEGER_CST))
5439 {
5440 /* A C99 designator is OK if it matches the current index. */
5441 if (wi::to_wide (ce_index) == index)
5442 {
5443 ce->index = ce_index;
5444 return true;
5445 }
5446 else
5447 sorry ("non-trivial designated initializers not supported");
5448 }
5449 else
5450 error ("C99 designator %qE is not an integral constant-expression",
5451 ce->index);
5452
5453 return false;
5454 }
5455
5456 return true;
5457 }
5458
5459 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5460 array until we finish parsing the initializer. If that's the
5461 situation we're in, update DECL accordingly. */
5462
5463 static void
5464 maybe_deduce_size_from_array_init (tree decl, tree init)
5465 {
5466 tree type = TREE_TYPE (decl);
5467
5468 if (TREE_CODE (type) == ARRAY_TYPE
5469 && TYPE_DOMAIN (type) == NULL_TREE
5470 && TREE_CODE (decl) != TYPE_DECL)
5471 {
5472 /* do_default is really a C-ism to deal with tentative definitions.
5473 But let's leave it here to ease the eventual merge. */
5474 int do_default = !DECL_EXTERNAL (decl);
5475 tree initializer = init ? init : DECL_INITIAL (decl);
5476 int failure = 0;
5477
5478 /* Check that there are no designated initializers in INIT, as
5479 those are not supported in GNU C++, and as the middle-end
5480 will crash if presented with a non-numeric designated
5481 initializer. */
5482 if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5483 {
5484 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5485 constructor_elt *ce;
5486 HOST_WIDE_INT i;
5487 FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5488 {
5489 if (instantiation_dependent_expression_p (ce->index))
5490 return;
5491 if (!check_array_designated_initializer (ce, i))
5492 failure = 1;
5493 }
5494 }
5495
5496 if (failure)
5497 TREE_TYPE (decl) = error_mark_node;
5498 else
5499 {
5500 failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5501 do_default);
5502 if (failure == 1)
5503 {
5504 error_at (cp_expr_loc_or_loc (initializer,
5505 DECL_SOURCE_LOCATION (decl)),
5506 "initializer fails to determine size of %qD", decl);
5507 }
5508 else if (failure == 2)
5509 {
5510 if (do_default)
5511 {
5512 error_at (DECL_SOURCE_LOCATION (decl),
5513 "array size missing in %qD", decl);
5514 }
5515 /* If a `static' var's size isn't known, make it extern as
5516 well as static, so it does not get allocated. If it's not
5517 `static', then don't mark it extern; finish_incomplete_decl
5518 will give it a default size and it will get allocated. */
5519 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5520 DECL_EXTERNAL (decl) = 1;
5521 }
5522 else if (failure == 3)
5523 {
5524 error_at (DECL_SOURCE_LOCATION (decl),
5525 "zero-size array %qD", decl);
5526 }
5527 }
5528
5529 cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5530
5531 relayout_decl (decl);
5532 }
5533 }
5534
5535 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5536 any appropriate error messages regarding the layout. */
5537
5538 static void
5539 layout_var_decl (tree decl)
5540 {
5541 tree type;
5542
5543 type = TREE_TYPE (decl);
5544 if (type == error_mark_node)
5545 return;
5546
5547 /* If we haven't already laid out this declaration, do so now.
5548 Note that we must not call complete type for an external object
5549 because it's type might involve templates that we are not
5550 supposed to instantiate yet. (And it's perfectly valid to say
5551 `extern X x' for some incomplete type `X'.) */
5552 if (!DECL_EXTERNAL (decl))
5553 complete_type (type);
5554 if (!DECL_SIZE (decl)
5555 && TREE_TYPE (decl) != error_mark_node
5556 && complete_or_array_type_p (type))
5557 layout_decl (decl, 0);
5558
5559 if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5560 {
5561 /* An automatic variable with an incomplete type: that is an error.
5562 Don't talk about array types here, since we took care of that
5563 message in grokdeclarator. */
5564 error_at (DECL_SOURCE_LOCATION (decl),
5565 "storage size of %qD isn%'t known", decl);
5566 TREE_TYPE (decl) = error_mark_node;
5567 }
5568 #if 0
5569 /* Keep this code around in case we later want to control debug info
5570 based on whether a type is "used". (jason 1999-11-11) */
5571
5572 else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5573 /* Let debugger know it should output info for this type. */
5574 note_debug_info_needed (ttype);
5575
5576 if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5577 note_debug_info_needed (DECL_CONTEXT (decl));
5578 #endif
5579
5580 if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5581 && DECL_SIZE (decl) != NULL_TREE
5582 && ! TREE_CONSTANT (DECL_SIZE (decl)))
5583 {
5584 if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5585 constant_expression_warning (DECL_SIZE (decl));
5586 else
5587 {
5588 error_at (DECL_SOURCE_LOCATION (decl),
5589 "storage size of %qD isn%'t constant", decl);
5590 TREE_TYPE (decl) = error_mark_node;
5591 }
5592 }
5593 }
5594
5595 /* If a local static variable is declared in an inline function, or if
5596 we have a weak definition, we must endeavor to create only one
5597 instance of the variable at link-time. */
5598
5599 void
5600 maybe_commonize_var (tree decl)
5601 {
5602 /* Static data in a function with comdat linkage also has comdat
5603 linkage. */
5604 if ((TREE_STATIC (decl)
5605 /* Don't mess with __FUNCTION__. */
5606 && ! DECL_ARTIFICIAL (decl)
5607 && DECL_FUNCTION_SCOPE_P (decl)
5608 && vague_linkage_p (DECL_CONTEXT (decl)))
5609 || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5610 {
5611 if (flag_weak)
5612 {
5613 /* With weak symbols, we simply make the variable COMDAT;
5614 that will cause copies in multiple translations units to
5615 be merged. */
5616 comdat_linkage (decl);
5617 }
5618 else
5619 {
5620 if (DECL_INITIAL (decl) == NULL_TREE
5621 || DECL_INITIAL (decl) == error_mark_node)
5622 {
5623 /* Without weak symbols, we can use COMMON to merge
5624 uninitialized variables. */
5625 TREE_PUBLIC (decl) = 1;
5626 DECL_COMMON (decl) = 1;
5627 }
5628 else
5629 {
5630 /* While for initialized variables, we must use internal
5631 linkage -- which means that multiple copies will not
5632 be merged. */
5633 TREE_PUBLIC (decl) = 0;
5634 DECL_COMMON (decl) = 0;
5635 const char *msg;
5636 if (DECL_INLINE_VAR_P (decl))
5637 msg = G_("sorry: semantics of inline variable "
5638 "%q#D are wrong (you%'ll wind up with "
5639 "multiple copies)");
5640 else
5641 msg = G_("sorry: semantics of inline function "
5642 "static data %q#D are wrong (you%'ll wind "
5643 "up with multiple copies)");
5644 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5645 msg, decl))
5646 inform (DECL_SOURCE_LOCATION (decl),
5647 "you can work around this by removing the initializer");
5648 }
5649 }
5650 }
5651 }
5652
5653 /* Issue an error message if DECL is an uninitialized const variable.
5654 CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr
5655 context from potential_constant_expression. Returns true if all is well,
5656 false otherwise. */
5657
5658 bool
5659 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p,
5660 tsubst_flags_t complain)
5661 {
5662 tree type = strip_array_types (TREE_TYPE (decl));
5663
5664 /* ``Unless explicitly declared extern, a const object does not have
5665 external linkage and must be initialized. ($8.4; $12.1)'' ARM
5666 7.1.6 */
5667 if (VAR_P (decl)
5668 && !TYPE_REF_P (type)
5669 && (constexpr_context_p
5670 || CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5671 && !DECL_NONTRIVIALLY_INITIALIZED_P (decl))
5672 {
5673 tree field = default_init_uninitialized_part (type);
5674 if (!field)
5675 return true;
5676
5677 if (!constexpr_context_p)
5678 {
5679 if (CP_TYPE_CONST_P (type))
5680 {
5681 if (complain & tf_error)
5682 permerror (DECL_SOURCE_LOCATION (decl),
5683 "uninitialized const %qD", decl);
5684 }
5685 else
5686 {
5687 if (!is_instantiation_of_constexpr (current_function_decl)
5688 && (complain & tf_error))
5689 error_at (DECL_SOURCE_LOCATION (decl),
5690 "uninitialized variable %qD in %<constexpr%> "
5691 "function", decl);
5692 cp_function_chain->invalid_constexpr = true;
5693 }
5694 }
5695 else if (complain & tf_error)
5696 error_at (DECL_SOURCE_LOCATION (decl),
5697 "uninitialized variable %qD in %<constexpr%> context",
5698 decl);
5699
5700 if (CLASS_TYPE_P (type) && (complain & tf_error))
5701 {
5702 tree defaulted_ctor;
5703
5704 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5705 "%q#T has no user-provided default constructor", type);
5706 defaulted_ctor = in_class_defaulted_default_constructor (type);
5707 if (defaulted_ctor)
5708 inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5709 "constructor is not user-provided because it is "
5710 "explicitly defaulted in the class body");
5711 inform (DECL_SOURCE_LOCATION (field),
5712 "and the implicitly-defined constructor does not "
5713 "initialize %q#D", field);
5714 }
5715
5716 return false;
5717 }
5718
5719 return true;
5720 }
5721 \f
5722 /* Structure holding the current initializer being processed by reshape_init.
5723 CUR is a pointer to the current element being processed, END is a pointer
5724 after the last element present in the initializer. */
5725 struct reshape_iter
5726 {
5727 constructor_elt *cur;
5728 constructor_elt *end;
5729 };
5730
5731 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5732
5733 /* FIELD is a FIELD_DECL or NULL. In the former case, the value
5734 returned is the next FIELD_DECL (possibly FIELD itself) that can be
5735 initialized. If there are no more such fields, the return value
5736 will be NULL. */
5737
5738 tree
5739 next_initializable_field (tree field)
5740 {
5741 while (field
5742 && (TREE_CODE (field) != FIELD_DECL
5743 || DECL_UNNAMED_BIT_FIELD (field)
5744 || (DECL_ARTIFICIAL (field)
5745 && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5746 field = DECL_CHAIN (field);
5747
5748 return field;
5749 }
5750
5751 /* Return true for [dcl.init.list] direct-list-initialization from
5752 single element of enumeration with a fixed underlying type. */
5753
5754 bool
5755 is_direct_enum_init (tree type, tree init)
5756 {
5757 if (cxx_dialect >= cxx17
5758 && TREE_CODE (type) == ENUMERAL_TYPE
5759 && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5760 && TREE_CODE (init) == CONSTRUCTOR
5761 && CONSTRUCTOR_IS_DIRECT_INIT (init)
5762 && CONSTRUCTOR_NELTS (init) == 1)
5763 return true;
5764 return false;
5765 }
5766
5767 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5768 the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5769 INTEGER_CST representing the size of the array minus one (the maximum index),
5770 or NULL_TREE if the array was declared without specifying the size. D is
5771 the iterator within the constructor. */
5772
5773 static tree
5774 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5775 tsubst_flags_t complain)
5776 {
5777 tree new_init;
5778 bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5779 unsigned HOST_WIDE_INT max_index_cst = 0;
5780 unsigned HOST_WIDE_INT index;
5781
5782 /* The initializer for an array is always a CONSTRUCTOR. */
5783 new_init = build_constructor (init_list_type_node, NULL);
5784
5785 if (sized_array_p)
5786 {
5787 /* Minus 1 is used for zero sized arrays. */
5788 if (integer_all_onesp (max_index))
5789 return new_init;
5790
5791 if (tree_fits_uhwi_p (max_index))
5792 max_index_cst = tree_to_uhwi (max_index);
5793 /* sizetype is sign extended, not zero extended. */
5794 else
5795 max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5796 }
5797
5798 /* Loop until there are no more initializers. */
5799 for (index = 0;
5800 d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5801 ++index)
5802 {
5803 tree elt_init;
5804 constructor_elt *old_cur = d->cur;
5805
5806 check_array_designated_initializer (d->cur, index);
5807 elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5808 complain);
5809 if (elt_init == error_mark_node)
5810 return error_mark_node;
5811 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5812 size_int (index), elt_init);
5813 if (!TREE_CONSTANT (elt_init))
5814 TREE_CONSTANT (new_init) = false;
5815
5816 /* This can happen with an invalid initializer (c++/54501). */
5817 if (d->cur == old_cur && !sized_array_p)
5818 break;
5819 }
5820
5821 return new_init;
5822 }
5823
5824 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5825 Parameters are the same of reshape_init_r. */
5826
5827 static tree
5828 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5829 {
5830 tree max_index = NULL_TREE;
5831
5832 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5833
5834 if (TYPE_DOMAIN (type))
5835 max_index = array_type_nelts (type);
5836
5837 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5838 }
5839
5840 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5841 Parameters are the same of reshape_init_r. */
5842
5843 static tree
5844 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5845 {
5846 tree max_index = NULL_TREE;
5847
5848 gcc_assert (VECTOR_TYPE_P (type));
5849
5850 if (COMPOUND_LITERAL_P (d->cur->value))
5851 {
5852 tree value = d->cur->value;
5853 if (!same_type_p (TREE_TYPE (value), type))
5854 {
5855 if (complain & tf_error)
5856 error ("invalid type %qT as initializer for a vector of type %qT",
5857 TREE_TYPE (d->cur->value), type);
5858 value = error_mark_node;
5859 }
5860 ++d->cur;
5861 return value;
5862 }
5863
5864 /* For a vector, we initialize it as an array of the appropriate size. */
5865 if (VECTOR_TYPE_P (type))
5866 max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5867
5868 return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5869 }
5870
5871 /* Subroutine of reshape_init_r, processes the initializers for classes
5872 or union. Parameters are the same of reshape_init_r. */
5873
5874 static tree
5875 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5876 tsubst_flags_t complain)
5877 {
5878 tree field;
5879 tree new_init;
5880
5881 gcc_assert (CLASS_TYPE_P (type));
5882
5883 /* The initializer for a class is always a CONSTRUCTOR. */
5884 new_init = build_constructor (init_list_type_node, NULL);
5885 field = next_initializable_field (TYPE_FIELDS (type));
5886
5887 if (!field)
5888 {
5889 /* [dcl.init.aggr]
5890
5891 An initializer for an aggregate member that is an
5892 empty class shall have the form of an empty
5893 initializer-list {}. */
5894 if (!first_initializer_p)
5895 {
5896 if (complain & tf_error)
5897 error ("initializer for %qT must be brace-enclosed", type);
5898 return error_mark_node;
5899 }
5900 return new_init;
5901 }
5902
5903 /* Loop through the initializable fields, gathering initializers. */
5904 while (d->cur != d->end)
5905 {
5906 tree field_init;
5907 constructor_elt *old_cur = d->cur;
5908
5909 /* Handle designated initializers, as an extension. */
5910 if (d->cur->index)
5911 {
5912 if (d->cur->index == error_mark_node)
5913 return error_mark_node;
5914
5915 if (TREE_CODE (d->cur->index) == FIELD_DECL)
5916 {
5917 /* We already reshaped this. */
5918 if (field != d->cur->index)
5919 {
5920 tree id = DECL_NAME (d->cur->index);
5921 gcc_assert (id);
5922 gcc_checking_assert (d->cur->index
5923 == get_class_binding (type, id, false));
5924 field = d->cur->index;
5925 }
5926 }
5927 else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5928 field = get_class_binding (type, d->cur->index, false);
5929 else
5930 {
5931 if (complain & tf_error)
5932 error ("%<[%E] =%> used in a GNU-style designated initializer"
5933 " for class %qT", d->cur->index, type);
5934 return error_mark_node;
5935 }
5936
5937 if (!field || TREE_CODE (field) != FIELD_DECL)
5938 {
5939 if (complain & tf_error)
5940 error ("%qT has no non-static data member named %qD", type,
5941 d->cur->index);
5942 return error_mark_node;
5943 }
5944 }
5945
5946 /* If we processed all the member of the class, we are done. */
5947 if (!field)
5948 break;
5949
5950 field_init = reshape_init_r (TREE_TYPE (field), d,
5951 /*first_initializer_p=*/false, complain);
5952 if (field_init == error_mark_node)
5953 return error_mark_node;
5954
5955 if (d->cur == old_cur && d->cur->index)
5956 {
5957 /* This can happen with an invalid initializer for a flexible
5958 array member (c++/54441). */
5959 if (complain & tf_error)
5960 error ("invalid initializer for %q#D", field);
5961 return error_mark_node;
5962 }
5963
5964 CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5965
5966 /* [dcl.init.aggr]
5967
5968 When a union is initialized with a brace-enclosed
5969 initializer, the braces shall only contain an
5970 initializer for the first member of the union. */
5971 if (TREE_CODE (type) == UNION_TYPE)
5972 break;
5973
5974 field = next_initializable_field (DECL_CHAIN (field));
5975 }
5976
5977 return new_init;
5978 }
5979
5980 /* Subroutine of reshape_init_r. We're in a context where C99 initializer
5981 designators are not valid; either complain or return true to indicate
5982 that reshape_init_r should return error_mark_node. */
5983
5984 static bool
5985 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5986 {
5987 if (d->cur->index)
5988 {
5989 if (complain & tf_error)
5990 error ("C99 designator %qE outside aggregate initializer",
5991 d->cur->index);
5992 else
5993 return true;
5994 }
5995 return false;
5996 }
5997
5998 /* Subroutine of reshape_init, which processes a single initializer (part of
5999 a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
6000 iterator within the CONSTRUCTOR which points to the initializer to process.
6001 FIRST_INITIALIZER_P is true if this is the first initializer of the
6002 outermost CONSTRUCTOR node. */
6003
6004 static tree
6005 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
6006 tsubst_flags_t complain)
6007 {
6008 tree init = d->cur->value;
6009
6010 if (error_operand_p (init))
6011 return error_mark_node;
6012
6013 if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
6014 && has_designator_problem (d, complain))
6015 return error_mark_node;
6016
6017 if (TREE_CODE (type) == COMPLEX_TYPE)
6018 {
6019 /* A complex type can be initialized from one or two initializers,
6020 but braces are not elided. */
6021 d->cur++;
6022 if (BRACE_ENCLOSED_INITIALIZER_P (init))
6023 {
6024 if (CONSTRUCTOR_NELTS (init) > 2)
6025 {
6026 if (complain & tf_error)
6027 error ("too many initializers for %qT", type);
6028 else
6029 return error_mark_node;
6030 }
6031 }
6032 else if (first_initializer_p && d->cur != d->end)
6033 {
6034 vec<constructor_elt, va_gc> *v = 0;
6035 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
6036 CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
6037 if (has_designator_problem (d, complain))
6038 return error_mark_node;
6039 d->cur++;
6040 init = build_constructor (init_list_type_node, v);
6041 }
6042 return init;
6043 }
6044
6045 /* A non-aggregate type is always initialized with a single
6046 initializer. */
6047 if (!CP_AGGREGATE_TYPE_P (type))
6048 {
6049 /* It is invalid to initialize a non-aggregate type with a
6050 brace-enclosed initializer before C++0x.
6051 We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
6052 of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
6053 a CONSTRUCTOR (with a record type). */
6054 if (TREE_CODE (init) == CONSTRUCTOR
6055 /* Don't complain about a capture-init. */
6056 && !CONSTRUCTOR_IS_DIRECT_INIT (init)
6057 && BRACE_ENCLOSED_INITIALIZER_P (init)) /* p7626.C */
6058 {
6059 if (SCALAR_TYPE_P (type))
6060 {
6061 if (cxx_dialect < cxx11
6062 /* Isn't value-initialization. */
6063 || CONSTRUCTOR_NELTS (init) > 0)
6064 {
6065 if (complain & tf_error)
6066 error ("braces around scalar initializer for type %qT",
6067 type);
6068 init = error_mark_node;
6069 }
6070 }
6071 else
6072 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6073 }
6074
6075 d->cur++;
6076 return init;
6077 }
6078
6079 /* "If T is a class type and the initializer list has a single element of
6080 type cv U, where U is T or a class derived from T, the object is
6081 initialized from that element." Even if T is an aggregate. */
6082 if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
6083 && first_initializer_p
6084 && d->end - d->cur == 1
6085 && reference_related_p (type, TREE_TYPE (init)))
6086 {
6087 d->cur++;
6088 return init;
6089 }
6090
6091 /* [dcl.init.aggr]
6092
6093 All implicit type conversions (clause _conv_) are considered when
6094 initializing the aggregate member with an initializer from an
6095 initializer-list. If the initializer can initialize a member,
6096 the member is initialized. Otherwise, if the member is itself a
6097 non-empty subaggregate, brace elision is assumed and the
6098 initializer is considered for the initialization of the first
6099 member of the subaggregate. */
6100 if (TREE_CODE (init) != CONSTRUCTOR
6101 /* But don't try this for the first initializer, since that would be
6102 looking through the outermost braces; A a2 = { a1 }; is not a
6103 valid aggregate initialization. */
6104 && !first_initializer_p
6105 && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
6106 || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
6107 complain)))
6108 {
6109 d->cur++;
6110 return init;
6111 }
6112
6113 /* [dcl.init.string]
6114
6115 A char array (whether plain char, signed char, or unsigned char)
6116 can be initialized by a string-literal (optionally enclosed in
6117 braces); a wchar_t array can be initialized by a wide
6118 string-literal (optionally enclosed in braces). */
6119 if (TREE_CODE (type) == ARRAY_TYPE
6120 && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
6121 {
6122 tree str_init = init;
6123
6124 /* Strip one level of braces if and only if they enclose a single
6125 element (as allowed by [dcl.init.string]). */
6126 if (!first_initializer_p
6127 && TREE_CODE (str_init) == CONSTRUCTOR
6128 && CONSTRUCTOR_NELTS (str_init) == 1)
6129 {
6130 str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
6131 }
6132
6133 /* If it's a string literal, then it's the initializer for the array
6134 as a whole. Otherwise, continue with normal initialization for
6135 array types (one value per array element). */
6136 if (TREE_CODE (str_init) == STRING_CST)
6137 {
6138 if (has_designator_problem (d, complain))
6139 return error_mark_node;
6140 d->cur++;
6141 return str_init;
6142 }
6143 }
6144
6145 /* The following cases are about aggregates. If we are not within a full
6146 initializer already, and there is not a CONSTRUCTOR, it means that there
6147 is a missing set of braces (that is, we are processing the case for
6148 which reshape_init exists). */
6149 if (!first_initializer_p)
6150 {
6151 if (TREE_CODE (init) == CONSTRUCTOR)
6152 {
6153 if (TREE_TYPE (init) && TYPE_PTRMEMFUNC_P (TREE_TYPE (init)))
6154 /* There is no need to reshape pointer-to-member function
6155 initializers, as they are always constructed correctly
6156 by the front end. */
6157 ;
6158 else if (COMPOUND_LITERAL_P (init))
6159 /* For a nested compound literal, there is no need to reshape since
6160 brace elision is not allowed. Even if we decided to allow it,
6161 we should add a call to reshape_init in finish_compound_literal,
6162 before calling digest_init, so changing this code would still
6163 not be necessary. */
6164 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
6165 else
6166 {
6167 ++d->cur;
6168 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6169 return reshape_init (type, init, complain);
6170 }
6171 }
6172
6173 if (complain & tf_warning)
6174 warning (OPT_Wmissing_braces,
6175 "missing braces around initializer for %qT",
6176 type);
6177 }
6178
6179 /* Dispatch to specialized routines. */
6180 if (CLASS_TYPE_P (type))
6181 return reshape_init_class (type, d, first_initializer_p, complain);
6182 else if (TREE_CODE (type) == ARRAY_TYPE)
6183 return reshape_init_array (type, d, complain);
6184 else if (VECTOR_TYPE_P (type))
6185 return reshape_init_vector (type, d, complain);
6186 else
6187 gcc_unreachable();
6188 }
6189
6190 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6191 brace-enclosed aggregate initializer.
6192
6193 INIT is the CONSTRUCTOR containing the list of initializers describing
6194 a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6195 It may not presently match the shape of the TYPE; for example:
6196
6197 struct S { int a; int b; };
6198 struct S a[] = { 1, 2, 3, 4 };
6199
6200 Here INIT will hold a vector of four elements, rather than a
6201 vector of two elements, each itself a vector of two elements. This
6202 routine transforms INIT from the former form into the latter. The
6203 revised CONSTRUCTOR node is returned. */
6204
6205 tree
6206 reshape_init (tree type, tree init, tsubst_flags_t complain)
6207 {
6208 vec<constructor_elt, va_gc> *v;
6209 reshape_iter d;
6210 tree new_init;
6211
6212 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6213
6214 v = CONSTRUCTOR_ELTS (init);
6215
6216 /* An empty constructor does not need reshaping, and it is always a valid
6217 initializer. */
6218 if (vec_safe_is_empty (v))
6219 return init;
6220
6221 /* Handle [dcl.init.list] direct-list-initialization from
6222 single element of enumeration with a fixed underlying type. */
6223 if (is_direct_enum_init (type, init))
6224 {
6225 tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6226 type = cv_unqualified (type);
6227 if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6228 {
6229 warning_sentinel w (warn_useless_cast);
6230 warning_sentinel w2 (warn_ignored_qualifiers);
6231 return cp_build_c_cast (type, elt, tf_warning_or_error);
6232 }
6233 else
6234 return error_mark_node;
6235 }
6236
6237 /* Recurse on this CONSTRUCTOR. */
6238 d.cur = &(*v)[0];
6239 d.end = d.cur + v->length ();
6240
6241 new_init = reshape_init_r (type, &d, true, complain);
6242 if (new_init == error_mark_node)
6243 return error_mark_node;
6244
6245 /* Make sure all the element of the constructor were used. Otherwise,
6246 issue an error about exceeding initializers. */
6247 if (d.cur != d.end)
6248 {
6249 if (complain & tf_error)
6250 error ("too many initializers for %qT", type);
6251 return error_mark_node;
6252 }
6253
6254 if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6255 && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6256 CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6257
6258 return new_init;
6259 }
6260
6261 /* Verify array initializer. Returns true if errors have been reported. */
6262
6263 bool
6264 check_array_initializer (tree decl, tree type, tree init)
6265 {
6266 tree element_type = TREE_TYPE (type);
6267
6268 /* The array type itself need not be complete, because the
6269 initializer may tell us how many elements are in the array.
6270 But, the elements of the array must be complete. */
6271 if (!COMPLETE_TYPE_P (complete_type (element_type)))
6272 {
6273 if (decl)
6274 error_at (DECL_SOURCE_LOCATION (decl),
6275 "elements of array %q#D have incomplete type", decl);
6276 else
6277 error ("elements of array %q#T have incomplete type", type);
6278 return true;
6279 }
6280 /* A compound literal can't have variable size. */
6281 if (init && !decl
6282 && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6283 || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6284 {
6285 error ("variable-sized compound literal");
6286 return true;
6287 }
6288 return false;
6289 }
6290
6291 /* Subroutine of check_initializer; args are passed down from that function.
6292 Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init. */
6293
6294 static tree
6295 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6296
6297 {
6298 gcc_assert (stmts_are_full_exprs_p ());
6299 return build_aggr_init (decl, init, flags, tf_warning_or_error);
6300 }
6301
6302 /* Attempt to determine the constant VALUE of integral type and convert
6303 it to TYPE, issuing narrowing warnings/errors as necessary. Return
6304 the constant result or null on failure. Callback for
6305 braced_list_to_string. */
6306
6307 static tree
6308 eval_check_narrowing (tree type, tree value)
6309 {
6310 if (tree valtype = TREE_TYPE (value))
6311 {
6312 if (TREE_CODE (valtype) != INTEGER_TYPE)
6313 return NULL_TREE;
6314 }
6315 else
6316 return NULL_TREE;
6317
6318 value = scalar_constant_value (value);
6319 if (!value)
6320 return NULL_TREE;
6321
6322 check_narrowing (type, value, tf_warning_or_error);
6323 return value;
6324 }
6325
6326 /* Verify INIT (the initializer for DECL), and record the
6327 initialization in DECL_INITIAL, if appropriate. CLEANUP is as for
6328 grok_reference_init.
6329
6330 If the return value is non-NULL, it is an expression that must be
6331 evaluated dynamically to initialize DECL. */
6332
6333 static tree
6334 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6335 {
6336 tree type = TREE_TYPE (decl);
6337 tree init_code = NULL;
6338 tree core_type;
6339
6340 /* Things that are going to be initialized need to have complete
6341 type. */
6342 TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6343
6344 if (DECL_HAS_VALUE_EXPR_P (decl))
6345 {
6346 /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6347 it doesn't have storage to be initialized. */
6348 gcc_assert (init == NULL_TREE);
6349 return NULL_TREE;
6350 }
6351
6352 if (type == error_mark_node)
6353 /* We will have already complained. */
6354 return NULL_TREE;
6355
6356 if (TREE_CODE (type) == ARRAY_TYPE)
6357 {
6358 if (check_array_initializer (decl, type, init))
6359 return NULL_TREE;
6360 }
6361 else if (!COMPLETE_TYPE_P (type))
6362 {
6363 error_at (DECL_SOURCE_LOCATION (decl),
6364 "%q#D has incomplete type", decl);
6365 TREE_TYPE (decl) = error_mark_node;
6366 return NULL_TREE;
6367 }
6368 else
6369 /* There is no way to make a variable-sized class type in GNU C++. */
6370 gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6371
6372 if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6373 {
6374 int init_len = CONSTRUCTOR_NELTS (init);
6375 if (SCALAR_TYPE_P (type))
6376 {
6377 if (init_len == 0)
6378 {
6379 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6380 init = build_zero_init (type, NULL_TREE, false);
6381 }
6382 else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6383 {
6384 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6385 "scalar object %qD requires one element in "
6386 "initializer", decl);
6387 TREE_TYPE (decl) = error_mark_node;
6388 return NULL_TREE;
6389 }
6390 }
6391 }
6392
6393 if (TREE_CODE (decl) == CONST_DECL)
6394 {
6395 gcc_assert (!TYPE_REF_P (type));
6396
6397 DECL_INITIAL (decl) = init;
6398
6399 gcc_assert (init != NULL_TREE);
6400 init = NULL_TREE;
6401 }
6402 else if (!init && DECL_REALLY_EXTERN (decl))
6403 ;
6404 else if (init || type_build_ctor_call (type)
6405 || TYPE_REF_P (type))
6406 {
6407 if (TYPE_REF_P (type))
6408 {
6409 init = grok_reference_init (decl, type, init, flags);
6410 flags |= LOOKUP_ALREADY_DIGESTED;
6411 }
6412 else if (!init)
6413 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6414 tf_warning_or_error);
6415 /* Do not reshape constructors of vectors (they don't need to be
6416 reshaped. */
6417 else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6418 {
6419 if (is_std_init_list (type))
6420 {
6421 init = perform_implicit_conversion (type, init,
6422 tf_warning_or_error);
6423 flags |= LOOKUP_ALREADY_DIGESTED;
6424 }
6425 else if (TYPE_NON_AGGREGATE_CLASS (type))
6426 {
6427 /* Don't reshape if the class has constructors. */
6428 if (cxx_dialect == cxx98)
6429 error_at (cp_expr_loc_or_loc (init, DECL_SOURCE_LOCATION (decl)),
6430 "in C++98 %qD must be initialized by "
6431 "constructor, not by %<{...}%>",
6432 decl);
6433 }
6434 else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6435 {
6436 error ("opaque vector types cannot be initialized");
6437 init = error_mark_node;
6438 }
6439 else
6440 {
6441 /* Try to convert a string CONSTRUCTOR into a STRING_CST. */
6442 tree valtype = TREE_TYPE (decl);
6443 if (TREE_CODE (valtype) == ARRAY_TYPE
6444 && TYPE_STRING_FLAG (TREE_TYPE (valtype))
6445 && BRACE_ENCLOSED_INITIALIZER_P (init))
6446 if (tree str = braced_list_to_string (valtype, init,
6447 eval_check_narrowing))
6448 init = str;
6449
6450 if (TREE_CODE (init) != STRING_CST)
6451 init = reshape_init (type, init, tf_warning_or_error);
6452 flags |= LOOKUP_NO_NARROWING;
6453 }
6454 }
6455 else if (TREE_CODE (init) == TREE_LIST
6456 && TREE_TYPE (init) != unknown_type_node
6457 && !MAYBE_CLASS_TYPE_P (type))
6458 {
6459 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6460
6461 /* We get here with code like `int a (2);' */
6462 init = build_x_compound_expr_from_list (init, ELK_INIT,
6463 tf_warning_or_error);
6464 }
6465
6466 /* If DECL has an array type without a specific bound, deduce the
6467 array size from the initializer. */
6468 maybe_deduce_size_from_array_init (decl, init);
6469 type = TREE_TYPE (decl);
6470 if (type == error_mark_node)
6471 return NULL_TREE;
6472
6473 if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6474 && !(flags & LOOKUP_ALREADY_DIGESTED)
6475 && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6476 && CP_AGGREGATE_TYPE_P (type)
6477 && (CLASS_TYPE_P (type)
6478 || !TYPE_NEEDS_CONSTRUCTING (type)
6479 || type_has_extended_temps (type))))
6480 || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6481 {
6482 init_code = build_aggr_init_full_exprs (decl, init, flags);
6483
6484 /* A constructor call is a non-trivial initializer even if
6485 it isn't explicitly written. */
6486 if (TREE_SIDE_EFFECTS (init_code))
6487 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6488
6489 /* If this is a constexpr initializer, expand_default_init will
6490 have returned an INIT_EXPR rather than a CALL_EXPR. In that
6491 case, pull the initializer back out and pass it down into
6492 store_init_value. */
6493 while (TREE_CODE (init_code) == EXPR_STMT
6494 || TREE_CODE (init_code) == CONVERT_EXPR)
6495 init_code = TREE_OPERAND (init_code, 0);
6496 if (TREE_CODE (init_code) == INIT_EXPR)
6497 {
6498 init = TREE_OPERAND (init_code, 1);
6499 init_code = NULL_TREE;
6500 /* Don't call digest_init; it's unnecessary and will complain
6501 about aggregate initialization of non-aggregate classes. */
6502 flags |= LOOKUP_ALREADY_DIGESTED;
6503 }
6504 else if (DECL_DECLARED_CONSTEXPR_P (decl))
6505 {
6506 /* Declared constexpr, but no suitable initializer; massage
6507 init appropriately so we can pass it into store_init_value
6508 for the error. */
6509 if (CLASS_TYPE_P (type)
6510 && (!init || TREE_CODE (init) == TREE_LIST))
6511 {
6512 init = build_functional_cast (type, init, tf_none);
6513 if (TREE_CODE (init) == TARGET_EXPR)
6514 TARGET_EXPR_DIRECT_INIT_P (init) = true;
6515 }
6516 init_code = NULL_TREE;
6517 }
6518 else
6519 init = NULL_TREE;
6520 }
6521
6522 if (init && TREE_CODE (init) != TREE_VEC)
6523 {
6524 /* In aggregate initialization of a variable, each element
6525 initialization is a full-expression because there is no
6526 enclosing expression. */
6527 gcc_assert (stmts_are_full_exprs_p ());
6528
6529 init_code = store_init_value (decl, init, cleanups, flags);
6530
6531 if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6532 && DECL_INITIAL (decl)
6533 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6534 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6535 warning_at (cp_expr_loc_or_loc (DECL_INITIAL (decl),
6536 DECL_SOURCE_LOCATION (decl)),
6537 0, "array %qD initialized by parenthesized "
6538 "string literal %qE",
6539 decl, DECL_INITIAL (decl));
6540 init = NULL;
6541 }
6542 }
6543 else
6544 {
6545 if (CLASS_TYPE_P (core_type = strip_array_types (type))
6546 && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6547 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6548 diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6549 /*complain=*/true);
6550
6551 check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6552 tf_warning_or_error);
6553 }
6554
6555 if (init && init != error_mark_node)
6556 init_code = build2 (INIT_EXPR, type, decl, init);
6557
6558 if (init_code)
6559 {
6560 /* We might have set these in cp_finish_decl. */
6561 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6562 TREE_CONSTANT (decl) = false;
6563 }
6564
6565 if (init_code
6566 && (DECL_IN_AGGR_P (decl)
6567 && DECL_INITIALIZED_IN_CLASS_P (decl)
6568 && !DECL_VAR_DECLARED_INLINE_P (decl)))
6569 {
6570 static int explained = 0;
6571
6572 if (cxx_dialect < cxx11)
6573 error ("initializer invalid for static member with constructor");
6574 else if (cxx_dialect < cxx17)
6575 error ("non-constant in-class initialization invalid for static "
6576 "member %qD", decl);
6577 else
6578 error ("non-constant in-class initialization invalid for non-inline "
6579 "static member %qD", decl);
6580 if (!explained)
6581 {
6582 inform (input_location,
6583 "(an out of class initialization is required)");
6584 explained = 1;
6585 }
6586 return NULL_TREE;
6587 }
6588
6589 return init_code;
6590 }
6591
6592 /* If DECL is not a local variable, give it RTL. */
6593
6594 static void
6595 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6596 {
6597 int toplev = toplevel_bindings_p ();
6598 int defer_p;
6599
6600 /* Set the DECL_ASSEMBLER_NAME for the object. */
6601 if (asmspec)
6602 {
6603 /* The `register' keyword, when used together with an
6604 asm-specification, indicates that the variable should be
6605 placed in a particular register. */
6606 if (VAR_P (decl) && DECL_REGISTER (decl))
6607 {
6608 set_user_assembler_name (decl, asmspec);
6609 DECL_HARD_REGISTER (decl) = 1;
6610 }
6611 else
6612 {
6613 if (TREE_CODE (decl) == FUNCTION_DECL
6614 && fndecl_built_in_p (decl, BUILT_IN_NORMAL))
6615 set_builtin_user_assembler_name (decl, asmspec);
6616 set_user_assembler_name (decl, asmspec);
6617 }
6618 }
6619
6620 /* Handle non-variables up front. */
6621 if (!VAR_P (decl))
6622 {
6623 rest_of_decl_compilation (decl, toplev, at_eof);
6624 return;
6625 }
6626
6627 /* If we see a class member here, it should be a static data
6628 member. */
6629 if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6630 {
6631 gcc_assert (TREE_STATIC (decl));
6632 /* An in-class declaration of a static data member should be
6633 external; it is only a declaration, and not a definition. */
6634 if (init == NULL_TREE)
6635 gcc_assert (DECL_EXTERNAL (decl)
6636 || !TREE_PUBLIC (decl)
6637 || DECL_INLINE_VAR_P (decl));
6638 }
6639
6640 /* We don't create any RTL for local variables. */
6641 if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6642 return;
6643
6644 /* We defer emission of local statics until the corresponding
6645 DECL_EXPR is expanded. But with constexpr its function might never
6646 be expanded, so go ahead and tell cgraph about the variable now. */
6647 defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6648 && !var_in_maybe_constexpr_fn (decl))
6649 || DECL_VIRTUAL_P (decl));
6650
6651 /* Defer template instantiations. */
6652 if (DECL_LANG_SPECIFIC (decl)
6653 && DECL_IMPLICIT_INSTANTIATION (decl))
6654 defer_p = 1;
6655
6656 /* If we're not deferring, go ahead and assemble the variable. */
6657 if (!defer_p)
6658 rest_of_decl_compilation (decl, toplev, at_eof);
6659 }
6660
6661 /* walk_tree helper for wrap_temporary_cleanups, below. */
6662
6663 static tree
6664 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6665 {
6666 /* Stop at types or full-expression boundaries. */
6667 if (TYPE_P (*stmt_p)
6668 || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6669 {
6670 *walk_subtrees = 0;
6671 return NULL_TREE;
6672 }
6673
6674 if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6675 {
6676 tree guard = (tree)data;
6677 tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6678
6679 tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6680 /* Tell honor_protect_cleanup_actions to handle this as a separate
6681 cleanup. */
6682 TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6683
6684 TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6685 }
6686
6687 return NULL_TREE;
6688 }
6689
6690 /* We're initializing a local variable which has a cleanup GUARD. If there
6691 are any temporaries used in the initializer INIT of this variable, we
6692 need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6693 variable will be cleaned up properly if one of them throws.
6694
6695 Unfortunately, there's no way to express this properly in terms of
6696 nesting, as the regions for the temporaries overlap the region for the
6697 variable itself; if there are two temporaries, the variable needs to be
6698 the first thing destroyed if either of them throws. However, we only
6699 want to run the variable's cleanup if it actually got constructed. So
6700 we need to guard the temporary cleanups with the variable's cleanup if
6701 they are run on the normal path, but not if they are run on the
6702 exceptional path. We implement this by telling
6703 honor_protect_cleanup_actions to strip the variable cleanup from the
6704 exceptional path. */
6705
6706 static void
6707 wrap_temporary_cleanups (tree init, tree guard)
6708 {
6709 cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6710 }
6711
6712 /* Generate code to initialize DECL (a local variable). */
6713
6714 static void
6715 initialize_local_var (tree decl, tree init)
6716 {
6717 tree type = TREE_TYPE (decl);
6718 tree cleanup;
6719 int already_used;
6720
6721 gcc_assert (VAR_P (decl)
6722 || TREE_CODE (decl) == RESULT_DECL);
6723 gcc_assert (!TREE_STATIC (decl));
6724
6725 if (DECL_SIZE (decl) == NULL_TREE)
6726 {
6727 /* If we used it already as memory, it must stay in memory. */
6728 DECL_INITIAL (decl) = NULL_TREE;
6729 TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6730 return;
6731 }
6732
6733 if (type == error_mark_node)
6734 return;
6735
6736 /* Compute and store the initial value. */
6737 already_used = TREE_USED (decl) || TREE_USED (type);
6738 if (TREE_USED (type))
6739 DECL_READ_P (decl) = 1;
6740
6741 /* Generate a cleanup, if necessary. */
6742 cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6743
6744 /* Perform the initialization. */
6745 if (init)
6746 {
6747 tree rinit = (TREE_CODE (init) == INIT_EXPR
6748 ? TREE_OPERAND (init, 1) : NULL_TREE);
6749 if (rinit && !TREE_SIDE_EFFECTS (rinit))
6750 {
6751 /* Stick simple initializers in DECL_INITIAL so that
6752 -Wno-init-self works (c++/34772). */
6753 gcc_assert (TREE_OPERAND (init, 0) == decl);
6754 DECL_INITIAL (decl) = rinit;
6755
6756 if (warn_init_self && TYPE_REF_P (type))
6757 {
6758 STRIP_NOPS (rinit);
6759 if (rinit == decl)
6760 warning_at (DECL_SOURCE_LOCATION (decl),
6761 OPT_Winit_self,
6762 "reference %qD is initialized with itself", decl);
6763 }
6764 }
6765 else
6766 {
6767 int saved_stmts_are_full_exprs_p;
6768
6769 /* If we're only initializing a single object, guard the
6770 destructors of any temporaries used in its initializer with
6771 its destructor. This isn't right for arrays because each
6772 element initialization is a full-expression. */
6773 if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6774 wrap_temporary_cleanups (init, cleanup);
6775
6776 gcc_assert (building_stmt_list_p ());
6777 saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6778 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6779 finish_expr_stmt (init);
6780 current_stmt_tree ()->stmts_are_full_exprs_p =
6781 saved_stmts_are_full_exprs_p;
6782 }
6783 }
6784
6785 /* Set this to 0 so we can tell whether an aggregate which was
6786 initialized was ever used. Don't do this if it has a
6787 destructor, so we don't complain about the 'resource
6788 allocation is initialization' idiom. Now set
6789 attribute((unused)) on types so decls of that type will be
6790 marked used. (see TREE_USED, above.) */
6791 if (TYPE_NEEDS_CONSTRUCTING (type)
6792 && ! already_used
6793 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6794 && DECL_NAME (decl))
6795 TREE_USED (decl) = 0;
6796 else if (already_used)
6797 TREE_USED (decl) = 1;
6798
6799 if (cleanup)
6800 finish_decl_cleanup (decl, cleanup);
6801 }
6802
6803 /* DECL is a VAR_DECL for a compiler-generated variable with static
6804 storage duration (like a virtual table) whose initializer is a
6805 compile-time constant. Initialize the variable and provide it to the
6806 back end. */
6807
6808 void
6809 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6810 {
6811 tree init;
6812 gcc_assert (DECL_ARTIFICIAL (decl));
6813 init = build_constructor (TREE_TYPE (decl), v);
6814 gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6815 DECL_INITIAL (decl) = init;
6816 DECL_INITIALIZED_P (decl) = 1;
6817 determine_visibility (decl);
6818 layout_var_decl (decl);
6819 maybe_commonize_var (decl);
6820 make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6821 }
6822
6823 /* INIT is the initializer for a variable, as represented by the
6824 parser. Returns true iff INIT is value-dependent. */
6825
6826 static bool
6827 value_dependent_init_p (tree init)
6828 {
6829 if (TREE_CODE (init) == TREE_LIST)
6830 /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6831 return any_value_dependent_elements_p (init);
6832 else if (TREE_CODE (init) == CONSTRUCTOR)
6833 /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6834 {
6835 if (dependent_type_p (TREE_TYPE (init)))
6836 return true;
6837
6838 vec<constructor_elt, va_gc> *elts;
6839 size_t nelts;
6840 size_t i;
6841
6842 elts = CONSTRUCTOR_ELTS (init);
6843 nelts = vec_safe_length (elts);
6844 for (i = 0; i < nelts; ++i)
6845 if (value_dependent_init_p ((*elts)[i].value))
6846 return true;
6847 }
6848 else
6849 /* It must be a simple expression, e.g., int i = 3; */
6850 return value_dependent_expression_p (init);
6851
6852 return false;
6853 }
6854
6855 // Returns true if a DECL is VAR_DECL with the concept specifier.
6856 static inline bool
6857 is_concept_var (tree decl)
6858 {
6859 return (VAR_P (decl)
6860 // Not all variables have DECL_LANG_SPECIFIC.
6861 && DECL_LANG_SPECIFIC (decl)
6862 && DECL_DECLARED_CONCEPT_P (decl));
6863 }
6864
6865 /* A helper function to be called via walk_tree. If any label exists
6866 under *TP, it is (going to be) forced. Set has_forced_label_in_static. */
6867
6868 static tree
6869 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6870 {
6871 if (TYPE_P (*tp))
6872 *walk_subtrees = 0;
6873 if (TREE_CODE (*tp) == LABEL_DECL)
6874 cfun->has_forced_label_in_static = 1;
6875 return NULL_TREE;
6876 }
6877
6878 /* Finish processing of a declaration;
6879 install its line number and initial value.
6880 If the length of an array type is not known before,
6881 it must be determined now, from the initial value, or it is an error.
6882
6883 INIT is the initializer (if any) for DECL. If INIT_CONST_EXPR_P is
6884 true, then INIT is an integral constant expression.
6885
6886 FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6887 if the (init) syntax was used. */
6888
6889 void
6890 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6891 tree asmspec_tree, int flags)
6892 {
6893 tree type;
6894 vec<tree, va_gc> *cleanups = NULL;
6895 const char *asmspec = NULL;
6896 int was_readonly = 0;
6897 bool var_definition_p = false;
6898 tree auto_node;
6899
6900 if (decl == error_mark_node)
6901 return;
6902 else if (! decl)
6903 {
6904 if (init)
6905 error ("assignment (not initialization) in declaration");
6906 return;
6907 }
6908
6909 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6910 /* Parameters are handled by store_parm_decls, not cp_finish_decl. */
6911 gcc_assert (TREE_CODE (decl) != PARM_DECL);
6912
6913 type = TREE_TYPE (decl);
6914 if (type == error_mark_node)
6915 return;
6916
6917 /* Warn about register storage specifiers except when in GNU global
6918 or local register variable extension. */
6919 if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6920 {
6921 if (cxx_dialect >= cxx17)
6922 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6923 "ISO C++17 does not allow %<register%> storage "
6924 "class specifier");
6925 else
6926 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6927 "%<register%> storage class specifier used");
6928 }
6929
6930 /* If a name was specified, get the string. */
6931 if (at_namespace_scope_p ())
6932 asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6933 if (asmspec_tree && asmspec_tree != error_mark_node)
6934 asmspec = TREE_STRING_POINTER (asmspec_tree);
6935
6936 if (current_class_type
6937 && CP_DECL_CONTEXT (decl) == current_class_type
6938 && TYPE_BEING_DEFINED (current_class_type)
6939 && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6940 && (DECL_INITIAL (decl) || init))
6941 DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6942
6943 /* Do auto deduction unless decl is a function or an uninstantiated
6944 template specialization. */
6945 if (TREE_CODE (decl) != FUNCTION_DECL
6946 && !(init == NULL_TREE
6947 && DECL_LANG_SPECIFIC (decl)
6948 && DECL_TEMPLATE_INSTANTIATION (decl)
6949 && !DECL_TEMPLATE_INSTANTIATED (decl))
6950 && (auto_node = type_uses_auto (type)))
6951 {
6952 tree d_init;
6953 if (init == NULL_TREE)
6954 gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6955 d_init = init;
6956 if (d_init)
6957 {
6958 if (TREE_CODE (d_init) == TREE_LIST
6959 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6960 d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6961 tf_warning_or_error);
6962 d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6963 }
6964 enum auto_deduction_context adc = adc_variable_type;
6965 if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6966 adc = adc_decomp_type;
6967 type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6968 tf_warning_or_error, adc,
6969 NULL_TREE, flags);
6970 if (type == error_mark_node)
6971 return;
6972 if (TREE_CODE (type) == FUNCTION_TYPE)
6973 {
6974 error ("initializer for %<decltype(auto) %D%> has function type "
6975 "(did you forget the %<()%> ?)", decl);
6976 TREE_TYPE (decl) = error_mark_node;
6977 return;
6978 }
6979 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6980 }
6981
6982 if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node)
6983 {
6984 DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6985 if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl))
6986 {
6987 init = NULL_TREE;
6988 DECL_EXTERNAL (decl) = 1;
6989 }
6990 }
6991
6992 if (VAR_P (decl)
6993 && DECL_CLASS_SCOPE_P (decl)
6994 && DECL_INITIALIZED_IN_CLASS_P (decl))
6995 check_static_variable_definition (decl, type);
6996
6997 if (init && TREE_CODE (decl) == FUNCTION_DECL)
6998 {
6999 tree clone;
7000 if (init == ridpointers[(int)RID_DELETE])
7001 {
7002 /* FIXME check this is 1st decl. */
7003 DECL_DELETED_FN (decl) = 1;
7004 DECL_DECLARED_INLINE_P (decl) = 1;
7005 DECL_INITIAL (decl) = error_mark_node;
7006 FOR_EACH_CLONE (clone, decl)
7007 {
7008 DECL_DELETED_FN (clone) = 1;
7009 DECL_DECLARED_INLINE_P (clone) = 1;
7010 DECL_INITIAL (clone) = error_mark_node;
7011 }
7012 init = NULL_TREE;
7013 }
7014 else if (init == ridpointers[(int)RID_DEFAULT])
7015 {
7016 if (defaultable_fn_check (decl))
7017 DECL_DEFAULTED_FN (decl) = 1;
7018 else
7019 DECL_INITIAL (decl) = NULL_TREE;
7020 }
7021 }
7022
7023 if (init && VAR_P (decl))
7024 {
7025 DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
7026 /* If DECL is a reference, then we want to know whether init is a
7027 reference constant; init_const_expr_p as passed tells us whether
7028 it's an rvalue constant. */
7029 if (TYPE_REF_P (type))
7030 init_const_expr_p = potential_constant_expression (init);
7031 if (init_const_expr_p)
7032 {
7033 /* Set these flags now for templates. We'll update the flags in
7034 store_init_value for instantiations. */
7035 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
7036 if (decl_maybe_constant_var_p (decl)
7037 /* FIXME setting TREE_CONSTANT on refs breaks the back end. */
7038 && !TYPE_REF_P (type))
7039 TREE_CONSTANT (decl) = 1;
7040 }
7041 }
7042
7043 if (processing_template_decl)
7044 {
7045 bool type_dependent_p;
7046
7047 /* Add this declaration to the statement-tree. */
7048 if (at_function_scope_p ())
7049 add_decl_expr (decl);
7050
7051 type_dependent_p = dependent_type_p (type);
7052
7053 if (check_for_bare_parameter_packs (init))
7054 {
7055 init = NULL_TREE;
7056 DECL_INITIAL (decl) = NULL_TREE;
7057 }
7058
7059 /* Generally, initializers in templates are expanded when the
7060 template is instantiated. But, if DECL is a variable constant
7061 then it can be used in future constant expressions, so its value
7062 must be available. */
7063
7064 bool dep_init = false;
7065
7066 if (!VAR_P (decl) || type_dependent_p)
7067 /* We can't do anything if the decl has dependent type. */;
7068 else if (!init && is_concept_var (decl))
7069 {
7070 error ("variable concept has no initializer");
7071 init = boolean_true_node;
7072 }
7073 else if (init
7074 && init_const_expr_p
7075 && !TYPE_REF_P (type)
7076 && decl_maybe_constant_var_p (decl)
7077 && !(dep_init = value_dependent_init_p (init)))
7078 {
7079 /* This variable seems to be a non-dependent constant, so process
7080 its initializer. If check_initializer returns non-null the
7081 initialization wasn't constant after all. */
7082 tree init_code;
7083 cleanups = make_tree_vector ();
7084 init_code = check_initializer (decl, init, flags, &cleanups);
7085 if (init_code == NULL_TREE)
7086 init = NULL_TREE;
7087 release_tree_vector (cleanups);
7088 }
7089 else if (!DECL_PRETTY_FUNCTION_P (decl))
7090 {
7091 /* Deduce array size even if the initializer is dependent. */
7092 maybe_deduce_size_from_array_init (decl, init);
7093 /* And complain about multiple initializers. */
7094 if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
7095 && !MAYBE_CLASS_TYPE_P (type))
7096 init = build_x_compound_expr_from_list (init, ELK_INIT,
7097 tf_warning_or_error);
7098 }
7099
7100 if (init)
7101 DECL_INITIAL (decl) = init;
7102
7103 if (dep_init)
7104 {
7105 retrofit_lang_decl (decl);
7106 SET_DECL_DEPENDENT_INIT_P (decl, true);
7107 }
7108 return;
7109 }
7110
7111 /* Just store non-static data member initializers for later. */
7112 if (init && TREE_CODE (decl) == FIELD_DECL)
7113 DECL_INITIAL (decl) = init;
7114
7115 /* Take care of TYPE_DECLs up front. */
7116 if (TREE_CODE (decl) == TYPE_DECL)
7117 {
7118 if (type != error_mark_node
7119 && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
7120 {
7121 if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7122 warning (0, "shadowing previous type declaration of %q#D", decl);
7123 set_identifier_type_value (DECL_NAME (decl), decl);
7124 }
7125
7126 /* If we have installed this as the canonical typedef for this
7127 type, and that type has not been defined yet, delay emitting
7128 the debug information for it, as we will emit it later. */
7129 if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7130 && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7131 TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7132
7133 rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
7134 at_eof);
7135 return;
7136 }
7137
7138 /* A reference will be modified here, as it is initialized. */
7139 if (! DECL_EXTERNAL (decl)
7140 && TREE_READONLY (decl)
7141 && TYPE_REF_P (type))
7142 {
7143 was_readonly = 1;
7144 TREE_READONLY (decl) = 0;
7145 }
7146
7147 if (VAR_P (decl))
7148 {
7149 /* If this is a local variable that will need a mangled name,
7150 register it now. We must do this before processing the
7151 initializer for the variable, since the initialization might
7152 require a guard variable, and since the mangled name of the
7153 guard variable will depend on the mangled name of this
7154 variable. */
7155 if (DECL_FUNCTION_SCOPE_P (decl)
7156 && TREE_STATIC (decl)
7157 && !DECL_ARTIFICIAL (decl))
7158 {
7159 push_local_name (decl);
7160 /* Normally has_forced_label_in_static is set during GIMPLE
7161 lowering, but [cd]tors are never actually compiled directly.
7162 We need to set this early so we can deal with the label
7163 address extension. */
7164 if ((DECL_CONSTRUCTOR_P (current_function_decl)
7165 || DECL_DESTRUCTOR_P (current_function_decl))
7166 && init)
7167 {
7168 walk_tree (&init, notice_forced_label_r, NULL, NULL);
7169 add_local_decl (cfun, decl);
7170 }
7171 /* And make sure it's in the symbol table for
7172 c_parse_final_cleanups to find. */
7173 varpool_node::get_create (decl);
7174 }
7175
7176 /* Convert the initializer to the type of DECL, if we have not
7177 already initialized DECL. */
7178 if (!DECL_INITIALIZED_P (decl)
7179 /* If !DECL_EXTERNAL then DECL is being defined. In the
7180 case of a static data member initialized inside the
7181 class-specifier, there can be an initializer even if DECL
7182 is *not* defined. */
7183 && (!DECL_EXTERNAL (decl) || init))
7184 {
7185 cleanups = make_tree_vector ();
7186 init = check_initializer (decl, init, flags, &cleanups);
7187
7188 /* Handle:
7189
7190 [dcl.init]
7191
7192 The memory occupied by any object of static storage
7193 duration is zero-initialized at program startup before
7194 any other initialization takes place.
7195
7196 We cannot create an appropriate initializer until after
7197 the type of DECL is finalized. If DECL_INITIAL is set,
7198 then the DECL is statically initialized, and any
7199 necessary zero-initialization has already been performed. */
7200 if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7201 DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7202 /*nelts=*/NULL_TREE,
7203 /*static_storage_p=*/true);
7204 /* Remember that the initialization for this variable has
7205 taken place. */
7206 DECL_INITIALIZED_P (decl) = 1;
7207 /* This declaration is the definition of this variable,
7208 unless we are initializing a static data member within
7209 the class specifier. */
7210 if (!DECL_EXTERNAL (decl))
7211 var_definition_p = true;
7212 }
7213 /* If the variable has an array type, lay out the type, even if
7214 there is no initializer. It is valid to index through the
7215 array, and we must get TYPE_ALIGN set correctly on the array
7216 type. */
7217 else if (TREE_CODE (type) == ARRAY_TYPE)
7218 layout_type (type);
7219
7220 if (TREE_STATIC (decl)
7221 && !at_function_scope_p ()
7222 && current_function_decl == NULL)
7223 /* So decl is a global variable or a static member of a
7224 non local class. Record the types it uses
7225 so that we can decide later to emit debug info for them. */
7226 record_types_used_by_current_var_decl (decl);
7227 }
7228
7229 /* Add this declaration to the statement-tree. This needs to happen
7230 after the call to check_initializer so that the DECL_EXPR for a
7231 reference temp is added before the DECL_EXPR for the reference itself. */
7232 if (DECL_FUNCTION_SCOPE_P (decl))
7233 {
7234 /* If we're building a variable sized type, and we might be
7235 reachable other than via the top of the current binding
7236 level, then create a new BIND_EXPR so that we deallocate
7237 the object at the right time. */
7238 if (VAR_P (decl)
7239 && DECL_SIZE (decl)
7240 && !TREE_CONSTANT (DECL_SIZE (decl))
7241 && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7242 {
7243 tree bind;
7244 bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7245 TREE_SIDE_EFFECTS (bind) = 1;
7246 add_stmt (bind);
7247 BIND_EXPR_BODY (bind) = push_stmt_list ();
7248 }
7249 add_decl_expr (decl);
7250 }
7251
7252 /* Let the middle end know about variables and functions -- but not
7253 static data members in uninstantiated class templates. */
7254 if (VAR_OR_FUNCTION_DECL_P (decl))
7255 {
7256 if (VAR_P (decl))
7257 {
7258 layout_var_decl (decl);
7259 maybe_commonize_var (decl);
7260 }
7261
7262 /* This needs to happen after the linkage is set. */
7263 determine_visibility (decl);
7264
7265 if (var_definition_p && TREE_STATIC (decl))
7266 {
7267 /* If a TREE_READONLY variable needs initialization
7268 at runtime, it is no longer readonly and we need to
7269 avoid MEM_READONLY_P being set on RTL created for it. */
7270 if (init)
7271 {
7272 if (TREE_READONLY (decl))
7273 TREE_READONLY (decl) = 0;
7274 was_readonly = 0;
7275 }
7276 else if (was_readonly)
7277 TREE_READONLY (decl) = 1;
7278
7279 /* Likewise if it needs destruction. */
7280 if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7281 TREE_READONLY (decl) = 0;
7282 }
7283
7284 make_rtl_for_nonlocal_decl (decl, init, asmspec);
7285
7286 /* Check for abstractness of the type. Notice that there is no
7287 need to strip array types here since the check for those types
7288 is already done within create_array_type_for_decl. */
7289 abstract_virtuals_error (decl, type);
7290
7291 if (TREE_TYPE (decl) == error_mark_node)
7292 /* No initialization required. */
7293 ;
7294 else if (TREE_CODE (decl) == FUNCTION_DECL)
7295 {
7296 if (init)
7297 {
7298 if (init == ridpointers[(int)RID_DEFAULT])
7299 {
7300 /* An out-of-class default definition is defined at
7301 the point where it is explicitly defaulted. */
7302 if (DECL_DELETED_FN (decl))
7303 maybe_explain_implicit_delete (decl);
7304 else if (DECL_INITIAL (decl) == error_mark_node)
7305 synthesize_method (decl);
7306 }
7307 else
7308 error ("function %q#D is initialized like a variable", decl);
7309 }
7310 /* else no initialization required. */
7311 }
7312 else if (DECL_EXTERNAL (decl)
7313 && ! (DECL_LANG_SPECIFIC (decl)
7314 && DECL_NOT_REALLY_EXTERN (decl)))
7315 {
7316 if (init)
7317 DECL_INITIAL (decl) = init;
7318 }
7319 /* A variable definition. */
7320 else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7321 /* Initialize the local variable. */
7322 initialize_local_var (decl, init);
7323
7324 /* If a variable is defined, and then a subsequent
7325 definition with external linkage is encountered, we will
7326 get here twice for the same variable. We want to avoid
7327 calling expand_static_init more than once. For variables
7328 that are not static data members, we can call
7329 expand_static_init only when we actually process the
7330 initializer. It is not legal to redeclare a static data
7331 member, so this issue does not arise in that case. */
7332 else if (var_definition_p && TREE_STATIC (decl))
7333 expand_static_init (decl, init);
7334 }
7335
7336 /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7337 reference, insert it in the statement-tree now. */
7338 if (cleanups)
7339 {
7340 unsigned i; tree t;
7341 FOR_EACH_VEC_ELT (*cleanups, i, t)
7342 push_cleanup (decl, t, false);
7343 release_tree_vector (cleanups);
7344 }
7345
7346 if (was_readonly)
7347 TREE_READONLY (decl) = 1;
7348
7349 if (flag_openmp
7350 && VAR_P (decl)
7351 && lookup_attribute ("omp declare target implicit",
7352 DECL_ATTRIBUTES (decl)))
7353 {
7354 DECL_ATTRIBUTES (decl)
7355 = remove_attribute ("omp declare target implicit",
7356 DECL_ATTRIBUTES (decl));
7357 complete_type (TREE_TYPE (decl));
7358 if (!cp_omp_mappable_type (TREE_TYPE (decl)))
7359 error ("%q+D in declare target directive does not have mappable type",
7360 decl);
7361 else if (!lookup_attribute ("omp declare target",
7362 DECL_ATTRIBUTES (decl))
7363 && !lookup_attribute ("omp declare target link",
7364 DECL_ATTRIBUTES (decl)))
7365 DECL_ATTRIBUTES (decl)
7366 = tree_cons (get_identifier ("omp declare target"),
7367 NULL_TREE, DECL_ATTRIBUTES (decl));
7368 }
7369
7370 invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7371 }
7372
7373 /* For class TYPE return itself or some its bases that contain
7374 any direct non-static data members. Return error_mark_node if an
7375 error has been diagnosed. */
7376
7377 static tree
7378 find_decomp_class_base (location_t loc, tree type, tree ret)
7379 {
7380 bool member_seen = false;
7381 for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7382 if (TREE_CODE (field) != FIELD_DECL
7383 || DECL_ARTIFICIAL (field)
7384 || DECL_UNNAMED_BIT_FIELD (field))
7385 continue;
7386 else if (ret)
7387 return type;
7388 else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7389 {
7390 if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7391 error_at (loc, "cannot decompose class type %qT because it has an "
7392 "anonymous struct member", type);
7393 else
7394 error_at (loc, "cannot decompose class type %qT because it has an "
7395 "anonymous union member", type);
7396 inform (DECL_SOURCE_LOCATION (field), "declared here");
7397 return error_mark_node;
7398 }
7399 else if (!accessible_p (type, field, true))
7400 {
7401 error_at (loc, "cannot decompose inaccessible member %qD of %qT",
7402 field, type);
7403 inform (DECL_SOURCE_LOCATION (field),
7404 TREE_PRIVATE (field)
7405 ? G_("declared private here")
7406 : G_("declared protected here"));
7407 return error_mark_node;
7408 }
7409 else
7410 member_seen = true;
7411
7412 tree base_binfo, binfo;
7413 tree orig_ret = ret;
7414 int i;
7415 if (member_seen)
7416 ret = type;
7417 for (binfo = TYPE_BINFO (type), i = 0;
7418 BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7419 {
7420 tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7421 if (t == error_mark_node)
7422 return error_mark_node;
7423 if (t != NULL_TREE && t != ret)
7424 {
7425 if (ret == type)
7426 {
7427 error_at (loc, "cannot decompose class type %qT: both it and "
7428 "its base class %qT have non-static data members",
7429 type, t);
7430 return error_mark_node;
7431 }
7432 else if (orig_ret != NULL_TREE)
7433 return t;
7434 else if (ret != NULL_TREE)
7435 {
7436 error_at (loc, "cannot decompose class type %qT: its base "
7437 "classes %qT and %qT have non-static data "
7438 "members", type, ret, t);
7439 return error_mark_node;
7440 }
7441 else
7442 ret = t;
7443 }
7444 }
7445 return ret;
7446 }
7447
7448 /* Return std::tuple_size<TYPE>::value. */
7449
7450 static tree
7451 get_tuple_size (tree type)
7452 {
7453 tree args = make_tree_vec (1);
7454 TREE_VEC_ELT (args, 0) = type;
7455 tree inst = lookup_template_class (tuple_size_identifier, args,
7456 /*in_decl*/NULL_TREE,
7457 /*context*/std_node,
7458 /*entering_scope*/false, tf_none);
7459 inst = complete_type (inst);
7460 if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7461 return NULL_TREE;
7462 tree val = lookup_qualified_name (inst, value_identifier,
7463 /*type*/false, /*complain*/false);
7464 if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7465 val = maybe_constant_value (val);
7466 if (TREE_CODE (val) == INTEGER_CST)
7467 return val;
7468 else
7469 return error_mark_node;
7470 }
7471
7472 /* Return std::tuple_element<I,TYPE>::type. */
7473
7474 static tree
7475 get_tuple_element_type (tree type, unsigned i)
7476 {
7477 tree args = make_tree_vec (2);
7478 TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7479 TREE_VEC_ELT (args, 1) = type;
7480 tree inst = lookup_template_class (tuple_element_identifier, args,
7481 /*in_decl*/NULL_TREE,
7482 /*context*/std_node,
7483 /*entering_scope*/false,
7484 tf_warning_or_error);
7485 return make_typename_type (inst, type_identifier,
7486 none_type, tf_warning_or_error);
7487 }
7488
7489 /* Return e.get<i>() or get<i>(e). */
7490
7491 static tree
7492 get_tuple_decomp_init (tree decl, unsigned i)
7493 {
7494 tree targs = make_tree_vec (1);
7495 TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7496
7497 tree etype = TREE_TYPE (decl);
7498 tree e = convert_from_reference (decl);
7499
7500 /* [The id-expression] e is an lvalue if the type of the entity e is an
7501 lvalue reference and an xvalue otherwise. */
7502 if (!TYPE_REF_P (etype)
7503 || TYPE_REF_IS_RVALUE (etype))
7504 e = move (e);
7505
7506 tree fns = lookup_qualified_name (TREE_TYPE (e), get__identifier,
7507 /*type*/false, /*complain*/false);
7508 bool use_member_get = false;
7509
7510 /* To use a member get, member lookup must find at least one
7511 declaration that is a function template
7512 whose first template parameter is a non-type parameter. */
7513 for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
7514 {
7515 tree fn = *iter;
7516 if (TREE_CODE (fn) == TEMPLATE_DECL)
7517 {
7518 tree tparms = DECL_TEMPLATE_PARMS (fn);
7519 tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
7520 if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
7521 {
7522 use_member_get = true;
7523 break;
7524 }
7525 }
7526 }
7527
7528 if (use_member_get)
7529 {
7530 fns = lookup_template_function (fns, targs);
7531 return build_new_method_call (e, fns, /*args*/NULL,
7532 /*path*/NULL_TREE, LOOKUP_NORMAL,
7533 /*fn_p*/NULL, tf_warning_or_error);
7534 }
7535 else
7536 {
7537 vec<tree,va_gc> *args = make_tree_vector_single (e);
7538 fns = lookup_template_function (get__identifier, targs);
7539 fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7540 return finish_call_expr (fns, &args, /*novirt*/false,
7541 /*koenig*/true, tf_warning_or_error);
7542 }
7543 }
7544
7545 /* It's impossible to recover the decltype of a tuple decomposition variable
7546 based on the actual type of the variable, so store it in a hash table. */
7547
7548 static GTY((cache)) tree_cache_map *decomp_type_table;
7549 static void
7550 store_decomp_type (tree v, tree t)
7551 {
7552 if (!decomp_type_table)
7553 decomp_type_table = tree_cache_map::create_ggc (13);
7554 decomp_type_table->put (v, t);
7555 }
7556
7557 tree
7558 lookup_decomp_type (tree v)
7559 {
7560 return *decomp_type_table->get (v);
7561 }
7562
7563 /* Mangle a decomposition declaration if needed. Arguments like
7564 in cp_finish_decomp. */
7565
7566 void
7567 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7568 {
7569 if (!processing_template_decl
7570 && !error_operand_p (decl)
7571 && DECL_NAMESPACE_SCOPE_P (decl))
7572 {
7573 auto_vec<tree, 16> v;
7574 v.safe_grow (count);
7575 tree d = first;
7576 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7577 v[count - i - 1] = d;
7578 SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7579 maybe_apply_pragma_weak (decl);
7580 }
7581 }
7582
7583 /* Finish a decomposition declaration. DECL is the underlying declaration
7584 "e", FIRST is the head of a chain of decls for the individual identifiers
7585 chained through DECL_CHAIN in reverse order and COUNT is the number of
7586 those decls. */
7587
7588 void
7589 cp_finish_decomp (tree decl, tree first, unsigned int count)
7590 {
7591 if (error_operand_p (decl))
7592 {
7593 error_out:
7594 while (count--)
7595 {
7596 TREE_TYPE (first) = error_mark_node;
7597 if (DECL_HAS_VALUE_EXPR_P (first))
7598 {
7599 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7600 DECL_HAS_VALUE_EXPR_P (first) = 0;
7601 }
7602 first = DECL_CHAIN (first);
7603 }
7604 if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7605 SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7606 return;
7607 }
7608
7609 location_t loc = DECL_SOURCE_LOCATION (decl);
7610 if (type_dependent_expression_p (decl)
7611 /* This happens for range for when not in templates.
7612 Still add the DECL_VALUE_EXPRs for later processing. */
7613 || (!processing_template_decl
7614 && type_uses_auto (TREE_TYPE (decl))))
7615 {
7616 for (unsigned int i = 0; i < count; i++)
7617 {
7618 if (!DECL_HAS_VALUE_EXPR_P (first))
7619 {
7620 tree v = build_nt (ARRAY_REF, decl,
7621 size_int (count - i - 1),
7622 NULL_TREE, NULL_TREE);
7623 SET_DECL_VALUE_EXPR (first, v);
7624 DECL_HAS_VALUE_EXPR_P (first) = 1;
7625 }
7626 if (processing_template_decl)
7627 fit_decomposition_lang_decl (first, decl);
7628 first = DECL_CHAIN (first);
7629 }
7630 return;
7631 }
7632
7633 auto_vec<tree, 16> v;
7634 v.safe_grow (count);
7635 tree d = first;
7636 for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7637 {
7638 v[count - i - 1] = d;
7639 fit_decomposition_lang_decl (d, decl);
7640 }
7641
7642 tree type = TREE_TYPE (decl);
7643 tree dexp = decl;
7644
7645 if (TYPE_REF_P (type))
7646 {
7647 dexp = convert_from_reference (dexp);
7648 type = complete_type (TREE_TYPE (type));
7649 if (type == error_mark_node)
7650 goto error_out;
7651 if (!COMPLETE_TYPE_P (type))
7652 {
7653 error_at (loc, "structured binding refers to incomplete type %qT",
7654 type);
7655 goto error_out;
7656 }
7657 }
7658
7659 tree eltype = NULL_TREE;
7660 unsigned HOST_WIDE_INT eltscnt = 0;
7661 if (TREE_CODE (type) == ARRAY_TYPE)
7662 {
7663 tree nelts;
7664 nelts = array_type_nelts_top (type);
7665 if (nelts == error_mark_node)
7666 goto error_out;
7667 if (!tree_fits_uhwi_p (nelts))
7668 {
7669 error_at (loc, "cannot decompose variable length array %qT", type);
7670 goto error_out;
7671 }
7672 eltscnt = tree_to_uhwi (nelts);
7673 if (count != eltscnt)
7674 {
7675 cnt_mismatch:
7676 if (count > eltscnt)
7677 error_n (loc, count,
7678 "%u name provided for structured binding",
7679 "%u names provided for structured binding", count);
7680 else
7681 error_n (loc, count,
7682 "only %u name provided for structured binding",
7683 "only %u names provided for structured binding", count);
7684 inform_n (loc, eltscnt,
7685 "while %qT decomposes into %wu element",
7686 "while %qT decomposes into %wu elements",
7687 type, eltscnt);
7688 goto error_out;
7689 }
7690 eltype = TREE_TYPE (type);
7691 for (unsigned int i = 0; i < count; i++)
7692 {
7693 TREE_TYPE (v[i]) = eltype;
7694 layout_decl (v[i], 0);
7695 if (processing_template_decl)
7696 continue;
7697 tree t = unshare_expr (dexp);
7698 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7699 eltype, t, size_int (i), NULL_TREE,
7700 NULL_TREE);
7701 SET_DECL_VALUE_EXPR (v[i], t);
7702 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7703 }
7704 }
7705 /* 2 GNU extensions. */
7706 else if (TREE_CODE (type) == COMPLEX_TYPE)
7707 {
7708 eltscnt = 2;
7709 if (count != eltscnt)
7710 goto cnt_mismatch;
7711 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7712 for (unsigned int i = 0; i < count; i++)
7713 {
7714 TREE_TYPE (v[i]) = eltype;
7715 layout_decl (v[i], 0);
7716 if (processing_template_decl)
7717 continue;
7718 tree t = unshare_expr (dexp);
7719 t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7720 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7721 t);
7722 SET_DECL_VALUE_EXPR (v[i], t);
7723 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7724 }
7725 }
7726 else if (TREE_CODE (type) == VECTOR_TYPE)
7727 {
7728 if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7729 {
7730 error_at (loc, "cannot decompose variable length vector %qT", type);
7731 goto error_out;
7732 }
7733 if (count != eltscnt)
7734 goto cnt_mismatch;
7735 eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7736 for (unsigned int i = 0; i < count; i++)
7737 {
7738 TREE_TYPE (v[i]) = eltype;
7739 layout_decl (v[i], 0);
7740 if (processing_template_decl)
7741 continue;
7742 tree t = unshare_expr (dexp);
7743 convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7744 &t, size_int (i));
7745 t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7746 eltype, t, size_int (i), NULL_TREE,
7747 NULL_TREE);
7748 SET_DECL_VALUE_EXPR (v[i], t);
7749 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7750 }
7751 }
7752 else if (tree tsize = get_tuple_size (type))
7753 {
7754 if (tsize == error_mark_node)
7755 {
7756 error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7757 "constant expression", type);
7758 goto error_out;
7759 }
7760 if (!tree_fits_uhwi_p (tsize))
7761 {
7762 error_n (loc, count,
7763 "%u name provided for structured binding",
7764 "%u names provided for structured binding", count);
7765 inform (loc, "while %qT decomposes into %E elements",
7766 type, tsize);
7767 goto error_out;
7768 }
7769 eltscnt = tree_to_uhwi (tsize);
7770 if (count != eltscnt)
7771 goto cnt_mismatch;
7772 int save_read = DECL_READ_P (decl);
7773 for (unsigned i = 0; i < count; ++i)
7774 {
7775 location_t sloc = input_location;
7776 location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7777
7778 input_location = dloc;
7779 tree init = get_tuple_decomp_init (decl, i);
7780 tree eltype = (init == error_mark_node ? error_mark_node
7781 : get_tuple_element_type (type, i));
7782 input_location = sloc;
7783
7784 if (init == error_mark_node || eltype == error_mark_node)
7785 {
7786 inform (dloc, "in initialization of structured binding "
7787 "variable %qD", v[i]);
7788 goto error_out;
7789 }
7790 /* Save the decltype away before reference collapse. */
7791 store_decomp_type (v[i], eltype);
7792 eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7793 TREE_TYPE (v[i]) = eltype;
7794 layout_decl (v[i], 0);
7795 if (DECL_HAS_VALUE_EXPR_P (v[i]))
7796 {
7797 /* In this case the names are variables, not just proxies. */
7798 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7799 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7800 }
7801 if (!processing_template_decl)
7802 cp_finish_decl (v[i], init, /*constexpr*/false,
7803 /*asm*/NULL_TREE, LOOKUP_NORMAL);
7804 }
7805 /* Ignore reads from the underlying decl performed during initialization
7806 of the individual variables. If those will be read, we'll mark
7807 the underlying decl as read at that point. */
7808 DECL_READ_P (decl) = save_read;
7809 }
7810 else if (TREE_CODE (type) == UNION_TYPE)
7811 {
7812 error_at (loc, "cannot decompose union type %qT", type);
7813 goto error_out;
7814 }
7815 else if (!CLASS_TYPE_P (type))
7816 {
7817 error_at (loc, "cannot decompose non-array non-class type %qT", type);
7818 goto error_out;
7819 }
7820 else if (LAMBDA_TYPE_P (type))
7821 {
7822 error_at (loc, "cannot decompose lambda closure type %qT", type);
7823 goto error_out;
7824 }
7825 else if (processing_template_decl && !COMPLETE_TYPE_P (type))
7826 pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
7827 type);
7828 else
7829 {
7830 tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7831 if (btype == error_mark_node)
7832 goto error_out;
7833 else if (btype == NULL_TREE)
7834 {
7835 error_at (loc, "cannot decompose class type %qT without non-static "
7836 "data members", type);
7837 goto error_out;
7838 }
7839 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7840 if (TREE_CODE (field) != FIELD_DECL
7841 || DECL_ARTIFICIAL (field)
7842 || DECL_UNNAMED_BIT_FIELD (field))
7843 continue;
7844 else
7845 eltscnt++;
7846 if (count != eltscnt)
7847 goto cnt_mismatch;
7848 tree t = dexp;
7849 if (type != btype)
7850 {
7851 t = convert_to_base (t, btype, /*check_access*/true,
7852 /*nonnull*/false, tf_warning_or_error);
7853 type = btype;
7854 }
7855 unsigned int i = 0;
7856 for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7857 if (TREE_CODE (field) != FIELD_DECL
7858 || DECL_ARTIFICIAL (field)
7859 || DECL_UNNAMED_BIT_FIELD (field))
7860 continue;
7861 else
7862 {
7863 tree tt = finish_non_static_data_member (field, unshare_expr (t),
7864 NULL_TREE);
7865 if (REFERENCE_REF_P (tt))
7866 tt = TREE_OPERAND (tt, 0);
7867 TREE_TYPE (v[i]) = TREE_TYPE (tt);
7868 layout_decl (v[i], 0);
7869 if (!processing_template_decl)
7870 {
7871 SET_DECL_VALUE_EXPR (v[i], tt);
7872 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7873 }
7874 i++;
7875 }
7876 }
7877 if (processing_template_decl)
7878 {
7879 for (unsigned int i = 0; i < count; i++)
7880 if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7881 {
7882 tree a = build_nt (ARRAY_REF, decl, size_int (i),
7883 NULL_TREE, NULL_TREE);
7884 SET_DECL_VALUE_EXPR (v[i], a);
7885 DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7886 }
7887 }
7888 }
7889
7890 /* Returns a declaration for a VAR_DECL as if:
7891
7892 extern "C" TYPE NAME;
7893
7894 had been seen. Used to create compiler-generated global
7895 variables. */
7896
7897 static tree
7898 declare_global_var (tree name, tree type)
7899 {
7900 tree decl;
7901
7902 push_to_top_level ();
7903 decl = build_decl (input_location, VAR_DECL, name, type);
7904 TREE_PUBLIC (decl) = 1;
7905 DECL_EXTERNAL (decl) = 1;
7906 DECL_ARTIFICIAL (decl) = 1;
7907 DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7908 /* If the user has explicitly declared this variable (perhaps
7909 because the code we are compiling is part of a low-level runtime
7910 library), then it is possible that our declaration will be merged
7911 with theirs by pushdecl. */
7912 decl = pushdecl (decl);
7913 cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7914 pop_from_top_level ();
7915
7916 return decl;
7917 }
7918
7919 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7920 if "__cxa_atexit" is not being used) corresponding to the function
7921 to be called when the program exits. */
7922
7923 static tree
7924 get_atexit_fn_ptr_type (void)
7925 {
7926 tree fn_type;
7927
7928 if (!atexit_fn_ptr_type_node)
7929 {
7930 tree arg_type;
7931 if (flag_use_cxa_atexit
7932 && !targetm.cxx.use_atexit_for_cxa_atexit ())
7933 /* The parameter to "__cxa_atexit" is "void (*)(void *)". */
7934 arg_type = ptr_type_node;
7935 else
7936 /* The parameter to "atexit" is "void (*)(void)". */
7937 arg_type = NULL_TREE;
7938
7939 fn_type = build_function_type_list (void_type_node,
7940 arg_type, NULL_TREE);
7941 atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7942 }
7943
7944 return atexit_fn_ptr_type_node;
7945 }
7946
7947 /* Returns a pointer to the `atexit' function. Note that if
7948 FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7949 `__cxa_atexit' function specified in the IA64 C++ ABI. */
7950
7951 static tree
7952 get_atexit_node (void)
7953 {
7954 tree atexit_fndecl;
7955 tree fn_type;
7956 tree fn_ptr_type;
7957 const char *name;
7958 bool use_aeabi_atexit;
7959
7960 if (atexit_node)
7961 return atexit_node;
7962
7963 if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7964 {
7965 /* The declaration for `__cxa_atexit' is:
7966
7967 int __cxa_atexit (void (*)(void *), void *, void *)
7968
7969 We build up the argument types and then the function type
7970 itself. */
7971 tree argtype0, argtype1, argtype2;
7972
7973 use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7974 /* First, build the pointer-to-function type for the first
7975 argument. */
7976 fn_ptr_type = get_atexit_fn_ptr_type ();
7977 /* Then, build the rest of the argument types. */
7978 argtype2 = ptr_type_node;
7979 if (use_aeabi_atexit)
7980 {
7981 argtype1 = fn_ptr_type;
7982 argtype0 = ptr_type_node;
7983 }
7984 else
7985 {
7986 argtype1 = ptr_type_node;
7987 argtype0 = fn_ptr_type;
7988 }
7989 /* And the final __cxa_atexit type. */
7990 fn_type = build_function_type_list (integer_type_node,
7991 argtype0, argtype1, argtype2,
7992 NULL_TREE);
7993 if (use_aeabi_atexit)
7994 name = "__aeabi_atexit";
7995 else
7996 name = "__cxa_atexit";
7997 }
7998 else
7999 {
8000 /* The declaration for `atexit' is:
8001
8002 int atexit (void (*)());
8003
8004 We build up the argument types and then the function type
8005 itself. */
8006 fn_ptr_type = get_atexit_fn_ptr_type ();
8007 /* Build the final atexit type. */
8008 fn_type = build_function_type_list (integer_type_node,
8009 fn_ptr_type, NULL_TREE);
8010 name = "atexit";
8011 }
8012
8013 /* Now, build the function declaration. */
8014 push_lang_context (lang_name_c);
8015 atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
8016 mark_used (atexit_fndecl);
8017 pop_lang_context ();
8018 atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
8019
8020 return atexit_node;
8021 }
8022
8023 /* Like get_atexit_node, but for thread-local cleanups. */
8024
8025 static tree
8026 get_thread_atexit_node (void)
8027 {
8028 /* The declaration for `__cxa_thread_atexit' is:
8029
8030 int __cxa_thread_atexit (void (*)(void *), void *, void *) */
8031 tree fn_type = build_function_type_list (integer_type_node,
8032 get_atexit_fn_ptr_type (),
8033 ptr_type_node, ptr_type_node,
8034 NULL_TREE);
8035
8036 /* Now, build the function declaration. */
8037 tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
8038 ECF_LEAF | ECF_NOTHROW);
8039 return decay_conversion (atexit_fndecl, tf_warning_or_error);
8040 }
8041
8042 /* Returns the __dso_handle VAR_DECL. */
8043
8044 static tree
8045 get_dso_handle_node (void)
8046 {
8047 if (dso_handle_node)
8048 return dso_handle_node;
8049
8050 /* Declare the variable. */
8051 dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8052 ptr_type_node);
8053
8054 #ifdef HAVE_GAS_HIDDEN
8055 if (dso_handle_node != error_mark_node)
8056 {
8057 DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
8058 DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
8059 }
8060 #endif
8061
8062 return dso_handle_node;
8063 }
8064
8065 /* Begin a new function with internal linkage whose job will be simply
8066 to destroy some particular variable. */
8067
8068 static GTY(()) int start_cleanup_cnt;
8069
8070 static tree
8071 start_cleanup_fn (void)
8072 {
8073 char name[32];
8074 tree fntype;
8075 tree fndecl;
8076 bool use_cxa_atexit = flag_use_cxa_atexit
8077 && !targetm.cxx.use_atexit_for_cxa_atexit ();
8078
8079 push_to_top_level ();
8080
8081 /* No need to mangle this. */
8082 push_lang_context (lang_name_c);
8083
8084 /* Build the name of the function. */
8085 sprintf (name, "__tcf_%d", start_cleanup_cnt++);
8086 /* Build the function declaration. */
8087 fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
8088 fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8089 /* It's a function with internal linkage, generated by the
8090 compiler. */
8091 TREE_PUBLIC (fndecl) = 0;
8092 DECL_ARTIFICIAL (fndecl) = 1;
8093 /* Make the function `inline' so that it is only emitted if it is
8094 actually needed. It is unlikely that it will be inlined, since
8095 it is only called via a function pointer, but we avoid unnecessary
8096 emissions this way. */
8097 DECL_DECLARED_INLINE_P (fndecl) = 1;
8098 DECL_INTERFACE_KNOWN (fndecl) = 1;
8099 /* Build the parameter. */
8100 if (use_cxa_atexit)
8101 {
8102 tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
8103 TREE_USED (parmdecl) = 1;
8104 DECL_READ_P (parmdecl) = 1;
8105 DECL_ARGUMENTS (fndecl) = parmdecl;
8106 }
8107
8108 pushdecl (fndecl);
8109 start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
8110
8111 pop_lang_context ();
8112
8113 return current_function_decl;
8114 }
8115
8116 /* Finish the cleanup function begun by start_cleanup_fn. */
8117
8118 static void
8119 end_cleanup_fn (void)
8120 {
8121 expand_or_defer_fn (finish_function (/*inline_p=*/false));
8122
8123 pop_from_top_level ();
8124 }
8125
8126 /* Generate code to handle the destruction of DECL, an object with
8127 static storage duration. */
8128
8129 tree
8130 register_dtor_fn (tree decl)
8131 {
8132 tree cleanup;
8133 tree addr;
8134 tree compound_stmt;
8135 tree fcall;
8136 tree type;
8137 bool ob_parm, dso_parm, use_dtor;
8138 tree arg0, arg1, arg2;
8139 tree atex_node;
8140
8141 type = TREE_TYPE (decl);
8142 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8143 return void_node;
8144
8145 /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
8146 "__aeabi_atexit"), and DECL is a class object, we can just pass the
8147 destructor to "__cxa_atexit"; we don't have to build a temporary
8148 function to do the cleanup. */
8149 dso_parm = (flag_use_cxa_atexit
8150 && !targetm.cxx.use_atexit_for_cxa_atexit ());
8151 ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
8152 use_dtor = ob_parm && CLASS_TYPE_P (type);
8153 if (use_dtor)
8154 {
8155 cleanup = get_class_binding (type, complete_dtor_identifier);
8156
8157 /* Make sure it is accessible. */
8158 perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
8159 tf_warning_or_error);
8160 }
8161 else
8162 {
8163 /* Call build_cleanup before we enter the anonymous function so
8164 that any access checks will be done relative to the current
8165 scope, rather than the scope of the anonymous function. */
8166 build_cleanup (decl);
8167
8168 /* Now start the function. */
8169 cleanup = start_cleanup_fn ();
8170
8171 /* Now, recompute the cleanup. It may contain SAVE_EXPRs that refer
8172 to the original function, rather than the anonymous one. That
8173 will make the back end think that nested functions are in use,
8174 which causes confusion. */
8175 push_deferring_access_checks (dk_no_check);
8176 fcall = build_cleanup (decl);
8177 pop_deferring_access_checks ();
8178
8179 /* Create the body of the anonymous function. */
8180 compound_stmt = begin_compound_stmt (BCS_FN_BODY);
8181 finish_expr_stmt (fcall);
8182 finish_compound_stmt (compound_stmt);
8183 end_cleanup_fn ();
8184 }
8185
8186 /* Call atexit with the cleanup function. */
8187 mark_used (cleanup);
8188 cleanup = build_address (cleanup);
8189
8190 if (CP_DECL_THREAD_LOCAL_P (decl))
8191 atex_node = get_thread_atexit_node ();
8192 else
8193 atex_node = get_atexit_node ();
8194
8195 if (use_dtor)
8196 {
8197 /* We must convert CLEANUP to the type that "__cxa_atexit"
8198 expects. */
8199 cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
8200 /* "__cxa_atexit" will pass the address of DECL to the
8201 cleanup function. */
8202 mark_used (decl);
8203 addr = build_address (decl);
8204 /* The declared type of the parameter to "__cxa_atexit" is
8205 "void *". For plain "T*", we could just let the
8206 machinery in cp_build_function_call convert it -- but if the
8207 type is "cv-qualified T *", then we need to convert it
8208 before passing it in, to avoid spurious errors. */
8209 addr = build_nop (ptr_type_node, addr);
8210 }
8211 else
8212 /* Since the cleanup functions we build ignore the address
8213 they're given, there's no reason to pass the actual address
8214 in, and, in general, it's cheaper to pass NULL than any
8215 other value. */
8216 addr = null_pointer_node;
8217
8218 if (dso_parm)
8219 arg2 = cp_build_addr_expr (get_dso_handle_node (),
8220 tf_warning_or_error);
8221 else if (ob_parm)
8222 /* Just pass NULL to the dso handle parm if we don't actually
8223 have a DSO handle on this target. */
8224 arg2 = null_pointer_node;
8225 else
8226 arg2 = NULL_TREE;
8227
8228 if (ob_parm)
8229 {
8230 if (!CP_DECL_THREAD_LOCAL_P (decl)
8231 && targetm.cxx.use_aeabi_atexit ())
8232 {
8233 arg1 = cleanup;
8234 arg0 = addr;
8235 }
8236 else
8237 {
8238 arg1 = addr;
8239 arg0 = cleanup;
8240 }
8241 }
8242 else
8243 {
8244 arg0 = cleanup;
8245 arg1 = NULL_TREE;
8246 }
8247 return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8248 arg0, arg1, arg2, NULL_TREE);
8249 }
8250
8251 /* DECL is a VAR_DECL with static storage duration. INIT, if present,
8252 is its initializer. Generate code to handle the construction
8253 and destruction of DECL. */
8254
8255 static void
8256 expand_static_init (tree decl, tree init)
8257 {
8258 gcc_assert (VAR_P (decl));
8259 gcc_assert (TREE_STATIC (decl));
8260
8261 /* Some variables require no dynamic initialization. */
8262 if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8263 {
8264 /* Make sure the destructor is callable. */
8265 cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8266 if (!init)
8267 return;
8268 }
8269
8270 if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8271 && !DECL_FUNCTION_SCOPE_P (decl))
8272 {
8273 if (init)
8274 error ("non-local variable %qD declared %<__thread%> "
8275 "needs dynamic initialization", decl);
8276 else
8277 error ("non-local variable %qD declared %<__thread%> "
8278 "has a non-trivial destructor", decl);
8279 static bool informed;
8280 if (!informed)
8281 {
8282 inform (DECL_SOURCE_LOCATION (decl),
8283 "C++11 %<thread_local%> allows dynamic initialization "
8284 "and destruction");
8285 informed = true;
8286 }
8287 return;
8288 }
8289
8290 if (DECL_FUNCTION_SCOPE_P (decl))
8291 {
8292 /* Emit code to perform this initialization but once. */
8293 tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8294 tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8295 tree guard, guard_addr;
8296 tree flag, begin;
8297 /* We don't need thread-safety code for thread-local vars. */
8298 bool thread_guard = (flag_threadsafe_statics
8299 && !CP_DECL_THREAD_LOCAL_P (decl));
8300
8301 /* Emit code to perform this initialization but once. This code
8302 looks like:
8303
8304 static <type> guard;
8305 if (!__atomic_load (guard.first_byte)) {
8306 if (__cxa_guard_acquire (&guard)) {
8307 bool flag = false;
8308 try {
8309 // Do initialization.
8310 flag = true; __cxa_guard_release (&guard);
8311 // Register variable for destruction at end of program.
8312 } catch {
8313 if (!flag) __cxa_guard_abort (&guard);
8314 }
8315 }
8316 }
8317
8318 Note that the `flag' variable is only set to 1 *after* the
8319 initialization is complete. This ensures that an exception,
8320 thrown during the construction, will cause the variable to
8321 reinitialized when we pass through this code again, as per:
8322
8323 [stmt.dcl]
8324
8325 If the initialization exits by throwing an exception, the
8326 initialization is not complete, so it will be tried again
8327 the next time control enters the declaration.
8328
8329 This process should be thread-safe, too; multiple threads
8330 should not be able to initialize the variable more than
8331 once. */
8332
8333 /* Create the guard variable. */
8334 guard = get_guard (decl);
8335
8336 /* Begin the conditional initialization. */
8337 if_stmt = begin_if_stmt ();
8338
8339 finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8340 then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8341
8342 if (thread_guard)
8343 {
8344 tree vfntype = NULL_TREE;
8345 tree acquire_name, release_name, abort_name;
8346 tree acquire_fn, release_fn, abort_fn;
8347 guard_addr = build_address (guard);
8348
8349 acquire_name = get_identifier ("__cxa_guard_acquire");
8350 release_name = get_identifier ("__cxa_guard_release");
8351 abort_name = get_identifier ("__cxa_guard_abort");
8352 acquire_fn = get_global_binding (acquire_name);
8353 release_fn = get_global_binding (release_name);
8354 abort_fn = get_global_binding (abort_name);
8355 if (!acquire_fn)
8356 acquire_fn = push_library_fn
8357 (acquire_name, build_function_type_list (integer_type_node,
8358 TREE_TYPE (guard_addr),
8359 NULL_TREE),
8360 NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8361 if (!release_fn || !abort_fn)
8362 vfntype = build_function_type_list (void_type_node,
8363 TREE_TYPE (guard_addr),
8364 NULL_TREE);
8365 if (!release_fn)
8366 release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8367 ECF_NOTHROW | ECF_LEAF);
8368 if (!abort_fn)
8369 abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8370 ECF_NOTHROW | ECF_LEAF);
8371
8372 inner_if_stmt = begin_if_stmt ();
8373 finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8374 inner_if_stmt);
8375
8376 inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8377 begin = get_target_expr (boolean_false_node);
8378 flag = TARGET_EXPR_SLOT (begin);
8379
8380 TARGET_EXPR_CLEANUP (begin)
8381 = build3 (COND_EXPR, void_type_node, flag,
8382 void_node,
8383 build_call_n (abort_fn, 1, guard_addr));
8384 CLEANUP_EH_ONLY (begin) = 1;
8385
8386 /* Do the initialization itself. */
8387 init = add_stmt_to_compound (begin, init);
8388 init = add_stmt_to_compound
8389 (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8390 init = add_stmt_to_compound
8391 (init, build_call_n (release_fn, 1, guard_addr));
8392 }
8393 else
8394 init = add_stmt_to_compound (init, set_guard (guard));
8395
8396 /* Use atexit to register a function for destroying this static
8397 variable. */
8398 init = add_stmt_to_compound (init, register_dtor_fn (decl));
8399
8400 finish_expr_stmt (init);
8401
8402 if (thread_guard)
8403 {
8404 finish_compound_stmt (inner_then_clause);
8405 finish_then_clause (inner_if_stmt);
8406 finish_if_stmt (inner_if_stmt);
8407 }
8408
8409 finish_compound_stmt (then_clause);
8410 finish_then_clause (if_stmt);
8411 finish_if_stmt (if_stmt);
8412 }
8413 else if (CP_DECL_THREAD_LOCAL_P (decl))
8414 tls_aggregates = tree_cons (init, decl, tls_aggregates);
8415 else
8416 static_aggregates = tree_cons (init, decl, static_aggregates);
8417 }
8418
8419 \f
8420 /* Make TYPE a complete type based on INITIAL_VALUE.
8421 Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8422 2 if there was no information (in which case assume 0 if DO_DEFAULT),
8423 3 if the initializer list is empty (in pedantic mode). */
8424
8425 int
8426 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8427 {
8428 int failure;
8429 tree type, elt_type;
8430
8431 /* Don't get confused by a CONSTRUCTOR for some other type. */
8432 if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8433 && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8434 && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8435 return 1;
8436
8437 if (initial_value)
8438 {
8439 unsigned HOST_WIDE_INT i;
8440 tree value;
8441
8442 /* An array of character type can be initialized from a
8443 brace-enclosed string constant.
8444
8445 FIXME: this code is duplicated from reshape_init. Probably
8446 we should just call reshape_init here? */
8447 if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8448 && TREE_CODE (initial_value) == CONSTRUCTOR
8449 && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8450 {
8451 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8452 tree value = (*v)[0].value;
8453
8454 if (TREE_CODE (value) == STRING_CST
8455 && v->length () == 1)
8456 initial_value = value;
8457 }
8458
8459 /* If any of the elements are parameter packs, we can't actually
8460 complete this type now because the array size is dependent. */
8461 if (TREE_CODE (initial_value) == CONSTRUCTOR)
8462 {
8463 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8464 i, value)
8465 {
8466 if (PACK_EXPANSION_P (value))
8467 return 0;
8468 }
8469 }
8470 }
8471
8472 failure = complete_array_type (ptype, initial_value, do_default);
8473
8474 /* We can create the array before the element type is complete, which
8475 means that we didn't have these two bits set in the original type
8476 either. In completing the type, we are expected to propagate these
8477 bits. See also complete_type which does the same thing for arrays
8478 of fixed size. */
8479 type = *ptype;
8480 if (type != error_mark_node && TYPE_DOMAIN (type))
8481 {
8482 elt_type = TREE_TYPE (type);
8483 TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8484 TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8485 = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8486 }
8487
8488 return failure;
8489 }
8490
8491 /* As above, but either give an error or reject zero-size arrays, depending
8492 on COMPLAIN. */
8493
8494 int
8495 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8496 bool do_default, tsubst_flags_t complain)
8497 {
8498 int failure;
8499 bool sfinae = !(complain & tf_error);
8500 /* In SFINAE context we can't be lenient about zero-size arrays. */
8501 if (sfinae)
8502 ++pedantic;
8503 failure = cp_complete_array_type (ptype, initial_value, do_default);
8504 if (sfinae)
8505 --pedantic;
8506 if (failure)
8507 {
8508 if (sfinae)
8509 /* Not an error. */;
8510 else if (failure == 1)
8511 error ("initializer fails to determine size of %qT", *ptype);
8512 else if (failure == 2)
8513 {
8514 if (do_default)
8515 error ("array size missing in %qT", *ptype);
8516 }
8517 else if (failure == 3)
8518 error ("zero-size array %qT", *ptype);
8519 *ptype = error_mark_node;
8520 }
8521 return failure;
8522 }
8523 \f
8524 /* Return zero if something is declared to be a member of type
8525 CTYPE when in the context of CUR_TYPE. STRING is the error
8526 message to print in that case. Otherwise, quietly return 1. */
8527
8528 static int
8529 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8530 {
8531 if (ctype && ctype != cur_type)
8532 {
8533 if (flags == DTOR_FLAG)
8534 error ("destructor for alien class %qT cannot be a member", ctype);
8535 else
8536 error ("constructor for alien class %qT cannot be a member", ctype);
8537 return 0;
8538 }
8539 return 1;
8540 }
8541 \f
8542 /* Subroutine of `grokdeclarator'. */
8543
8544 /* Generate errors possibly applicable for a given set of specifiers.
8545 This is for ARM $7.1.2. */
8546
8547 static void
8548 bad_specifiers (tree object,
8549 enum bad_spec_place type,
8550 int virtualp,
8551 int quals,
8552 int inlinep,
8553 int friendp,
8554 int raises,
8555 const location_t* locations)
8556 {
8557 switch (type)
8558 {
8559 case BSP_VAR:
8560 if (virtualp)
8561 error_at (locations[ds_virtual],
8562 "%qD declared as a %<virtual%> variable", object);
8563 if (quals)
8564 error ("%<const%> and %<volatile%> function specifiers on "
8565 "%qD invalid in variable declaration", object);
8566 break;
8567 case BSP_PARM:
8568 if (virtualp)
8569 error_at (locations[ds_virtual],
8570 "%qD declared as a %<virtual%> parameter", object);
8571 if (inlinep)
8572 error_at (locations[ds_inline],
8573 "%qD declared as an %<inline%> parameter", object);
8574 if (quals)
8575 error ("%<const%> and %<volatile%> function specifiers on "
8576 "%qD invalid in parameter declaration", object);
8577 break;
8578 case BSP_TYPE:
8579 if (virtualp)
8580 error_at (locations[ds_virtual],
8581 "%qD declared as a %<virtual%> type", object);
8582 if (inlinep)
8583 error_at (locations[ds_inline],
8584 "%qD declared as an %<inline%> type", object);
8585 if (quals)
8586 error ("%<const%> and %<volatile%> function specifiers on "
8587 "%qD invalid in type declaration", object);
8588 break;
8589 case BSP_FIELD:
8590 if (virtualp)
8591 error_at (locations[ds_virtual],
8592 "%qD declared as a %<virtual%> field", object);
8593 if (inlinep)
8594 error_at (locations[ds_inline],
8595 "%qD declared as an %<inline%> field", object);
8596 if (quals)
8597 error ("%<const%> and %<volatile%> function specifiers on "
8598 "%qD invalid in field declaration", object);
8599 break;
8600 default:
8601 gcc_unreachable();
8602 }
8603 if (friendp)
8604 error ("%q+D declared as a friend", object);
8605 if (raises
8606 && !flag_noexcept_type
8607 && (TREE_CODE (object) == TYPE_DECL
8608 || (!TYPE_PTRFN_P (TREE_TYPE (object))
8609 && !TYPE_REFFN_P (TREE_TYPE (object))
8610 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8611 error ("%q+D declared with an exception specification", object);
8612 }
8613
8614 /* DECL is a member function or static data member and is presently
8615 being defined. Check that the definition is taking place in a
8616 valid namespace. */
8617
8618 static void
8619 check_class_member_definition_namespace (tree decl)
8620 {
8621 /* These checks only apply to member functions and static data
8622 members. */
8623 gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8624 /* We check for problems with specializations in pt.c in
8625 check_specialization_namespace, where we can issue better
8626 diagnostics. */
8627 if (processing_specialization)
8628 return;
8629 /* We check this in check_explicit_instantiation_namespace. */
8630 if (processing_explicit_instantiation)
8631 return;
8632 /* [class.mfct]
8633
8634 A member function definition that appears outside of the
8635 class definition shall appear in a namespace scope enclosing
8636 the class definition.
8637
8638 [class.static.data]
8639
8640 The definition for a static data member shall appear in a
8641 namespace scope enclosing the member's class definition. */
8642 if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8643 permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8644 decl, DECL_CONTEXT (decl));
8645 }
8646
8647 /* Build a PARM_DECL for the "this" parameter of FN. TYPE is the
8648 METHOD_TYPE for a non-static member function; QUALS are the
8649 cv-qualifiers that apply to the function. */
8650
8651 tree
8652 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8653 {
8654 tree this_type;
8655 tree qual_type;
8656 tree parm;
8657 cp_cv_quals this_quals;
8658
8659 if (CLASS_TYPE_P (type))
8660 {
8661 this_type
8662 = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8663 this_type = build_pointer_type (this_type);
8664 }
8665 else
8666 this_type = type_of_this_parm (type);
8667 /* The `this' parameter is implicitly `const'; it cannot be
8668 assigned to. */
8669 this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8670 qual_type = cp_build_qualified_type (this_type, this_quals);
8671 parm = build_artificial_parm (fn, this_identifier, qual_type);
8672 cp_apply_type_quals_to_decl (this_quals, parm);
8673 return parm;
8674 }
8675
8676 /* DECL is a static member function. Complain if it was declared
8677 with function-cv-quals. */
8678
8679 static void
8680 check_static_quals (tree decl, cp_cv_quals quals)
8681 {
8682 if (quals != TYPE_UNQUALIFIED)
8683 error ("static member function %q#D declared with type qualifiers",
8684 decl);
8685 }
8686
8687 // Check that FN takes no arguments and returns bool.
8688 static void
8689 check_concept_fn (tree fn)
8690 {
8691 // A constraint is nullary.
8692 if (DECL_ARGUMENTS (fn))
8693 error_at (DECL_SOURCE_LOCATION (fn),
8694 "concept %q#D declared with function parameters", fn);
8695
8696 // The declared return type of the concept shall be bool, and
8697 // it shall not be deduced from it definition.
8698 tree type = TREE_TYPE (TREE_TYPE (fn));
8699 if (is_auto (type))
8700 error_at (DECL_SOURCE_LOCATION (fn),
8701 "concept %q#D declared with a deduced return type", fn);
8702 else if (type != boolean_type_node)
8703 error_at (DECL_SOURCE_LOCATION (fn),
8704 "concept %q#D with non-%<bool%> return type %qT", fn, type);
8705 }
8706
8707 /* Helper function. Replace the temporary this parameter injected
8708 during cp_finish_omp_declare_simd with the real this parameter. */
8709
8710 static tree
8711 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8712 {
8713 tree this_parm = (tree) data;
8714 if (TREE_CODE (*tp) == PARM_DECL
8715 && DECL_NAME (*tp) == this_identifier
8716 && *tp != this_parm)
8717 *tp = this_parm;
8718 else if (TYPE_P (*tp))
8719 *walk_subtrees = 0;
8720 return NULL_TREE;
8721 }
8722
8723 /* CTYPE is class type, or null if non-class.
8724 TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8725 or METHOD_TYPE.
8726 DECLARATOR is the function's name.
8727 PARMS is a chain of PARM_DECLs for the function.
8728 VIRTUALP is truthvalue of whether the function is virtual or not.
8729 FLAGS are to be passed through to `grokclassfn'.
8730 QUALS are qualifiers indicating whether the function is `const'
8731 or `volatile'.
8732 RAISES is a list of exceptions that this function can raise.
8733 CHECK is 1 if we must find this method in CTYPE, 0 if we should
8734 not look, and -1 if we should not call `grokclassfn' at all.
8735
8736 SFK is the kind of special function (if any) for the new function.
8737
8738 Returns `NULL_TREE' if something goes wrong, after issuing
8739 applicable error messages. */
8740
8741 static tree
8742 grokfndecl (tree ctype,
8743 tree type,
8744 tree declarator,
8745 tree parms,
8746 tree orig_declarator,
8747 const cp_decl_specifier_seq *declspecs,
8748 tree decl_reqs,
8749 int virtualp,
8750 enum overload_flags flags,
8751 cp_cv_quals quals,
8752 cp_ref_qualifier rqual,
8753 tree raises,
8754 int check,
8755 int friendp,
8756 int publicp,
8757 int inlinep,
8758 bool deletedp,
8759 special_function_kind sfk,
8760 bool funcdef_flag,
8761 bool late_return_type_p,
8762 int template_count,
8763 tree in_namespace,
8764 tree* attrlist,
8765 location_t location)
8766 {
8767 tree decl;
8768 int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8769 tree t;
8770
8771 if (location == UNKNOWN_LOCATION)
8772 location = input_location;
8773
8774 // Was the concept specifier present?
8775 bool concept_p = inlinep & 4;
8776
8777 // Concept declarations must have a corresponding definition.
8778 if (concept_p && !funcdef_flag)
8779 {
8780 error_at (location, "concept %qD has no definition", declarator);
8781 return NULL_TREE;
8782 }
8783
8784 type = build_cp_fntype_variant (type, rqual, raises, late_return_type_p);
8785
8786 decl = build_lang_decl_loc (location, FUNCTION_DECL, declarator, type);
8787
8788 /* Set the constraints on the declaration. */
8789 if (flag_concepts)
8790 {
8791 tree tmpl_reqs = NULL_TREE;
8792 if (processing_template_decl > template_class_depth (ctype))
8793 tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8794
8795 /* Adjust the required expression into a constraint. */
8796 if (decl_reqs)
8797 decl_reqs = normalize_expression (decl_reqs);
8798
8799 tree ci = build_constraints (tmpl_reqs, decl_reqs);
8800 set_constraints (decl, ci);
8801 }
8802
8803 if (TREE_CODE (type) == METHOD_TYPE)
8804 {
8805 tree parm = build_this_parm (decl, type, quals);
8806 DECL_CHAIN (parm) = parms;
8807 parms = parm;
8808
8809 /* Allocate space to hold the vptr bit if needed. */
8810 SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8811 }
8812
8813 DECL_ARGUMENTS (decl) = parms;
8814 for (t = parms; t; t = DECL_CHAIN (t))
8815 DECL_CONTEXT (t) = decl;
8816
8817 /* Propagate volatile out from type to decl. */
8818 if (TYPE_VOLATILE (type))
8819 TREE_THIS_VOLATILE (decl) = 1;
8820
8821 /* Setup decl according to sfk. */
8822 switch (sfk)
8823 {
8824 case sfk_constructor:
8825 case sfk_copy_constructor:
8826 case sfk_move_constructor:
8827 DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8828 DECL_NAME (decl) = ctor_identifier;
8829 break;
8830 case sfk_destructor:
8831 DECL_CXX_DESTRUCTOR_P (decl) = 1;
8832 DECL_NAME (decl) = dtor_identifier;
8833 break;
8834 default:
8835 break;
8836 }
8837
8838 if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8839 {
8840 if (funcdef_flag)
8841 error_at (location,
8842 "defining explicit specialization %qD in friend declaration",
8843 orig_declarator);
8844 else
8845 {
8846 tree fns = TREE_OPERAND (orig_declarator, 0);
8847 tree args = TREE_OPERAND (orig_declarator, 1);
8848
8849 if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8850 {
8851 /* Something like `template <class T> friend void f<T>()'. */
8852 error_at (location,
8853 "invalid use of template-id %qD in declaration "
8854 "of primary template",
8855 orig_declarator);
8856 return NULL_TREE;
8857 }
8858
8859
8860 /* A friend declaration of the form friend void f<>(). Record
8861 the information in the TEMPLATE_ID_EXPR. */
8862 SET_DECL_IMPLICIT_INSTANTIATION (decl);
8863
8864 gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8865 DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8866
8867 for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8868 if (TREE_PURPOSE (t)
8869 && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8870 {
8871 error_at (defarg_location (TREE_PURPOSE (t)),
8872 "default arguments are not allowed in declaration "
8873 "of friend template specialization %qD",
8874 decl);
8875 return NULL_TREE;
8876 }
8877
8878 if (inlinep & 1)
8879 {
8880 error_at (declspecs->locations[ds_inline],
8881 "%<inline%> is not allowed in declaration of friend "
8882 "template specialization %qD",
8883 decl);
8884 return NULL_TREE;
8885 }
8886 }
8887 }
8888
8889 /* C++17 11.3.6/4: "If a friend declaration specifies a default argument
8890 expression, that declaration shall be a definition..." */
8891 if (friendp && !funcdef_flag)
8892 {
8893 for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
8894 t && t != void_list_node; t = TREE_CHAIN (t))
8895 if (TREE_PURPOSE (t))
8896 {
8897 permerror (DECL_SOURCE_LOCATION (decl),
8898 "friend declaration of %qD specifies default "
8899 "arguments and isn't a definition", decl);
8900 break;
8901 }
8902 }
8903
8904 /* If this decl has namespace scope, set that up. */
8905 if (in_namespace)
8906 set_decl_namespace (decl, in_namespace, friendp);
8907 else if (!ctype)
8908 DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8909
8910 /* `main' and builtins have implicit 'C' linkage. */
8911 if (ctype == NULL_TREE
8912 && DECL_FILE_SCOPE_P (decl)
8913 && current_lang_name == lang_name_cplusplus
8914 && (MAIN_NAME_P (declarator)
8915 || (IDENTIFIER_LENGTH (declarator) > 10
8916 && IDENTIFIER_POINTER (declarator)[0] == '_'
8917 && IDENTIFIER_POINTER (declarator)[1] == '_'
8918 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8919 "builtin_", 8) == 0)
8920 || (targetcm.cxx_implicit_extern_c
8921 && (targetcm.cxx_implicit_extern_c
8922 (IDENTIFIER_POINTER (declarator))))))
8923 SET_DECL_LANGUAGE (decl, lang_c);
8924
8925 /* Should probably propagate const out from type to decl I bet (mrs). */
8926 if (staticp)
8927 {
8928 DECL_STATIC_FUNCTION_P (decl) = 1;
8929 DECL_CONTEXT (decl) = ctype;
8930 }
8931
8932 if (deletedp)
8933 DECL_DELETED_FN (decl) = 1;
8934
8935 if (ctype)
8936 {
8937 DECL_CONTEXT (decl) = ctype;
8938 if (funcdef_flag)
8939 check_class_member_definition_namespace (decl);
8940 }
8941
8942 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8943 {
8944 if (PROCESSING_REAL_TEMPLATE_DECL_P())
8945 error_at (location, "cannot declare %<::main%> to be a template");
8946 if (inlinep & 1)
8947 error_at (declspecs->locations[ds_inline],
8948 "cannot declare %<::main%> to be inline");
8949 if (inlinep & 2)
8950 error_at (declspecs->locations[ds_constexpr],
8951 "cannot declare %<::main%> to be %<constexpr%>");
8952 if (!publicp)
8953 error_at (location, "cannot declare %<::main%> to be static");
8954 inlinep = 0;
8955 publicp = 1;
8956 }
8957
8958 /* Members of anonymous types and local classes have no linkage; make
8959 them internal. If a typedef is made later, this will be changed. */
8960 if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8961 || decl_function_context (TYPE_MAIN_DECL (ctype))))
8962 publicp = 0;
8963
8964 if (publicp && cxx_dialect == cxx98)
8965 {
8966 /* [basic.link]: A name with no linkage (notably, the name of a class
8967 or enumeration declared in a local scope) shall not be used to
8968 declare an entity with linkage.
8969
8970 DR 757 relaxes this restriction for C++0x. */
8971 no_linkage_error (decl);
8972 }
8973
8974 TREE_PUBLIC (decl) = publicp;
8975 if (! publicp)
8976 {
8977 DECL_INTERFACE_KNOWN (decl) = 1;
8978 DECL_NOT_REALLY_EXTERN (decl) = 1;
8979 }
8980
8981 /* If the declaration was declared inline, mark it as such. */
8982 if (inlinep)
8983 {
8984 DECL_DECLARED_INLINE_P (decl) = 1;
8985 if (publicp)
8986 DECL_COMDAT (decl) = 1;
8987 }
8988 if (inlinep & 2)
8989 DECL_DECLARED_CONSTEXPR_P (decl) = true;
8990
8991 // If the concept declaration specifier was found, check
8992 // that the declaration satisfies the necessary requirements.
8993 if (concept_p)
8994 {
8995 DECL_DECLARED_CONCEPT_P (decl) = true;
8996 check_concept_fn (decl);
8997 }
8998
8999 DECL_EXTERNAL (decl) = 1;
9000 if (TREE_CODE (type) == FUNCTION_TYPE)
9001 {
9002 if (quals || rqual)
9003 TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
9004 TYPE_UNQUALIFIED,
9005 REF_QUAL_NONE);
9006
9007 if (quals)
9008 {
9009 error (ctype
9010 ? G_("static member function %qD cannot have cv-qualifier")
9011 : G_("non-member function %qD cannot have cv-qualifier"),
9012 decl);
9013 quals = TYPE_UNQUALIFIED;
9014 }
9015
9016 if (rqual)
9017 {
9018 error (ctype
9019 ? G_("static member function %qD cannot have ref-qualifier")
9020 : G_("non-member function %qD cannot have ref-qualifier"),
9021 decl);
9022 rqual = REF_QUAL_NONE;
9023 }
9024 }
9025
9026 if (deduction_guide_p (decl))
9027 {
9028 if (!DECL_NAMESPACE_SCOPE_P (decl))
9029 {
9030 error_at (location, "deduction guide %qD must be declared at "
9031 "namespace scope", decl);
9032 return NULL_TREE;
9033 }
9034 if (funcdef_flag)
9035 error_at (location,
9036 "deduction guide %qD must not have a function body", decl);
9037 }
9038 else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
9039 && !grok_op_properties (decl, /*complain=*/true))
9040 return NULL_TREE;
9041 else if (UDLIT_OPER_P (DECL_NAME (decl)))
9042 {
9043 bool long_long_unsigned_p;
9044 bool long_double_p;
9045 const char *suffix = NULL;
9046 /* [over.literal]/6: Literal operators shall not have C linkage. */
9047 if (DECL_LANGUAGE (decl) == lang_c)
9048 {
9049 error_at (location, "literal operator with C linkage");
9050 maybe_show_extern_c_location ();
9051 return NULL_TREE;
9052 }
9053
9054 if (DECL_NAMESPACE_SCOPE_P (decl))
9055 {
9056 if (!check_literal_operator_args (decl, &long_long_unsigned_p,
9057 &long_double_p))
9058 {
9059 error_at (location, "%qD has invalid argument list", decl);
9060 return NULL_TREE;
9061 }
9062
9063 suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
9064 if (long_long_unsigned_p)
9065 {
9066 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
9067 warning_at (location, 0, "integer suffix %qs"
9068 " shadowed by implementation", suffix);
9069 }
9070 else if (long_double_p)
9071 {
9072 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
9073 warning_at (location, 0, "floating point suffix %qs"
9074 " shadowed by implementation", suffix);
9075 }
9076 /* 17.6.3.3.5 */
9077 if (suffix[0] != '_'
9078 && !in_system_header_at (location)
9079 && !current_function_decl && !(friendp && !funcdef_flag))
9080 warning_at (location, OPT_Wliteral_suffix,
9081 "literal operator suffixes not preceded by %<_%>"
9082 " are reserved for future standardization");
9083 }
9084 else
9085 {
9086 error_at (location, "%qD must be a non-member function", decl);
9087 return NULL_TREE;
9088 }
9089 }
9090
9091 if (funcdef_flag)
9092 /* Make the init_value nonzero so pushdecl knows this is not
9093 tentative. error_mark_node is replaced later with the BLOCK. */
9094 DECL_INITIAL (decl) = error_mark_node;
9095
9096 if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
9097 TREE_NOTHROW (decl) = 1;
9098
9099 if (flag_openmp || flag_openmp_simd)
9100 {
9101 /* Adjust "omp declare simd" attributes. */
9102 tree ods = lookup_attribute ("omp declare simd", *attrlist);
9103 if (ods)
9104 {
9105 tree attr;
9106 for (attr = ods; attr;
9107 attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
9108 {
9109 if (TREE_CODE (type) == METHOD_TYPE)
9110 walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
9111 DECL_ARGUMENTS (decl), NULL);
9112 if (TREE_VALUE (attr) != NULL_TREE)
9113 {
9114 tree cl = TREE_VALUE (TREE_VALUE (attr));
9115 cl = c_omp_declare_simd_clauses_to_numbers
9116 (DECL_ARGUMENTS (decl), cl);
9117 if (cl)
9118 TREE_VALUE (TREE_VALUE (attr)) = cl;
9119 else
9120 TREE_VALUE (attr) = NULL_TREE;
9121 }
9122 }
9123 }
9124 }
9125
9126 /* Caller will do the rest of this. */
9127 if (check < 0)
9128 return decl;
9129
9130 if (ctype != NULL_TREE)
9131 grokclassfn (ctype, decl, flags);
9132
9133 /* 12.4/3 */
9134 if (cxx_dialect >= cxx11
9135 && DECL_DESTRUCTOR_P (decl)
9136 && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
9137 && !processing_template_decl)
9138 deduce_noexcept_on_destructor (decl);
9139
9140 decl = check_explicit_specialization (orig_declarator, decl,
9141 template_count,
9142 2 * funcdef_flag +
9143 4 * (friendp != 0) +
9144 8 * concept_p,
9145 *attrlist);
9146 if (decl == error_mark_node)
9147 return NULL_TREE;
9148
9149 if (DECL_STATIC_FUNCTION_P (decl))
9150 check_static_quals (decl, quals);
9151
9152 if (attrlist)
9153 {
9154 cplus_decl_attributes (&decl, *attrlist, 0);
9155 *attrlist = NULL_TREE;
9156 }
9157
9158 /* Check main's type after attributes have been applied. */
9159 if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9160 {
9161 if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9162 integer_type_node))
9163 {
9164 tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
9165 tree newtype;
9166 error_at (declspecs->locations[ds_type_spec],
9167 "%<::main%> must return %<int%>");
9168 newtype = build_function_type (integer_type_node, oldtypeargs);
9169 TREE_TYPE (decl) = newtype;
9170 }
9171 if (warn_main)
9172 check_main_parameter_types (decl);
9173 }
9174
9175 if (ctype != NULL_TREE && check)
9176 {
9177 tree old_decl = check_classfn (ctype, decl,
9178 (processing_template_decl
9179 > template_class_depth (ctype))
9180 ? current_template_parms
9181 : NULL_TREE);
9182
9183 if (old_decl == error_mark_node)
9184 return NULL_TREE;
9185
9186 if (old_decl)
9187 {
9188 tree ok;
9189 tree pushed_scope;
9190
9191 if (TREE_CODE (old_decl) == TEMPLATE_DECL)
9192 /* Because grokfndecl is always supposed to return a
9193 FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9194 here. We depend on our callers to figure out that its
9195 really a template that's being returned. */
9196 old_decl = DECL_TEMPLATE_RESULT (old_decl);
9197
9198 if (DECL_STATIC_FUNCTION_P (old_decl)
9199 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9200 {
9201 /* Remove the `this' parm added by grokclassfn. */
9202 revert_static_member_fn (decl);
9203 check_static_quals (decl, quals);
9204 }
9205 if (DECL_ARTIFICIAL (old_decl))
9206 {
9207 error ("definition of implicitly-declared %qD", old_decl);
9208 return NULL_TREE;
9209 }
9210 else if (DECL_DEFAULTED_FN (old_decl))
9211 {
9212 error ("definition of explicitly-defaulted %q+D", decl);
9213 inform (DECL_SOURCE_LOCATION (old_decl),
9214 "%q#D explicitly defaulted here", old_decl);
9215 return NULL_TREE;
9216 }
9217
9218 /* Since we've smashed OLD_DECL to its
9219 DECL_TEMPLATE_RESULT, we must do the same to DECL. */
9220 if (TREE_CODE (decl) == TEMPLATE_DECL)
9221 decl = DECL_TEMPLATE_RESULT (decl);
9222
9223 /* Attempt to merge the declarations. This can fail, in
9224 the case of some invalid specialization declarations. */
9225 pushed_scope = push_scope (ctype);
9226 ok = duplicate_decls (decl, old_decl, friendp);
9227 if (pushed_scope)
9228 pop_scope (pushed_scope);
9229 if (!ok)
9230 {
9231 error ("no %q#D member function declared in class %qT",
9232 decl, ctype);
9233 return NULL_TREE;
9234 }
9235 if (ok == error_mark_node)
9236 return NULL_TREE;
9237 return old_decl;
9238 }
9239 }
9240
9241 if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9242 return NULL_TREE;
9243
9244 if (ctype == NULL_TREE || check)
9245 return decl;
9246
9247 if (virtualp)
9248 DECL_VIRTUAL_P (decl) = 1;
9249
9250 return decl;
9251 }
9252
9253 /* decl is a FUNCTION_DECL.
9254 specifiers are the parsed virt-specifiers.
9255
9256 Set flags to reflect the virt-specifiers.
9257
9258 Returns decl. */
9259
9260 static tree
9261 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
9262 {
9263 if (decl == NULL_TREE)
9264 return decl;
9265 if (specifiers & VIRT_SPEC_OVERRIDE)
9266 DECL_OVERRIDE_P (decl) = 1;
9267 if (specifiers & VIRT_SPEC_FINAL)
9268 DECL_FINAL_P (decl) = 1;
9269 return decl;
9270 }
9271
9272 /* DECL is a VAR_DECL for a static data member. Set flags to reflect
9273 the linkage that DECL will receive in the object file. */
9274
9275 static void
9276 set_linkage_for_static_data_member (tree decl)
9277 {
9278 /* A static data member always has static storage duration and
9279 external linkage. Note that static data members are forbidden in
9280 local classes -- the only situation in which a class has
9281 non-external linkage. */
9282 TREE_PUBLIC (decl) = 1;
9283 TREE_STATIC (decl) = 1;
9284 /* For non-template classes, static data members are always put
9285 out in exactly those files where they are defined, just as
9286 with ordinary namespace-scope variables. */
9287 if (!processing_template_decl)
9288 DECL_INTERFACE_KNOWN (decl) = 1;
9289 }
9290
9291 /* Create a VAR_DECL named NAME with the indicated TYPE.
9292
9293 If SCOPE is non-NULL, it is the class type or namespace containing
9294 the variable. If SCOPE is NULL, the variable should is created in
9295 the innermost enclosing scope. */
9296
9297 static tree
9298 grokvardecl (tree type,
9299 tree name,
9300 tree orig_declarator,
9301 const cp_decl_specifier_seq *declspecs,
9302 int initialized,
9303 int type_quals,
9304 int inlinep,
9305 bool conceptp,
9306 int template_count,
9307 tree scope)
9308 {
9309 tree decl;
9310 tree explicit_scope;
9311
9312 gcc_assert (!name || identifier_p (name));
9313
9314 bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9315 bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9316
9317 /* Compute the scope in which to place the variable, but remember
9318 whether or not that scope was explicitly specified by the user. */
9319 explicit_scope = scope;
9320 if (!scope)
9321 {
9322 /* An explicit "extern" specifier indicates a namespace-scope
9323 variable. */
9324 if (declspecs->storage_class == sc_extern)
9325 scope = current_decl_namespace ();
9326 else if (!at_function_scope_p ())
9327 scope = current_scope ();
9328 }
9329
9330 if (scope
9331 && (/* If the variable is a namespace-scope variable declared in a
9332 template, we need DECL_LANG_SPECIFIC. */
9333 (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9334 /* Similarly for namespace-scope variables with language linkage
9335 other than C++. */
9336 || (TREE_CODE (scope) == NAMESPACE_DECL
9337 && current_lang_name != lang_name_cplusplus)
9338 /* Similarly for static data members. */
9339 || TYPE_P (scope)
9340 /* Similarly for explicit specializations. */
9341 || (orig_declarator
9342 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9343 decl = build_lang_decl (VAR_DECL, name, type);
9344 else
9345 decl = build_decl (input_location, VAR_DECL, name, type);
9346
9347 if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9348 set_decl_namespace (decl, explicit_scope, 0);
9349 else
9350 DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9351
9352 if (declspecs->storage_class == sc_extern)
9353 {
9354 DECL_THIS_EXTERN (decl) = 1;
9355 DECL_EXTERNAL (decl) = !initialized;
9356 }
9357
9358 if (DECL_CLASS_SCOPE_P (decl))
9359 {
9360 set_linkage_for_static_data_member (decl);
9361 /* This function is only called with out-of-class definitions. */
9362 DECL_EXTERNAL (decl) = 0;
9363 check_class_member_definition_namespace (decl);
9364 }
9365 /* At top level, either `static' or no s.c. makes a definition
9366 (perhaps tentative), and absence of `static' makes it public. */
9367 else if (toplevel_bindings_p ())
9368 {
9369 TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9370 && (DECL_THIS_EXTERN (decl)
9371 || ! constp
9372 || volatilep
9373 || inlinep));
9374 TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9375 }
9376 /* Not at top level, only `static' makes a static definition. */
9377 else
9378 {
9379 TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9380 TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9381 }
9382
9383 if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9384 {
9385 if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9386 {
9387 CP_DECL_THREAD_LOCAL_P (decl) = true;
9388 if (!processing_template_decl)
9389 set_decl_tls_model (decl, decl_default_tls_model (decl));
9390 }
9391 if (declspecs->gnu_thread_keyword_p)
9392 SET_DECL_GNU_TLS_P (decl);
9393 }
9394
9395 /* If the type of the decl has no linkage, make sure that we'll
9396 notice that in mark_used. */
9397 if (cxx_dialect > cxx98
9398 && decl_linkage (decl) != lk_none
9399 && DECL_LANG_SPECIFIC (decl) == NULL
9400 && !DECL_EXTERN_C_P (decl)
9401 && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9402 retrofit_lang_decl (decl);
9403
9404 if (TREE_PUBLIC (decl))
9405 {
9406 /* [basic.link]: A name with no linkage (notably, the name of a class
9407 or enumeration declared in a local scope) shall not be used to
9408 declare an entity with linkage.
9409
9410 DR 757 relaxes this restriction for C++0x. */
9411 if (cxx_dialect < cxx11)
9412 no_linkage_error (decl);
9413 }
9414 else
9415 DECL_INTERFACE_KNOWN (decl) = 1;
9416
9417 if (DECL_NAME (decl)
9418 && MAIN_NAME_P (DECL_NAME (decl))
9419 && scope == global_namespace)
9420 error ("cannot declare %<::main%> to be a global variable");
9421
9422 /* Check that the variable can be safely declared as a concept.
9423 Note that this also forbids explicit specializations. */
9424 if (conceptp)
9425 {
9426 if (!processing_template_decl)
9427 {
9428 error_at (declspecs->locations[ds_concept],
9429 "a non-template variable cannot be %<concept%>");
9430 return NULL_TREE;
9431 }
9432 else
9433 DECL_DECLARED_CONCEPT_P (decl) = true;
9434 if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9435 error_at (declspecs->locations[ds_type_spec],
9436 "concept must have type %<bool%>");
9437 }
9438 else if (flag_concepts
9439 && processing_template_decl > template_class_depth (scope))
9440 {
9441 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9442 tree ci = build_constraints (reqs, NULL_TREE);
9443 set_constraints (decl, ci);
9444 }
9445
9446 // Handle explicit specializations and instantiations of variable templates.
9447 if (orig_declarator)
9448 decl = check_explicit_specialization (orig_declarator, decl,
9449 template_count, conceptp * 8);
9450
9451 return decl != error_mark_node ? decl : NULL_TREE;
9452 }
9453
9454 /* Create and return a canonical pointer to member function type, for
9455 TYPE, which is a POINTER_TYPE to a METHOD_TYPE. */
9456
9457 tree
9458 build_ptrmemfunc_type (tree type)
9459 {
9460 tree field, fields;
9461 tree t;
9462
9463 if (type == error_mark_node)
9464 return type;
9465
9466 /* Make sure that we always have the unqualified pointer-to-member
9467 type first. */
9468 if (cp_cv_quals quals = cp_type_quals (type))
9469 {
9470 tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9471 return cp_build_qualified_type (unqual, quals);
9472 }
9473
9474 /* If a canonical type already exists for this type, use it. We use
9475 this method instead of type_hash_canon, because it only does a
9476 simple equality check on the list of field members. */
9477
9478 t = TYPE_PTRMEMFUNC_TYPE (type);
9479 if (t)
9480 return t;
9481
9482 t = make_node (RECORD_TYPE);
9483
9484 /* Let the front end know this is a pointer to member function. */
9485 TYPE_PTRMEMFUNC_FLAG (t) = 1;
9486
9487 field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9488 fields = field;
9489
9490 field = build_decl (input_location, FIELD_DECL, delta_identifier,
9491 delta_type_node);
9492 DECL_CHAIN (field) = fields;
9493 fields = field;
9494
9495 finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9496
9497 /* Zap out the name so that the back end will give us the debugging
9498 information for this anonymous RECORD_TYPE. */
9499 TYPE_NAME (t) = NULL_TREE;
9500
9501 /* Cache this pointer-to-member type so that we can find it again
9502 later. */
9503 TYPE_PTRMEMFUNC_TYPE (type) = t;
9504
9505 if (TYPE_STRUCTURAL_EQUALITY_P (type))
9506 SET_TYPE_STRUCTURAL_EQUALITY (t);
9507 else if (TYPE_CANONICAL (type) != type)
9508 TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9509
9510 return t;
9511 }
9512
9513 /* Create and return a pointer to data member type. */
9514
9515 tree
9516 build_ptrmem_type (tree class_type, tree member_type)
9517 {
9518 if (TREE_CODE (member_type) == METHOD_TYPE)
9519 {
9520 cp_cv_quals quals = type_memfn_quals (member_type);
9521 cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9522 member_type = build_memfn_type (member_type, class_type, quals, rqual);
9523 return build_ptrmemfunc_type (build_pointer_type (member_type));
9524 }
9525 else
9526 {
9527 gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9528 return build_offset_type (class_type, member_type);
9529 }
9530 }
9531
9532 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9533 Check to see that the definition is valid. Issue appropriate error
9534 messages. */
9535
9536 static void
9537 check_static_variable_definition (tree decl, tree type)
9538 {
9539 /* Avoid redundant diagnostics on out-of-class definitions. */
9540 if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9541 ;
9542 /* Can't check yet if we don't know the type. */
9543 else if (dependent_type_p (type))
9544 ;
9545 /* If DECL is declared constexpr, we'll do the appropriate checks
9546 in check_initializer. Similarly for inline static data members. */
9547 else if (DECL_P (decl)
9548 && (DECL_DECLARED_CONSTEXPR_P (decl)
9549 || undeduced_auto_decl (decl)
9550 || DECL_VAR_DECLARED_INLINE_P (decl)))
9551 ;
9552 else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9553 {
9554 if (!COMPLETE_TYPE_P (type))
9555 error_at (DECL_SOURCE_LOCATION (decl),
9556 "in-class initialization of static data member %q#D of "
9557 "incomplete type", decl);
9558 else if (literal_type_p (type))
9559 permerror (DECL_SOURCE_LOCATION (decl),
9560 "%<constexpr%> needed for in-class initialization of "
9561 "static data member %q#D of non-integral type", decl);
9562 else
9563 error_at (DECL_SOURCE_LOCATION (decl),
9564 "in-class initialization of static data member %q#D of "
9565 "non-literal type", decl);
9566 }
9567 /* Motion 10 at San Diego: If a static const integral data member is
9568 initialized with an integral constant expression, the initializer
9569 may appear either in the declaration (within the class), or in
9570 the definition, but not both. If it appears in the class, the
9571 member is a member constant. The file-scope definition is always
9572 required. */
9573 else if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9574 error_at (DECL_SOURCE_LOCATION (decl),
9575 "invalid in-class initialization of static data member "
9576 "of non-integral type %qT",
9577 type);
9578 else if (!CP_TYPE_CONST_P (type))
9579 error_at (DECL_SOURCE_LOCATION (decl),
9580 "ISO C++ forbids in-class initialization of non-const "
9581 "static member %qD",
9582 decl);
9583 else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9584 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9585 "ISO C++ forbids initialization of member constant "
9586 "%qD of non-integral type %qT", decl, type);
9587 }
9588
9589 /* *expr_p is part of the TYPE_SIZE of a variably-sized array. If any
9590 SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9591 expressions out into temporary variables so that walk_tree doesn't
9592 step into them (c++/15764). */
9593
9594 static tree
9595 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9596 {
9597 hash_set<tree> *pset = (hash_set<tree> *)data;
9598 tree expr = *expr_p;
9599 if (TREE_CODE (expr) == SAVE_EXPR)
9600 {
9601 tree op = TREE_OPERAND (expr, 0);
9602 cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9603 if (TREE_SIDE_EFFECTS (op))
9604 TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9605 *walk_subtrees = 0;
9606 }
9607 else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9608 *walk_subtrees = 0;
9609 return NULL;
9610 }
9611
9612 /* Entry point for the above. */
9613
9614 static void
9615 stabilize_vla_size (tree size)
9616 {
9617 hash_set<tree> pset;
9618 /* Break out any function calls into temporary variables. */
9619 cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9620 }
9621
9622 /* Reduce a SIZEOF_EXPR to its value. */
9623
9624 tree
9625 fold_sizeof_expr (tree t)
9626 {
9627 tree r;
9628 if (SIZEOF_EXPR_TYPE_P (t))
9629 r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9630 SIZEOF_EXPR, false, false);
9631 else if (TYPE_P (TREE_OPERAND (t, 0)))
9632 r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9633 false, false);
9634 else
9635 r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9636 false);
9637 if (r == error_mark_node)
9638 r = size_one_node;
9639 return r;
9640 }
9641
9642 /* Given the SIZE (i.e., number of elements) in an array, compute
9643 an appropriate index type for the array. If non-NULL, NAME is
9644 the name of the entity being declared. */
9645
9646 tree
9647 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9648 {
9649 tree itype;
9650 tree osize = size;
9651
9652 if (error_operand_p (size))
9653 return error_mark_node;
9654
9655 if (!type_dependent_expression_p (size))
9656 {
9657 osize = size = mark_rvalue_use (size);
9658
9659 if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9660 && TREE_SIDE_EFFECTS (size))
9661 /* In C++98, we mark a non-constant array bound with a magic
9662 NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case. */;
9663 else
9664 {
9665 size = instantiate_non_dependent_expr_sfinae (size, complain);
9666 size = build_converted_constant_expr (size_type_node, size, complain);
9667 size = maybe_constant_value (size);
9668
9669 if (!TREE_CONSTANT (size))
9670 size = osize;
9671 }
9672
9673 if (error_operand_p (size))
9674 return error_mark_node;
9675
9676 /* The array bound must be an integer type. */
9677 tree type = TREE_TYPE (size);
9678 if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9679 {
9680 if (!(complain & tf_error))
9681 return error_mark_node;
9682 if (name)
9683 error ("size of array %qD has non-integral type %qT", name, type);
9684 else
9685 error ("size of array has non-integral type %qT", type);
9686 size = integer_one_node;
9687 }
9688 }
9689
9690 /* A type is dependent if it is...an array type constructed from any
9691 dependent type or whose size is specified by a constant expression
9692 that is value-dependent. */
9693 /* We can only call value_dependent_expression_p on integral constant
9694 expressions; treat non-constant expressions as dependent, too. */
9695 if (processing_template_decl
9696 && (type_dependent_expression_p (size)
9697 || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9698 {
9699 /* We cannot do any checking for a SIZE that isn't known to be
9700 constant. Just build the index type and mark that it requires
9701 structural equality checks. */
9702 itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9703 size, size_one_node));
9704 TYPE_DEPENDENT_P (itype) = 1;
9705 TYPE_DEPENDENT_P_VALID (itype) = 1;
9706 SET_TYPE_STRUCTURAL_EQUALITY (itype);
9707 return itype;
9708 }
9709
9710 if (TREE_CODE (size) != INTEGER_CST)
9711 {
9712 tree folded = cp_fully_fold (size);
9713 if (TREE_CODE (folded) == INTEGER_CST)
9714 pedwarn (input_location, OPT_Wpedantic,
9715 "size of array is not an integral constant-expression");
9716 /* Use the folded result for VLAs, too; it will have resolved
9717 SIZEOF_EXPR. */
9718 size = folded;
9719 }
9720
9721 /* Normally, the array-bound will be a constant. */
9722 if (TREE_CODE (size) == INTEGER_CST)
9723 {
9724 /* An array must have a positive number of elements. */
9725 if (!valid_constant_size_p (size))
9726 {
9727 if (!(complain & tf_error))
9728 return error_mark_node;
9729
9730 if (name)
9731 error ("size of array %qD is negative", name);
9732 else
9733 error ("size of array is negative");
9734 size = integer_one_node;
9735 }
9736 /* As an extension we allow zero-sized arrays. */
9737 else if (integer_zerop (size))
9738 {
9739 if (!(complain & tf_error))
9740 /* We must fail if performing argument deduction (as
9741 indicated by the state of complain), so that
9742 another substitution can be found. */
9743 return error_mark_node;
9744 else if (in_system_header_at (input_location))
9745 /* Allow them in system headers because glibc uses them. */;
9746 else if (name)
9747 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9748 else
9749 pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9750 }
9751 }
9752 else if (TREE_CONSTANT (size)
9753 /* We don't allow VLAs at non-function scopes, or during
9754 tentative template substitution. */
9755 || !at_function_scope_p ()
9756 || !(complain & tf_error))
9757 {
9758 if (!(complain & tf_error))
9759 return error_mark_node;
9760 /* `(int) &fn' is not a valid array bound. */
9761 if (name)
9762 error ("size of array %qD is not an integral constant-expression",
9763 name);
9764 else
9765 error ("size of array is not an integral constant-expression");
9766 size = integer_one_node;
9767 }
9768 else if (pedantic && warn_vla != 0)
9769 {
9770 if (name)
9771 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9772 else
9773 pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9774 }
9775 else if (warn_vla > 0)
9776 {
9777 if (name)
9778 warning (OPT_Wvla,
9779 "variable length array %qD is used", name);
9780 else
9781 warning (OPT_Wvla,
9782 "variable length array is used");
9783 }
9784
9785 if (processing_template_decl && !TREE_CONSTANT (size))
9786 /* A variable sized array. */
9787 itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9788 else
9789 {
9790 /* Compute the index of the largest element in the array. It is
9791 one less than the number of elements in the array. We save
9792 and restore PROCESSING_TEMPLATE_DECL so that computations in
9793 cp_build_binary_op will be appropriately folded. */
9794 {
9795 processing_template_decl_sentinel s;
9796 itype = cp_build_binary_op (input_location,
9797 MINUS_EXPR,
9798 cp_convert (ssizetype, size, complain),
9799 cp_convert (ssizetype, integer_one_node,
9800 complain),
9801 complain);
9802 itype = maybe_constant_value (itype);
9803 }
9804
9805 if (!TREE_CONSTANT (itype))
9806 {
9807 /* A variable sized array. */
9808 itype = variable_size (itype);
9809
9810 stabilize_vla_size (itype);
9811
9812 if (sanitize_flags_p (SANITIZE_VLA)
9813 && current_function_decl != NULL_TREE)
9814 {
9815 /* We have to add 1 -- in the ubsan routine we generate
9816 LE_EXPR rather than LT_EXPR. */
9817 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9818 build_one_cst (TREE_TYPE (itype)));
9819 t = ubsan_instrument_vla (input_location, t);
9820 finish_expr_stmt (t);
9821 }
9822 }
9823 /* Make sure that there was no overflow when creating to a signed
9824 index type. (For example, on a 32-bit machine, an array with
9825 size 2^32 - 1 is too big.) */
9826 else if (TREE_CODE (itype) == INTEGER_CST
9827 && TREE_OVERFLOW (itype))
9828 {
9829 if (!(complain & tf_error))
9830 return error_mark_node;
9831 error ("overflow in array dimension");
9832 TREE_OVERFLOW (itype) = 0;
9833 }
9834 }
9835
9836 /* Create and return the appropriate index type. */
9837 itype = build_index_type (itype);
9838
9839 /* If the index type were dependent, we would have returned early, so
9840 remember that it isn't. */
9841 TYPE_DEPENDENT_P (itype) = 0;
9842 TYPE_DEPENDENT_P_VALID (itype) = 1;
9843 return itype;
9844 }
9845
9846 /* Returns the scope (if any) in which the entity declared by
9847 DECLARATOR will be located. If the entity was declared with an
9848 unqualified name, NULL_TREE is returned. */
9849
9850 tree
9851 get_scope_of_declarator (const cp_declarator *declarator)
9852 {
9853 while (declarator && declarator->kind != cdk_id)
9854 declarator = declarator->declarator;
9855
9856 /* If the declarator-id is a SCOPE_REF, the scope in which the
9857 declaration occurs is the first operand. */
9858 if (declarator
9859 && declarator->u.id.qualifying_scope)
9860 return declarator->u.id.qualifying_scope;
9861
9862 /* Otherwise, the declarator is not a qualified name; the entity will
9863 be declared in the current scope. */
9864 return NULL_TREE;
9865 }
9866
9867 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9868 indicated TYPE. If non-NULL, NAME is the NAME of the declaration
9869 with this type. */
9870
9871 static tree
9872 create_array_type_for_decl (tree name, tree type, tree size)
9873 {
9874 tree itype = NULL_TREE;
9875
9876 /* If things have already gone awry, bail now. */
9877 if (type == error_mark_node || size == error_mark_node)
9878 return error_mark_node;
9879
9880 /* 8.3.4/1: If the type of the identifier of D contains the auto
9881 type-specifier, the program is ill-formed. */
9882 if (type_uses_auto (type))
9883 {
9884 if (name)
9885 error ("%qD declared as array of %qT", name, type);
9886 else
9887 error ("creating array of %qT", type);
9888 return error_mark_node;
9889 }
9890
9891 /* If there are some types which cannot be array elements,
9892 issue an error-message and return. */
9893 switch (TREE_CODE (type))
9894 {
9895 case VOID_TYPE:
9896 if (name)
9897 error ("declaration of %qD as array of void", name);
9898 else
9899 error ("creating array of void");
9900 return error_mark_node;
9901
9902 case FUNCTION_TYPE:
9903 if (name)
9904 error ("declaration of %qD as array of functions", name);
9905 else
9906 error ("creating array of functions");
9907 return error_mark_node;
9908
9909 case REFERENCE_TYPE:
9910 if (name)
9911 error ("declaration of %qD as array of references", name);
9912 else
9913 error ("creating array of references");
9914 return error_mark_node;
9915
9916 case METHOD_TYPE:
9917 if (name)
9918 error ("declaration of %qD as array of function members", name);
9919 else
9920 error ("creating array of function members");
9921 return error_mark_node;
9922
9923 default:
9924 break;
9925 }
9926
9927 /* [dcl.array]
9928
9929 The constant expressions that specify the bounds of the arrays
9930 can be omitted only for the first member of the sequence. */
9931 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9932 {
9933 if (name)
9934 error ("declaration of %qD as multidimensional array must "
9935 "have bounds for all dimensions except the first",
9936 name);
9937 else
9938 error ("multidimensional array must have bounds for all "
9939 "dimensions except the first");
9940
9941 return error_mark_node;
9942 }
9943
9944 /* Figure out the index type for the array. */
9945 if (size)
9946 itype = compute_array_index_type (name, size, tf_warning_or_error);
9947
9948 /* [dcl.array]
9949 T is called the array element type; this type shall not be [...] an
9950 abstract class type. */
9951 abstract_virtuals_error (name, type);
9952
9953 return build_cplus_array_type (type, itype);
9954 }
9955
9956 /* Returns the smallest location that is not UNKNOWN_LOCATION. */
9957
9958 static location_t
9959 min_location (location_t loca, location_t locb)
9960 {
9961 if (loca == UNKNOWN_LOCATION
9962 || (locb != UNKNOWN_LOCATION
9963 && linemap_location_before_p (line_table, locb, loca)))
9964 return locb;
9965 return loca;
9966 }
9967
9968 /* Returns the smallest location != UNKNOWN_LOCATION among the
9969 three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9970 and LOCATIONS[ds_restrict]. */
9971
9972 static location_t
9973 smallest_type_quals_location (int type_quals, const location_t* locations)
9974 {
9975 location_t loc = UNKNOWN_LOCATION;
9976
9977 if (type_quals & TYPE_QUAL_CONST)
9978 loc = locations[ds_const];
9979
9980 if (type_quals & TYPE_QUAL_VOLATILE)
9981 loc = min_location (loc, locations[ds_volatile]);
9982
9983 if (type_quals & TYPE_QUAL_RESTRICT)
9984 loc = min_location (loc, locations[ds_restrict]);
9985
9986 return loc;
9987 }
9988
9989 /* Check that it's OK to declare a function with the indicated TYPE
9990 and TYPE_QUALS. SFK indicates the kind of special function (if any)
9991 that this function is. OPTYPE is the type given in a conversion
9992 operator declaration, or the class type for a constructor/destructor.
9993 Returns the actual return type of the function; that may be different
9994 than TYPE if an error occurs, or for certain special functions. */
9995
9996 static tree
9997 check_special_function_return_type (special_function_kind sfk,
9998 tree type,
9999 tree optype,
10000 int type_quals,
10001 const location_t* locations)
10002 {
10003 switch (sfk)
10004 {
10005 case sfk_constructor:
10006 if (type)
10007 error ("return type specification for constructor invalid");
10008 else if (type_quals != TYPE_UNQUALIFIED)
10009 error_at (smallest_type_quals_location (type_quals, locations),
10010 "qualifiers are not allowed on constructor declaration");
10011
10012 if (targetm.cxx.cdtor_returns_this ())
10013 type = build_pointer_type (optype);
10014 else
10015 type = void_type_node;
10016 break;
10017
10018 case sfk_destructor:
10019 if (type)
10020 error ("return type specification for destructor invalid");
10021 else if (type_quals != TYPE_UNQUALIFIED)
10022 error_at (smallest_type_quals_location (type_quals, locations),
10023 "qualifiers are not allowed on destructor declaration");
10024
10025 /* We can't use the proper return type here because we run into
10026 problems with ambiguous bases and covariant returns. */
10027 if (targetm.cxx.cdtor_returns_this ())
10028 type = build_pointer_type (void_type_node);
10029 else
10030 type = void_type_node;
10031 break;
10032
10033 case sfk_conversion:
10034 if (type)
10035 error ("return type specified for %<operator %T%>", optype);
10036 else if (type_quals != TYPE_UNQUALIFIED)
10037 error_at (smallest_type_quals_location (type_quals, locations),
10038 "qualifiers are not allowed on declaration of "
10039 "%<operator %T%>", optype);
10040
10041 type = optype;
10042 break;
10043
10044 case sfk_deduction_guide:
10045 if (type)
10046 error ("return type specified for deduction guide");
10047 else if (type_quals != TYPE_UNQUALIFIED)
10048 error_at (smallest_type_quals_location (type_quals, locations),
10049 "qualifiers are not allowed on declaration of "
10050 "deduction guide");
10051 if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
10052 {
10053 error ("template template parameter %qT in declaration of "
10054 "deduction guide", optype);
10055 type = error_mark_node;
10056 }
10057 else
10058 type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
10059 for (int i = 0; i < ds_last; ++i)
10060 if (i != ds_explicit && locations[i])
10061 error_at (locations[i],
10062 "decl-specifier in declaration of deduction guide");
10063 break;
10064
10065 default:
10066 gcc_unreachable ();
10067 }
10068
10069 return type;
10070 }
10071
10072 /* A variable or data member (whose unqualified name is IDENTIFIER)
10073 has been declared with the indicated TYPE. If the TYPE is not
10074 acceptable, issue an error message and return a type to use for
10075 error-recovery purposes. */
10076
10077 tree
10078 check_var_type (tree identifier, tree type)
10079 {
10080 if (VOID_TYPE_P (type))
10081 {
10082 if (!identifier)
10083 error ("unnamed variable or field declared void");
10084 else if (identifier_p (identifier))
10085 {
10086 gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
10087 error ("variable or field %qE declared void", identifier);
10088 }
10089 else
10090 error ("variable or field declared void");
10091 type = error_mark_node;
10092 }
10093
10094 return type;
10095 }
10096
10097 /* Handle declaring DECL as an inline variable. */
10098
10099 static void
10100 mark_inline_variable (tree decl, location_t loc)
10101 {
10102 bool inlinep = true;
10103 if (! toplevel_bindings_p ())
10104 {
10105 error_at (loc, "%<inline%> specifier invalid for variable "
10106 "%qD declared at block scope", decl);
10107 inlinep = false;
10108 }
10109 else if (cxx_dialect < cxx17)
10110 pedwarn (loc, 0, "inline variables are only available "
10111 "with -std=c++17 or -std=gnu++17");
10112 if (inlinep)
10113 {
10114 retrofit_lang_decl (decl);
10115 SET_DECL_VAR_DECLARED_INLINE_P (decl);
10116 }
10117 }
10118
10119
10120 /* Assign a typedef-given name to a class or enumeration type declared
10121 as anonymous at first. This was split out of grokdeclarator
10122 because it is also used in libcc1. */
10123
10124 void
10125 name_unnamed_type (tree type, tree decl)
10126 {
10127 gcc_assert (TYPE_UNNAMED_P (type));
10128
10129 /* Replace the anonymous name with the real name everywhere. */
10130 for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10131 {
10132 if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
10133 /* We do not rename the debug info representing the
10134 unnamed tagged type because the standard says in
10135 [dcl.typedef] that the naming applies only for
10136 linkage purposes. */
10137 /*debug_hooks->set_name (t, decl);*/
10138 TYPE_NAME (t) = decl;
10139 }
10140
10141 if (TYPE_LANG_SPECIFIC (type))
10142 TYPE_WAS_UNNAMED (type) = 1;
10143
10144 /* If this is a typedef within a template class, the nested
10145 type is a (non-primary) template. The name for the
10146 template needs updating as well. */
10147 if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10148 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10149 = TYPE_IDENTIFIER (type);
10150
10151 /* Adjust linkage now that we aren't unnamed anymore. */
10152 reset_type_linkage (type);
10153
10154 /* FIXME remangle member functions; member functions of a
10155 type with external linkage have external linkage. */
10156
10157 /* Check that our job is done, and that it would fail if we
10158 attempted to do it again. */
10159 gcc_assert (!TYPE_UNNAMED_P (type));
10160 }
10161
10162 /* Given declspecs and a declarator (abstract or otherwise), determine
10163 the name and type of the object declared and construct a DECL node
10164 for it.
10165
10166 DECLSPECS points to the representation of declaration-specifier
10167 sequence that precedes declarator.
10168
10169 DECL_CONTEXT says which syntactic context this declaration is in:
10170 NORMAL for most contexts. Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
10171 FUNCDEF for a function definition. Like NORMAL but a few different
10172 error messages in each case. Return value may be zero meaning
10173 this definition is too screwy to try to parse.
10174 MEMFUNCDEF for a function definition. Like FUNCDEF but prepares to
10175 handle member functions (which have FIELD context).
10176 Return value may be zero meaning this definition is too screwy to
10177 try to parse.
10178 PARM for a parameter declaration (either within a function prototype
10179 or before a function body). Make a PARM_DECL, or return void_type_node.
10180 TPARM for a template parameter declaration.
10181 CATCHPARM for a parameter declaration before a catch clause.
10182 TYPENAME if for a typename (in a cast or sizeof).
10183 Don't make a DECL node; just return the ..._TYPE node.
10184 FIELD for a struct or union field; make a FIELD_DECL.
10185 BITFIELD for a field with specified width.
10186
10187 INITIALIZED is as for start_decl.
10188
10189 ATTRLIST is a pointer to the list of attributes, which may be NULL
10190 if there are none; *ATTRLIST may be modified if attributes from inside
10191 the declarator should be applied to the declaration.
10192
10193 When this function is called, scoping variables (such as
10194 CURRENT_CLASS_TYPE) should reflect the scope in which the
10195 declaration occurs, not the scope in which the new declaration will
10196 be placed. For example, on:
10197
10198 void S::f() { ... }
10199
10200 when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
10201 should not be `S'.
10202
10203 Returns a DECL (if a declarator is present), a TYPE (if there is no
10204 declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
10205 error occurs. */
10206
10207 tree
10208 grokdeclarator (const cp_declarator *declarator,
10209 cp_decl_specifier_seq *declspecs,
10210 enum decl_context decl_context,
10211 int initialized,
10212 tree* attrlist)
10213 {
10214 tree type = NULL_TREE;
10215 int longlong = 0;
10216 int explicit_intN = 0;
10217 int virtualp, explicitp, friendp, inlinep, staticp;
10218 int explicit_int = 0;
10219 int explicit_char = 0;
10220 int defaulted_int = 0;
10221
10222 tree typedef_decl = NULL_TREE;
10223 const char *name = NULL;
10224 tree typedef_type = NULL_TREE;
10225 /* True if this declarator is a function definition. */
10226 bool funcdef_flag = false;
10227 cp_declarator_kind innermost_code = cdk_error;
10228 int bitfield = 0;
10229 #if 0
10230 /* See the code below that used this. */
10231 tree decl_attr = NULL_TREE;
10232 #endif
10233
10234 /* Keep track of what sort of function is being processed
10235 so that we can warn about default return values, or explicit
10236 return values which do not match prescribed defaults. */
10237 special_function_kind sfk = sfk_none;
10238
10239 tree dname = NULL_TREE;
10240 tree ctor_return_type = NULL_TREE;
10241 enum overload_flags flags = NO_SPECIAL;
10242 /* cv-qualifiers that apply to the declarator, for a declaration of
10243 a member function. */
10244 cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
10245 /* virt-specifiers that apply to the declarator, for a declaration of
10246 a member function. */
10247 cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
10248 /* ref-qualifier that applies to the declarator, for a declaration of
10249 a member function. */
10250 cp_ref_qualifier rqual = REF_QUAL_NONE;
10251 /* cv-qualifiers that apply to the type specified by the DECLSPECS. */
10252 int type_quals = TYPE_UNQUALIFIED;
10253 tree raises = NULL_TREE;
10254 int template_count = 0;
10255 tree returned_attrs = NULL_TREE;
10256 tree parms = NULL_TREE;
10257 const cp_declarator *id_declarator;
10258 /* The unqualified name of the declarator; either an
10259 IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR. */
10260 tree unqualified_id;
10261 /* The class type, if any, in which this entity is located,
10262 or NULL_TREE if none. Note that this value may be different from
10263 the current class type; for example if an attempt is made to declare
10264 "A::f" inside "B", this value will be "A". */
10265 tree ctype = current_class_type;
10266 /* The NAMESPACE_DECL for the namespace in which this entity is
10267 located. If an unqualified name is used to declare the entity,
10268 this value will be NULL_TREE, even if the entity is located at
10269 namespace scope. */
10270 tree in_namespace = NULL_TREE;
10271 cp_storage_class storage_class;
10272 bool unsigned_p, signed_p, short_p, long_p, thread_p;
10273 bool type_was_error_mark_node = false;
10274 bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10275 bool template_type_arg = false;
10276 bool template_parm_flag = false;
10277 bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10278 bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10279 bool late_return_type_p = false;
10280 bool array_parameter_p = false;
10281 source_location saved_loc = input_location;
10282 tree reqs = NULL_TREE;
10283
10284 signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10285 unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10286 short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10287 long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10288 longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10289 explicit_intN = declspecs->explicit_intN_p;
10290 thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10291
10292 // Was concept_p specified? Note that ds_concept
10293 // implies ds_constexpr!
10294 bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10295 if (concept_p)
10296 constexpr_p = true;
10297
10298 if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10299 type_quals |= TYPE_QUAL_CONST;
10300 if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10301 type_quals |= TYPE_QUAL_VOLATILE;
10302 if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10303 type_quals |= TYPE_QUAL_RESTRICT;
10304
10305 if (decl_context == FUNCDEF)
10306 funcdef_flag = true, decl_context = NORMAL;
10307 else if (decl_context == MEMFUNCDEF)
10308 funcdef_flag = true, decl_context = FIELD;
10309 else if (decl_context == BITFIELD)
10310 bitfield = 1, decl_context = FIELD;
10311 else if (decl_context == TEMPLATE_TYPE_ARG)
10312 template_type_arg = true, decl_context = TYPENAME;
10313 else if (decl_context == TPARM)
10314 template_parm_flag = true, decl_context = PARM;
10315
10316 if (initialized > 1)
10317 funcdef_flag = true;
10318
10319 location_t typespec_loc = smallest_type_quals_location (type_quals,
10320 declspecs->locations);
10321 if (typespec_loc == UNKNOWN_LOCATION)
10322 typespec_loc = declspecs->locations[ds_type_spec];
10323 if (typespec_loc == UNKNOWN_LOCATION)
10324 typespec_loc = input_location;
10325
10326 /* Look inside a declarator for the name being declared
10327 and get it as a string, for an error message. */
10328 for (id_declarator = declarator;
10329 id_declarator;
10330 id_declarator = id_declarator->declarator)
10331 {
10332 if (id_declarator->kind != cdk_id)
10333 innermost_code = id_declarator->kind;
10334
10335 switch (id_declarator->kind)
10336 {
10337 case cdk_function:
10338 if (id_declarator->declarator
10339 && id_declarator->declarator->kind == cdk_id)
10340 {
10341 sfk = id_declarator->declarator->u.id.sfk;
10342 if (sfk == sfk_destructor)
10343 flags = DTOR_FLAG;
10344 }
10345 break;
10346
10347 case cdk_id:
10348 {
10349 tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10350 tree decl = id_declarator->u.id.unqualified_name;
10351 if (!decl)
10352 break;
10353 if (qualifying_scope)
10354 {
10355 if (check_for_bare_parameter_packs (qualifying_scope,
10356 id_declarator->id_loc))
10357 return error_mark_node;
10358 if (at_function_scope_p ())
10359 {
10360 /* [dcl.meaning]
10361
10362 A declarator-id shall not be qualified except
10363 for ...
10364
10365 None of the cases are permitted in block
10366 scope. */
10367 if (qualifying_scope == global_namespace)
10368 error ("invalid use of qualified-name %<::%D%>",
10369 decl);
10370 else if (TYPE_P (qualifying_scope))
10371 error ("invalid use of qualified-name %<%T::%D%>",
10372 qualifying_scope, decl);
10373 else
10374 error ("invalid use of qualified-name %<%D::%D%>",
10375 qualifying_scope, decl);
10376 return error_mark_node;
10377 }
10378 else if (TYPE_P (qualifying_scope))
10379 {
10380 ctype = qualifying_scope;
10381 if (!MAYBE_CLASS_TYPE_P (ctype))
10382 {
10383 error ("%q#T is not a class or a namespace", ctype);
10384 ctype = NULL_TREE;
10385 }
10386 else if (innermost_code != cdk_function
10387 && current_class_type
10388 && !uniquely_derived_from_p (ctype,
10389 current_class_type))
10390 {
10391 error ("invalid use of qualified-name %<%T::%D%>",
10392 qualifying_scope, decl);
10393 return error_mark_node;
10394 }
10395 }
10396 else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10397 in_namespace = qualifying_scope;
10398 }
10399 switch (TREE_CODE (decl))
10400 {
10401 case BIT_NOT_EXPR:
10402 {
10403 if (innermost_code != cdk_function)
10404 {
10405 error ("declaration of %qD as non-function", decl);
10406 return error_mark_node;
10407 }
10408 else if (!qualifying_scope
10409 && !(current_class_type && at_class_scope_p ()))
10410 {
10411 error ("declaration of %qD as non-member", decl);
10412 return error_mark_node;
10413 }
10414
10415 tree type = TREE_OPERAND (decl, 0);
10416 if (TYPE_P (type))
10417 type = constructor_name (type);
10418 name = identifier_to_locale (IDENTIFIER_POINTER (type));
10419 dname = decl;
10420 }
10421 break;
10422
10423 case TEMPLATE_ID_EXPR:
10424 {
10425 tree fns = TREE_OPERAND (decl, 0);
10426
10427 dname = fns;
10428 if (!identifier_p (dname))
10429 dname = OVL_NAME (dname);
10430 }
10431 /* Fall through. */
10432
10433 case IDENTIFIER_NODE:
10434 if (identifier_p (decl))
10435 dname = decl;
10436
10437 if (IDENTIFIER_KEYWORD_P (dname))
10438 {
10439 error ("declarator-id missing; using reserved word %qD",
10440 dname);
10441 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10442 }
10443 else if (!IDENTIFIER_CONV_OP_P (dname))
10444 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10445 else
10446 {
10447 gcc_assert (flags == NO_SPECIAL);
10448 flags = TYPENAME_FLAG;
10449 sfk = sfk_conversion;
10450 tree glob = get_global_binding (dname);
10451 if (glob && TREE_CODE (glob) == TYPE_DECL)
10452 name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10453 else
10454 name = "<invalid operator>";
10455 }
10456 break;
10457
10458 default:
10459 gcc_unreachable ();
10460 }
10461 break;
10462 }
10463
10464 case cdk_array:
10465 case cdk_pointer:
10466 case cdk_reference:
10467 case cdk_ptrmem:
10468 break;
10469
10470 case cdk_decomp:
10471 name = "structured binding";
10472 break;
10473
10474 case cdk_error:
10475 return error_mark_node;
10476
10477 default:
10478 gcc_unreachable ();
10479 }
10480 if (id_declarator->kind == cdk_id)
10481 break;
10482 }
10483
10484 /* [dcl.fct.edf]
10485
10486 The declarator in a function-definition shall have the form
10487 D1 ( parameter-declaration-clause) ... */
10488 if (funcdef_flag && innermost_code != cdk_function)
10489 {
10490 error ("function definition does not declare parameters");
10491 return error_mark_node;
10492 }
10493
10494 if (flags == TYPENAME_FLAG
10495 && innermost_code != cdk_function
10496 && ! (ctype && !declspecs->any_specifiers_p))
10497 {
10498 error ("declaration of %qD as non-function", dname);
10499 return error_mark_node;
10500 }
10501
10502 if (dname && identifier_p (dname))
10503 {
10504 if (UDLIT_OPER_P (dname)
10505 && innermost_code != cdk_function)
10506 {
10507 error ("declaration of %qD as non-function", dname);
10508 return error_mark_node;
10509 }
10510
10511 if (IDENTIFIER_ANY_OP_P (dname))
10512 {
10513 if (typedef_p)
10514 {
10515 error ("declaration of %qD as %<typedef%>", dname);
10516 return error_mark_node;
10517 }
10518 else if (decl_context == PARM || decl_context == CATCHPARM)
10519 {
10520 error ("declaration of %qD as parameter", dname);
10521 return error_mark_node;
10522 }
10523 }
10524 }
10525
10526 /* Anything declared one level down from the top level
10527 must be one of the parameters of a function
10528 (because the body is at least two levels down). */
10529
10530 /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10531 by not allowing C++ class definitions to specify their parameters
10532 with xdecls (must be spec.d in the parmlist).
10533
10534 Since we now wait to push a class scope until we are sure that
10535 we are in a legitimate method context, we must set oldcname
10536 explicitly (since current_class_name is not yet alive).
10537
10538 We also want to avoid calling this a PARM if it is in a namespace. */
10539
10540 if (decl_context == NORMAL && !toplevel_bindings_p ())
10541 {
10542 cp_binding_level *b = current_binding_level;
10543 current_binding_level = b->level_chain;
10544 if (current_binding_level != 0 && toplevel_bindings_p ())
10545 decl_context = PARM;
10546 current_binding_level = b;
10547 }
10548
10549 if (name == NULL)
10550 name = decl_context == PARM ? "parameter" : "type name";
10551
10552 if (concept_p && typedef_p)
10553 {
10554 error_at (declspecs->locations[ds_concept],
10555 "%<concept%> cannot appear in a typedef declaration");
10556 return error_mark_node;
10557 }
10558
10559 if (constexpr_p && typedef_p)
10560 {
10561 error_at (declspecs->locations[ds_constexpr],
10562 "%<constexpr%> cannot appear in a typedef declaration");
10563 return error_mark_node;
10564 }
10565
10566 /* If there were multiple types specified in the decl-specifier-seq,
10567 issue an error message. */
10568 if (declspecs->multiple_types_p)
10569 {
10570 error ("two or more data types in declaration of %qs", name);
10571 return error_mark_node;
10572 }
10573
10574 if (declspecs->conflicting_specifiers_p)
10575 {
10576 error ("conflicting specifiers in declaration of %qs", name);
10577 return error_mark_node;
10578 }
10579
10580 /* Extract the basic type from the decl-specifier-seq. */
10581 type = declspecs->type;
10582 if (type == error_mark_node)
10583 {
10584 type = NULL_TREE;
10585 type_was_error_mark_node = true;
10586 }
10587 cp_warn_deprecated_use (type);
10588 if (type && TREE_CODE (type) == TYPE_DECL)
10589 {
10590 typedef_decl = type;
10591 type = TREE_TYPE (typedef_decl);
10592 if (DECL_ARTIFICIAL (typedef_decl))
10593 cp_warn_deprecated_use (type);
10594 }
10595 /* No type at all: default to `int', and set DEFAULTED_INT
10596 because it was not a user-defined typedef. */
10597 if (type == NULL_TREE)
10598 {
10599 if (signed_p || unsigned_p || long_p || short_p)
10600 {
10601 /* These imply 'int'. */
10602 type = integer_type_node;
10603 defaulted_int = 1;
10604 }
10605 /* If we just have "complex", it is equivalent to "complex double". */
10606 else if (!longlong && !explicit_intN
10607 && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10608 {
10609 type = double_type_node;
10610 pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10611 "ISO C++ does not support plain %<complex%> meaning "
10612 "%<double complex%>");
10613 }
10614 }
10615 /* Gather flags. */
10616 explicit_int = declspecs->explicit_int_p;
10617 explicit_char = declspecs->explicit_char_p;
10618
10619 #if 0
10620 /* See the code below that used this. */
10621 if (typedef_decl)
10622 decl_attr = DECL_ATTRIBUTES (typedef_decl);
10623 #endif
10624 typedef_type = type;
10625
10626 if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10627 ctor_return_type = TREE_TYPE (dname);
10628 else
10629 ctor_return_type = ctype;
10630
10631 if (sfk != sfk_none)
10632 {
10633 type = check_special_function_return_type (sfk, type,
10634 ctor_return_type,
10635 type_quals,
10636 declspecs->locations);
10637 type_quals = TYPE_UNQUALIFIED;
10638 }
10639 else if (type == NULL_TREE)
10640 {
10641 int is_main;
10642
10643 explicit_int = -1;
10644
10645 /* We handle `main' specially here, because 'main () { }' is so
10646 common. With no options, it is allowed. With -Wreturn-type,
10647 it is a warning. It is only an error with -pedantic-errors. */
10648 is_main = (funcdef_flag
10649 && dname && identifier_p (dname)
10650 && MAIN_NAME_P (dname)
10651 && ctype == NULL_TREE
10652 && in_namespace == NULL_TREE
10653 && current_namespace == global_namespace);
10654
10655 if (type_was_error_mark_node)
10656 /* We've already issued an error, don't complain more. */;
10657 else if (in_system_header_at (input_location) || flag_ms_extensions)
10658 /* Allow it, sigh. */;
10659 else if (! is_main)
10660 permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10661 else if (pedantic)
10662 pedwarn (input_location, OPT_Wpedantic,
10663 "ISO C++ forbids declaration of %qs with no type", name);
10664 else
10665 warning (OPT_Wreturn_type,
10666 "ISO C++ forbids declaration of %qs with no type", name);
10667
10668 if (type_was_error_mark_node && template_parm_flag)
10669 /* FIXME we should be able to propagate the error_mark_node as is
10670 for other contexts too. */
10671 type = error_mark_node;
10672 else
10673 type = integer_type_node;
10674 }
10675
10676 ctype = NULL_TREE;
10677
10678 if (explicit_intN)
10679 {
10680 if (! int_n_enabled_p[declspecs->int_n_idx])
10681 {
10682 error ("%<__int%d%> is not supported by this target",
10683 int_n_data[declspecs->int_n_idx].bitsize);
10684 explicit_intN = false;
10685 }
10686 else if (pedantic && ! in_system_header_at (input_location))
10687 pedwarn (input_location, OPT_Wpedantic,
10688 "ISO C++ does not support %<__int%d%> for %qs",
10689 int_n_data[declspecs->int_n_idx].bitsize, name);
10690 }
10691
10692 /* Now process the modifiers that were specified
10693 and check for invalid combinations. */
10694
10695 /* Long double is a special combination. */
10696 if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10697 {
10698 long_p = false;
10699 type = cp_build_qualified_type (long_double_type_node,
10700 cp_type_quals (type));
10701 }
10702
10703 /* Check all other uses of type modifiers. */
10704
10705 if (unsigned_p || signed_p || long_p || short_p)
10706 {
10707 location_t loc;
10708 const char *key;
10709 if (unsigned_p)
10710 {
10711 key = "unsigned";
10712 loc = declspecs->locations[ds_unsigned];
10713 }
10714 else if (signed_p)
10715 {
10716 key = "signed";
10717 loc = declspecs->locations[ds_signed];
10718 }
10719 else if (longlong)
10720 {
10721 key = "long long";
10722 loc = declspecs->locations[ds_long_long];
10723 }
10724 else if (long_p)
10725 {
10726 key = "long";
10727 loc = declspecs->locations[ds_long];
10728 }
10729 else /* if (short_p) */
10730 {
10731 key = "short";
10732 loc = declspecs->locations[ds_short];
10733 }
10734
10735 int ok = 0;
10736
10737 if (signed_p && unsigned_p)
10738 {
10739 gcc_rich_location richloc (declspecs->locations[ds_signed]);
10740 richloc.add_range (declspecs->locations[ds_unsigned], false);
10741 error_at (&richloc,
10742 "%<signed%> and %<unsigned%> specified together");
10743 }
10744 else if (long_p && short_p)
10745 {
10746 gcc_rich_location richloc (declspecs->locations[ds_long]);
10747 richloc.add_range (declspecs->locations[ds_short], false);
10748 error_at (&richloc, "%<long%> and %<short%> specified together");
10749 }
10750 else if (TREE_CODE (type) != INTEGER_TYPE
10751 || type == char16_type_node || type == char32_type_node
10752 || ((long_p || short_p)
10753 && (explicit_char || explicit_intN)))
10754 error_at (loc, "%qs specified with %qT", key, type);
10755 else if (!explicit_int && !defaulted_int
10756 && !explicit_char && !explicit_intN)
10757 {
10758 if (typedef_decl)
10759 {
10760 pedwarn (loc, OPT_Wpedantic, "%qs specified with %qT",
10761 key, type);
10762 ok = !flag_pedantic_errors;
10763 }
10764 else if (declspecs->decltype_p)
10765 error_at (loc, "%qs specified with %<decltype%>", key);
10766 else
10767 error_at (loc, "%qs specified with %<typeof%>", key);
10768 }
10769 else
10770 ok = 1;
10771
10772 /* Discard the type modifiers if they are invalid. */
10773 if (! ok)
10774 {
10775 unsigned_p = false;
10776 signed_p = false;
10777 long_p = false;
10778 short_p = false;
10779 longlong = 0;
10780 }
10781 }
10782
10783 /* Decide whether an integer type is signed or not.
10784 Optionally treat bitfields as signed by default. */
10785 if (unsigned_p
10786 /* [class.bit]
10787
10788 It is implementation-defined whether a plain (neither
10789 explicitly signed or unsigned) char, short, int, or long
10790 bit-field is signed or unsigned.
10791
10792 Naturally, we extend this to long long as well. Note that
10793 this does not include wchar_t. */
10794 || (bitfield && !flag_signed_bitfields
10795 && !signed_p
10796 /* A typedef for plain `int' without `signed' can be
10797 controlled just like plain `int', but a typedef for
10798 `signed int' cannot be so controlled. */
10799 && !(typedef_decl
10800 && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10801 && TREE_CODE (type) == INTEGER_TYPE
10802 && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10803 {
10804 if (explicit_intN)
10805 type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10806 else if (longlong)
10807 type = long_long_unsigned_type_node;
10808 else if (long_p)
10809 type = long_unsigned_type_node;
10810 else if (short_p)
10811 type = short_unsigned_type_node;
10812 else if (type == char_type_node)
10813 type = unsigned_char_type_node;
10814 else if (typedef_decl)
10815 type = unsigned_type_for (type);
10816 else
10817 type = unsigned_type_node;
10818 }
10819 else if (signed_p && type == char_type_node)
10820 type = signed_char_type_node;
10821 else if (explicit_intN)
10822 type = int_n_trees[declspecs->int_n_idx].signed_type;
10823 else if (longlong)
10824 type = long_long_integer_type_node;
10825 else if (long_p)
10826 type = long_integer_type_node;
10827 else if (short_p)
10828 type = short_integer_type_node;
10829
10830 if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10831 {
10832 if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10833 error ("complex invalid for %qs", name);
10834 /* If a modifier is specified, the resulting complex is the complex
10835 form of TYPE. E.g, "complex short" is "complex short int". */
10836 else if (type == integer_type_node)
10837 type = complex_integer_type_node;
10838 else if (type == float_type_node)
10839 type = complex_float_type_node;
10840 else if (type == double_type_node)
10841 type = complex_double_type_node;
10842 else if (type == long_double_type_node)
10843 type = complex_long_double_type_node;
10844 else
10845 type = build_complex_type (type);
10846 }
10847
10848 /* If we're using the injected-class-name to form a compound type or a
10849 declaration, replace it with the underlying class so we don't get
10850 redundant typedefs in the debug output. But if we are returning the
10851 type unchanged, leave it alone so that it's available to
10852 maybe_get_template_decl_from_type_decl. */
10853 if (CLASS_TYPE_P (type)
10854 && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10855 && type == TREE_TYPE (TYPE_NAME (type))
10856 && (declarator || type_quals))
10857 type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10858
10859 type_quals |= cp_type_quals (type);
10860 type = cp_build_qualified_type_real
10861 (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10862 || declspecs->decltype_p)
10863 ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10864 /* We might have ignored or rejected some of the qualifiers. */
10865 type_quals = cp_type_quals (type);
10866
10867 if (cxx_dialect >= cxx17 && type && is_auto (type)
10868 && innermost_code != cdk_function
10869 && id_declarator && declarator != id_declarator)
10870 if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10871 {
10872 error_at (typespec_loc, "template placeholder type %qT must be followed "
10873 "by a simple declarator-id", type);
10874 inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10875 }
10876
10877 staticp = 0;
10878 inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10879 virtualp = decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10880 explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10881
10882 storage_class = declspecs->storage_class;
10883 if (storage_class == sc_static)
10884 staticp = 1 + (decl_context == FIELD);
10885
10886 if (virtualp)
10887 {
10888 if (staticp == 2)
10889 {
10890 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
10891 richloc.add_range (declspecs->locations[ds_storage_class], false);
10892 error_at (&richloc, "member %qD cannot be declared both %<virtual%> "
10893 "and %<static%>", dname);
10894 storage_class = sc_none;
10895 staticp = 0;
10896 }
10897 if (constexpr_p)
10898 {
10899 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
10900 richloc.add_range (declspecs->locations[ds_constexpr], false);
10901 error_at (&richloc, "member %qD cannot be declared both %<virtual%> "
10902 "and %<constexpr%>", dname);
10903 }
10904 }
10905 friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10906
10907 /* Issue errors about use of storage classes for parameters. */
10908 if (decl_context == PARM)
10909 {
10910 if (typedef_p)
10911 {
10912 error_at (declspecs->locations[ds_typedef],
10913 "typedef declaration invalid in parameter declaration");
10914 return error_mark_node;
10915 }
10916 else if (template_parm_flag && storage_class != sc_none)
10917 {
10918 error_at (min_location (declspecs->locations[ds_thread],
10919 declspecs->locations[ds_storage_class]),
10920 "storage class specified for template parameter %qs",
10921 name);
10922 return error_mark_node;
10923 }
10924 else if (storage_class == sc_static
10925 || storage_class == sc_extern
10926 || thread_p)
10927 {
10928 error_at (min_location (declspecs->locations[ds_thread],
10929 declspecs->locations[ds_storage_class]),
10930 "storage class specified for parameter %qs", name);
10931 return error_mark_node;
10932 }
10933
10934 /* Function parameters cannot be concept. */
10935 if (concept_p)
10936 error_at (declspecs->locations[ds_concept],
10937 "a parameter cannot be declared %<concept%>");
10938 /* Function parameters cannot be constexpr. If we saw one, moan
10939 and pretend it wasn't there. */
10940 else if (constexpr_p)
10941 {
10942 error_at (declspecs->locations[ds_constexpr],
10943 "a parameter cannot be declared %<constexpr%>");
10944 constexpr_p = 0;
10945 }
10946 }
10947
10948 /* Give error if `virtual' is used outside of class declaration. */
10949 if (virtualp
10950 && (current_class_name == NULL_TREE || decl_context != FIELD))
10951 {
10952 error_at (declspecs->locations[ds_virtual],
10953 "%<virtual%> outside class declaration");
10954 virtualp = 0;
10955 }
10956
10957 if (innermost_code == cdk_decomp)
10958 {
10959 location_t loc = (declarator->kind == cdk_reference
10960 ? declarator->declarator->id_loc : declarator->id_loc);
10961 if (inlinep)
10962 error_at (declspecs->locations[ds_inline],
10963 "structured binding declaration cannot be %<inline%>");
10964 if (typedef_p)
10965 error_at (declspecs->locations[ds_typedef],
10966 "structured binding declaration cannot be %<typedef%>");
10967 if (constexpr_p)
10968 error_at (declspecs->locations[ds_constexpr], "structured "
10969 "binding declaration cannot be %<constexpr%>");
10970 if (thread_p)
10971 error_at (declspecs->locations[ds_thread],
10972 "structured binding declaration cannot be %qs",
10973 declspecs->gnu_thread_keyword_p
10974 ? "__thread" : "thread_local");
10975 if (concept_p)
10976 error_at (declspecs->locations[ds_concept],
10977 "structured binding declaration cannot be %<concept%>");
10978 switch (storage_class)
10979 {
10980 case sc_none:
10981 break;
10982 case sc_register:
10983 error_at (loc, "structured binding declaration cannot be "
10984 "%<register%>");
10985 break;
10986 case sc_static:
10987 error_at (loc, "structured binding declaration cannot be "
10988 "%<static%>");
10989 break;
10990 case sc_extern:
10991 error_at (loc, "structured binding declaration cannot be "
10992 "%<extern%>");
10993 break;
10994 case sc_mutable:
10995 error_at (loc, "structured binding declaration cannot be "
10996 "%<mutable%>");
10997 break;
10998 case sc_auto:
10999 error_at (loc, "structured binding declaration cannot be "
11000 "C++98 %<auto%>");
11001 break;
11002 default:
11003 gcc_unreachable ();
11004 }
11005 if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
11006 || TYPE_IDENTIFIER (type) != auto_identifier)
11007 {
11008 if (type != error_mark_node)
11009 {
11010 error_at (loc, "structured binding declaration cannot have "
11011 "type %qT", type);
11012 inform (loc,
11013 "type must be cv-qualified %<auto%> or reference to "
11014 "cv-qualified %<auto%>");
11015 }
11016 type = build_qualified_type (make_auto (), type_quals);
11017 declspecs->type = type;
11018 }
11019 inlinep = 0;
11020 typedef_p = 0;
11021 constexpr_p = 0;
11022 thread_p = 0;
11023 concept_p = 0;
11024 storage_class = sc_none;
11025 staticp = 0;
11026 declspecs->storage_class = sc_none;
11027 declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
11028 }
11029
11030 /* Static anonymous unions are dealt with here. */
11031 if (staticp && decl_context == TYPENAME
11032 && declspecs->type
11033 && ANON_AGGR_TYPE_P (declspecs->type))
11034 decl_context = FIELD;
11035
11036 /* Warn about storage classes that are invalid for certain
11037 kinds of declarations (parameters, typenames, etc.). */
11038 if (thread_p
11039 && ((storage_class
11040 && storage_class != sc_extern
11041 && storage_class != sc_static)
11042 || typedef_p))
11043 {
11044 error ("multiple storage classes in declaration of %qs", name);
11045 thread_p = false;
11046 }
11047 if (decl_context != NORMAL
11048 && ((storage_class != sc_none
11049 && storage_class != sc_mutable)
11050 || thread_p))
11051 {
11052 if ((decl_context == PARM || decl_context == CATCHPARM)
11053 && (storage_class == sc_register
11054 || storage_class == sc_auto))
11055 ;
11056 else if (typedef_p)
11057 ;
11058 else if (decl_context == FIELD
11059 /* C++ allows static class elements. */
11060 && storage_class == sc_static)
11061 /* C++ also allows inlines and signed and unsigned elements,
11062 but in those cases we don't come in here. */
11063 ;
11064 else
11065 {
11066 location_t loc
11067 = min_location (declspecs->locations[ds_thread],
11068 declspecs->locations[ds_storage_class]);
11069 if (decl_context == FIELD)
11070 error_at (loc, "storage class specified for %qs", name);
11071 else if (decl_context == PARM || decl_context == CATCHPARM)
11072 error_at (loc, "storage class specified for parameter %qs", name);
11073 else
11074 error_at (loc, "storage class specified for typename");
11075 if (storage_class == sc_register
11076 || storage_class == sc_auto
11077 || storage_class == sc_extern
11078 || thread_p)
11079 storage_class = sc_none;
11080 }
11081 }
11082 else if (storage_class == sc_extern && funcdef_flag
11083 && ! toplevel_bindings_p ())
11084 error ("nested function %qs declared %<extern%>", name);
11085 else if (toplevel_bindings_p ())
11086 {
11087 if (storage_class == sc_auto)
11088 error ("top-level declaration of %qs specifies %<auto%>", name);
11089 }
11090 else if (thread_p
11091 && storage_class != sc_extern
11092 && storage_class != sc_static)
11093 {
11094 if (declspecs->gnu_thread_keyword_p)
11095 pedwarn (declspecs->locations[ds_thread],
11096 0, "function-scope %qs implicitly auto and "
11097 "declared %<__thread%>", name);
11098
11099 /* When thread_local is applied to a variable of block scope the
11100 storage-class-specifier static is implied if it does not appear
11101 explicitly. */
11102 storage_class = declspecs->storage_class = sc_static;
11103 staticp = 1;
11104 }
11105
11106 if (storage_class && friendp)
11107 {
11108 error_at (min_location (declspecs->locations[ds_thread],
11109 declspecs->locations[ds_storage_class]),
11110 "storage class specifiers invalid in friend function "
11111 "declarations");
11112 storage_class = sc_none;
11113 staticp = 0;
11114 }
11115
11116 if (!id_declarator)
11117 unqualified_id = NULL_TREE;
11118 else
11119 {
11120 unqualified_id = id_declarator->u.id.unqualified_name;
11121 switch (TREE_CODE (unqualified_id))
11122 {
11123 case BIT_NOT_EXPR:
11124 unqualified_id = TREE_OPERAND (unqualified_id, 0);
11125 if (TYPE_P (unqualified_id))
11126 unqualified_id = constructor_name (unqualified_id);
11127 break;
11128
11129 case IDENTIFIER_NODE:
11130 case TEMPLATE_ID_EXPR:
11131 break;
11132
11133 default:
11134 gcc_unreachable ();
11135 }
11136 }
11137
11138 if (declspecs->std_attributes)
11139 {
11140 location_t attr_loc = declspecs->locations[ds_std_attribute];
11141 if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
11142 inform (attr_loc, "an attribute that appertains to a type-specifier "
11143 "is ignored");
11144 }
11145
11146 /* Determine the type of the entity declared by recurring on the
11147 declarator. */
11148 for (; declarator; declarator = declarator->declarator)
11149 {
11150 const cp_declarator *inner_declarator;
11151 tree attrs;
11152
11153 if (type == error_mark_node)
11154 return error_mark_node;
11155
11156 attrs = declarator->attributes;
11157 if (attrs)
11158 {
11159 int attr_flags;
11160
11161 attr_flags = 0;
11162 if (declarator == NULL || declarator->kind == cdk_id)
11163 attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
11164 if (declarator->kind == cdk_function)
11165 attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
11166 if (declarator->kind == cdk_array)
11167 attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
11168 returned_attrs = decl_attributes (&type,
11169 chainon (returned_attrs, attrs),
11170 attr_flags);
11171 }
11172
11173 inner_declarator = declarator->declarator;
11174
11175 /* We don't want to warn in parameter context because we don't
11176 yet know if the parse will succeed, and this might turn out
11177 to be a constructor call. */
11178 if (decl_context != PARM
11179 && decl_context != TYPENAME
11180 && !typedef_p
11181 && declarator->parenthesized != UNKNOWN_LOCATION
11182 /* If the type is class-like and the inner name used a
11183 global namespace qualifier, we need the parens.
11184 Unfortunately all we can tell is whether a qualified name
11185 was used or not. */
11186 && !(inner_declarator
11187 && inner_declarator->kind == cdk_id
11188 && inner_declarator->u.id.qualifying_scope
11189 && (MAYBE_CLASS_TYPE_P (type)
11190 || TREE_CODE (type) == ENUMERAL_TYPE)))
11191 warning_at (declarator->parenthesized, OPT_Wparentheses,
11192 "unnecessary parentheses in declaration of %qs", name);
11193 if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
11194 break;
11195
11196 switch (declarator->kind)
11197 {
11198 case cdk_array:
11199 type = create_array_type_for_decl (dname, type,
11200 declarator->u.array.bounds);
11201 if (!valid_array_size_p (input_location, type, dname))
11202 type = error_mark_node;
11203
11204 if (declarator->std_attributes)
11205 /* [dcl.array]/1:
11206
11207 The optional attribute-specifier-seq appertains to the
11208 array. */
11209 returned_attrs = chainon (returned_attrs,
11210 declarator->std_attributes);
11211 break;
11212
11213 case cdk_function:
11214 {
11215 tree arg_types;
11216 int funcdecl_p;
11217
11218 /* Declaring a function type. */
11219
11220 input_location = declspecs->locations[ds_type_spec];
11221 abstract_virtuals_error (ACU_RETURN, type);
11222 input_location = saved_loc;
11223
11224 /* Pick up type qualifiers which should be applied to `this'. */
11225 memfn_quals = declarator->u.function.qualifiers;
11226 /* Pick up virt-specifiers. */
11227 virt_specifiers = declarator->u.function.virt_specifiers;
11228 /* And ref-qualifier, too */
11229 rqual = declarator->u.function.ref_qualifier;
11230 /* And tx-qualifier. */
11231 tree tx_qual = declarator->u.function.tx_qualifier;
11232 /* Pick up the exception specifications. */
11233 raises = declarator->u.function.exception_specification;
11234 /* If the exception-specification is ill-formed, let's pretend
11235 there wasn't one. */
11236 if (raises == error_mark_node)
11237 raises = NULL_TREE;
11238
11239 if (reqs)
11240 error_at (location_of (reqs), "requires-clause on return type");
11241 reqs = declarator->u.function.requires_clause;
11242
11243 /* Say it's a definition only for the CALL_EXPR
11244 closest to the identifier. */
11245 funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
11246
11247 /* Handle a late-specified return type. */
11248 tree late_return_type = declarator->u.function.late_return_type;
11249 if (funcdecl_p
11250 /* This is the case e.g. for
11251 using T = auto () -> int. */
11252 || inner_declarator == NULL)
11253 {
11254 if (tree auto_node = type_uses_auto (type))
11255 {
11256 if (!late_return_type)
11257 {
11258 if (current_class_type
11259 && LAMBDA_TYPE_P (current_class_type))
11260 /* OK for C++11 lambdas. */;
11261 else if (cxx_dialect < cxx14)
11262 {
11263 error ("%qs function uses "
11264 "%<auto%> type specifier without trailing "
11265 "return type", name);
11266 inform (input_location, "deduced return type "
11267 "only available with -std=c++14 or "
11268 "-std=gnu++14");
11269 }
11270 else if (virtualp)
11271 {
11272 error ("virtual function cannot "
11273 "have deduced return type");
11274 virtualp = false;
11275 }
11276 }
11277 else if (!is_auto (type) && sfk != sfk_conversion)
11278 {
11279 error ("%qs function with trailing return type has"
11280 " %qT as its type rather than plain %<auto%>",
11281 name, type);
11282 return error_mark_node;
11283 }
11284 else if (is_auto (type) && AUTO_IS_DECLTYPE (type))
11285 {
11286 if (funcdecl_p)
11287 error ("%qs function with trailing return type has "
11288 "%<decltype(auto)%> as its type rather than "
11289 "plain %<auto%>", name);
11290 else
11291 error ("invalid use of %<decltype(auto)%>");
11292 return error_mark_node;
11293 }
11294 tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
11295 if (!tmpl)
11296 if (tree late_auto = type_uses_auto (late_return_type))
11297 tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
11298 if (tmpl)
11299 {
11300 if (!dguide_name_p (unqualified_id))
11301 {
11302 error_at (declarator->id_loc, "deduced class "
11303 "type %qD in function return type",
11304 DECL_NAME (tmpl));
11305 inform (DECL_SOURCE_LOCATION (tmpl),
11306 "%qD declared here", tmpl);
11307 return error_mark_node;
11308 }
11309 else if (!late_return_type)
11310 {
11311 error_at (declarator->id_loc, "deduction guide "
11312 "for %qT must have trailing return "
11313 "type", TREE_TYPE (tmpl));
11314 inform (DECL_SOURCE_LOCATION (tmpl),
11315 "%qD declared here", tmpl);
11316 return error_mark_node;
11317 }
11318 else if (CLASS_TYPE_P (late_return_type)
11319 && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11320 && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11321 == tmpl))
11322 /* OK */;
11323 else
11324 error ("trailing return type %qT of deduction guide "
11325 "is not a specialization of %qT",
11326 late_return_type, TREE_TYPE (tmpl));
11327 }
11328 }
11329 else if (late_return_type
11330 && sfk != sfk_conversion)
11331 {
11332 if (cxx_dialect < cxx11)
11333 /* Not using maybe_warn_cpp0x because this should
11334 always be an error. */
11335 error ("trailing return type only available with "
11336 "-std=c++11 or -std=gnu++11");
11337 else
11338 error ("%qs function with trailing return type not "
11339 "declared with %<auto%> type specifier", name);
11340 return error_mark_node;
11341 }
11342 }
11343 type = splice_late_return_type (type, late_return_type);
11344 if (type == error_mark_node)
11345 return error_mark_node;
11346
11347 if (late_return_type)
11348 {
11349 late_return_type_p = true;
11350 type_quals = cp_type_quals (type);
11351 }
11352
11353 if (type_quals != TYPE_UNQUALIFIED)
11354 {
11355 if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11356 warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11357 "qualifiers ignored on function return type");
11358 /* We now know that the TYPE_QUALS don't apply to the
11359 decl, but to its return type. */
11360 type_quals = TYPE_UNQUALIFIED;
11361 }
11362
11363 /* Error about some types functions can't return. */
11364
11365 if (TREE_CODE (type) == FUNCTION_TYPE)
11366 {
11367 error_at (typespec_loc, "%qs declared as function returning "
11368 "a function", name);
11369 return error_mark_node;
11370 }
11371 if (TREE_CODE (type) == ARRAY_TYPE)
11372 {
11373 error_at (typespec_loc, "%qs declared as function returning "
11374 "an array", name);
11375 return error_mark_node;
11376 }
11377
11378 if (ctype == NULL_TREE
11379 && decl_context == FIELD
11380 && funcdecl_p
11381 && friendp == 0)
11382 ctype = current_class_type;
11383
11384 if (ctype && (sfk == sfk_constructor
11385 || sfk == sfk_destructor))
11386 {
11387 /* We are within a class's scope. If our declarator name
11388 is the same as the class name, and we are defining
11389 a function, then it is a constructor/destructor, and
11390 therefore returns a void type. */
11391
11392 /* ISO C++ 12.4/2. A destructor may not be declared
11393 const or volatile. A destructor may not be static.
11394 A destructor may not be declared with ref-qualifier.
11395
11396 ISO C++ 12.1. A constructor may not be declared
11397 const or volatile. A constructor may not be
11398 virtual. A constructor may not be static.
11399 A constructor may not be declared with ref-qualifier. */
11400 if (staticp == 2)
11401 error ((flags == DTOR_FLAG)
11402 ? G_("destructor cannot be static member function")
11403 : G_("constructor cannot be static member function"));
11404 if (memfn_quals)
11405 {
11406 error ((flags == DTOR_FLAG)
11407 ? G_("destructors may not be cv-qualified")
11408 : G_("constructors may not be cv-qualified"));
11409 memfn_quals = TYPE_UNQUALIFIED;
11410 }
11411
11412 if (rqual)
11413 {
11414 maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11415 error ((flags == DTOR_FLAG)
11416 ? G_("destructors may not be ref-qualified")
11417 : G_("constructors may not be ref-qualified"));
11418 rqual = REF_QUAL_NONE;
11419 }
11420
11421 if (decl_context == FIELD
11422 && !member_function_or_else (ctype,
11423 current_class_type,
11424 flags))
11425 return error_mark_node;
11426
11427 if (flags != DTOR_FLAG)
11428 {
11429 /* It's a constructor. */
11430 if (explicitp == 1)
11431 explicitp = 2;
11432 if (virtualp)
11433 {
11434 permerror (declspecs->locations[ds_virtual],
11435 "constructors cannot be declared %<virtual%>");
11436 virtualp = 0;
11437 }
11438 if (decl_context == FIELD
11439 && sfk != sfk_constructor)
11440 return error_mark_node;
11441 }
11442 if (decl_context == FIELD)
11443 staticp = 0;
11444 }
11445 else if (friendp)
11446 {
11447 if (virtualp)
11448 {
11449 /* Cannot be both friend and virtual. */
11450 gcc_rich_location richloc (declspecs->locations[ds_virtual]);
11451 richloc.add_range (declspecs->locations[ds_friend], false);
11452 error_at (&richloc, "virtual functions cannot be friends");
11453 friendp = 0;
11454 }
11455 if (decl_context == NORMAL)
11456 error ("friend declaration not in class definition");
11457 if (current_function_decl && funcdef_flag)
11458 {
11459 error ("can%'t define friend function %qs in a local "
11460 "class definition", name);
11461 friendp = 0;
11462 }
11463 }
11464 else if (ctype && sfk == sfk_conversion)
11465 {
11466 if (explicitp == 1)
11467 {
11468 maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11469 explicitp = 2;
11470 }
11471 if (late_return_type_p)
11472 error ("a conversion function cannot have a trailing return type");
11473 }
11474 else if (sfk == sfk_deduction_guide)
11475 {
11476 if (explicitp == 1)
11477 explicitp = 2;
11478 }
11479
11480 tree pushed_scope = NULL_TREE;
11481 if (funcdecl_p
11482 && decl_context != FIELD
11483 && inner_declarator->u.id.qualifying_scope
11484 && CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
11485 pushed_scope
11486 = push_scope (inner_declarator->u.id.qualifying_scope);
11487
11488 arg_types = grokparms (declarator->u.function.parameters, &parms);
11489
11490 if (pushed_scope)
11491 pop_scope (pushed_scope);
11492
11493 if (inner_declarator
11494 && inner_declarator->kind == cdk_id
11495 && inner_declarator->u.id.sfk == sfk_destructor
11496 && arg_types != void_list_node)
11497 {
11498 error ("destructors may not have parameters");
11499 arg_types = void_list_node;
11500 parms = NULL_TREE;
11501 }
11502
11503 type = build_function_type (type, arg_types);
11504
11505 tree attrs = declarator->std_attributes;
11506 if (tx_qual)
11507 {
11508 tree att = build_tree_list (tx_qual, NULL_TREE);
11509 /* transaction_safe applies to the type, but
11510 transaction_safe_dynamic applies to the function. */
11511 if (is_attribute_p ("transaction_safe", tx_qual))
11512 attrs = chainon (attrs, att);
11513 else
11514 returned_attrs = chainon (returned_attrs, att);
11515 }
11516 if (attrs)
11517 /* [dcl.fct]/2:
11518
11519 The optional attribute-specifier-seq appertains to
11520 the function type. */
11521 decl_attributes (&type, attrs, 0);
11522
11523 if (raises)
11524 type = build_exception_variant (type, raises);
11525 }
11526 break;
11527
11528 case cdk_pointer:
11529 case cdk_reference:
11530 case cdk_ptrmem:
11531 /* Filter out pointers-to-references and references-to-references.
11532 We can get these if a TYPE_DECL is used. */
11533
11534 if (TYPE_REF_P (type))
11535 {
11536 if (declarator->kind != cdk_reference)
11537 {
11538 error ("cannot declare pointer to %q#T", type);
11539 type = TREE_TYPE (type);
11540 }
11541
11542 /* In C++0x, we allow reference to reference declarations
11543 that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11544 and template type arguments [14.3.1/4 temp.arg.type]. The
11545 check for direct reference to reference declarations, which
11546 are still forbidden, occurs below. Reasoning behind the change
11547 can be found in DR106, DR540, and the rvalue reference
11548 proposals. */
11549 else if (cxx_dialect == cxx98)
11550 {
11551 error ("cannot declare reference to %q#T", type);
11552 type = TREE_TYPE (type);
11553 }
11554 }
11555 else if (VOID_TYPE_P (type))
11556 {
11557 if (declarator->kind == cdk_reference)
11558 error ("cannot declare reference to %q#T", type);
11559 else if (declarator->kind == cdk_ptrmem)
11560 error ("cannot declare pointer to %q#T member", type);
11561 }
11562
11563 /* We now know that the TYPE_QUALS don't apply to the decl,
11564 but to the target of the pointer. */
11565 type_quals = TYPE_UNQUALIFIED;
11566
11567 /* This code used to handle METHOD_TYPE, but I don't think it's
11568 possible to get it here anymore. */
11569 gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11570 if (declarator->kind == cdk_ptrmem
11571 && TREE_CODE (type) == FUNCTION_TYPE)
11572 {
11573 memfn_quals |= type_memfn_quals (type);
11574 type = build_memfn_type (type,
11575 declarator->u.pointer.class_type,
11576 memfn_quals,
11577 rqual);
11578 if (type == error_mark_node)
11579 return error_mark_node;
11580
11581 rqual = REF_QUAL_NONE;
11582 memfn_quals = TYPE_UNQUALIFIED;
11583 }
11584
11585 if (TREE_CODE (type) == FUNCTION_TYPE
11586 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11587 || type_memfn_rqual (type) != REF_QUAL_NONE))
11588 error (declarator->kind == cdk_reference
11589 ? G_("cannot declare reference to qualified function type %qT")
11590 : G_("cannot declare pointer to qualified function type %qT"),
11591 type);
11592
11593 /* When the pointed-to type involves components of variable size,
11594 care must be taken to ensure that the size evaluation code is
11595 emitted early enough to dominate all the possible later uses
11596 and late enough for the variables on which it depends to have
11597 been assigned.
11598
11599 This is expected to happen automatically when the pointed-to
11600 type has a name/declaration of it's own, but special attention
11601 is required if the type is anonymous.
11602
11603 We handle the NORMAL and FIELD contexts here by inserting a
11604 dummy statement that just evaluates the size at a safe point
11605 and ensures it is not deferred until e.g. within a deeper
11606 conditional context (c++/43555).
11607
11608 We expect nothing to be needed here for PARM or TYPENAME.
11609 Evaluating the size at this point for TYPENAME would
11610 actually be incorrect, as we might be in the middle of an
11611 expression with side effects on the pointed-to type size
11612 "arguments" prior to the pointer declaration point and the
11613 size evaluation could end up prior to the side effects. */
11614
11615 if (!TYPE_NAME (type)
11616 && (decl_context == NORMAL || decl_context == FIELD)
11617 && at_function_scope_p ()
11618 && variably_modified_type_p (type, NULL_TREE))
11619 {
11620 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11621 NULL_TREE, type);
11622 add_decl_expr (TYPE_NAME (type));
11623 }
11624
11625 if (declarator->kind == cdk_reference)
11626 {
11627 /* In C++0x, the type we are creating a reference to might be
11628 a typedef which is itself a reference type. In that case,
11629 we follow the reference collapsing rules in
11630 [7.1.3/8 dcl.typedef] to create the final reference type:
11631
11632 "If a typedef TD names a type that is a reference to a type
11633 T, an attempt to create the type 'lvalue reference to cv TD'
11634 creates the type 'lvalue reference to T,' while an attempt
11635 to create the type "rvalue reference to cv TD' creates the
11636 type TD."
11637 */
11638 if (VOID_TYPE_P (type))
11639 /* We already gave an error. */;
11640 else if (TYPE_REF_P (type))
11641 {
11642 if (declarator->u.reference.rvalue_ref)
11643 /* Leave type alone. */;
11644 else
11645 type = cp_build_reference_type (TREE_TYPE (type), false);
11646 }
11647 else
11648 type = cp_build_reference_type
11649 (type, declarator->u.reference.rvalue_ref);
11650
11651 /* In C++0x, we need this check for direct reference to
11652 reference declarations, which are forbidden by
11653 [8.3.2/5 dcl.ref]. Reference to reference declarations
11654 are only allowed indirectly through typedefs and template
11655 type arguments. Example:
11656
11657 void foo(int & &); // invalid ref-to-ref decl
11658
11659 typedef int & int_ref;
11660 void foo(int_ref &); // valid ref-to-ref decl
11661 */
11662 if (inner_declarator && inner_declarator->kind == cdk_reference)
11663 error ("cannot declare reference to %q#T, which is not "
11664 "a typedef or a template type argument", type);
11665 }
11666 else if (TREE_CODE (type) == METHOD_TYPE)
11667 type = build_ptrmemfunc_type (build_pointer_type (type));
11668 else if (declarator->kind == cdk_ptrmem)
11669 {
11670 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11671 != NAMESPACE_DECL);
11672 if (declarator->u.pointer.class_type == error_mark_node)
11673 /* We will already have complained. */
11674 type = error_mark_node;
11675 else
11676 type = build_ptrmem_type (declarator->u.pointer.class_type,
11677 type);
11678 }
11679 else
11680 type = build_pointer_type (type);
11681
11682 /* Process a list of type modifier keywords (such as
11683 const or volatile) that were given inside the `*' or `&'. */
11684
11685 if (declarator->u.pointer.qualifiers)
11686 {
11687 type
11688 = cp_build_qualified_type (type,
11689 declarator->u.pointer.qualifiers);
11690 type_quals = cp_type_quals (type);
11691 }
11692
11693 /* Apply C++11 attributes to the pointer, and not to the
11694 type pointed to. This is unlike what is done for GNU
11695 attributes above. It is to comply with [dcl.ptr]/1:
11696
11697 [the optional attribute-specifier-seq (7.6.1) appertains
11698 to the pointer and not to the object pointed to]. */
11699 if (declarator->std_attributes)
11700 decl_attributes (&type, declarator->std_attributes,
11701 0);
11702
11703 ctype = NULL_TREE;
11704 break;
11705
11706 case cdk_error:
11707 break;
11708
11709 default:
11710 gcc_unreachable ();
11711 }
11712 }
11713
11714 /* A `constexpr' specifier used in an object declaration declares
11715 the object as `const'. */
11716 if (constexpr_p && innermost_code != cdk_function)
11717 {
11718 /* DR1688 says that a `constexpr' specifier in combination with
11719 `volatile' is valid. */
11720
11721 if (!TYPE_REF_P (type))
11722 {
11723 type_quals |= TYPE_QUAL_CONST;
11724 type = cp_build_qualified_type (type, type_quals);
11725 }
11726 }
11727
11728 if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11729 && TREE_CODE (type) != FUNCTION_TYPE
11730 && TREE_CODE (type) != METHOD_TYPE
11731 && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11732 {
11733 error ("template-id %qD used as a declarator",
11734 unqualified_id);
11735 unqualified_id = dname;
11736 }
11737
11738 /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11739 qualified with a class-name, turn it into a METHOD_TYPE, unless
11740 we know that the function is static. We take advantage of this
11741 opportunity to do other processing that pertains to entities
11742 explicitly declared to be class members. Note that if DECLARATOR
11743 is non-NULL, we know it is a cdk_id declarator; otherwise, we
11744 would not have exited the loop above. */
11745 if (declarator
11746 && declarator->kind == cdk_id
11747 && declarator->u.id.qualifying_scope
11748 && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11749 {
11750 ctype = declarator->u.id.qualifying_scope;
11751 ctype = TYPE_MAIN_VARIANT (ctype);
11752 template_count = num_template_headers_for_class (ctype);
11753
11754 if (ctype == current_class_type)
11755 {
11756 if (friendp)
11757 {
11758 permerror (input_location, "member functions are implicitly "
11759 "friends of their class");
11760 friendp = 0;
11761 }
11762 else
11763 permerror (declarator->id_loc,
11764 "extra qualification %<%T::%> on member %qs",
11765 ctype, name);
11766 }
11767 else if (/* If the qualifying type is already complete, then we
11768 can skip the following checks. */
11769 !COMPLETE_TYPE_P (ctype)
11770 && (/* If the function is being defined, then
11771 qualifying type must certainly be complete. */
11772 funcdef_flag
11773 /* A friend declaration of "T::f" is OK, even if
11774 "T" is a template parameter. But, if this
11775 function is not a friend, the qualifying type
11776 must be a class. */
11777 || (!friendp && !CLASS_TYPE_P (ctype))
11778 /* For a declaration, the type need not be
11779 complete, if either it is dependent (since there
11780 is no meaningful definition of complete in that
11781 case) or the qualifying class is currently being
11782 defined. */
11783 || !(dependent_type_p (ctype)
11784 || currently_open_class (ctype)))
11785 /* Check that the qualifying type is complete. */
11786 && !complete_type_or_else (ctype, NULL_TREE))
11787 return error_mark_node;
11788 else if (TREE_CODE (type) == FUNCTION_TYPE)
11789 {
11790 if (current_class_type
11791 && (!friendp || funcdef_flag || initialized))
11792 {
11793 error (funcdef_flag || initialized
11794 ? G_("cannot define member function %<%T::%s%> "
11795 "within %qT")
11796 : G_("cannot declare member function %<%T::%s%> "
11797 "within %qT"),
11798 ctype, name, current_class_type);
11799 return error_mark_node;
11800 }
11801 }
11802 else if (typedef_p && current_class_type)
11803 {
11804 error ("cannot declare member %<%T::%s%> within %qT",
11805 ctype, name, current_class_type);
11806 return error_mark_node;
11807 }
11808 }
11809
11810 if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11811 ctype = current_class_type;
11812
11813 /* Now TYPE has the actual type. */
11814
11815 if (returned_attrs)
11816 {
11817 if (attrlist)
11818 *attrlist = chainon (returned_attrs, *attrlist);
11819 else
11820 attrlist = &returned_attrs;
11821 }
11822
11823 if (declarator
11824 && declarator->kind == cdk_id
11825 && declarator->std_attributes
11826 && attrlist != NULL)
11827 {
11828 /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11829 a declarator-id appertains to the entity that is declared. */
11830 if (declarator->std_attributes != error_mark_node)
11831 *attrlist = chainon (*attrlist, declarator->std_attributes);
11832 else
11833 /* We should have already diagnosed the issue (c++/78344). */
11834 gcc_assert (seen_error ());
11835 }
11836
11837 /* Handle parameter packs. */
11838 if (parameter_pack_p)
11839 {
11840 if (decl_context == PARM)
11841 /* Turn the type into a pack expansion.*/
11842 type = make_pack_expansion (type);
11843 else
11844 error ("non-parameter %qs cannot be a parameter pack", name);
11845 }
11846
11847 if ((decl_context == FIELD || decl_context == PARM)
11848 && !processing_template_decl
11849 && variably_modified_type_p (type, NULL_TREE))
11850 {
11851 if (decl_context == FIELD)
11852 error ("data member may not have variably modified type %qT", type);
11853 else
11854 error ("parameter may not have variably modified type %qT", type);
11855 type = error_mark_node;
11856 }
11857
11858 if (explicitp == 1 || (explicitp && friendp))
11859 {
11860 /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11861 in the declaration of a constructor or conversion function within
11862 a class definition. */
11863 if (!current_class_type)
11864 error_at (declspecs->locations[ds_explicit],
11865 "%<explicit%> outside class declaration");
11866 else if (friendp)
11867 error_at (declspecs->locations[ds_explicit],
11868 "%<explicit%> in friend declaration");
11869 else
11870 error_at (declspecs->locations[ds_explicit],
11871 "only declarations of constructors and conversion operators "
11872 "can be %<explicit%>");
11873 explicitp = 0;
11874 }
11875
11876 if (storage_class == sc_mutable)
11877 {
11878 if (decl_context != FIELD || friendp)
11879 {
11880 error ("non-member %qs cannot be declared %<mutable%>", name);
11881 storage_class = sc_none;
11882 }
11883 else if (decl_context == TYPENAME || typedef_p)
11884 {
11885 error ("non-object member %qs cannot be declared %<mutable%>", name);
11886 storage_class = sc_none;
11887 }
11888 else if (TREE_CODE (type) == FUNCTION_TYPE
11889 || TREE_CODE (type) == METHOD_TYPE)
11890 {
11891 error ("function %qs cannot be declared %<mutable%>", name);
11892 storage_class = sc_none;
11893 }
11894 else if (staticp)
11895 {
11896 error ("static %qs cannot be declared %<mutable%>", name);
11897 storage_class = sc_none;
11898 }
11899 else if (type_quals & TYPE_QUAL_CONST)
11900 {
11901 error ("const %qs cannot be declared %<mutable%>", name);
11902 storage_class = sc_none;
11903 }
11904 else if (TYPE_REF_P (type))
11905 {
11906 permerror (input_location, "reference %qs cannot be declared "
11907 "%<mutable%>", name);
11908 storage_class = sc_none;
11909 }
11910 }
11911
11912 /* If this is declaring a typedef name, return a TYPE_DECL. */
11913 if (typedef_p && decl_context != TYPENAME)
11914 {
11915 tree decl;
11916
11917 /* This declaration:
11918
11919 typedef void f(int) const;
11920
11921 declares a function type which is not a member of any
11922 particular class, but which is cv-qualified; for
11923 example "f S::*" declares a pointer to a const-qualified
11924 member function of S. We record the cv-qualification in the
11925 function type. */
11926 if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11927 {
11928 type = apply_memfn_quals (type, memfn_quals, rqual);
11929
11930 /* We have now dealt with these qualifiers. */
11931 memfn_quals = TYPE_UNQUALIFIED;
11932 rqual = REF_QUAL_NONE;
11933 }
11934
11935 if (type_uses_auto (type))
11936 {
11937 error ("typedef declared %<auto%>");
11938 type = error_mark_node;
11939 }
11940
11941 if (reqs)
11942 error_at (location_of (reqs), "requires-clause on typedef");
11943
11944 if (id_declarator && declarator->u.id.qualifying_scope)
11945 {
11946 error ("typedef name may not be a nested-name-specifier");
11947 type = error_mark_node;
11948 }
11949
11950 if (decl_context == FIELD)
11951 decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11952 else
11953 decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11954
11955 if (decl_context != FIELD)
11956 {
11957 if (!current_function_decl)
11958 DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11959 else if (DECL_MAYBE_IN_CHARGE_CDTOR_P (current_function_decl))
11960 /* The TYPE_DECL is "abstract" because there will be
11961 clones of this constructor/destructor, and there will
11962 be copies of this TYPE_DECL generated in those
11963 clones. The decloning optimization (for space) may
11964 revert this subsequently if it determines that
11965 the clones should share a common implementation. */
11966 DECL_ABSTRACT_P (decl) = true;
11967 }
11968 else if (current_class_type
11969 && constructor_name_p (unqualified_id, current_class_type))
11970 permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11971 "as enclosing class",
11972 unqualified_id);
11973
11974 /* If the user declares "typedef struct {...} foo" then the
11975 struct will have an anonymous name. Fill that name in now.
11976 Nothing can refer to it, so nothing needs know about the name
11977 change. */
11978 if (type != error_mark_node
11979 && unqualified_id
11980 && TYPE_NAME (type)
11981 && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11982 && TYPE_UNNAMED_P (type)
11983 && declspecs->type_definition_p
11984 && attributes_naming_typedef_ok (*attrlist)
11985 && cp_type_quals (type) == TYPE_UNQUALIFIED)
11986 name_unnamed_type (type, decl);
11987
11988 if (signed_p
11989 || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11990 C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11991
11992 bad_specifiers (decl, BSP_TYPE, virtualp,
11993 memfn_quals != TYPE_UNQUALIFIED,
11994 inlinep, friendp, raises != NULL_TREE,
11995 declspecs->locations);
11996
11997 if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11998 /* Acknowledge that this was written:
11999 `using analias = atype;'. */
12000 TYPE_DECL_ALIAS_P (decl) = 1;
12001
12002 return decl;
12003 }
12004
12005 /* Detect the case of an array type of unspecified size
12006 which came, as such, direct from a typedef name.
12007 We must copy the type, so that the array's domain can be
12008 individually set by the object's initializer. */
12009
12010 if (type && typedef_type
12011 && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
12012 && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
12013 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12014
12015 /* Detect where we're using a typedef of function type to declare a
12016 function. PARMS will not be set, so we must create it now. */
12017
12018 if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
12019 {
12020 tree decls = NULL_TREE;
12021 tree args;
12022
12023 for (args = TYPE_ARG_TYPES (type);
12024 args && args != void_list_node;
12025 args = TREE_CHAIN (args))
12026 {
12027 tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
12028 TREE_VALUE (args));
12029
12030 DECL_CHAIN (decl) = decls;
12031 decls = decl;
12032 }
12033
12034 parms = nreverse (decls);
12035
12036 if (decl_context != TYPENAME)
12037 {
12038 /* The qualifiers on the function type become the qualifiers on
12039 the non-static member function. */
12040 memfn_quals |= type_memfn_quals (type);
12041 rqual = type_memfn_rqual (type);
12042 type_quals = TYPE_UNQUALIFIED;
12043 }
12044 }
12045
12046 /* If this is a type name (such as, in a cast or sizeof),
12047 compute the type and return it now. */
12048
12049 if (decl_context == TYPENAME)
12050 {
12051 /* Note that here we don't care about type_quals. */
12052
12053 /* Special case: "friend class foo" looks like a TYPENAME context. */
12054 if (friendp)
12055 {
12056 if (inlinep)
12057 {
12058 error ("%<inline%> specified for friend class declaration");
12059 inlinep = 0;
12060 }
12061
12062 if (!current_aggr)
12063 {
12064 /* Don't allow friend declaration without a class-key. */
12065 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
12066 permerror (input_location, "template parameters cannot be friends");
12067 else if (TREE_CODE (type) == TYPENAME_TYPE)
12068 permerror (input_location, "friend declaration requires class-key, "
12069 "i.e. %<friend class %T::%D%>",
12070 TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
12071 else
12072 permerror (input_location, "friend declaration requires class-key, "
12073 "i.e. %<friend %#T%>",
12074 type);
12075 }
12076
12077 /* Only try to do this stuff if we didn't already give up. */
12078 if (type != integer_type_node)
12079 {
12080 /* A friendly class? */
12081 if (current_class_type)
12082 make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
12083 /*complain=*/true);
12084 else
12085 error ("trying to make class %qT a friend of global scope",
12086 type);
12087
12088 type = void_type_node;
12089 }
12090 }
12091 else if (memfn_quals || rqual)
12092 {
12093 if (ctype == NULL_TREE
12094 && TREE_CODE (type) == METHOD_TYPE)
12095 ctype = TYPE_METHOD_BASETYPE (type);
12096
12097 if (ctype)
12098 type = build_memfn_type (type, ctype, memfn_quals, rqual);
12099 /* Core issue #547: need to allow this in template type args.
12100 Allow it in general in C++11 for alias-declarations. */
12101 else if ((template_type_arg || cxx_dialect >= cxx11)
12102 && TREE_CODE (type) == FUNCTION_TYPE)
12103 type = apply_memfn_quals (type, memfn_quals, rqual);
12104 else
12105 error ("invalid qualifiers on non-member function type");
12106 }
12107
12108 if (reqs)
12109 error_at (location_of (reqs), "requires-clause on type-id");
12110
12111 return type;
12112 }
12113 else if (unqualified_id == NULL_TREE && decl_context != PARM
12114 && decl_context != CATCHPARM
12115 && TREE_CODE (type) != UNION_TYPE
12116 && ! bitfield
12117 && innermost_code != cdk_decomp)
12118 {
12119 error ("abstract declarator %qT used as declaration", type);
12120 return error_mark_node;
12121 }
12122
12123 if (!FUNC_OR_METHOD_TYPE_P (type))
12124 {
12125 /* Only functions may be declared using an operator-function-id. */
12126 if (dname && IDENTIFIER_ANY_OP_P (dname))
12127 {
12128 error ("declaration of %qD as non-function", dname);
12129 return error_mark_node;
12130 }
12131
12132 if (reqs)
12133 error_at (location_of (reqs),
12134 "requires-clause on declaration of non-function type %qT",
12135 type);
12136 }
12137
12138 /* We don't check parameter types here because we can emit a better
12139 error message later. */
12140 if (decl_context != PARM)
12141 {
12142 type = check_var_type (unqualified_id, type);
12143 if (type == error_mark_node)
12144 return error_mark_node;
12145 }
12146
12147 /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
12148 or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE. */
12149
12150 if (decl_context == PARM || decl_context == CATCHPARM)
12151 {
12152 if (ctype || in_namespace)
12153 error ("cannot use %<::%> in parameter declaration");
12154
12155 if (type_uses_auto (type)
12156 && !(cxx_dialect >= cxx17 && template_parm_flag))
12157 {
12158 if (cxx_dialect >= cxx14)
12159 error ("%<auto%> parameter not permitted in this context");
12160 else
12161 error ("parameter declared %<auto%>");
12162 type = error_mark_node;
12163 }
12164
12165 /* A parameter declared as an array of T is really a pointer to T.
12166 One declared as a function is really a pointer to a function.
12167 One declared as a member is really a pointer to member. */
12168
12169 if (TREE_CODE (type) == ARRAY_TYPE)
12170 {
12171 /* Transfer const-ness of array into that of type pointed to. */
12172 type = build_pointer_type (TREE_TYPE (type));
12173 type_quals = TYPE_UNQUALIFIED;
12174 array_parameter_p = true;
12175 }
12176 else if (TREE_CODE (type) == FUNCTION_TYPE)
12177 type = build_pointer_type (type);
12178 }
12179
12180 if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
12181 && !(identifier_p (unqualified_id)
12182 && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
12183 {
12184 cp_cv_quals real_quals = memfn_quals;
12185 if (cxx_dialect < cxx14 && constexpr_p
12186 && sfk != sfk_constructor && sfk != sfk_destructor)
12187 real_quals |= TYPE_QUAL_CONST;
12188 type = build_memfn_type (type, ctype, real_quals, rqual);
12189 }
12190
12191 {
12192 tree decl = NULL_TREE;
12193
12194 if (decl_context == PARM)
12195 {
12196 decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
12197 DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
12198
12199 bad_specifiers (decl, BSP_PARM, virtualp,
12200 memfn_quals != TYPE_UNQUALIFIED,
12201 inlinep, friendp, raises != NULL_TREE,
12202 declspecs->locations);
12203 }
12204 else if (decl_context == FIELD)
12205 {
12206 if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
12207 if (tree auto_node = type_uses_auto (type))
12208 {
12209 location_t loc = declspecs->locations[ds_type_spec];
12210 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12211 error_at (loc, "invalid use of template-name %qE without an "
12212 "argument list",
12213 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
12214 else
12215 error_at (loc, "non-static data member declared with "
12216 "placeholder %qT", auto_node);
12217 type = error_mark_node;
12218 }
12219
12220 /* The C99 flexible array extension. */
12221 if (!staticp && TREE_CODE (type) == ARRAY_TYPE
12222 && TYPE_DOMAIN (type) == NULL_TREE)
12223 {
12224 if (ctype
12225 && (TREE_CODE (ctype) == UNION_TYPE
12226 || TREE_CODE (ctype) == QUAL_UNION_TYPE))
12227 {
12228 error ("flexible array member in union");
12229 type = error_mark_node;
12230 }
12231 else
12232 {
12233 /* Array is a flexible member. */
12234 if (in_system_header_at (input_location))
12235 /* Do not warn on flexible array members in system
12236 headers because glibc uses them. */;
12237 else if (name)
12238 pedwarn (input_location, OPT_Wpedantic,
12239 "ISO C++ forbids flexible array member %qs", name);
12240 else
12241 pedwarn (input_location, OPT_Wpedantic,
12242 "ISO C++ forbids flexible array members");
12243
12244 /* Flexible array member has a null domain. */
12245 type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12246 }
12247 }
12248
12249 if (type == error_mark_node)
12250 {
12251 /* Happens when declaring arrays of sizes which
12252 are error_mark_node, for example. */
12253 decl = NULL_TREE;
12254 }
12255 else if (in_namespace && !friendp)
12256 {
12257 /* Something like struct S { int N::j; }; */
12258 error ("invalid use of %<::%>");
12259 return error_mark_node;
12260 }
12261 else if (TREE_CODE (type) == FUNCTION_TYPE
12262 || TREE_CODE (type) == METHOD_TYPE)
12263 {
12264 int publicp = 0;
12265 tree function_context;
12266
12267 if (friendp == 0)
12268 {
12269 /* This should never happen in pure C++ (the check
12270 could be an assert). It could happen in
12271 Objective-C++ if someone writes invalid code that
12272 uses a function declaration for an instance
12273 variable or property (instance variables and
12274 properties are parsed as FIELD_DECLs, but they are
12275 part of an Objective-C class, not a C++ class).
12276 That code is invalid and is caught by this
12277 check. */
12278 if (!ctype)
12279 {
12280 error ("declaration of function %qD in invalid context",
12281 unqualified_id);
12282 return error_mark_node;
12283 }
12284
12285 /* ``A union may [ ... ] not [ have ] virtual functions.''
12286 ARM 9.5 */
12287 if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12288 {
12289 error_at (declspecs->locations[ds_virtual],
12290 "function %qD declared %<virtual%> inside a union",
12291 unqualified_id);
12292 return error_mark_node;
12293 }
12294
12295 if (virtualp
12296 && identifier_p (unqualified_id)
12297 && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
12298 {
12299 error_at (declspecs->locations[ds_virtual],
12300 "%qD cannot be declared %<virtual%>, since it "
12301 "is always static", unqualified_id);
12302 virtualp = 0;
12303 }
12304 }
12305
12306 /* Check that the name used for a destructor makes sense. */
12307 if (sfk == sfk_destructor)
12308 {
12309 tree uqname = id_declarator->u.id.unqualified_name;
12310
12311 if (!ctype)
12312 {
12313 gcc_assert (friendp);
12314 error ("expected qualified name in friend declaration "
12315 "for destructor %qD", uqname);
12316 return error_mark_node;
12317 }
12318
12319 if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
12320 {
12321 error ("declaration of %qD as member of %qT",
12322 uqname, ctype);
12323 return error_mark_node;
12324 }
12325 if (concept_p)
12326 {
12327 error_at (declspecs->locations[ds_concept],
12328 "a destructor cannot be %<concept%>");
12329 return error_mark_node;
12330 }
12331 if (constexpr_p)
12332 {
12333 error_at (declspecs->locations[ds_constexpr],
12334 "a destructor cannot be %<constexpr%>");
12335 return error_mark_node;
12336 }
12337 }
12338 else if (sfk == sfk_constructor && friendp && !ctype)
12339 {
12340 error ("expected qualified name in friend declaration "
12341 "for constructor %qD",
12342 id_declarator->u.id.unqualified_name);
12343 return error_mark_node;
12344 }
12345 if (sfk == sfk_constructor)
12346 if (concept_p)
12347 {
12348 error_at (declspecs->locations[ds_concept],
12349 "a constructor cannot be %<concept%>");
12350 return error_mark_node;
12351 }
12352 if (concept_p)
12353 {
12354 error_at (declspecs->locations[ds_concept],
12355 "a concept cannot be a member function");
12356 concept_p = false;
12357 }
12358
12359 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12360 {
12361 tree tmpl = TREE_OPERAND (unqualified_id, 0);
12362 if (variable_template_p (tmpl))
12363 {
12364 error ("specialization of variable template %qD "
12365 "declared as function", tmpl);
12366 inform (DECL_SOURCE_LOCATION (tmpl),
12367 "variable template declared here");
12368 return error_mark_node;
12369 }
12370 }
12371
12372 /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node. */
12373 function_context = (ctype != NULL_TREE) ?
12374 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12375 publicp = (! friendp || ! staticp)
12376 && function_context == NULL_TREE;
12377
12378 decl = grokfndecl (ctype, type,
12379 TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12380 ? unqualified_id : dname,
12381 parms,
12382 unqualified_id,
12383 declspecs,
12384 reqs,
12385 virtualp, flags, memfn_quals, rqual, raises,
12386 friendp ? -1 : 0, friendp, publicp,
12387 inlinep | (2 * constexpr_p) | (4 * concept_p),
12388 initialized == SD_DELETED, sfk,
12389 funcdef_flag, late_return_type_p,
12390 template_count, in_namespace,
12391 attrlist, declarator->id_loc);
12392 decl = set_virt_specifiers (decl, virt_specifiers);
12393 if (decl == NULL_TREE)
12394 return error_mark_node;
12395 #if 0
12396 /* This clobbers the attrs stored in `decl' from `attrlist'. */
12397 /* The decl and setting of decl_attr is also turned off. */
12398 decl = build_decl_attribute_variant (decl, decl_attr);
12399 #endif
12400
12401 /* [class.conv.ctor]
12402
12403 A constructor declared without the function-specifier
12404 explicit that can be called with a single parameter
12405 specifies a conversion from the type of its first
12406 parameter to the type of its class. Such a constructor
12407 is called a converting constructor. */
12408 if (explicitp == 2)
12409 DECL_NONCONVERTING_P (decl) = 1;
12410 }
12411 else if (!staticp && !dependent_type_p (type)
12412 && !COMPLETE_TYPE_P (complete_type (type))
12413 && (!complete_or_array_type_p (type)
12414 || initialized == 0))
12415 {
12416 if (TREE_CODE (type) != ARRAY_TYPE
12417 || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12418 {
12419 if (unqualified_id)
12420 {
12421 error ("field %qD has incomplete type %qT",
12422 unqualified_id, type);
12423 cxx_incomplete_type_inform (strip_array_types (type));
12424 }
12425 else
12426 error ("name %qT has incomplete type", type);
12427
12428 type = error_mark_node;
12429 decl = NULL_TREE;
12430 }
12431 }
12432 else
12433 {
12434 if (friendp)
12435 {
12436 error ("%qE is neither function nor member function; "
12437 "cannot be declared friend", unqualified_id);
12438 return error_mark_node;
12439 }
12440 decl = NULL_TREE;
12441 }
12442
12443 if (friendp)
12444 {
12445 /* Friends are treated specially. */
12446 if (ctype == current_class_type)
12447 ; /* We already issued a permerror. */
12448 else if (decl && DECL_NAME (decl))
12449 {
12450 if (template_class_depth (current_class_type) == 0)
12451 {
12452 decl = check_explicit_specialization
12453 (unqualified_id, decl, template_count,
12454 2 * funcdef_flag + 4);
12455 if (decl == error_mark_node)
12456 return error_mark_node;
12457 }
12458
12459 decl = do_friend (ctype, unqualified_id, decl,
12460 *attrlist, flags,
12461 funcdef_flag);
12462 return decl;
12463 }
12464 else
12465 return error_mark_node;
12466 }
12467
12468 /* Structure field. It may not be a function, except for C++. */
12469
12470 if (decl == NULL_TREE)
12471 {
12472 if (staticp)
12473 {
12474 /* C++ allows static class members. All other work
12475 for this is done by grokfield. */
12476 decl = build_lang_decl_loc (declarator
12477 ? declarator->id_loc
12478 : input_location,
12479 VAR_DECL, unqualified_id, type);
12480 set_linkage_for_static_data_member (decl);
12481 if (concept_p)
12482 error_at (declspecs->locations[ds_concept],
12483 "static data member %qE declared %<concept%>",
12484 unqualified_id);
12485 else if (constexpr_p && !initialized)
12486 {
12487 error ("%<constexpr%> static data member %qD must have an "
12488 "initializer", decl);
12489 constexpr_p = false;
12490 }
12491
12492 if (inlinep)
12493 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12494
12495 if (!DECL_VAR_DECLARED_INLINE_P (decl)
12496 && !(cxx_dialect >= cxx17 && constexpr_p))
12497 /* Even if there is an in-class initialization, DECL
12498 is considered undefined until an out-of-class
12499 definition is provided, unless this is an inline
12500 variable. */
12501 DECL_EXTERNAL (decl) = 1;
12502
12503 if (thread_p)
12504 {
12505 CP_DECL_THREAD_LOCAL_P (decl) = true;
12506 if (!processing_template_decl)
12507 set_decl_tls_model (decl, decl_default_tls_model (decl));
12508 if (declspecs->gnu_thread_keyword_p)
12509 SET_DECL_GNU_TLS_P (decl);
12510 }
12511 }
12512 else
12513 {
12514 if (concept_p)
12515 error_at (declspecs->locations[ds_concept],
12516 "non-static data member %qE declared %<concept%>",
12517 unqualified_id);
12518 else if (constexpr_p)
12519 {
12520 error_at (declspecs->locations[ds_constexpr],
12521 "non-static data member %qE declared %<constexpr%>",
12522 unqualified_id);
12523 constexpr_p = false;
12524 }
12525 decl = build_decl (input_location,
12526 FIELD_DECL, unqualified_id, type);
12527 DECL_NONADDRESSABLE_P (decl) = bitfield;
12528 if (bitfield && !unqualified_id)
12529 {
12530 TREE_NO_WARNING (decl) = 1;
12531 DECL_PADDING_P (decl) = 1;
12532 }
12533
12534 if (storage_class == sc_mutable)
12535 {
12536 DECL_MUTABLE_P (decl) = 1;
12537 storage_class = sc_none;
12538 }
12539
12540 if (initialized)
12541 {
12542 /* An attempt is being made to initialize a non-static
12543 member. This is new in C++11. */
12544 maybe_warn_cpp0x (CPP0X_NSDMI);
12545
12546 /* If this has been parsed with static storage class, but
12547 errors forced staticp to be cleared, ensure NSDMI is
12548 not present. */
12549 if (declspecs->storage_class == sc_static)
12550 DECL_INITIAL (decl) = error_mark_node;
12551 }
12552 }
12553
12554 bad_specifiers (decl, BSP_FIELD, virtualp,
12555 memfn_quals != TYPE_UNQUALIFIED,
12556 staticp ? false : inlinep, friendp,
12557 raises != NULL_TREE,
12558 declspecs->locations);
12559 }
12560 }
12561 else if (TREE_CODE (type) == FUNCTION_TYPE
12562 || TREE_CODE (type) == METHOD_TYPE)
12563 {
12564 tree original_name;
12565 int publicp = 0;
12566
12567 if (!unqualified_id)
12568 return error_mark_node;
12569
12570 if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12571 original_name = dname;
12572 else
12573 original_name = unqualified_id;
12574 // FIXME:gcc_assert (original_name == dname);
12575
12576 if (storage_class == sc_auto)
12577 error ("storage class %<auto%> invalid for function %qs", name);
12578 else if (storage_class == sc_register)
12579 error ("storage class %<register%> invalid for function %qs", name);
12580 else if (thread_p)
12581 {
12582 if (declspecs->gnu_thread_keyword_p)
12583 error_at (declspecs->locations[ds_thread],
12584 "storage class %<__thread%> invalid for function %qs",
12585 name);
12586 else
12587 error_at (declspecs->locations[ds_thread],
12588 "storage class %<thread_local%> invalid for "
12589 "function %qs", name);
12590 }
12591
12592 if (virt_specifiers)
12593 error ("virt-specifiers in %qs not allowed outside a class "
12594 "definition", name);
12595 /* Function declaration not at top level.
12596 Storage classes other than `extern' are not allowed
12597 and `extern' makes no difference. */
12598 if (! toplevel_bindings_p ()
12599 && (storage_class == sc_static
12600 || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12601 && pedantic)
12602 {
12603 if (storage_class == sc_static)
12604 pedwarn (declspecs->locations[ds_storage_class], OPT_Wpedantic,
12605 "%<static%> specifier invalid for function %qs "
12606 "declared out of global scope", name);
12607 else
12608 pedwarn (declspecs->locations[ds_inline], OPT_Wpedantic,
12609 "%<inline%> specifier invalid for function %qs "
12610 "declared out of global scope", name);
12611 }
12612
12613 if (ctype == NULL_TREE)
12614 {
12615 if (virtualp)
12616 {
12617 error ("virtual non-class function %qs", name);
12618 virtualp = 0;
12619 }
12620 else if (sfk == sfk_constructor
12621 || sfk == sfk_destructor)
12622 {
12623 error (funcdef_flag
12624 ? G_("%qs defined in a non-class scope")
12625 : G_("%qs declared in a non-class scope"), name);
12626 sfk = sfk_none;
12627 }
12628 }
12629
12630 /* Record whether the function is public. */
12631 publicp = (ctype != NULL_TREE
12632 || storage_class != sc_static);
12633
12634 decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12635 declspecs,
12636 reqs, virtualp, flags, memfn_quals, rqual, raises,
12637 1, friendp,
12638 publicp,
12639 inlinep | (2 * constexpr_p) | (4 * concept_p),
12640 initialized == SD_DELETED,
12641 sfk,
12642 funcdef_flag,
12643 late_return_type_p,
12644 template_count, in_namespace, attrlist,
12645 declarator->id_loc);
12646 if (decl == NULL_TREE)
12647 return error_mark_node;
12648
12649 if (explicitp == 2)
12650 DECL_NONCONVERTING_P (decl) = 1;
12651 if (staticp == 1)
12652 {
12653 int invalid_static = 0;
12654
12655 /* Don't allow a static member function in a class, and forbid
12656 declaring main to be static. */
12657 if (TREE_CODE (type) == METHOD_TYPE)
12658 {
12659 permerror (input_location, "cannot declare member function %qD to have "
12660 "static linkage", decl);
12661 invalid_static = 1;
12662 }
12663 else if (current_function_decl)
12664 {
12665 /* 7.1.1: There can be no static function declarations within a
12666 block. */
12667 error_at (declspecs->locations[ds_storage_class],
12668 "cannot declare static function inside another function");
12669 invalid_static = 1;
12670 }
12671
12672 if (invalid_static)
12673 {
12674 staticp = 0;
12675 storage_class = sc_none;
12676 }
12677 }
12678 }
12679 else
12680 {
12681 /* It's a variable. */
12682
12683 /* An uninitialized decl with `extern' is a reference. */
12684 decl = grokvardecl (type, dname, unqualified_id,
12685 declspecs,
12686 initialized,
12687 type_quals,
12688 inlinep,
12689 concept_p,
12690 template_count,
12691 ctype ? ctype : in_namespace);
12692 if (decl == NULL_TREE)
12693 return error_mark_node;
12694
12695 bad_specifiers (decl, BSP_VAR, virtualp,
12696 memfn_quals != TYPE_UNQUALIFIED,
12697 inlinep, friendp, raises != NULL_TREE,
12698 declspecs->locations);
12699
12700 if (ctype)
12701 {
12702 DECL_CONTEXT (decl) = ctype;
12703 if (staticp == 1)
12704 {
12705 permerror (input_location, "%<static%> may not be used when defining "
12706 "(as opposed to declaring) a static data member");
12707 staticp = 0;
12708 storage_class = sc_none;
12709 }
12710 if (storage_class == sc_register && TREE_STATIC (decl))
12711 {
12712 error ("static member %qD declared %<register%>", decl);
12713 storage_class = sc_none;
12714 }
12715 if (storage_class == sc_extern && pedantic)
12716 {
12717 pedwarn (input_location, OPT_Wpedantic,
12718 "cannot explicitly declare member %q#D to have "
12719 "extern linkage", decl);
12720 storage_class = sc_none;
12721 }
12722 }
12723 else if (constexpr_p && DECL_EXTERNAL (decl))
12724 {
12725 error ("declaration of %<constexpr%> variable %qD "
12726 "is not a definition", decl);
12727 constexpr_p = false;
12728 }
12729
12730 if (inlinep)
12731 mark_inline_variable (decl, declspecs->locations[ds_inline]);
12732 if (innermost_code == cdk_decomp)
12733 {
12734 gcc_assert (declarator && declarator->kind == cdk_decomp);
12735 DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12736 DECL_ARTIFICIAL (decl) = 1;
12737 fit_decomposition_lang_decl (decl, NULL_TREE);
12738 }
12739 }
12740
12741 if (VAR_P (decl) && !initialized)
12742 if (tree auto_node = type_uses_auto (type))
12743 if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12744 {
12745 location_t loc = declspecs->locations[ds_type_spec];
12746 error_at (loc, "declaration of %q#D has no initializer", decl);
12747 TREE_TYPE (decl) = error_mark_node;
12748 }
12749
12750 if (storage_class == sc_extern && initialized && !funcdef_flag)
12751 {
12752 if (toplevel_bindings_p ())
12753 {
12754 /* It's common practice (and completely valid) to have a const
12755 be initialized and declared extern. */
12756 if (!(type_quals & TYPE_QUAL_CONST))
12757 warning (0, "%qs initialized and declared %<extern%>", name);
12758 }
12759 else
12760 {
12761 error ("%qs has both %<extern%> and initializer", name);
12762 return error_mark_node;
12763 }
12764 }
12765
12766 /* Record `register' declaration for warnings on &
12767 and in case doing stupid register allocation. */
12768
12769 if (storage_class == sc_register)
12770 {
12771 DECL_REGISTER (decl) = 1;
12772 /* Warn about register storage specifiers on PARM_DECLs. */
12773 if (TREE_CODE (decl) == PARM_DECL)
12774 {
12775 if (cxx_dialect >= cxx17)
12776 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12777 "ISO C++17 does not allow %<register%> storage "
12778 "class specifier");
12779 else
12780 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12781 "%<register%> storage class specifier used");
12782 }
12783 }
12784 else if (storage_class == sc_extern)
12785 DECL_THIS_EXTERN (decl) = 1;
12786 else if (storage_class == sc_static)
12787 DECL_THIS_STATIC (decl) = 1;
12788
12789 /* Set constexpr flag on vars (functions got it in grokfndecl). */
12790 if (constexpr_p && VAR_P (decl))
12791 DECL_DECLARED_CONSTEXPR_P (decl) = true;
12792
12793 /* Record constancy and volatility on the DECL itself . There's
12794 no need to do this when processing a template; we'll do this
12795 for the instantiated declaration based on the type of DECL. */
12796 if (!processing_template_decl)
12797 cp_apply_type_quals_to_decl (type_quals, decl);
12798
12799 return decl;
12800 }
12801 }
12802 \f
12803 /* Subroutine of start_function. Ensure that each of the parameter
12804 types (as listed in PARMS) is complete, as is required for a
12805 function definition. */
12806
12807 static void
12808 require_complete_types_for_parms (tree parms)
12809 {
12810 for (; parms; parms = DECL_CHAIN (parms))
12811 {
12812 if (dependent_type_p (TREE_TYPE (parms)))
12813 continue;
12814 if (!VOID_TYPE_P (TREE_TYPE (parms))
12815 && complete_type_or_else (TREE_TYPE (parms), parms))
12816 {
12817 relayout_decl (parms);
12818 DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12819
12820 maybe_warn_parm_abi (TREE_TYPE (parms),
12821 DECL_SOURCE_LOCATION (parms));
12822 }
12823 else
12824 /* grokparms or complete_type_or_else will have already issued
12825 an error. */
12826 TREE_TYPE (parms) = error_mark_node;
12827 }
12828 }
12829
12830 /* Returns nonzero if T is a local variable. */
12831
12832 int
12833 local_variable_p (const_tree t)
12834 {
12835 if ((VAR_P (t)
12836 /* A VAR_DECL with a context that is a _TYPE is a static data
12837 member. */
12838 && !TYPE_P (CP_DECL_CONTEXT (t))
12839 /* Any other non-local variable must be at namespace scope. */
12840 && !DECL_NAMESPACE_SCOPE_P (t))
12841 || (TREE_CODE (t) == PARM_DECL))
12842 return 1;
12843
12844 return 0;
12845 }
12846
12847 /* Like local_variable_p, but suitable for use as a tree-walking
12848 function. */
12849
12850 static tree
12851 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12852 void * /*data*/)
12853 {
12854 if (local_variable_p (*tp)
12855 && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12856 return *tp;
12857 else if (TYPE_P (*tp))
12858 *walk_subtrees = 0;
12859
12860 return NULL_TREE;
12861 }
12862
12863 /* Check that ARG, which is a default-argument expression for a
12864 parameter DECL, is valid. Returns ARG, or ERROR_MARK_NODE, if
12865 something goes wrong. DECL may also be a _TYPE node, rather than a
12866 DECL, if there is no DECL available. */
12867
12868 tree
12869 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12870 {
12871 tree var;
12872 tree decl_type;
12873
12874 if (TREE_CODE (arg) == DEFAULT_ARG)
12875 /* We get a DEFAULT_ARG when looking at an in-class declaration
12876 with a default argument. Ignore the argument for now; we'll
12877 deal with it after the class is complete. */
12878 return arg;
12879
12880 if (TYPE_P (decl))
12881 {
12882 decl_type = decl;
12883 decl = NULL_TREE;
12884 }
12885 else
12886 decl_type = TREE_TYPE (decl);
12887
12888 if (arg == error_mark_node
12889 || decl == error_mark_node
12890 || TREE_TYPE (arg) == error_mark_node
12891 || decl_type == error_mark_node)
12892 /* Something already went wrong. There's no need to check
12893 further. */
12894 return error_mark_node;
12895
12896 /* [dcl.fct.default]
12897
12898 A default argument expression is implicitly converted to the
12899 parameter type. */
12900 ++cp_unevaluated_operand;
12901 /* Avoid digest_init clobbering the initializer. */
12902 tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
12903 perform_implicit_conversion_flags (decl_type, carg, complain,
12904 LOOKUP_IMPLICIT);
12905 --cp_unevaluated_operand;
12906
12907 /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12908 the call sites. */
12909 if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12910 && null_ptr_cst_p (arg))
12911 return nullptr_node;
12912
12913 /* [dcl.fct.default]
12914
12915 Local variables shall not be used in default argument
12916 expressions.
12917
12918 The keyword `this' shall not be used in a default argument of a
12919 member function. */
12920 var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12921 if (var)
12922 {
12923 if (complain & tf_warning_or_error)
12924 {
12925 if (DECL_NAME (var) == this_identifier)
12926 permerror (input_location, "default argument %qE uses %qD",
12927 arg, var);
12928 else
12929 error ("default argument %qE uses local variable %qD", arg, var);
12930 }
12931 return error_mark_node;
12932 }
12933
12934 /* All is well. */
12935 return arg;
12936 }
12937
12938 /* Returns a deprecated type used within TYPE, or NULL_TREE if none. */
12939
12940 static tree
12941 type_is_deprecated (tree type)
12942 {
12943 enum tree_code code;
12944 if (TREE_DEPRECATED (type))
12945 return type;
12946 if (TYPE_NAME (type))
12947 {
12948 if (TREE_DEPRECATED (TYPE_NAME (type)))
12949 return type;
12950 else
12951 return NULL_TREE;
12952 }
12953
12954 /* Do warn about using typedefs to a deprecated class. */
12955 if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12956 return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12957
12958 code = TREE_CODE (type);
12959
12960 if (code == POINTER_TYPE || code == REFERENCE_TYPE
12961 || code == OFFSET_TYPE || code == FUNCTION_TYPE
12962 || code == METHOD_TYPE || code == ARRAY_TYPE)
12963 return type_is_deprecated (TREE_TYPE (type));
12964
12965 if (TYPE_PTRMEMFUNC_P (type))
12966 return type_is_deprecated
12967 (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12968
12969 return NULL_TREE;
12970 }
12971
12972 /* Decode the list of parameter types for a function type.
12973 Given the list of things declared inside the parens,
12974 return a list of types.
12975
12976 If this parameter does not end with an ellipsis, we append
12977 void_list_node.
12978
12979 *PARMS is set to the chain of PARM_DECLs created. */
12980
12981 tree
12982 grokparms (tree parmlist, tree *parms)
12983 {
12984 tree result = NULL_TREE;
12985 tree decls = NULL_TREE;
12986 tree parm;
12987 int any_error = 0;
12988
12989 for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12990 {
12991 tree type = NULL_TREE;
12992 tree init = TREE_PURPOSE (parm);
12993 tree decl = TREE_VALUE (parm);
12994
12995 if (parm == void_list_node)
12996 break;
12997
12998 if (! decl || TREE_TYPE (decl) == error_mark_node)
12999 continue;
13000
13001 type = TREE_TYPE (decl);
13002 if (VOID_TYPE_P (type))
13003 {
13004 if (same_type_p (type, void_type_node)
13005 && !init
13006 && !DECL_NAME (decl) && !result
13007 && TREE_CHAIN (parm) == void_list_node)
13008 /* DR 577: A parameter list consisting of a single
13009 unnamed parameter of non-dependent type 'void'. */
13010 break;
13011 else if (cv_qualified_p (type))
13012 error_at (DECL_SOURCE_LOCATION (decl),
13013 "invalid use of cv-qualified type %qT in "
13014 "parameter declaration", type);
13015 else
13016 error_at (DECL_SOURCE_LOCATION (decl),
13017 "invalid use of type %<void%> in parameter "
13018 "declaration");
13019 /* It's not a good idea to actually create parameters of
13020 type `void'; other parts of the compiler assume that a
13021 void type terminates the parameter list. */
13022 type = error_mark_node;
13023 TREE_TYPE (decl) = error_mark_node;
13024 }
13025
13026 if (type != error_mark_node)
13027 {
13028 if (deprecated_state != DEPRECATED_SUPPRESS)
13029 {
13030 tree deptype = type_is_deprecated (type);
13031 if (deptype)
13032 cp_warn_deprecated_use (deptype);
13033 }
13034
13035 /* Top-level qualifiers on the parameters are
13036 ignored for function types. */
13037 type = cp_build_qualified_type (type, 0);
13038 if (TREE_CODE (type) == METHOD_TYPE)
13039 {
13040 error ("parameter %qD invalidly declared method type", decl);
13041 type = build_pointer_type (type);
13042 TREE_TYPE (decl) = type;
13043 }
13044 else if (abstract_virtuals_error (decl, type))
13045 any_error = 1; /* Seems like a good idea. */
13046 else if (cxx_dialect < cxx17 && INDIRECT_TYPE_P (type))
13047 {
13048 /* Before C++17 DR 393:
13049 [dcl.fct]/6, parameter types cannot contain pointers
13050 (references) to arrays of unknown bound. */
13051 tree t = TREE_TYPE (type);
13052 int ptr = TYPE_PTR_P (type);
13053
13054 while (1)
13055 {
13056 if (TYPE_PTR_P (t))
13057 ptr = 1;
13058 else if (TREE_CODE (t) != ARRAY_TYPE)
13059 break;
13060 else if (!TYPE_DOMAIN (t))
13061 break;
13062 t = TREE_TYPE (t);
13063 }
13064 if (TREE_CODE (t) == ARRAY_TYPE)
13065 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
13066 ptr
13067 ? G_("parameter %qD includes pointer to array of "
13068 "unknown bound %qT")
13069 : G_("parameter %qD includes reference to array of "
13070 "unknown bound %qT"),
13071 decl, t);
13072 }
13073
13074 if (any_error)
13075 init = NULL_TREE;
13076 else if (init && !processing_template_decl)
13077 init = check_default_argument (decl, init, tf_warning_or_error);
13078 }
13079
13080 DECL_CHAIN (decl) = decls;
13081 decls = decl;
13082 result = tree_cons (init, type, result);
13083 }
13084 decls = nreverse (decls);
13085 result = nreverse (result);
13086 if (parm)
13087 result = chainon (result, void_list_node);
13088 *parms = decls;
13089
13090 return result;
13091 }
13092
13093 \f
13094 /* D is a constructor or overloaded `operator='.
13095
13096 Let T be the class in which D is declared. Then, this function
13097 returns:
13098
13099 -1 if D's is an ill-formed constructor or copy assignment operator
13100 whose first parameter is of type `T'.
13101 0 if D is not a copy constructor or copy assignment
13102 operator.
13103 1 if D is a copy constructor or copy assignment operator whose
13104 first parameter is a reference to non-const qualified T.
13105 2 if D is a copy constructor or copy assignment operator whose
13106 first parameter is a reference to const qualified T.
13107
13108 This function can be used as a predicate. Positive values indicate
13109 a copy constructor and nonzero values indicate a copy assignment
13110 operator. */
13111
13112 int
13113 copy_fn_p (const_tree d)
13114 {
13115 tree args;
13116 tree arg_type;
13117 int result = 1;
13118
13119 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13120
13121 if (TREE_CODE (d) == TEMPLATE_DECL
13122 || (DECL_TEMPLATE_INFO (d)
13123 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13124 /* Instantiations of template member functions are never copy
13125 functions. Note that member functions of templated classes are
13126 represented as template functions internally, and we must
13127 accept those as copy functions. */
13128 return 0;
13129
13130 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13131 if (!args)
13132 return 0;
13133
13134 arg_type = TREE_VALUE (args);
13135 if (arg_type == error_mark_node)
13136 return 0;
13137
13138 if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
13139 {
13140 /* Pass by value copy assignment operator. */
13141 result = -1;
13142 }
13143 else if (TYPE_REF_P (arg_type)
13144 && !TYPE_REF_IS_RVALUE (arg_type)
13145 && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
13146 {
13147 if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
13148 result = 2;
13149 }
13150 else
13151 return 0;
13152
13153 args = TREE_CHAIN (args);
13154
13155 if (args && args != void_list_node && !TREE_PURPOSE (args))
13156 /* There are more non-optional args. */
13157 return 0;
13158
13159 return result;
13160 }
13161
13162 /* D is a constructor or overloaded `operator='.
13163
13164 Let T be the class in which D is declared. Then, this function
13165 returns true when D is a move constructor or move assignment
13166 operator, false otherwise. */
13167
13168 bool
13169 move_fn_p (const_tree d)
13170 {
13171 gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13172
13173 if (cxx_dialect == cxx98)
13174 /* There are no move constructors if we are in C++98 mode. */
13175 return false;
13176
13177 if (TREE_CODE (d) == TEMPLATE_DECL
13178 || (DECL_TEMPLATE_INFO (d)
13179 && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13180 /* Instantiations of template member functions are never move
13181 functions. Note that member functions of templated classes are
13182 represented as template functions internally, and we must
13183 accept those as move functions. */
13184 return 0;
13185
13186 return move_signature_fn_p (d);
13187 }
13188
13189 /* D is a constructor or overloaded `operator='.
13190
13191 Then, this function returns true when D has the same signature as a move
13192 constructor or move assignment operator (because either it is such a
13193 ctor/op= or it is a template specialization with the same signature),
13194 false otherwise. */
13195
13196 bool
13197 move_signature_fn_p (const_tree d)
13198 {
13199 tree args;
13200 tree arg_type;
13201 bool result = false;
13202
13203 args = FUNCTION_FIRST_USER_PARMTYPE (d);
13204 if (!args)
13205 return 0;
13206
13207 arg_type = TREE_VALUE (args);
13208 if (arg_type == error_mark_node)
13209 return 0;
13210
13211 if (TYPE_REF_P (arg_type)
13212 && TYPE_REF_IS_RVALUE (arg_type)
13213 && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
13214 DECL_CONTEXT (d)))
13215 result = true;
13216
13217 args = TREE_CHAIN (args);
13218
13219 if (args && args != void_list_node && !TREE_PURPOSE (args))
13220 /* There are more non-optional args. */
13221 return false;
13222
13223 return result;
13224 }
13225
13226 /* Remember any special properties of member function DECL. */
13227
13228 void
13229 grok_special_member_properties (tree decl)
13230 {
13231 tree class_type;
13232
13233 if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
13234 return;
13235
13236 class_type = DECL_CONTEXT (decl);
13237 if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
13238 {
13239 int ctor = copy_fn_p (decl);
13240
13241 if (!DECL_ARTIFICIAL (decl))
13242 TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
13243
13244 if (ctor > 0)
13245 {
13246 /* [class.copy]
13247
13248 A non-template constructor for class X is a copy
13249 constructor if its first parameter is of type X&, const
13250 X&, volatile X& or const volatile X&, and either there
13251 are no other parameters or else all other parameters have
13252 default arguments. */
13253 TYPE_HAS_COPY_CTOR (class_type) = 1;
13254 if (user_provided_p (decl))
13255 TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
13256 if (ctor > 1)
13257 TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
13258 }
13259 else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
13260 TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
13261 else if (move_fn_p (decl) && user_provided_p (decl))
13262 TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
13263 else if (is_list_ctor (decl))
13264 TYPE_HAS_LIST_CTOR (class_type) = 1;
13265
13266 if (DECL_DECLARED_CONSTEXPR_P (decl)
13267 && !ctor && !move_fn_p (decl))
13268 TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
13269 }
13270 else if (DECL_NAME (decl) == assign_op_identifier)
13271 {
13272 /* [class.copy]
13273
13274 A non-template assignment operator for class X is a copy
13275 assignment operator if its parameter is of type X, X&, const
13276 X&, volatile X& or const volatile X&. */
13277
13278 int assop = copy_fn_p (decl);
13279
13280 if (assop)
13281 {
13282 TYPE_HAS_COPY_ASSIGN (class_type) = 1;
13283 if (user_provided_p (decl))
13284 TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
13285 if (assop != 1)
13286 TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
13287 }
13288 else if (move_fn_p (decl) && user_provided_p (decl))
13289 TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
13290 }
13291 else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
13292 TYPE_HAS_CONVERSION (class_type) = true;
13293
13294 /* Destructors are handled in check_methods. */
13295 }
13296
13297 /* Check a constructor DECL has the correct form. Complains
13298 if the class has a constructor of the form X(X). */
13299
13300 bool
13301 grok_ctor_properties (const_tree ctype, const_tree decl)
13302 {
13303 int ctor_parm = copy_fn_p (decl);
13304
13305 if (ctor_parm < 0)
13306 {
13307 /* [class.copy]
13308
13309 A declaration of a constructor for a class X is ill-formed if
13310 its first parameter is of type (optionally cv-qualified) X
13311 and either there are no other parameters or else all other
13312 parameters have default arguments.
13313
13314 We *don't* complain about member template instantiations that
13315 have this form, though; they can occur as we try to decide
13316 what constructor to use during overload resolution. Since
13317 overload resolution will never prefer such a constructor to
13318 the non-template copy constructor (which is either explicitly
13319 or implicitly defined), there's no need to worry about their
13320 existence. Theoretically, they should never even be
13321 instantiated, but that's hard to forestall. */
13322 error ("invalid constructor; you probably meant %<%T (const %T&)%>",
13323 ctype, ctype);
13324 return false;
13325 }
13326
13327 return true;
13328 }
13329
13330 /* DECL is a declaration for an overloaded or conversion operator. If
13331 COMPLAIN is true, errors are issued for invalid declarations. */
13332
13333 bool
13334 grok_op_properties (tree decl, bool complain)
13335 {
13336 tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13337 bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
13338 tree name = DECL_NAME (decl);
13339 location_t loc = DECL_SOURCE_LOCATION (decl);
13340
13341 tree class_type = DECL_CONTEXT (decl);
13342 if (class_type && !CLASS_TYPE_P (class_type))
13343 class_type = NULL_TREE;
13344
13345 tree_code operator_code;
13346 unsigned op_flags;
13347 if (IDENTIFIER_CONV_OP_P (name))
13348 {
13349 /* Conversion operators are TYPE_EXPR for the purposes of this
13350 function. */
13351 operator_code = TYPE_EXPR;
13352 op_flags = OVL_OP_FLAG_UNARY;
13353 }
13354 else
13355 {
13356 const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13357
13358 operator_code = ovl_op->tree_code;
13359 op_flags = ovl_op->flags;
13360 gcc_checking_assert (operator_code != ERROR_MARK);
13361 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13362 }
13363
13364 if (op_flags & OVL_OP_FLAG_ALLOC)
13365 {
13366 /* operator new and operator delete are quite special. */
13367 if (class_type)
13368 switch (op_flags)
13369 {
13370 case OVL_OP_FLAG_ALLOC:
13371 TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13372 break;
13373
13374 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13375 TYPE_GETS_DELETE (class_type) |= 1;
13376 break;
13377
13378 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13379 TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13380 break;
13381
13382 case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13383 TYPE_GETS_DELETE (class_type) |= 2;
13384 break;
13385
13386 default:
13387 gcc_unreachable ();
13388 }
13389
13390 /* [basic.std.dynamic.allocation]/1:
13391
13392 A program is ill-formed if an allocation function is declared
13393 in a namespace scope other than global scope or declared
13394 static in global scope.
13395
13396 The same also holds true for deallocation functions. */
13397 if (DECL_NAMESPACE_SCOPE_P (decl))
13398 {
13399 if (CP_DECL_CONTEXT (decl) != global_namespace)
13400 {
13401 error_at (loc, "%qD may not be declared within a namespace",
13402 decl);
13403 return false;
13404 }
13405
13406 if (!TREE_PUBLIC (decl))
13407 {
13408 error_at (loc, "%qD may not be declared as static", decl);
13409 return false;
13410 }
13411 }
13412
13413 if (op_flags & OVL_OP_FLAG_DELETE)
13414 TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl), loc);
13415 else
13416 {
13417 DECL_IS_OPERATOR_NEW (decl) = 1;
13418 TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl), loc);
13419 }
13420
13421 return true;
13422 }
13423
13424 /* An operator function must either be a non-static member function
13425 or have at least one parameter of a class, a reference to a class,
13426 an enumeration, or a reference to an enumeration. 13.4.0.6 */
13427 if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13428 {
13429 if (operator_code == TYPE_EXPR
13430 || operator_code == CALL_EXPR
13431 || operator_code == COMPONENT_REF
13432 || operator_code == ARRAY_REF
13433 || operator_code == NOP_EXPR)
13434 {
13435 error_at (loc, "%qD must be a nonstatic member function", decl);
13436 return false;
13437 }
13438
13439 if (DECL_STATIC_FUNCTION_P (decl))
13440 {
13441 error_at (loc, "%qD must be either a non-static member "
13442 "function or a non-member function", decl);
13443 return false;
13444 }
13445
13446 for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13447 {
13448 if (!arg || arg == void_list_node)
13449 {
13450 if (complain)
13451 error_at(loc, "%qD must have an argument of class or "
13452 "enumerated type", decl);
13453 return false;
13454 }
13455
13456 tree type = non_reference (TREE_VALUE (arg));
13457 if (type == error_mark_node)
13458 return false;
13459
13460 /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13461 because these checks are performed even on template
13462 functions. */
13463 if (MAYBE_CLASS_TYPE_P (type)
13464 || TREE_CODE (type) == ENUMERAL_TYPE)
13465 break;
13466 }
13467 }
13468
13469 if (operator_code == CALL_EXPR)
13470 /* There are no further restrictions on the arguments to an overloaded
13471 "operator ()". */
13472 return true;
13473
13474 if (operator_code == COND_EXPR)
13475 {
13476 /* 13.4.0.3 */
13477 error_at (loc, "ISO C++ prohibits overloading operator ?:");
13478 return false;
13479 }
13480
13481 /* Count the number of arguments and check for ellipsis. */
13482 int arity = 0;
13483 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13484 {
13485 if (!arg)
13486 {
13487 /* Variadic. */
13488 error_at (loc, "%qD must not have variable number of arguments",
13489 decl);
13490 return false;
13491 }
13492 ++arity;
13493 }
13494
13495 /* Verify correct number of arguments. */
13496 switch (op_flags)
13497 {
13498 case OVL_OP_FLAG_AMBIARY:
13499 if (arity == 1)
13500 {
13501 /* We have a unary instance of an ambi-ary op. Remap to the
13502 unary one. */
13503 unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13504 const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13505 gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13506 operator_code = ovl_op->tree_code;
13507 DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13508 }
13509 else if (arity != 2)
13510 {
13511 /* This was an ambiguous operator but is invalid. */
13512 error_at (loc,
13513 methodp
13514 ? G_("%qD must have either zero or one argument")
13515 : G_("%qD must have either one or two arguments"), decl);
13516 return false;
13517 }
13518 else if ((operator_code == POSTINCREMENT_EXPR
13519 || operator_code == POSTDECREMENT_EXPR)
13520 && ! processing_template_decl
13521 /* x++ and x--'s second argument must be an int. */
13522 && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13523 integer_type_node))
13524 {
13525 error_at (loc,
13526 methodp
13527 ? G_("postfix %qD must have %<int%> as its argument")
13528 : G_("postfix %qD must have %<int%> as its second argument"),
13529 decl);
13530 return false;
13531 }
13532 break;
13533
13534 case OVL_OP_FLAG_UNARY:
13535 if (arity != 1)
13536 {
13537 error_at (loc,
13538 methodp
13539 ? G_("%qD must have no arguments")
13540 : G_("%qD must have exactly one argument"), decl);
13541 return false;
13542 }
13543 break;
13544
13545 case OVL_OP_FLAG_BINARY:
13546 if (arity != 2)
13547 {
13548 error_at (loc,
13549 methodp
13550 ? G_("%qD must have exactly one argument")
13551 : G_("%qD must have exactly two arguments"), decl);
13552 return false;
13553 }
13554 break;
13555
13556 default:
13557 gcc_unreachable ();
13558 }
13559
13560 /* There can be no default arguments. */
13561 for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13562 if (TREE_PURPOSE (arg))
13563 {
13564 TREE_PURPOSE (arg) = NULL_TREE;
13565 error_at (loc, "%qD cannot have default arguments", decl);
13566 return false;
13567 }
13568
13569 /* At this point the declaration is well-formed. It may not be
13570 sensible though. */
13571
13572 /* Check member function warnings only on the in-class declaration.
13573 There's no point warning on an out-of-class definition. */
13574 if (class_type && class_type != current_class_type)
13575 return true;
13576
13577 /* Warn about conversion operators that will never be used. */
13578 if (IDENTIFIER_CONV_OP_P (name)
13579 && ! DECL_TEMPLATE_INFO (decl)
13580 && warn_conversion)
13581 {
13582 tree t = TREE_TYPE (name);
13583 int ref = TYPE_REF_P (t);
13584
13585 if (ref)
13586 t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13587
13588 if (VOID_TYPE_P (t))
13589 warning_at (loc, OPT_Wconversion,
13590 ref
13591 ? G_("conversion to a reference to void "
13592 "will never use a type conversion operator")
13593 : G_("conversion to void "
13594 "will never use a type conversion operator"));
13595 else if (class_type)
13596 {
13597 if (t == class_type)
13598 warning_at (loc, OPT_Wconversion,
13599 ref
13600 ? G_("conversion to a reference to the same type "
13601 "will never use a type conversion operator")
13602 : G_("conversion to the same type "
13603 "will never use a type conversion operator"));
13604 /* Don't force t to be complete here. */
13605 else if (MAYBE_CLASS_TYPE_P (t)
13606 && COMPLETE_TYPE_P (t)
13607 && DERIVED_FROM_P (t, class_type))
13608 warning_at (loc, OPT_Wconversion,
13609 ref
13610 ? G_("conversion to a reference to a base class "
13611 "will never use a type conversion operator")
13612 : G_("conversion to a base class "
13613 "will never use a type conversion operator"));
13614 }
13615 }
13616
13617 if (!warn_ecpp)
13618 return true;
13619
13620 /* Effective C++ rules below. */
13621
13622 /* More Effective C++ rule 7. */
13623 if (operator_code == TRUTH_ANDIF_EXPR
13624 || operator_code == TRUTH_ORIF_EXPR
13625 || operator_code == COMPOUND_EXPR)
13626 warning_at (loc, OPT_Weffc__,
13627 "user-defined %qD always evaluates both arguments", decl);
13628
13629 /* More Effective C++ rule 6. */
13630 if (operator_code == POSTINCREMENT_EXPR
13631 || operator_code == POSTDECREMENT_EXPR
13632 || operator_code == PREINCREMENT_EXPR
13633 || operator_code == PREDECREMENT_EXPR)
13634 {
13635 tree arg = TREE_VALUE (argtypes);
13636 tree ret = TREE_TYPE (TREE_TYPE (decl));
13637 if (methodp || TYPE_REF_P (arg))
13638 arg = TREE_TYPE (arg);
13639 arg = TYPE_MAIN_VARIANT (arg);
13640
13641 if (operator_code == PREINCREMENT_EXPR
13642 || operator_code == PREDECREMENT_EXPR)
13643 {
13644 if (!TYPE_REF_P (ret)
13645 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13646 warning_at (loc, OPT_Weffc__, "prefix %qD should return %qT", decl,
13647 build_reference_type (arg));
13648 }
13649 else
13650 {
13651 if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13652 warning_at (loc, OPT_Weffc__,
13653 "postfix %qD should return %qT", decl, arg);
13654 }
13655 }
13656
13657 /* Effective C++ rule 23. */
13658 if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13659 && (operator_code == PLUS_EXPR
13660 || operator_code == MINUS_EXPR
13661 || operator_code == TRUNC_DIV_EXPR
13662 || operator_code == MULT_EXPR
13663 || operator_code == TRUNC_MOD_EXPR)
13664 && TYPE_REF_P (TREE_TYPE (TREE_TYPE (decl))))
13665 warning_at (loc, OPT_Weffc__, "%qD should return by value", decl);
13666
13667 return true;
13668 }
13669 \f
13670 /* Return a string giving the keyword associate with CODE. */
13671
13672 static const char *
13673 tag_name (enum tag_types code)
13674 {
13675 switch (code)
13676 {
13677 case record_type:
13678 return "struct";
13679 case class_type:
13680 return "class";
13681 case union_type:
13682 return "union";
13683 case enum_type:
13684 return "enum";
13685 case typename_type:
13686 return "typename";
13687 default:
13688 gcc_unreachable ();
13689 }
13690 }
13691
13692 /* Name lookup in an elaborated-type-specifier (after the keyword
13693 indicated by TAG_CODE) has found the TYPE_DECL DECL. If the
13694 elaborated-type-specifier is invalid, issue a diagnostic and return
13695 error_mark_node; otherwise, return the *_TYPE to which it referred.
13696 If ALLOW_TEMPLATE_P is true, TYPE may be a class template. */
13697
13698 tree
13699 check_elaborated_type_specifier (enum tag_types tag_code,
13700 tree decl,
13701 bool allow_template_p)
13702 {
13703 tree type;
13704
13705 /* In the case of:
13706
13707 struct S { struct S *p; };
13708
13709 name lookup will find the TYPE_DECL for the implicit "S::S"
13710 typedef. Adjust for that here. */
13711 if (DECL_SELF_REFERENCE_P (decl))
13712 decl = TYPE_NAME (TREE_TYPE (decl));
13713
13714 type = TREE_TYPE (decl);
13715
13716 /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13717 is false for this case as well. */
13718 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13719 {
13720 error ("using template type parameter %qT after %qs",
13721 type, tag_name (tag_code));
13722 return error_mark_node;
13723 }
13724 /* Accept template template parameters. */
13725 else if (allow_template_p
13726 && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13727 || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13728 ;
13729 /* [dcl.type.elab]
13730
13731 If the identifier resolves to a typedef-name or the
13732 simple-template-id resolves to an alias template
13733 specialization, the elaborated-type-specifier is ill-formed.
13734
13735 In other words, the only legitimate declaration to use in the
13736 elaborated type specifier is the implicit typedef created when
13737 the type is declared. */
13738 else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13739 && !DECL_SELF_REFERENCE_P (decl)
13740 && tag_code != typename_type)
13741 {
13742 if (alias_template_specialization_p (type))
13743 error ("using alias template specialization %qT after %qs",
13744 type, tag_name (tag_code));
13745 else
13746 error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13747 inform (DECL_SOURCE_LOCATION (decl),
13748 "%qD has a previous declaration here", decl);
13749 return error_mark_node;
13750 }
13751 else if (TREE_CODE (type) != RECORD_TYPE
13752 && TREE_CODE (type) != UNION_TYPE
13753 && tag_code != enum_type
13754 && tag_code != typename_type)
13755 {
13756 error ("%qT referred to as %qs", type, tag_name (tag_code));
13757 inform (location_of (type), "%qT has a previous declaration here", type);
13758 return error_mark_node;
13759 }
13760 else if (TREE_CODE (type) != ENUMERAL_TYPE
13761 && tag_code == enum_type)
13762 {
13763 error ("%qT referred to as enum", type);
13764 inform (location_of (type), "%qT has a previous declaration here", type);
13765 return error_mark_node;
13766 }
13767 else if (!allow_template_p
13768 && TREE_CODE (type) == RECORD_TYPE
13769 && CLASSTYPE_IS_TEMPLATE (type))
13770 {
13771 /* If a class template appears as elaborated type specifier
13772 without a template header such as:
13773
13774 template <class T> class C {};
13775 void f(class C); // No template header here
13776
13777 then the required template argument is missing. */
13778 error ("template argument required for %<%s %T%>",
13779 tag_name (tag_code),
13780 DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13781 return error_mark_node;
13782 }
13783
13784 return type;
13785 }
13786
13787 /* Lookup NAME in elaborate type specifier in scope according to
13788 SCOPE and issue diagnostics if necessary.
13789 Return *_TYPE node upon success, NULL_TREE when the NAME is not
13790 found, and ERROR_MARK_NODE for type error. */
13791
13792 static tree
13793 lookup_and_check_tag (enum tag_types tag_code, tree name,
13794 tag_scope scope, bool template_header_p)
13795 {
13796 tree t;
13797 tree decl;
13798 if (scope == ts_global)
13799 {
13800 /* First try ordinary name lookup, ignoring hidden class name
13801 injected via friend declaration. */
13802 decl = lookup_name_prefer_type (name, 2);
13803 decl = strip_using_decl (decl);
13804 /* If that fails, the name will be placed in the smallest
13805 non-class, non-function-prototype scope according to 3.3.1/5.
13806 We may already have a hidden name declared as friend in this
13807 scope. So lookup again but not ignoring hidden names.
13808 If we find one, that name will be made visible rather than
13809 creating a new tag. */
13810 if (!decl)
13811 decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13812 }
13813 else
13814 decl = lookup_type_scope (name, scope);
13815
13816 if (decl
13817 && (DECL_CLASS_TEMPLATE_P (decl)
13818 /* If scope is ts_current we're defining a class, so ignore a
13819 template template parameter. */
13820 || (scope != ts_current
13821 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13822 decl = DECL_TEMPLATE_RESULT (decl);
13823
13824 if (decl && TREE_CODE (decl) == TYPE_DECL)
13825 {
13826 /* Look for invalid nested type:
13827 class C {
13828 class C {};
13829 }; */
13830 if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13831 {
13832 error ("%qD has the same name as the class in which it is "
13833 "declared",
13834 decl);
13835 return error_mark_node;
13836 }
13837
13838 /* Two cases we need to consider when deciding if a class
13839 template is allowed as an elaborated type specifier:
13840 1. It is a self reference to its own class.
13841 2. It comes with a template header.
13842
13843 For example:
13844
13845 template <class T> class C {
13846 class C *c1; // DECL_SELF_REFERENCE_P is true
13847 class D;
13848 };
13849 template <class U> class C; // template_header_p is true
13850 template <class T> class C<T>::D {
13851 class C *c2; // DECL_SELF_REFERENCE_P is true
13852 }; */
13853
13854 t = check_elaborated_type_specifier (tag_code,
13855 decl,
13856 template_header_p
13857 | DECL_SELF_REFERENCE_P (decl));
13858 if (template_header_p && t && CLASS_TYPE_P (t)
13859 && (!CLASSTYPE_TEMPLATE_INFO (t)
13860 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13861 {
13862 error ("%qT is not a template", t);
13863 inform (location_of (t), "previous declaration here");
13864 if (TYPE_CLASS_SCOPE_P (t)
13865 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13866 inform (input_location,
13867 "perhaps you want to explicitly add %<%T::%>",
13868 TYPE_CONTEXT (t));
13869 t = error_mark_node;
13870 }
13871
13872 return t;
13873 }
13874 else if (decl && TREE_CODE (decl) == TREE_LIST)
13875 {
13876 error ("reference to %qD is ambiguous", name);
13877 print_candidates (decl);
13878 return error_mark_node;
13879 }
13880 else
13881 return NULL_TREE;
13882 }
13883
13884 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13885 Define the tag as a forward-reference if it is not defined.
13886
13887 If a declaration is given, process it here, and report an error if
13888 multiple declarations are not identical.
13889
13890 SCOPE is TS_CURRENT when this is also a definition. Only look in
13891 the current frame for the name (since C++ allows new names in any
13892 scope.) It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13893 declaration. Only look beginning from the current scope outward up
13894 till the nearest non-class scope. Otherwise it is TS_GLOBAL.
13895
13896 TEMPLATE_HEADER_P is true when this declaration is preceded by
13897 a set of template parameters. */
13898
13899 static tree
13900 xref_tag_1 (enum tag_types tag_code, tree name,
13901 tag_scope scope, bool template_header_p)
13902 {
13903 enum tree_code code;
13904 tree context = NULL_TREE;
13905
13906 gcc_assert (identifier_p (name));
13907
13908 switch (tag_code)
13909 {
13910 case record_type:
13911 case class_type:
13912 code = RECORD_TYPE;
13913 break;
13914 case union_type:
13915 code = UNION_TYPE;
13916 break;
13917 case enum_type:
13918 code = ENUMERAL_TYPE;
13919 break;
13920 default:
13921 gcc_unreachable ();
13922 }
13923
13924 /* In case of anonymous name, xref_tag is only called to
13925 make type node and push name. Name lookup is not required. */
13926 tree t = NULL_TREE;
13927 if (scope != ts_lambda && !anon_aggrname_p (name))
13928 t = lookup_and_check_tag (tag_code, name, scope, template_header_p);
13929
13930 if (t == error_mark_node)
13931 return error_mark_node;
13932
13933 if (scope != ts_current && t && current_class_type
13934 && template_class_depth (current_class_type)
13935 && template_header_p)
13936 {
13937 if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13938 return t;
13939
13940 /* Since SCOPE is not TS_CURRENT, we are not looking at a
13941 definition of this tag. Since, in addition, we are currently
13942 processing a (member) template declaration of a template
13943 class, we must be very careful; consider:
13944
13945 template <class X> struct S1
13946
13947 template <class U> struct S2
13948 {
13949 template <class V> friend struct S1;
13950 };
13951
13952 Here, the S2::S1 declaration should not be confused with the
13953 outer declaration. In particular, the inner version should
13954 have a template parameter of level 2, not level 1.
13955
13956 On the other hand, when presented with:
13957
13958 template <class T> struct S1
13959 {
13960 template <class U> struct S2 {};
13961 template <class U> friend struct S2;
13962 };
13963
13964 the friend must find S1::S2 eventually. We accomplish this
13965 by making sure that the new type we create to represent this
13966 declaration has the right TYPE_CONTEXT. */
13967 context = TYPE_CONTEXT (t);
13968 t = NULL_TREE;
13969 }
13970
13971 if (! t)
13972 {
13973 /* If no such tag is yet defined, create a forward-reference node
13974 and record it as the "definition".
13975 When a real declaration of this type is found,
13976 the forward-reference will be altered into a real type. */
13977 if (code == ENUMERAL_TYPE)
13978 {
13979 error ("use of enum %q#D without previous declaration", name);
13980 return error_mark_node;
13981 }
13982 else
13983 {
13984 t = make_class_type (code);
13985 TYPE_CONTEXT (t) = context;
13986 if (scope == ts_lambda)
13987 {
13988 /* Mark it as a lambda type. */
13989 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13990 /* And push it into current scope. */
13991 scope = ts_current;
13992 }
13993 t = pushtag (name, t, scope);
13994 }
13995 }
13996 else
13997 {
13998 if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13999 {
14000 /* Check that we aren't trying to overload a class with different
14001 constraints. */
14002 tree constr = NULL_TREE;
14003 if (current_template_parms)
14004 {
14005 tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
14006 constr = build_constraints (reqs, NULL_TREE);
14007 }
14008 if (!redeclare_class_template (t, current_template_parms, constr))
14009 return error_mark_node;
14010 }
14011 else if (!processing_template_decl
14012 && CLASS_TYPE_P (t)
14013 && CLASSTYPE_IS_TEMPLATE (t))
14014 {
14015 error ("redeclaration of %qT as a non-template", t);
14016 inform (location_of (t), "previous declaration %qD", t);
14017 return error_mark_node;
14018 }
14019
14020 if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
14021 {
14022 /* This is no longer an invisible friend. Make it
14023 visible. */
14024 tree decl = TYPE_NAME (t);
14025
14026 DECL_ANTICIPATED (decl) = false;
14027 DECL_FRIEND_P (decl) = false;
14028
14029 if (TYPE_TEMPLATE_INFO (t))
14030 {
14031 tree tmpl = TYPE_TI_TEMPLATE (t);
14032 DECL_ANTICIPATED (tmpl) = false;
14033 DECL_FRIEND_P (tmpl) = false;
14034 }
14035 }
14036 }
14037
14038 return t;
14039 }
14040
14041 /* Wrapper for xref_tag_1. */
14042
14043 tree
14044 xref_tag (enum tag_types tag_code, tree name,
14045 tag_scope scope, bool template_header_p)
14046 {
14047 tree ret;
14048 bool subtime;
14049 subtime = timevar_cond_start (TV_NAME_LOOKUP);
14050 ret = xref_tag_1 (tag_code, name, scope, template_header_p);
14051 timevar_cond_stop (TV_NAME_LOOKUP, subtime);
14052 return ret;
14053 }
14054
14055
14056 tree
14057 xref_tag_from_type (tree old, tree id, tag_scope scope)
14058 {
14059 enum tag_types tag_kind;
14060
14061 if (TREE_CODE (old) == RECORD_TYPE)
14062 tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
14063 else
14064 tag_kind = union_type;
14065
14066 if (id == NULL_TREE)
14067 id = TYPE_IDENTIFIER (old);
14068
14069 return xref_tag (tag_kind, id, scope, false);
14070 }
14071
14072 /* Create the binfo hierarchy for REF with (possibly NULL) base list
14073 BASE_LIST. For each element on BASE_LIST the TREE_PURPOSE is an
14074 access_* node, and the TREE_VALUE is the type of the base-class.
14075 Non-NULL TREE_TYPE indicates virtual inheritance. */
14076
14077 void
14078 xref_basetypes (tree ref, tree base_list)
14079 {
14080 tree *basep;
14081 tree binfo, base_binfo;
14082 unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases. */
14083 unsigned max_bases = 0; /* Maximum direct bases. */
14084 unsigned max_dvbases = 0; /* Maximum direct virtual bases. */
14085 int i;
14086 tree default_access;
14087 tree igo_prev; /* Track Inheritance Graph Order. */
14088
14089 if (ref == error_mark_node)
14090 return;
14091
14092 /* The base of a derived class is private by default, all others are
14093 public. */
14094 default_access = (TREE_CODE (ref) == RECORD_TYPE
14095 && CLASSTYPE_DECLARED_CLASS (ref)
14096 ? access_private_node : access_public_node);
14097
14098 /* First, make sure that any templates in base-classes are
14099 instantiated. This ensures that if we call ourselves recursively
14100 we do not get confused about which classes are marked and which
14101 are not. */
14102 basep = &base_list;
14103 while (*basep)
14104 {
14105 tree basetype = TREE_VALUE (*basep);
14106
14107 /* The dependent_type_p call below should really be dependent_scope_p
14108 so that we give a hard error about using an incomplete type as a
14109 base, but we allow it with a pedwarn for backward
14110 compatibility. */
14111 if (processing_template_decl
14112 && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
14113 cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
14114 if (!dependent_type_p (basetype)
14115 && !complete_type_or_else (basetype, NULL))
14116 /* An incomplete type. Remove it from the list. */
14117 *basep = TREE_CHAIN (*basep);
14118 else
14119 {
14120 max_bases++;
14121 if (TREE_TYPE (*basep))
14122 max_dvbases++;
14123 if (CLASS_TYPE_P (basetype))
14124 max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14125 basep = &TREE_CHAIN (*basep);
14126 }
14127 }
14128 max_vbases += max_dvbases;
14129
14130 TYPE_MARKED_P (ref) = 1;
14131
14132 /* The binfo slot should be empty, unless this is an (ill-formed)
14133 redefinition. */
14134 gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
14135
14136 gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
14137
14138 binfo = make_tree_binfo (max_bases);
14139
14140 TYPE_BINFO (ref) = binfo;
14141 BINFO_OFFSET (binfo) = size_zero_node;
14142 BINFO_TYPE (binfo) = ref;
14143
14144 /* Apply base-class info set up to the variants of this type. */
14145 fixup_type_variants (ref);
14146
14147 if (max_bases)
14148 {
14149 vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
14150 /* A C++98 POD cannot have base classes. */
14151 CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
14152
14153 if (TREE_CODE (ref) == UNION_TYPE)
14154 {
14155 error ("derived union %qT invalid", ref);
14156 return;
14157 }
14158 }
14159
14160 if (max_bases > 1)
14161 warning (OPT_Wmultiple_inheritance,
14162 "%qT defined with multiple direct bases", ref);
14163
14164 if (max_vbases)
14165 {
14166 /* An aggregate can't have virtual base classes. */
14167 CLASSTYPE_NON_AGGREGATE (ref) = true;
14168
14169 vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
14170
14171 if (max_dvbases)
14172 warning (OPT_Wvirtual_inheritance,
14173 "%qT defined with direct virtual base", ref);
14174 }
14175
14176 for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
14177 {
14178 tree access = TREE_PURPOSE (base_list);
14179 int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
14180 tree basetype = TREE_VALUE (base_list);
14181
14182 if (access == access_default_node)
14183 access = default_access;
14184
14185 /* Before C++17, an aggregate cannot have base classes. In C++17, an
14186 aggregate can't have virtual, private, or protected base classes. */
14187 if (cxx_dialect < cxx17
14188 || access != access_public_node
14189 || via_virtual)
14190 CLASSTYPE_NON_AGGREGATE (ref) = true;
14191
14192 if (PACK_EXPANSION_P (basetype))
14193 basetype = PACK_EXPANSION_PATTERN (basetype);
14194 if (TREE_CODE (basetype) == TYPE_DECL)
14195 basetype = TREE_TYPE (basetype);
14196 if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
14197 {
14198 error ("base type %qT fails to be a struct or class type",
14199 basetype);
14200 goto dropped_base;
14201 }
14202
14203 base_binfo = NULL_TREE;
14204 if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
14205 {
14206 base_binfo = TYPE_BINFO (basetype);
14207 /* The original basetype could have been a typedef'd type. */
14208 basetype = BINFO_TYPE (base_binfo);
14209
14210 /* Inherit flags from the base. */
14211 TYPE_HAS_NEW_OPERATOR (ref)
14212 |= TYPE_HAS_NEW_OPERATOR (basetype);
14213 TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
14214 |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
14215 TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
14216 TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
14217 CLASSTYPE_DIAMOND_SHAPED_P (ref)
14218 |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
14219 CLASSTYPE_REPEATED_BASE_P (ref)
14220 |= CLASSTYPE_REPEATED_BASE_P (basetype);
14221 }
14222
14223 /* We must do this test after we've seen through a typedef
14224 type. */
14225 if (TYPE_MARKED_P (basetype))
14226 {
14227 if (basetype == ref)
14228 error ("recursive type %qT undefined", basetype);
14229 else
14230 error ("duplicate base type %qT invalid", basetype);
14231 goto dropped_base;
14232 }
14233
14234 if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
14235 /* Regenerate the pack expansion for the bases. */
14236 basetype = make_pack_expansion (basetype);
14237
14238 TYPE_MARKED_P (basetype) = 1;
14239
14240 base_binfo = copy_binfo (base_binfo, basetype, ref,
14241 &igo_prev, via_virtual);
14242 if (!BINFO_INHERITANCE_CHAIN (base_binfo))
14243 BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
14244
14245 BINFO_BASE_APPEND (binfo, base_binfo);
14246 BINFO_BASE_ACCESS_APPEND (binfo, access);
14247 continue;
14248
14249 dropped_base:
14250 /* Update max_vbases to reflect the reality that we are dropping
14251 this base: if it reaches zero we want to undo the vec_alloc
14252 above to avoid inconsistencies during error-recovery: eg, in
14253 build_special_member_call, CLASSTYPE_VBASECLASSES non null
14254 and vtt null (c++/27952). */
14255 if (via_virtual)
14256 max_vbases--;
14257 if (CLASS_TYPE_P (basetype))
14258 max_vbases
14259 -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14260 }
14261
14262 if (CLASSTYPE_VBASECLASSES (ref)
14263 && max_vbases == 0)
14264 vec_free (CLASSTYPE_VBASECLASSES (ref));
14265
14266 if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
14267 /* If we didn't get max_vbases vbases, we must have shared at
14268 least one of them, and are therefore diamond shaped. */
14269 CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
14270
14271 /* Unmark all the types. */
14272 for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
14273 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14274 TYPE_MARKED_P (ref) = 0;
14275
14276 /* Now see if we have a repeated base type. */
14277 if (!CLASSTYPE_REPEATED_BASE_P (ref))
14278 {
14279 for (base_binfo = binfo; base_binfo;
14280 base_binfo = TREE_CHAIN (base_binfo))
14281 {
14282 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14283 {
14284 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
14285 break;
14286 }
14287 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
14288 }
14289 for (base_binfo = binfo; base_binfo;
14290 base_binfo = TREE_CHAIN (base_binfo))
14291 if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14292 TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14293 else
14294 break;
14295 }
14296 }
14297
14298 \f
14299 /* Copies the enum-related properties from type SRC to type DST.
14300 Used with the underlying type of an enum and the enum itself. */
14301 static void
14302 copy_type_enum (tree dst, tree src)
14303 {
14304 tree t;
14305 for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
14306 {
14307 TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
14308 TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
14309 TYPE_SIZE (t) = TYPE_SIZE (src);
14310 TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
14311 SET_TYPE_MODE (dst, TYPE_MODE (src));
14312 TYPE_PRECISION (t) = TYPE_PRECISION (src);
14313 unsigned valign = TYPE_ALIGN (src);
14314 if (TYPE_USER_ALIGN (t))
14315 valign = MAX (valign, TYPE_ALIGN (t));
14316 else
14317 TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
14318 SET_TYPE_ALIGN (t, valign);
14319 TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
14320 }
14321 }
14322
14323 /* Begin compiling the definition of an enumeration type.
14324 NAME is its name,
14325
14326 if ENUMTYPE is not NULL_TREE then the type has alredy been found.
14327
14328 UNDERLYING_TYPE is the type that will be used as the storage for
14329 the enumeration type. This should be NULL_TREE if no storage type
14330 was specified.
14331
14332 ATTRIBUTES are any attributes specified after the enum-key.
14333
14334 SCOPED_ENUM_P is true if this is a scoped enumeration type.
14335
14336 if IS_NEW is not NULL, gets TRUE iff a new type is created.
14337
14338 Returns the type object, as yet incomplete.
14339 Also records info about it so that build_enumerator
14340 may be used to declare the individual values as they are read. */
14341
14342 tree
14343 start_enum (tree name, tree enumtype, tree underlying_type,
14344 tree attributes, bool scoped_enum_p, bool *is_new)
14345 {
14346 tree prevtype = NULL_TREE;
14347 gcc_assert (identifier_p (name));
14348
14349 if (is_new)
14350 *is_new = false;
14351 /* [C++0x dcl.enum]p5:
14352
14353 If not explicitly specified, the underlying type of a scoped
14354 enumeration type is int. */
14355 if (!underlying_type && scoped_enum_p)
14356 underlying_type = integer_type_node;
14357
14358 if (underlying_type)
14359 underlying_type = cv_unqualified (underlying_type);
14360
14361 /* If this is the real definition for a previous forward reference,
14362 fill in the contents in the same object that used to be the
14363 forward reference. */
14364 if (!enumtype)
14365 enumtype = lookup_and_check_tag (enum_type, name,
14366 /*tag_scope=*/ts_current,
14367 /*template_header_p=*/false);
14368
14369 /* In case of a template_decl, the only check that should be deferred
14370 to instantiation time is the comparison of underlying types. */
14371 if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14372 {
14373 if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14374 {
14375 error_at (input_location, "scoped/unscoped mismatch "
14376 "in enum %q#T", enumtype);
14377 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14378 "previous definition here");
14379 enumtype = error_mark_node;
14380 }
14381 else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14382 {
14383 error_at (input_location, "underlying type mismatch "
14384 "in enum %q#T", enumtype);
14385 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14386 "previous definition here");
14387 enumtype = error_mark_node;
14388 }
14389 else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14390 && !same_type_p (underlying_type,
14391 ENUM_UNDERLYING_TYPE (enumtype)))
14392 {
14393 error_at (input_location, "different underlying type "
14394 "in enum %q#T", enumtype);
14395 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14396 "previous definition here");
14397 underlying_type = NULL_TREE;
14398 }
14399 }
14400
14401 if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14402 || processing_template_decl)
14403 {
14404 /* In case of error, make a dummy enum to allow parsing to
14405 continue. */
14406 if (enumtype == error_mark_node)
14407 {
14408 name = make_anon_name ();
14409 enumtype = NULL_TREE;
14410 }
14411
14412 /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14413 of an opaque enum, or an opaque enum of an already defined
14414 enumeration (C++11).
14415 In any other case, it'll be NULL_TREE. */
14416 if (!enumtype)
14417 {
14418 if (is_new)
14419 *is_new = true;
14420 }
14421 prevtype = enumtype;
14422
14423 /* Do not push the decl more than once. */
14424 if (!enumtype
14425 || TREE_CODE (enumtype) != ENUMERAL_TYPE)
14426 {
14427 enumtype = cxx_make_type (ENUMERAL_TYPE);
14428 enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14429
14430 /* std::byte aliases anything. */
14431 if (enumtype != error_mark_node
14432 && TYPE_CONTEXT (enumtype) == std_node
14433 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14434 TYPE_ALIAS_SET (enumtype) = 0;
14435 }
14436 else
14437 enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14438 false);
14439
14440 if (enumtype == error_mark_node)
14441 return error_mark_node;
14442
14443 /* The enum is considered opaque until the opening '{' of the
14444 enumerator list. */
14445 SET_OPAQUE_ENUM_P (enumtype, true);
14446 ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14447 }
14448
14449 SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14450
14451 cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14452
14453 if (underlying_type)
14454 {
14455 if (ENUM_UNDERLYING_TYPE (enumtype))
14456 /* We already checked that it matches, don't change it to a different
14457 typedef variant. */;
14458 else if (CP_INTEGRAL_TYPE_P (underlying_type))
14459 {
14460 copy_type_enum (enumtype, underlying_type);
14461 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14462 }
14463 else if (dependent_type_p (underlying_type))
14464 ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14465 else
14466 error ("underlying type %qT of %qT must be an integral type",
14467 underlying_type, enumtype);
14468 }
14469
14470 /* If into a template class, the returned enum is always the first
14471 declaration (opaque or not) seen. This way all the references to
14472 this type will be to the same declaration. The following ones are used
14473 only to check for definition errors. */
14474 if (prevtype && processing_template_decl)
14475 return prevtype;
14476 else
14477 return enumtype;
14478 }
14479
14480 /* After processing and defining all the values of an enumeration type,
14481 install their decls in the enumeration type.
14482 ENUMTYPE is the type object. */
14483
14484 void
14485 finish_enum_value_list (tree enumtype)
14486 {
14487 tree values;
14488 tree underlying_type;
14489 tree decl;
14490 tree value;
14491 tree minnode, maxnode;
14492 tree t;
14493
14494 bool fixed_underlying_type_p
14495 = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14496
14497 /* We built up the VALUES in reverse order. */
14498 TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14499
14500 /* For an enum defined in a template, just set the type of the values;
14501 all further processing is postponed until the template is
14502 instantiated. We need to set the type so that tsubst of a CONST_DECL
14503 works. */
14504 if (processing_template_decl)
14505 {
14506 for (values = TYPE_VALUES (enumtype);
14507 values;
14508 values = TREE_CHAIN (values))
14509 TREE_TYPE (TREE_VALUE (values)) = enumtype;
14510 return;
14511 }
14512
14513 /* Determine the minimum and maximum values of the enumerators. */
14514 if (TYPE_VALUES (enumtype))
14515 {
14516 minnode = maxnode = NULL_TREE;
14517
14518 for (values = TYPE_VALUES (enumtype);
14519 values;
14520 values = TREE_CHAIN (values))
14521 {
14522 decl = TREE_VALUE (values);
14523
14524 /* [dcl.enum]: Following the closing brace of an enum-specifier,
14525 each enumerator has the type of its enumeration. Prior to the
14526 closing brace, the type of each enumerator is the type of its
14527 initializing value. */
14528 TREE_TYPE (decl) = enumtype;
14529
14530 /* Update the minimum and maximum values, if appropriate. */
14531 value = DECL_INITIAL (decl);
14532 if (value == error_mark_node)
14533 value = integer_zero_node;
14534 /* Figure out what the minimum and maximum values of the
14535 enumerators are. */
14536 if (!minnode)
14537 minnode = maxnode = value;
14538 else if (tree_int_cst_lt (maxnode, value))
14539 maxnode = value;
14540 else if (tree_int_cst_lt (value, minnode))
14541 minnode = value;
14542 }
14543 }
14544 else
14545 /* [dcl.enum]
14546
14547 If the enumerator-list is empty, the underlying type is as if
14548 the enumeration had a single enumerator with value 0. */
14549 minnode = maxnode = integer_zero_node;
14550
14551 if (!fixed_underlying_type_p)
14552 {
14553 /* Compute the number of bits require to represent all values of the
14554 enumeration. We must do this before the type of MINNODE and
14555 MAXNODE are transformed, since tree_int_cst_min_precision relies
14556 on the TREE_TYPE of the value it is passed. */
14557 signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14558 int lowprec = tree_int_cst_min_precision (minnode, sgn);
14559 int highprec = tree_int_cst_min_precision (maxnode, sgn);
14560 int precision = MAX (lowprec, highprec);
14561 unsigned int itk;
14562 bool use_short_enum;
14563
14564 /* Determine the underlying type of the enumeration.
14565
14566 [dcl.enum]
14567
14568 The underlying type of an enumeration is an integral type that
14569 can represent all the enumerator values defined in the
14570 enumeration. It is implementation-defined which integral type is
14571 used as the underlying type for an enumeration except that the
14572 underlying type shall not be larger than int unless the value of
14573 an enumerator cannot fit in an int or unsigned int.
14574
14575 We use "int" or an "unsigned int" as the underlying type, even if
14576 a smaller integral type would work, unless the user has
14577 explicitly requested that we use the smallest possible type. The
14578 user can request that for all enumerations with a command line
14579 flag, or for just one enumeration with an attribute. */
14580
14581 use_short_enum = flag_short_enums
14582 || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14583
14584 /* If the precision of the type was specified with an attribute and it
14585 was too small, give an error. Otherwise, use it. */
14586 if (TYPE_PRECISION (enumtype))
14587 {
14588 if (precision > TYPE_PRECISION (enumtype))
14589 error ("specified mode too small for enumeral values");
14590 else
14591 {
14592 use_short_enum = true;
14593 precision = TYPE_PRECISION (enumtype);
14594 }
14595 }
14596
14597 for (itk = (use_short_enum ? itk_char : itk_int);
14598 itk != itk_none;
14599 itk++)
14600 {
14601 underlying_type = integer_types[itk];
14602 if (underlying_type != NULL_TREE
14603 && TYPE_PRECISION (underlying_type) >= precision
14604 && TYPE_SIGN (underlying_type) == sgn)
14605 break;
14606 }
14607 if (itk == itk_none)
14608 {
14609 /* DR 377
14610
14611 IF no integral type can represent all the enumerator values, the
14612 enumeration is ill-formed. */
14613 error ("no integral type can represent all of the enumerator values "
14614 "for %qT", enumtype);
14615 precision = TYPE_PRECISION (long_long_integer_type_node);
14616 underlying_type = integer_types[itk_unsigned_long_long];
14617 }
14618
14619 /* [dcl.enum]
14620
14621 The value of sizeof() applied to an enumeration type, an object
14622 of an enumeration type, or an enumerator, is the value of sizeof()
14623 applied to the underlying type. */
14624 copy_type_enum (enumtype, underlying_type);
14625
14626 /* Compute the minimum and maximum values for the type.
14627
14628 [dcl.enum]
14629
14630 For an enumeration where emin is the smallest enumerator and emax
14631 is the largest, the values of the enumeration are the values of the
14632 underlying type in the range bmin to bmax, where bmin and bmax are,
14633 respectively, the smallest and largest values of the smallest bit-
14634 field that can store emin and emax. */
14635
14636 /* The middle-end currently assumes that types with TYPE_PRECISION
14637 narrower than their underlying type are suitably zero or sign
14638 extended to fill their mode. Similarly, it assumes that the front
14639 end assures that a value of a particular type must be within
14640 TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14641
14642 We used to set these fields based on bmin and bmax, but that led
14643 to invalid assumptions like optimizing away bounds checking. So
14644 now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14645 TYPE_MAX_VALUE to the values for the mode above and only restrict
14646 the ENUM_UNDERLYING_TYPE for the benefit of diagnostics. */
14647 ENUM_UNDERLYING_TYPE (enumtype)
14648 = build_distinct_type_copy (underlying_type);
14649 TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14650 set_min_and_max_values_for_integral_type
14651 (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14652
14653 /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE. */
14654 if (flag_strict_enums)
14655 set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14656 }
14657 else
14658 underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14659
14660 /* Convert each of the enumerators to the type of the underlying
14661 type of the enumeration. */
14662 for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14663 {
14664 location_t saved_location;
14665
14666 decl = TREE_VALUE (values);
14667 saved_location = input_location;
14668 input_location = DECL_SOURCE_LOCATION (decl);
14669 if (fixed_underlying_type_p)
14670 /* If the enumeration type has a fixed underlying type, we
14671 already checked all of the enumerator values. */
14672 value = DECL_INITIAL (decl);
14673 else
14674 value = perform_implicit_conversion (underlying_type,
14675 DECL_INITIAL (decl),
14676 tf_warning_or_error);
14677 input_location = saved_location;
14678
14679 /* Do not clobber shared ints. */
14680 if (value != error_mark_node)
14681 {
14682 value = copy_node (value);
14683
14684 TREE_TYPE (value) = enumtype;
14685 }
14686 DECL_INITIAL (decl) = value;
14687 }
14688
14689 /* Fix up all variant types of this enum type. */
14690 for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14691 TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14692
14693 if (at_class_scope_p ()
14694 && COMPLETE_TYPE_P (current_class_type)
14695 && UNSCOPED_ENUM_P (enumtype))
14696 {
14697 insert_late_enum_def_bindings (current_class_type, enumtype);
14698 /* TYPE_FIELDS needs fixup. */
14699 fixup_type_variants (current_class_type);
14700 }
14701
14702 /* Finish debugging output for this type. */
14703 rest_of_type_compilation (enumtype, namespace_bindings_p ());
14704
14705 /* Each enumerator now has the type of its enumeration. Clear the cache
14706 so that this change in types doesn't confuse us later on. */
14707 clear_cv_and_fold_caches ();
14708 }
14709
14710 /* Finishes the enum type. This is called only the first time an
14711 enumeration is seen, be it opaque or odinary.
14712 ENUMTYPE is the type object. */
14713
14714 void
14715 finish_enum (tree enumtype)
14716 {
14717 if (processing_template_decl)
14718 {
14719 if (at_function_scope_p ())
14720 add_stmt (build_min (TAG_DEFN, enumtype));
14721 return;
14722 }
14723
14724 /* If this is a forward declaration, there should not be any variants,
14725 though we can get a variant in the middle of an enum-specifier with
14726 wacky code like 'enum E { e = sizeof(const E*) };' */
14727 gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14728 && (TYPE_VALUES (enumtype)
14729 || !TYPE_NEXT_VARIANT (enumtype)));
14730 }
14731
14732 /* Build and install a CONST_DECL for an enumeration constant of the
14733 enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14734 Apply ATTRIBUTES if available. LOC is the location of NAME.
14735 Assignment of sequential values by default is handled here. */
14736
14737 void
14738 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14739 location_t loc)
14740 {
14741 tree decl;
14742 tree context;
14743 tree type;
14744
14745 /* scalar_constant_value will pull out this expression, so make sure
14746 it's folded as appropriate. */
14747 if (processing_template_decl)
14748 value = fold_non_dependent_expr (value);
14749
14750 /* If the VALUE was erroneous, pretend it wasn't there; that will
14751 result in the enum being assigned the next value in sequence. */
14752 if (value == error_mark_node)
14753 value = NULL_TREE;
14754
14755 /* Remove no-op casts from the value. */
14756 if (value)
14757 STRIP_TYPE_NOPS (value);
14758
14759 if (! processing_template_decl)
14760 {
14761 /* Validate and default VALUE. */
14762 if (value != NULL_TREE)
14763 {
14764 if (!ENUM_UNDERLYING_TYPE (enumtype))
14765 {
14766 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14767 value, true);
14768 if (tmp_value)
14769 value = tmp_value;
14770 }
14771 else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14772 (TREE_TYPE (value)))
14773 value = perform_implicit_conversion_flags
14774 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14775 LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14776
14777 if (value == error_mark_node)
14778 value = NULL_TREE;
14779
14780 if (value != NULL_TREE)
14781 {
14782 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14783 (TREE_TYPE (value)))
14784 {
14785 error ("enumerator value for %qD must have integral or "
14786 "unscoped enumeration type", name);
14787 value = NULL_TREE;
14788 }
14789 else
14790 {
14791 value = cxx_constant_value (value);
14792
14793 if (TREE_CODE (value) != INTEGER_CST)
14794 {
14795 error ("enumerator value for %qD is not an integer "
14796 "constant", name);
14797 value = NULL_TREE;
14798 }
14799 }
14800 }
14801 }
14802
14803 /* Default based on previous value. */
14804 if (value == NULL_TREE)
14805 {
14806 if (TYPE_VALUES (enumtype))
14807 {
14808 tree prev_value;
14809
14810 /* C++03 7.2/4: If no initializer is specified for the first
14811 enumerator, the type is an unspecified integral
14812 type. Otherwise the type is the same as the type of the
14813 initializing value of the preceding enumerator unless the
14814 incremented value is not representable in that type, in
14815 which case the type is an unspecified integral type
14816 sufficient to contain the incremented value. */
14817 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14818 if (error_operand_p (prev_value))
14819 value = error_mark_node;
14820 else
14821 {
14822 wi::overflow_type overflowed;
14823 tree type = TREE_TYPE (prev_value);
14824 signop sgn = TYPE_SIGN (type);
14825 widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14826 &overflowed);
14827 if (!overflowed)
14828 {
14829 bool pos = !wi::neg_p (wi, sgn);
14830 if (!wi::fits_to_tree_p (wi, type))
14831 {
14832 unsigned int itk;
14833 for (itk = itk_int; itk != itk_none; itk++)
14834 {
14835 type = integer_types[itk];
14836 if (type != NULL_TREE
14837 && (pos || !TYPE_UNSIGNED (type))
14838 && wi::fits_to_tree_p (wi, type))
14839 break;
14840 }
14841 if (type && cxx_dialect < cxx11
14842 && itk > itk_unsigned_long)
14843 pedwarn (input_location, OPT_Wlong_long,
14844 pos ? G_("\
14845 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14846 incremented enumerator value is too large for %<long%>"));
14847 }
14848 if (type == NULL_TREE)
14849 overflowed = wi::OVF_UNKNOWN;
14850 else
14851 value = wide_int_to_tree (type, wi);
14852 }
14853
14854 if (overflowed)
14855 {
14856 error ("overflow in enumeration values at %qD", name);
14857 value = error_mark_node;
14858 }
14859 }
14860 }
14861 else
14862 value = integer_zero_node;
14863 }
14864
14865 /* Remove no-op casts from the value. */
14866 STRIP_TYPE_NOPS (value);
14867
14868 /* If the underlying type of the enum is fixed, check whether
14869 the enumerator values fits in the underlying type. If it
14870 does not fit, the program is ill-formed [C++0x dcl.enum]. */
14871 if (ENUM_UNDERLYING_TYPE (enumtype)
14872 && value
14873 && TREE_CODE (value) == INTEGER_CST)
14874 {
14875 if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14876 error ("enumerator value %qE is outside the range of underlying "
14877 "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14878
14879 /* Convert the value to the appropriate type. */
14880 value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14881 }
14882 }
14883
14884 /* C++ associates enums with global, function, or class declarations. */
14885 context = current_scope ();
14886
14887 /* Build the actual enumeration constant. Note that the enumeration
14888 constants have the underlying type of the enum (if it is fixed)
14889 or the type of their initializer (if the underlying type of the
14890 enum is not fixed):
14891
14892 [ C++0x dcl.enum ]
14893
14894 If the underlying type is fixed, the type of each enumerator
14895 prior to the closing brace is the underlying type; if the
14896 initializing value of an enumerator cannot be represented by
14897 the underlying type, the program is ill-formed. If the
14898 underlying type is not fixed, the type of each enumerator is
14899 the type of its initializing value.
14900
14901 If the underlying type is not fixed, it will be computed by
14902 finish_enum and we will reset the type of this enumerator. Of
14903 course, if we're processing a template, there may be no value. */
14904 type = value ? TREE_TYPE (value) : NULL_TREE;
14905
14906 decl = build_decl (loc, CONST_DECL, name, type);
14907
14908 DECL_CONTEXT (decl) = enumtype;
14909 TREE_CONSTANT (decl) = 1;
14910 TREE_READONLY (decl) = 1;
14911 DECL_INITIAL (decl) = value;
14912
14913 if (attributes)
14914 cplus_decl_attributes (&decl, attributes, 0);
14915
14916 if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14917 {
14918 /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14919 on the TYPE_FIELDS list for `S'. (That's so that you can say
14920 things like `S::i' later.) */
14921
14922 /* The enumerator may be getting declared outside of its enclosing
14923 class, like so:
14924
14925 class S { public: enum E : int; }; enum S::E : int { i = 7; };
14926
14927 For which case we need to make sure that the access of `S::i'
14928 matches the access of `S::E'. */
14929 tree saved_cas = current_access_specifier;
14930 if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14931 current_access_specifier = access_private_node;
14932 else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14933 current_access_specifier = access_protected_node;
14934 else
14935 current_access_specifier = access_public_node;
14936
14937 finish_member_declaration (decl);
14938
14939 current_access_specifier = saved_cas;
14940 }
14941 else
14942 pushdecl (decl);
14943
14944 /* Add this enumeration constant to the list for this type. */
14945 TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14946 }
14947
14948 /* Look for an enumerator with the given NAME within the enumeration
14949 type ENUMTYPE. This routine is used primarily for qualified name
14950 lookup into an enumerator in C++0x, e.g.,
14951
14952 enum class Color { Red, Green, Blue };
14953
14954 Color color = Color::Red;
14955
14956 Returns the value corresponding to the enumerator, or
14957 NULL_TREE if no such enumerator was found. */
14958 tree
14959 lookup_enumerator (tree enumtype, tree name)
14960 {
14961 tree e;
14962 gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14963
14964 e = purpose_member (name, TYPE_VALUES (enumtype));
14965 return e? TREE_VALUE (e) : NULL_TREE;
14966 }
14967
14968 \f
14969 /* We're defining DECL. Make sure that its type is OK. */
14970
14971 static void
14972 check_function_type (tree decl, tree current_function_parms)
14973 {
14974 tree fntype = TREE_TYPE (decl);
14975 tree return_type = complete_type (TREE_TYPE (fntype));
14976
14977 /* In a function definition, arg types must be complete. */
14978 require_complete_types_for_parms (current_function_parms);
14979
14980 if (dependent_type_p (return_type)
14981 || type_uses_auto (return_type))
14982 return;
14983 if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14984 {
14985 tree args = TYPE_ARG_TYPES (fntype);
14986
14987 error ("return type %q#T is incomplete", return_type);
14988
14989 /* Make it return void instead. */
14990 if (TREE_CODE (fntype) == METHOD_TYPE)
14991 fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14992 void_type_node,
14993 TREE_CHAIN (args));
14994 else
14995 fntype = build_function_type (void_type_node, args);
14996 fntype = (cp_build_type_attribute_variant
14997 (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14998 fntype = cxx_copy_lang_qualifiers (fntype, TREE_TYPE (decl));
14999 TREE_TYPE (decl) = fntype;
15000 }
15001 else
15002 {
15003 abstract_virtuals_error (decl, TREE_TYPE (fntype));
15004 maybe_warn_parm_abi (TREE_TYPE (fntype),
15005 DECL_SOURCE_LOCATION (decl));
15006 }
15007 }
15008
15009 /* True iff FN is an implicitly-defined default constructor. */
15010
15011 static bool
15012 implicit_default_ctor_p (tree fn)
15013 {
15014 return (DECL_CONSTRUCTOR_P (fn)
15015 && !user_provided_p (fn)
15016 && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
15017 }
15018
15019 /* Clobber the contents of *this to let the back end know that the object
15020 storage is dead when we enter the constructor or leave the destructor. */
15021
15022 static tree
15023 build_clobber_this ()
15024 {
15025 /* Clobbering an empty base is pointless, and harmful if its one byte
15026 TYPE_SIZE overlays real data. */
15027 if (is_empty_class (current_class_type))
15028 return void_node;
15029
15030 /* If we have virtual bases, clobber the whole object, but only if we're in
15031 charge. If we don't have virtual bases, clobber the as-base type so we
15032 don't mess with tail padding. */
15033 bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
15034
15035 tree ctype = current_class_type;
15036 if (!vbases)
15037 ctype = CLASSTYPE_AS_BASE (ctype);
15038
15039 tree clobber = build_clobber (ctype);
15040
15041 tree thisref = current_class_ref;
15042 if (ctype != current_class_type)
15043 {
15044 thisref = build_nop (build_reference_type (ctype), current_class_ptr);
15045 thisref = convert_from_reference (thisref);
15046 }
15047
15048 tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
15049 if (vbases)
15050 exprstmt = build_if_in_charge (exprstmt);
15051
15052 return exprstmt;
15053 }
15054
15055 /* Create the FUNCTION_DECL for a function definition.
15056 DECLSPECS and DECLARATOR are the parts of the declaration;
15057 they describe the function's name and the type it returns,
15058 but twisted together in a fashion that parallels the syntax of C.
15059
15060 FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
15061 DECLARATOR is really the DECL for the function we are about to
15062 process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
15063 indicating that the function is an inline defined in-class.
15064
15065 This function creates a binding context for the function body
15066 as well as setting up the FUNCTION_DECL in current_function_decl.
15067
15068 For C++, we must first check whether that datum makes any sense.
15069 For example, "class A local_a(1,2);" means that variable local_a
15070 is an aggregate of type A, which should have a constructor
15071 applied to it with the argument list [1, 2].
15072
15073 On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
15074 or may be a BLOCK if the function has been defined previously
15075 in this translation unit. On exit, DECL_INITIAL (decl1) will be
15076 error_mark_node if the function has never been defined, or
15077 a BLOCK if the function has been defined somewhere. */
15078
15079 bool
15080 start_preparsed_function (tree decl1, tree attrs, int flags)
15081 {
15082 tree ctype = NULL_TREE;
15083 tree fntype;
15084 tree restype;
15085 int doing_friend = 0;
15086 cp_binding_level *bl;
15087 tree current_function_parms;
15088 struct c_fileinfo *finfo
15089 = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
15090 bool honor_interface;
15091
15092 /* Sanity check. */
15093 gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
15094 gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
15095
15096 fntype = TREE_TYPE (decl1);
15097 if (TREE_CODE (fntype) == METHOD_TYPE)
15098 ctype = TYPE_METHOD_BASETYPE (fntype);
15099
15100 /* ISO C++ 11.4/5. A friend function defined in a class is in
15101 the (lexical) scope of the class in which it is defined. */
15102 if (!ctype && DECL_FRIEND_P (decl1))
15103 {
15104 ctype = DECL_FRIEND_CONTEXT (decl1);
15105
15106 /* CTYPE could be null here if we're dealing with a template;
15107 for example, `inline friend float foo()' inside a template
15108 will have no CTYPE set. */
15109 if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
15110 ctype = NULL_TREE;
15111 else
15112 doing_friend = 1;
15113 }
15114
15115 if (DECL_DECLARED_INLINE_P (decl1)
15116 && lookup_attribute ("noinline", attrs))
15117 warning_at (DECL_SOURCE_LOCATION (decl1), 0,
15118 "inline function %qD given attribute noinline", decl1);
15119
15120 /* Handle gnu_inline attribute. */
15121 if (GNU_INLINE_P (decl1))
15122 {
15123 DECL_EXTERNAL (decl1) = 1;
15124 DECL_NOT_REALLY_EXTERN (decl1) = 0;
15125 DECL_INTERFACE_KNOWN (decl1) = 1;
15126 DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
15127 }
15128
15129 if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
15130 /* This is a constructor, we must ensure that any default args
15131 introduced by this definition are propagated to the clones
15132 now. The clones are used directly in overload resolution. */
15133 adjust_clone_args (decl1);
15134
15135 /* Sometimes we don't notice that a function is a static member, and
15136 build a METHOD_TYPE for it. Fix that up now. */
15137 gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
15138 && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
15139
15140 /* Set up current_class_type, and enter the scope of the class, if
15141 appropriate. */
15142 if (ctype)
15143 push_nested_class (ctype);
15144 else if (DECL_STATIC_FUNCTION_P (decl1))
15145 push_nested_class (DECL_CONTEXT (decl1));
15146
15147 /* Now that we have entered the scope of the class, we must restore
15148 the bindings for any template parameters surrounding DECL1, if it
15149 is an inline member template. (Order is important; consider the
15150 case where a template parameter has the same name as a field of
15151 the class.) It is not until after this point that
15152 PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly. */
15153 if (flags & SF_INCLASS_INLINE)
15154 maybe_begin_member_template_processing (decl1);
15155
15156 /* Effective C++ rule 15. */
15157 if (warn_ecpp
15158 && DECL_ASSIGNMENT_OPERATOR_P (decl1)
15159 && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
15160 && VOID_TYPE_P (TREE_TYPE (fntype)))
15161 warning (OPT_Weffc__,
15162 "%<operator=%> should return a reference to %<*this%>");
15163
15164 /* Make the init_value nonzero so pushdecl knows this is not tentative.
15165 error_mark_node is replaced below (in poplevel) with the BLOCK. */
15166 if (!DECL_INITIAL (decl1))
15167 DECL_INITIAL (decl1) = error_mark_node;
15168
15169 /* This function exists in static storage.
15170 (This does not mean `static' in the C sense!) */
15171 TREE_STATIC (decl1) = 1;
15172
15173 /* We must call push_template_decl after current_class_type is set
15174 up. (If we are processing inline definitions after exiting a
15175 class scope, current_class_type will be NULL_TREE until set above
15176 by push_nested_class.) */
15177 if (processing_template_decl)
15178 {
15179 tree newdecl1 = push_template_decl (decl1);
15180 if (newdecl1 == error_mark_node)
15181 {
15182 if (ctype || DECL_STATIC_FUNCTION_P (decl1))
15183 pop_nested_class ();
15184 return false;
15185 }
15186 decl1 = newdecl1;
15187 }
15188
15189 /* Make sure the parameter and return types are reasonable. When
15190 you declare a function, these types can be incomplete, but they
15191 must be complete when you define the function. */
15192 check_function_type (decl1, DECL_ARGUMENTS (decl1));
15193
15194 /* Build the return declaration for the function. */
15195 restype = TREE_TYPE (fntype);
15196
15197 if (DECL_RESULT (decl1) == NULL_TREE)
15198 {
15199 tree resdecl;
15200
15201 resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
15202 DECL_ARTIFICIAL (resdecl) = 1;
15203 DECL_IGNORED_P (resdecl) = 1;
15204 DECL_RESULT (decl1) = resdecl;
15205
15206 cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
15207 }
15208
15209 /* Record the decl so that the function name is defined.
15210 If we already have a decl for this name, and it is a FUNCTION_DECL,
15211 use the old decl. */
15212 if (!processing_template_decl && !(flags & SF_PRE_PARSED))
15213 {
15214 /* A specialization is not used to guide overload resolution. */
15215 if (!DECL_FUNCTION_MEMBER_P (decl1)
15216 && !(DECL_USE_TEMPLATE (decl1) &&
15217 PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
15218 {
15219 tree olddecl = pushdecl (decl1);
15220
15221 if (olddecl == error_mark_node)
15222 /* If something went wrong when registering the declaration,
15223 use DECL1; we have to have a FUNCTION_DECL to use when
15224 parsing the body of the function. */
15225 ;
15226 else
15227 {
15228 /* Otherwise, OLDDECL is either a previous declaration
15229 of the same function or DECL1 itself. */
15230
15231 if (warn_missing_declarations
15232 && olddecl == decl1
15233 && !DECL_MAIN_P (decl1)
15234 && TREE_PUBLIC (decl1)
15235 && !DECL_DECLARED_INLINE_P (decl1))
15236 {
15237 tree context;
15238
15239 /* Check whether DECL1 is in an anonymous
15240 namespace. */
15241 for (context = DECL_CONTEXT (decl1);
15242 context;
15243 context = DECL_CONTEXT (context))
15244 {
15245 if (TREE_CODE (context) == NAMESPACE_DECL
15246 && DECL_NAME (context) == NULL_TREE)
15247 break;
15248 }
15249
15250 if (context == NULL)
15251 warning_at (DECL_SOURCE_LOCATION (decl1),
15252 OPT_Wmissing_declarations,
15253 "no previous declaration for %qD", decl1);
15254 }
15255
15256 decl1 = olddecl;
15257 }
15258 }
15259 else
15260 {
15261 /* We need to set the DECL_CONTEXT. */
15262 if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
15263 DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
15264 }
15265 fntype = TREE_TYPE (decl1);
15266 restype = TREE_TYPE (fntype);
15267
15268 /* If #pragma weak applies, mark the decl appropriately now.
15269 The pragma only applies to global functions. Because
15270 determining whether or not the #pragma applies involves
15271 computing the mangled name for the declaration, we cannot
15272 apply the pragma until after we have merged this declaration
15273 with any previous declarations; if the original declaration
15274 has a linkage specification, that specification applies to
15275 the definition as well, and may affect the mangled name. */
15276 if (DECL_FILE_SCOPE_P (decl1))
15277 maybe_apply_pragma_weak (decl1);
15278 }
15279
15280 /* We are now in the scope of the function being defined. */
15281 current_function_decl = decl1;
15282
15283 /* Save the parm names or decls from this function's declarator
15284 where store_parm_decls will find them. */
15285 current_function_parms = DECL_ARGUMENTS (decl1);
15286
15287 /* Let the user know we're compiling this function. */
15288 announce_function (decl1);
15289
15290 gcc_assert (DECL_INITIAL (decl1));
15291
15292 /* This function may already have been parsed, in which case just
15293 return; our caller will skip over the body without parsing. */
15294 if (DECL_INITIAL (decl1) != error_mark_node)
15295 return true;
15296
15297 /* Initialize RTL machinery. We cannot do this until
15298 CURRENT_FUNCTION_DECL and DECL_RESULT are set up. We do this
15299 even when processing a template; this is how we get
15300 CFUN set up, and our per-function variables initialized.
15301 FIXME factor out the non-RTL stuff. */
15302 bl = current_binding_level;
15303 allocate_struct_function (decl1, processing_template_decl);
15304
15305 /* Initialize the language data structures. Whenever we start
15306 a new function, we destroy temporaries in the usual way. */
15307 cfun->language = ggc_cleared_alloc<language_function> ();
15308 current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15309 current_binding_level = bl;
15310
15311 if (!processing_template_decl && type_uses_auto (restype))
15312 {
15313 FNDECL_USED_AUTO (decl1) = true;
15314 current_function_auto_return_pattern = restype;
15315 }
15316
15317 /* Start the statement-tree, start the tree now. */
15318 DECL_SAVED_TREE (decl1) = push_stmt_list ();
15319
15320 /* If we are (erroneously) defining a function that we have already
15321 defined before, wipe out what we knew before. */
15322 if (!DECL_PENDING_INLINE_P (decl1))
15323 DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
15324
15325 if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
15326 {
15327 /* We know that this was set up by `grokclassfn'. We do not
15328 wait until `store_parm_decls', since evil parse errors may
15329 never get us to that point. Here we keep the consistency
15330 between `current_class_type' and `current_class_ptr'. */
15331 tree t = DECL_ARGUMENTS (decl1);
15332
15333 gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
15334 gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
15335
15336 cp_function_chain->x_current_class_ref
15337 = cp_build_fold_indirect_ref (t);
15338 /* Set this second to avoid shortcut in cp_build_indirect_ref. */
15339 cp_function_chain->x_current_class_ptr = t;
15340
15341 /* Constructors and destructors need to know whether they're "in
15342 charge" of initializing virtual base classes. */
15343 t = DECL_CHAIN (t);
15344 if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15345 {
15346 current_in_charge_parm = t;
15347 t = DECL_CHAIN (t);
15348 }
15349 if (DECL_HAS_VTT_PARM_P (decl1))
15350 {
15351 gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15352 current_vtt_parm = t;
15353 }
15354 }
15355
15356 honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15357 /* Implicitly-defined methods (like the
15358 destructor for a class in which no destructor
15359 is explicitly declared) must not be defined
15360 until their definition is needed. So, we
15361 ignore interface specifications for
15362 compiler-generated functions. */
15363 && !DECL_ARTIFICIAL (decl1));
15364
15365 if (processing_template_decl)
15366 /* Don't mess with interface flags. */;
15367 else if (DECL_INTERFACE_KNOWN (decl1))
15368 {
15369 tree ctx = decl_function_context (decl1);
15370
15371 if (DECL_NOT_REALLY_EXTERN (decl1))
15372 DECL_EXTERNAL (decl1) = 0;
15373
15374 if (ctx != NULL_TREE && vague_linkage_p (ctx))
15375 /* This is a function in a local class in an extern inline
15376 or template function. */
15377 comdat_linkage (decl1);
15378 }
15379 /* If this function belongs to an interface, it is public.
15380 If it belongs to someone else's interface, it is also external.
15381 This only affects inlines and template instantiations. */
15382 else if (!finfo->interface_unknown && honor_interface)
15383 {
15384 if (DECL_DECLARED_INLINE_P (decl1)
15385 || DECL_TEMPLATE_INSTANTIATION (decl1))
15386 {
15387 DECL_EXTERNAL (decl1)
15388 = (finfo->interface_only
15389 || (DECL_DECLARED_INLINE_P (decl1)
15390 && ! flag_implement_inlines
15391 && !DECL_VINDEX (decl1)));
15392
15393 /* For WIN32 we also want to put these in linkonce sections. */
15394 maybe_make_one_only (decl1);
15395 }
15396 else
15397 DECL_EXTERNAL (decl1) = 0;
15398 DECL_INTERFACE_KNOWN (decl1) = 1;
15399 /* If this function is in an interface implemented in this file,
15400 make sure that the back end knows to emit this function
15401 here. */
15402 if (!DECL_EXTERNAL (decl1))
15403 mark_needed (decl1);
15404 }
15405 else if (finfo->interface_unknown && finfo->interface_only
15406 && honor_interface)
15407 {
15408 /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15409 interface, we will have both finfo->interface_unknown and
15410 finfo->interface_only set. In that case, we don't want to
15411 use the normal heuristics because someone will supply a
15412 #pragma implementation elsewhere, and deducing it here would
15413 produce a conflict. */
15414 comdat_linkage (decl1);
15415 DECL_EXTERNAL (decl1) = 0;
15416 DECL_INTERFACE_KNOWN (decl1) = 1;
15417 DECL_DEFER_OUTPUT (decl1) = 1;
15418 }
15419 else
15420 {
15421 /* This is a definition, not a reference.
15422 So clear DECL_EXTERNAL, unless this is a GNU extern inline. */
15423 if (!GNU_INLINE_P (decl1))
15424 DECL_EXTERNAL (decl1) = 0;
15425
15426 if ((DECL_DECLARED_INLINE_P (decl1)
15427 || DECL_TEMPLATE_INSTANTIATION (decl1))
15428 && ! DECL_INTERFACE_KNOWN (decl1))
15429 DECL_DEFER_OUTPUT (decl1) = 1;
15430 else
15431 DECL_INTERFACE_KNOWN (decl1) = 1;
15432 }
15433
15434 /* Determine the ELF visibility attribute for the function. We must not
15435 do this before calling "pushdecl", as we must allow "duplicate_decls"
15436 to merge any attributes appropriately. We also need to wait until
15437 linkage is set. */
15438 if (!DECL_CLONED_FUNCTION_P (decl1))
15439 determine_visibility (decl1);
15440
15441 if (!processing_template_decl)
15442 maybe_instantiate_noexcept (decl1);
15443
15444 begin_scope (sk_function_parms, decl1);
15445
15446 ++function_depth;
15447
15448 if (DECL_DESTRUCTOR_P (decl1)
15449 || (DECL_CONSTRUCTOR_P (decl1)
15450 && targetm.cxx.cdtor_returns_this ()))
15451 {
15452 cdtor_label = create_artificial_label (input_location);
15453 LABEL_DECL_CDTOR (cdtor_label) = true;
15454 }
15455
15456 start_fname_decls ();
15457
15458 store_parm_decls (current_function_parms);
15459
15460 if (!processing_template_decl
15461 && (flag_lifetime_dse > 1)
15462 && DECL_CONSTRUCTOR_P (decl1)
15463 && !DECL_CLONED_FUNCTION_P (decl1)
15464 /* Clobbering an empty base is harmful if it overlays real data. */
15465 && !is_empty_class (current_class_type)
15466 /* We can't clobber safely for an implicitly-defined default constructor
15467 because part of the initialization might happen before we enter the
15468 constructor, via AGGR_INIT_ZERO_FIRST (c++/68006). */
15469 && !implicit_default_ctor_p (decl1))
15470 finish_expr_stmt (build_clobber_this ());
15471
15472 if (!processing_template_decl
15473 && DECL_CONSTRUCTOR_P (decl1)
15474 && sanitize_flags_p (SANITIZE_VPTR)
15475 && !DECL_CLONED_FUNCTION_P (decl1)
15476 && !implicit_default_ctor_p (decl1))
15477 cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15478
15479 start_lambda_scope (decl1);
15480
15481 return true;
15482 }
15483
15484
15485 /* Like start_preparsed_function, except that instead of a
15486 FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15487
15488 Returns true on success. If the DECLARATOR is not suitable
15489 for a function, we return false, which tells the parser to
15490 skip the entire function. */
15491
15492 bool
15493 start_function (cp_decl_specifier_seq *declspecs,
15494 const cp_declarator *declarator,
15495 tree attrs)
15496 {
15497 tree decl1;
15498
15499 decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15500 invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15501 if (decl1 == error_mark_node)
15502 return false;
15503 /* If the declarator is not suitable for a function definition,
15504 cause a syntax error. */
15505 if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15506 {
15507 error ("invalid function declaration");
15508 return false;
15509 }
15510
15511 if (DECL_MAIN_P (decl1))
15512 /* main must return int. grokfndecl should have corrected it
15513 (and issued a diagnostic) if the user got it wrong. */
15514 gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15515 integer_type_node));
15516
15517 return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15518 }
15519 \f
15520 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15521 FN. */
15522
15523 static bool
15524 use_eh_spec_block (tree fn)
15525 {
15526 return (flag_exceptions && flag_enforce_eh_specs
15527 && !processing_template_decl
15528 && !type_throw_all_p (TREE_TYPE (fn))
15529 /* We insert the EH_SPEC_BLOCK only in the original
15530 function; then, it is copied automatically to the
15531 clones. */
15532 && !DECL_CLONED_FUNCTION_P (fn)
15533 /* Implicitly-generated constructors and destructors have
15534 exception specifications. However, those specifications
15535 are the union of the possible exceptions specified by the
15536 constructors/destructors for bases and members, so no
15537 unallowed exception will ever reach this function. By
15538 not creating the EH_SPEC_BLOCK we save a little memory,
15539 and we avoid spurious warnings about unreachable
15540 code. */
15541 && !DECL_DEFAULTED_FN (fn));
15542 }
15543
15544 /* Store the parameter declarations into the current function declaration.
15545 This is called after parsing the parameter declarations, before
15546 digesting the body of the function.
15547
15548 Also install to binding contour return value identifier, if any. */
15549
15550 static void
15551 store_parm_decls (tree current_function_parms)
15552 {
15553 tree fndecl = current_function_decl;
15554 tree parm;
15555
15556 /* This is a chain of any other decls that came in among the parm
15557 declarations. If a parm is declared with enum {foo, bar} x;
15558 then CONST_DECLs for foo and bar are put here. */
15559 tree nonparms = NULL_TREE;
15560
15561 if (current_function_parms)
15562 {
15563 /* This case is when the function was defined with an ANSI prototype.
15564 The parms already have decls, so we need not do anything here
15565 except record them as in effect
15566 and complain if any redundant old-style parm decls were written. */
15567
15568 tree specparms = current_function_parms;
15569 tree next;
15570
15571 /* Must clear this because it might contain TYPE_DECLs declared
15572 at class level. */
15573 current_binding_level->names = NULL;
15574
15575 /* If we're doing semantic analysis, then we'll call pushdecl
15576 for each of these. We must do them in reverse order so that
15577 they end in the correct forward order. */
15578 specparms = nreverse (specparms);
15579
15580 for (parm = specparms; parm; parm = next)
15581 {
15582 next = DECL_CHAIN (parm);
15583 if (TREE_CODE (parm) == PARM_DECL)
15584 pushdecl (parm);
15585 else
15586 {
15587 /* If we find an enum constant or a type tag,
15588 put it aside for the moment. */
15589 TREE_CHAIN (parm) = NULL_TREE;
15590 nonparms = chainon (nonparms, parm);
15591 }
15592 }
15593
15594 /* Get the decls in their original chain order and record in the
15595 function. This is all and only the PARM_DECLs that were
15596 pushed into scope by the loop above. */
15597 DECL_ARGUMENTS (fndecl) = get_local_decls ();
15598 }
15599 else
15600 DECL_ARGUMENTS (fndecl) = NULL_TREE;
15601
15602 /* Now store the final chain of decls for the arguments
15603 as the decl-chain of the current lexical scope.
15604 Put the enumerators in as well, at the front so that
15605 DECL_ARGUMENTS is not modified. */
15606 current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15607
15608 if (use_eh_spec_block (current_function_decl))
15609 current_eh_spec_block = begin_eh_spec_block ();
15610 }
15611
15612 \f
15613 /* We have finished doing semantic analysis on DECL, but have not yet
15614 generated RTL for its body. Save away our current state, so that
15615 when we want to generate RTL later we know what to do. */
15616
15617 static void
15618 save_function_data (tree decl)
15619 {
15620 struct language_function *f;
15621
15622 /* Save the language-specific per-function data so that we can
15623 get it back when we really expand this function. */
15624 gcc_assert (!DECL_PENDING_INLINE_P (decl));
15625
15626 /* Make a copy. */
15627 f = ggc_alloc<language_function> ();
15628 memcpy (f, cp_function_chain, sizeof (struct language_function));
15629 DECL_SAVED_FUNCTION_DATA (decl) = f;
15630
15631 /* Clear out the bits we don't need. */
15632 f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15633 f->bindings = NULL;
15634 f->x_local_names = NULL;
15635 f->base.local_typedefs = NULL;
15636 }
15637
15638
15639 /* Set the return value of the constructor (if present). */
15640
15641 static void
15642 finish_constructor_body (void)
15643 {
15644 tree val;
15645 tree exprstmt;
15646
15647 if (targetm.cxx.cdtor_returns_this ())
15648 {
15649 /* Any return from a constructor will end up here. */
15650 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15651
15652 val = DECL_ARGUMENTS (current_function_decl);
15653 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15654 DECL_RESULT (current_function_decl), val);
15655 /* Return the address of the object. */
15656 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15657 add_stmt (exprstmt);
15658 }
15659 }
15660
15661 /* Do all the processing for the beginning of a destructor; set up the
15662 vtable pointers and cleanups for bases and members. */
15663
15664 static void
15665 begin_destructor_body (void)
15666 {
15667 tree compound_stmt;
15668
15669 /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15670 issued an error message. We still want to try to process the
15671 body of the function, but initialize_vtbl_ptrs will crash if
15672 TYPE_BINFO is NULL. */
15673 if (COMPLETE_TYPE_P (current_class_type))
15674 {
15675 compound_stmt = begin_compound_stmt (0);
15676 /* Make all virtual function table pointers in non-virtual base
15677 classes point to CURRENT_CLASS_TYPE's virtual function
15678 tables. */
15679 initialize_vtbl_ptrs (current_class_ptr);
15680 finish_compound_stmt (compound_stmt);
15681
15682 if (flag_lifetime_dse
15683 /* Clobbering an empty base is harmful if it overlays real data. */
15684 && !is_empty_class (current_class_type))
15685 {
15686 if (sanitize_flags_p (SANITIZE_VPTR)
15687 && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15688 && TYPE_CONTAINS_VPTR_P (current_class_type))
15689 {
15690 tree binfo = TYPE_BINFO (current_class_type);
15691 tree ref
15692 = cp_build_fold_indirect_ref (current_class_ptr);
15693
15694 tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15695 tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15696 tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15697 NOP_EXPR, vtbl,
15698 tf_warning_or_error);
15699 finish_decl_cleanup (NULL_TREE, stmt);
15700 }
15701 else
15702 finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15703 }
15704
15705 /* And insert cleanups for our bases and members so that they
15706 will be properly destroyed if we throw. */
15707 push_base_cleanups ();
15708 }
15709 }
15710
15711 /* At the end of every destructor we generate code to delete the object if
15712 necessary. Do that now. */
15713
15714 static void
15715 finish_destructor_body (void)
15716 {
15717 tree exprstmt;
15718
15719 /* Any return from a destructor will end up here; that way all base
15720 and member cleanups will be run when the function returns. */
15721 add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15722
15723 if (targetm.cxx.cdtor_returns_this ())
15724 {
15725 tree val;
15726
15727 val = DECL_ARGUMENTS (current_function_decl);
15728 val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15729 DECL_RESULT (current_function_decl), val);
15730 /* Return the address of the object. */
15731 exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15732 add_stmt (exprstmt);
15733 }
15734 }
15735
15736 /* Do the necessary processing for the beginning of a function body, which
15737 in this case includes member-initializers, but not the catch clauses of
15738 a function-try-block. Currently, this means opening a binding level
15739 for the member-initializers (in a ctor), member cleanups (in a dtor),
15740 and capture proxies (in a lambda operator()). */
15741
15742 tree
15743 begin_function_body (void)
15744 {
15745 tree stmt;
15746
15747 if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15748 return NULL_TREE;
15749
15750 if (processing_template_decl)
15751 /* Do nothing now. */;
15752 else
15753 /* Always keep the BLOCK node associated with the outermost pair of
15754 curly braces of a function. These are needed for correct
15755 operation of dwarfout.c. */
15756 keep_next_level (true);
15757
15758 stmt = begin_compound_stmt (BCS_FN_BODY);
15759
15760 if (processing_template_decl)
15761 /* Do nothing now. */;
15762 else if (DECL_DESTRUCTOR_P (current_function_decl))
15763 begin_destructor_body ();
15764
15765 return stmt;
15766 }
15767
15768 /* Do the processing for the end of a function body. Currently, this means
15769 closing out the cleanups for fully-constructed bases and members, and in
15770 the case of the destructor, deleting the object if desired. Again, this
15771 is only meaningful for [cd]tors, since they are the only functions where
15772 there is a significant distinction between the main body and any
15773 function catch clauses. Handling, say, main() return semantics here
15774 would be wrong, as flowing off the end of a function catch clause for
15775 main() would also need to return 0. */
15776
15777 void
15778 finish_function_body (tree compstmt)
15779 {
15780 if (compstmt == NULL_TREE)
15781 return;
15782
15783 /* Close the block. */
15784 finish_compound_stmt (compstmt);
15785
15786 if (processing_template_decl)
15787 /* Do nothing now. */;
15788 else if (DECL_CONSTRUCTOR_P (current_function_decl))
15789 finish_constructor_body ();
15790 else if (DECL_DESTRUCTOR_P (current_function_decl))
15791 finish_destructor_body ();
15792 }
15793
15794 /* Given a function, returns the BLOCK corresponding to the outermost level
15795 of curly braces, skipping the artificial block created for constructor
15796 initializers. */
15797
15798 tree
15799 outer_curly_brace_block (tree fndecl)
15800 {
15801 tree block = DECL_INITIAL (fndecl);
15802 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15803 return block;
15804 block = BLOCK_SUBBLOCKS (block);
15805 if (BLOCK_OUTER_CURLY_BRACE_P (block))
15806 return block;
15807 block = BLOCK_SUBBLOCKS (block);
15808 gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15809 return block;
15810 }
15811
15812 /* If FNDECL is a class's key method, add the class to the list of
15813 keyed classes that should be emitted. */
15814
15815 static void
15816 record_key_method_defined (tree fndecl)
15817 {
15818 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15819 && DECL_VIRTUAL_P (fndecl)
15820 && !processing_template_decl)
15821 {
15822 tree fnclass = DECL_CONTEXT (fndecl);
15823 if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15824 vec_safe_push (keyed_classes, fnclass);
15825 }
15826 }
15827
15828 /* Subroutine of finish_function.
15829 Save the body of constexpr functions for possible
15830 future compile time evaluation. */
15831
15832 static void
15833 maybe_save_function_definition (tree fun)
15834 {
15835 if (!processing_template_decl
15836 && DECL_DECLARED_CONSTEXPR_P (fun)
15837 && !cp_function_chain->invalid_constexpr
15838 && !DECL_CLONED_FUNCTION_P (fun))
15839 register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15840 }
15841
15842 /* Attempt to add a fix-it hint to RICHLOC suggesting the insertion
15843 of "return *this;" immediately before its location, using FNDECL's
15844 first statement (if any) to give the indentation, if appropriate. */
15845
15846 static void
15847 add_return_star_this_fixit (gcc_rich_location *richloc, tree fndecl)
15848 {
15849 location_t indent = UNKNOWN_LOCATION;
15850 tree stmts = expr_first (DECL_SAVED_TREE (fndecl));
15851 if (stmts)
15852 indent = EXPR_LOCATION (stmts);
15853 richloc->add_fixit_insert_formatted ("return *this;",
15854 richloc->get_loc (),
15855 indent);
15856 }
15857
15858 /* Finish up a function declaration and compile that function
15859 all the way to assembler language output. The free the storage
15860 for the function definition. INLINE_P is TRUE if we just
15861 finished processing the body of an in-class inline function
15862 definition. (This processing will have taken place after the
15863 class definition is complete.) */
15864
15865 tree
15866 finish_function (bool inline_p)
15867 {
15868 tree fndecl = current_function_decl;
15869 tree fntype, ctype = NULL_TREE;
15870
15871 /* When we get some parse errors, we can end up without a
15872 current_function_decl, so cope. */
15873 if (fndecl == NULL_TREE)
15874 return error_mark_node;
15875
15876 finish_lambda_scope ();
15877
15878 if (c_dialect_objc ())
15879 objc_finish_function ();
15880
15881 record_key_method_defined (fndecl);
15882
15883 fntype = TREE_TYPE (fndecl);
15884
15885 /* TREE_READONLY (fndecl) = 1;
15886 This caused &foo to be of type ptr-to-const-function
15887 which then got a warning when stored in a ptr-to-function variable. */
15888
15889 gcc_assert (building_stmt_list_p ());
15890 /* The current function is being defined, so its DECL_INITIAL should
15891 be set, and unless there's a multiple definition, it should be
15892 error_mark_node. */
15893 gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15894
15895 /* For a cloned function, we've already got all the code we need;
15896 there's no need to add any extra bits. */
15897 if (!DECL_CLONED_FUNCTION_P (fndecl))
15898 {
15899 /* Make it so that `main' always returns 0 by default. */
15900 if (DECL_MAIN_P (current_function_decl))
15901 finish_return_stmt (integer_zero_node);
15902
15903 if (use_eh_spec_block (current_function_decl))
15904 finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15905 (TREE_TYPE (current_function_decl)),
15906 current_eh_spec_block);
15907 }
15908
15909 /* If we're saving up tree structure, tie off the function now. */
15910 DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15911
15912 finish_fname_decls ();
15913
15914 /* If this function can't throw any exceptions, remember that. */
15915 if (!processing_template_decl
15916 && !cp_function_chain->can_throw
15917 && !flag_non_call_exceptions
15918 && !decl_replaceable_p (fndecl))
15919 TREE_NOTHROW (fndecl) = 1;
15920
15921 /* This must come after expand_function_end because cleanups might
15922 have declarations (from inline functions) that need to go into
15923 this function's blocks. */
15924
15925 /* If the current binding level isn't the outermost binding level
15926 for this function, either there is a bug, or we have experienced
15927 syntax errors and the statement tree is malformed. */
15928 if (current_binding_level->kind != sk_function_parms)
15929 {
15930 /* Make sure we have already experienced errors. */
15931 gcc_assert (errorcount);
15932
15933 /* Throw away the broken statement tree and extra binding
15934 levels. */
15935 DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15936
15937 while (current_binding_level->kind != sk_function_parms)
15938 {
15939 if (current_binding_level->kind == sk_class)
15940 pop_nested_class ();
15941 else
15942 poplevel (0, 0, 0);
15943 }
15944 }
15945 poplevel (1, 0, 1);
15946
15947 /* Statements should always be full-expressions at the outermost set
15948 of curly braces for a function. */
15949 gcc_assert (stmts_are_full_exprs_p ());
15950
15951 /* If there are no return statements in a function with auto return type,
15952 the return type is void. But if the declared type is something like
15953 auto*, this is an error. */
15954 if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15955 && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15956 {
15957 if (is_auto (current_function_auto_return_pattern))
15958 {
15959 apply_deduced_return_type (fndecl, void_type_node);
15960 fntype = TREE_TYPE (fndecl);
15961 }
15962 else if (!current_function_returns_value
15963 && !current_function_returns_null)
15964 {
15965 error ("no return statements in function returning %qT",
15966 current_function_auto_return_pattern);
15967 inform (input_location, "only plain %<auto%> return type can be "
15968 "deduced to %<void%>");
15969 }
15970 }
15971
15972 // If this is a concept, check that the definition is reasonable.
15973 if (DECL_DECLARED_CONCEPT_P (fndecl))
15974 check_function_concept (fndecl);
15975
15976 /* Lambda closure members are implicitly constexpr if possible. */
15977 if (cxx_dialect >= cxx17
15978 && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15979 DECL_DECLARED_CONSTEXPR_P (fndecl)
15980 = ((processing_template_decl
15981 || is_valid_constexpr_fn (fndecl, /*complain*/false))
15982 && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15983
15984 /* Save constexpr function body before it gets munged by
15985 the NRV transformation. */
15986 maybe_save_function_definition (fndecl);
15987
15988 /* Invoke the pre-genericize plugin before we start munging things. */
15989 if (!processing_template_decl)
15990 invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15991
15992 /* Perform delayed folding before NRV transformation. */
15993 if (!processing_template_decl)
15994 cp_fold_function (fndecl);
15995
15996 /* Set up the named return value optimization, if we can. Candidate
15997 variables are selected in check_return_expr. */
15998 if (current_function_return_value)
15999 {
16000 tree r = current_function_return_value;
16001 tree outer;
16002
16003 if (r != error_mark_node
16004 /* This is only worth doing for fns that return in memory--and
16005 simpler, since we don't have to worry about promoted modes. */
16006 && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
16007 /* Only allow this for variables declared in the outer scope of
16008 the function so we know that their lifetime always ends with a
16009 return; see g++.dg/opt/nrv6.C. We could be more flexible if
16010 we were to do this optimization in tree-ssa. */
16011 && (outer = outer_curly_brace_block (fndecl))
16012 && chain_member (r, BLOCK_VARS (outer)))
16013 finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
16014
16015 current_function_return_value = NULL_TREE;
16016 }
16017
16018 /* Remember that we were in class scope. */
16019 if (current_class_name)
16020 ctype = current_class_type;
16021
16022 /* Must mark the RESULT_DECL as being in this function. */
16023 DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
16024
16025 /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
16026 to the FUNCTION_DECL node itself. */
16027 BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
16028
16029 /* Save away current state, if appropriate. */
16030 if (!processing_template_decl)
16031 save_function_data (fndecl);
16032
16033 /* Complain if there's just no return statement. */
16034 if (warn_return_type
16035 && !VOID_TYPE_P (TREE_TYPE (fntype))
16036 && !dependent_type_p (TREE_TYPE (fntype))
16037 && !current_function_returns_value && !current_function_returns_null
16038 /* Don't complain if we abort or throw. */
16039 && !current_function_returns_abnormally
16040 /* Don't complain if there's an infinite loop. */
16041 && !current_function_infinite_loop
16042 /* Don't complain if we are declared noreturn. */
16043 && !TREE_THIS_VOLATILE (fndecl)
16044 && !DECL_NAME (DECL_RESULT (fndecl))
16045 && !TREE_NO_WARNING (fndecl)
16046 /* Structor return values (if any) are set by the compiler. */
16047 && !DECL_CONSTRUCTOR_P (fndecl)
16048 && !DECL_DESTRUCTOR_P (fndecl)
16049 && targetm.warn_func_return (fndecl))
16050 {
16051 gcc_rich_location richloc (input_location);
16052 /* Potentially add a "return *this;" fix-it hint for
16053 assignment operators. */
16054 if (IDENTIFIER_ASSIGN_OP_P (DECL_NAME (fndecl)))
16055 {
16056 tree valtype = TREE_TYPE (DECL_RESULT (fndecl));
16057 if (TREE_CODE (valtype) == REFERENCE_TYPE
16058 && same_type_ignoring_top_level_qualifiers_p
16059 (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
16060 if (global_dc->option_enabled (OPT_Wreturn_type,
16061 global_dc->option_state))
16062 add_return_star_this_fixit (&richloc, fndecl);
16063 }
16064 warning_at (&richloc, OPT_Wreturn_type,
16065 "no return statement in function returning non-void");
16066 TREE_NO_WARNING (fndecl) = 1;
16067 }
16068
16069 /* Store the end of the function, so that we get good line number
16070 info for the epilogue. */
16071 cfun->function_end_locus = input_location;
16072
16073 /* Complain about parameters that are only set, but never otherwise used. */
16074 if (warn_unused_but_set_parameter
16075 && !processing_template_decl
16076 && errorcount == unused_but_set_errorcount
16077 && !DECL_CLONED_FUNCTION_P (fndecl))
16078 {
16079 tree decl;
16080
16081 for (decl = DECL_ARGUMENTS (fndecl);
16082 decl;
16083 decl = DECL_CHAIN (decl))
16084 if (TREE_USED (decl)
16085 && TREE_CODE (decl) == PARM_DECL
16086 && !DECL_READ_P (decl)
16087 && DECL_NAME (decl)
16088 && !DECL_ARTIFICIAL (decl)
16089 && !TREE_NO_WARNING (decl)
16090 && !DECL_IN_SYSTEM_HEADER (decl)
16091 && TREE_TYPE (decl) != error_mark_node
16092 && !TYPE_REF_P (TREE_TYPE (decl))
16093 && (!CLASS_TYPE_P (TREE_TYPE (decl))
16094 || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
16095 warning_at (DECL_SOURCE_LOCATION (decl),
16096 OPT_Wunused_but_set_parameter,
16097 "parameter %qD set but not used", decl);
16098 unused_but_set_errorcount = errorcount;
16099 }
16100
16101 /* Complain about locally defined typedefs that are not used in this
16102 function. */
16103 maybe_warn_unused_local_typedefs ();
16104
16105 /* Possibly warn about unused parameters. */
16106 if (warn_unused_parameter
16107 && !processing_template_decl
16108 && !DECL_CLONED_FUNCTION_P (fndecl))
16109 do_warn_unused_parameter (fndecl);
16110
16111 /* Genericize before inlining. */
16112 if (!processing_template_decl)
16113 {
16114 struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
16115 cp_genericize (fndecl);
16116 /* Clear out the bits we don't need. */
16117 f->x_current_class_ptr = NULL;
16118 f->x_current_class_ref = NULL;
16119 f->x_eh_spec_block = NULL;
16120 f->x_in_charge_parm = NULL;
16121 f->x_vtt_parm = NULL;
16122 f->x_return_value = NULL;
16123 f->bindings = NULL;
16124 f->extern_decl_map = NULL;
16125 f->infinite_loops = NULL;
16126 }
16127 /* Clear out the bits we don't need. */
16128 local_names = NULL;
16129
16130 /* We're leaving the context of this function, so zap cfun. It's still in
16131 DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation. */
16132 set_cfun (NULL);
16133 current_function_decl = NULL;
16134
16135 /* If this is an in-class inline definition, we may have to pop the
16136 bindings for the template parameters that we added in
16137 maybe_begin_member_template_processing when start_function was
16138 called. */
16139 if (inline_p)
16140 maybe_end_member_template_processing ();
16141
16142 /* Leave the scope of the class. */
16143 if (ctype)
16144 pop_nested_class ();
16145
16146 --function_depth;
16147
16148 /* Clean up. */
16149 current_function_decl = NULL_TREE;
16150
16151 invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
16152 return fndecl;
16153 }
16154 \f
16155 /* Create the FUNCTION_DECL for a function definition.
16156 DECLSPECS and DECLARATOR are the parts of the declaration;
16157 they describe the return type and the name of the function,
16158 but twisted together in a fashion that parallels the syntax of C.
16159
16160 This function creates a binding context for the function body
16161 as well as setting up the FUNCTION_DECL in current_function_decl.
16162
16163 Returns a FUNCTION_DECL on success.
16164
16165 If the DECLARATOR is not suitable for a function (it defines a datum
16166 instead), we return 0, which tells yyparse to report a parse error.
16167
16168 May return void_type_node indicating that this method is actually
16169 a friend. See grokfield for more details.
16170
16171 Came here with a `.pushlevel' .
16172
16173 DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
16174 CHANGES TO CODE IN `grokfield'. */
16175
16176 tree
16177 grokmethod (cp_decl_specifier_seq *declspecs,
16178 const cp_declarator *declarator, tree attrlist)
16179 {
16180 tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
16181 &attrlist);
16182
16183 if (fndecl == error_mark_node)
16184 return error_mark_node;
16185
16186 if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
16187 {
16188 error ("invalid member function declaration");
16189 return error_mark_node;
16190 }
16191
16192 if (attrlist)
16193 cplus_decl_attributes (&fndecl, attrlist, 0);
16194
16195 /* Pass friends other than inline friend functions back. */
16196 if (fndecl == void_type_node)
16197 return fndecl;
16198
16199 if (DECL_IN_AGGR_P (fndecl))
16200 {
16201 if (DECL_CLASS_SCOPE_P (fndecl))
16202 error ("%qD is already defined in class %qT", fndecl,
16203 DECL_CONTEXT (fndecl));
16204 return error_mark_node;
16205 }
16206
16207 check_template_shadow (fndecl);
16208
16209 if (TREE_PUBLIC (fndecl))
16210 DECL_COMDAT (fndecl) = 1;
16211 DECL_DECLARED_INLINE_P (fndecl) = 1;
16212 DECL_NO_INLINE_WARNING_P (fndecl) = 1;
16213
16214 /* We process method specializations in finish_struct_1. */
16215 if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
16216 {
16217 fndecl = push_template_decl (fndecl);
16218 if (fndecl == error_mark_node)
16219 return fndecl;
16220 }
16221
16222 if (! DECL_FRIEND_P (fndecl))
16223 {
16224 if (DECL_CHAIN (fndecl))
16225 {
16226 fndecl = copy_node (fndecl);
16227 TREE_CHAIN (fndecl) = NULL_TREE;
16228 }
16229 }
16230
16231 cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
16232
16233 DECL_IN_AGGR_P (fndecl) = 1;
16234 return fndecl;
16235 }
16236 \f
16237
16238 /* VAR is a VAR_DECL. If its type is incomplete, remember VAR so that
16239 we can lay it out later, when and if its type becomes complete.
16240
16241 Also handle constexpr variables where the initializer involves
16242 an unlowered PTRMEM_CST because the class isn't complete yet. */
16243
16244 void
16245 maybe_register_incomplete_var (tree var)
16246 {
16247 gcc_assert (VAR_P (var));
16248
16249 /* Keep track of variables with incomplete types. */
16250 if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
16251 && DECL_EXTERNAL (var))
16252 {
16253 tree inner_type = TREE_TYPE (var);
16254
16255 while (TREE_CODE (inner_type) == ARRAY_TYPE)
16256 inner_type = TREE_TYPE (inner_type);
16257 inner_type = TYPE_MAIN_VARIANT (inner_type);
16258
16259 if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
16260 /* RTTI TD entries are created while defining the type_info. */
16261 || (TYPE_LANG_SPECIFIC (inner_type)
16262 && TYPE_BEING_DEFINED (inner_type)))
16263 {
16264 incomplete_var iv = {var, inner_type};
16265 vec_safe_push (incomplete_vars, iv);
16266 }
16267 else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
16268 && decl_constant_var_p (var)
16269 && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
16270 {
16271 /* When the outermost open class is complete we can resolve any
16272 pointers-to-members. */
16273 tree context = outermost_open_class ();
16274 incomplete_var iv = {var, context};
16275 vec_safe_push (incomplete_vars, iv);
16276 }
16277 }
16278 }
16279
16280 /* Called when a class type (given by TYPE) is defined. If there are
16281 any existing VAR_DECLs whose type has been completed by this
16282 declaration, update them now. */
16283
16284 void
16285 complete_vars (tree type)
16286 {
16287 unsigned ix;
16288 incomplete_var *iv;
16289
16290 for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
16291 {
16292 if (same_type_p (type, iv->incomplete_type))
16293 {
16294 tree var = iv->decl;
16295 tree type = TREE_TYPE (var);
16296
16297 if (type != error_mark_node
16298 && (TYPE_MAIN_VARIANT (strip_array_types (type))
16299 == iv->incomplete_type))
16300 {
16301 /* Complete the type of the variable. The VAR_DECL itself
16302 will be laid out in expand_expr. */
16303 complete_type (type);
16304 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
16305 }
16306
16307 /* Remove this entry from the list. */
16308 incomplete_vars->unordered_remove (ix);
16309 }
16310 else
16311 ix++;
16312 }
16313
16314 /* Check for pending declarations which may have abstract type. */
16315 complete_type_check_abstract (type);
16316 }
16317
16318 /* If DECL is of a type which needs a cleanup, build and return an
16319 expression to perform that cleanup here. Return NULL_TREE if no
16320 cleanup need be done. DECL can also be a _REF when called from
16321 split_nonconstant_init_1. */
16322
16323 tree
16324 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
16325 {
16326 tree type;
16327 tree attr;
16328 tree cleanup;
16329
16330 /* Assume no cleanup is required. */
16331 cleanup = NULL_TREE;
16332
16333 if (error_operand_p (decl))
16334 return cleanup;
16335
16336 /* Handle "__attribute__((cleanup))". We run the cleanup function
16337 before the destructor since the destructor is what actually
16338 terminates the lifetime of the object. */
16339 if (DECL_P (decl))
16340 attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
16341 else
16342 attr = NULL_TREE;
16343 if (attr)
16344 {
16345 tree id;
16346 tree fn;
16347 tree arg;
16348
16349 /* Get the name specified by the user for the cleanup function. */
16350 id = TREE_VALUE (TREE_VALUE (attr));
16351 /* Look up the name to find the cleanup function to call. It is
16352 important to use lookup_name here because that is what is
16353 used in c-common.c:handle_cleanup_attribute when performing
16354 initial checks on the attribute. Note that those checks
16355 include ensuring that the function found is not an overloaded
16356 function, or an object with an overloaded call operator,
16357 etc.; we can rely on the fact that the function found is an
16358 ordinary FUNCTION_DECL. */
16359 fn = lookup_name (id);
16360 arg = build_address (decl);
16361 if (!mark_used (decl, complain) && !(complain & tf_error))
16362 return error_mark_node;
16363 cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
16364 if (cleanup == error_mark_node)
16365 return error_mark_node;
16366 }
16367 /* Handle ordinary C++ destructors. */
16368 type = TREE_TYPE (decl);
16369 if (type_build_dtor_call (type))
16370 {
16371 int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16372 tree addr;
16373 tree call;
16374
16375 if (TREE_CODE (type) == ARRAY_TYPE)
16376 addr = decl;
16377 else
16378 addr = build_address (decl);
16379
16380 call = build_delete (TREE_TYPE (addr), addr,
16381 sfk_complete_destructor, flags, 0, complain);
16382 if (call == error_mark_node)
16383 cleanup = error_mark_node;
16384 else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16385 /* Discard the call. */;
16386 else if (cleanup)
16387 cleanup = cp_build_compound_expr (cleanup, call, complain);
16388 else
16389 cleanup = call;
16390 }
16391
16392 /* build_delete sets the location of the destructor call to the
16393 current location, even though the destructor is going to be
16394 called later, at the end of the current scope. This can lead to
16395 a "jumpy" behavior for users of debuggers when they step around
16396 the end of the block. So let's unset the location of the
16397 destructor call instead. */
16398 protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16399
16400 if (cleanup
16401 && DECL_P (decl)
16402 && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16403 /* Treat objects with destructors as used; the destructor may do
16404 something substantive. */
16405 && !mark_used (decl, complain) && !(complain & tf_error))
16406 return error_mark_node;
16407
16408 return cleanup;
16409 }
16410
16411 \f
16412 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16413 FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16414 METHOD_TYPE or FUNCTION_TYPE, or pointer to member function. */
16415
16416 tree
16417 static_fn_type (tree memfntype)
16418 {
16419 tree fntype;
16420 tree args;
16421
16422 if (TYPE_PTRMEMFUNC_P (memfntype))
16423 memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16424 if (INDIRECT_TYPE_P (memfntype)
16425 || TREE_CODE (memfntype) == FUNCTION_DECL)
16426 memfntype = TREE_TYPE (memfntype);
16427 if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16428 return memfntype;
16429 gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16430 args = TYPE_ARG_TYPES (memfntype);
16431 fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16432 fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype));
16433 fntype = (cp_build_type_attribute_variant
16434 (fntype, TYPE_ATTRIBUTES (memfntype)));
16435 fntype = cxx_copy_lang_qualifiers (fntype, memfntype);
16436 return fntype;
16437 }
16438
16439 /* DECL was originally constructed as a non-static member function,
16440 but turned out to be static. Update it accordingly. */
16441
16442 void
16443 revert_static_member_fn (tree decl)
16444 {
16445 tree stype = static_fn_type (decl);
16446 cp_cv_quals quals = type_memfn_quals (stype);
16447 cp_ref_qualifier rqual = type_memfn_rqual (stype);
16448
16449 if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16450 stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16451
16452 TREE_TYPE (decl) = stype;
16453
16454 if (DECL_ARGUMENTS (decl))
16455 DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16456 DECL_STATIC_FUNCTION_P (decl) = 1;
16457 }
16458
16459 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16460 one of the language-independent trees. */
16461
16462 enum cp_tree_node_structure_enum
16463 cp_tree_node_structure (union lang_tree_node * t)
16464 {
16465 switch (TREE_CODE (&t->generic))
16466 {
16467 case DEFAULT_ARG: return TS_CP_DEFAULT_ARG;
16468 case DEFERRED_NOEXCEPT: return TS_CP_DEFERRED_NOEXCEPT;
16469 case IDENTIFIER_NODE: return TS_CP_IDENTIFIER;
16470 case OVERLOAD: return TS_CP_OVERLOAD;
16471 case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16472 case PTRMEM_CST: return TS_CP_PTRMEM;
16473 case BASELINK: return TS_CP_BASELINK;
16474 case TEMPLATE_DECL: return TS_CP_TEMPLATE_DECL;
16475 case STATIC_ASSERT: return TS_CP_STATIC_ASSERT;
16476 case ARGUMENT_PACK_SELECT: return TS_CP_ARGUMENT_PACK_SELECT;
16477 case TRAIT_EXPR: return TS_CP_TRAIT_EXPR;
16478 case LAMBDA_EXPR: return TS_CP_LAMBDA_EXPR;
16479 case TEMPLATE_INFO: return TS_CP_TEMPLATE_INFO;
16480 case CONSTRAINT_INFO: return TS_CP_CONSTRAINT_INFO;
16481 case USERDEF_LITERAL: return TS_CP_USERDEF_LITERAL;
16482 default: return TS_CP_GENERIC;
16483 }
16484 }
16485
16486 /* Build the void_list_node (void_type_node having been created). */
16487 tree
16488 build_void_list_node (void)
16489 {
16490 tree t = build_tree_list (NULL_TREE, void_type_node);
16491 return t;
16492 }
16493
16494 bool
16495 cp_missing_noreturn_ok_p (tree decl)
16496 {
16497 /* A missing noreturn is ok for the `main' function. */
16498 return DECL_MAIN_P (decl);
16499 }
16500
16501 /* Return the decl used to identify the COMDAT group into which DECL should
16502 be placed. */
16503
16504 tree
16505 cxx_comdat_group (tree decl)
16506 {
16507 /* Virtual tables, construction virtual tables, and virtual table
16508 tables all go in a single COMDAT group, named after the primary
16509 virtual table. */
16510 if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16511 decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16512 /* For all other DECLs, the COMDAT group is the mangled name of the
16513 declaration itself. */
16514 else
16515 {
16516 while (DECL_THUNK_P (decl))
16517 {
16518 /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16519 into the same section as the target function. In that case
16520 we must return target's name. */
16521 tree target = THUNK_TARGET (decl);
16522 if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16523 && DECL_SECTION_NAME (target) != NULL
16524 && DECL_ONE_ONLY (target))
16525 decl = target;
16526 else
16527 break;
16528 }
16529 }
16530
16531 return decl;
16532 }
16533
16534 /* Returns the return type for FN as written by the user, which may include
16535 a placeholder for a deduced return type. */
16536
16537 tree
16538 fndecl_declared_return_type (tree fn)
16539 {
16540 fn = STRIP_TEMPLATE (fn);
16541 if (FNDECL_USED_AUTO (fn))
16542 {
16543 struct language_function *f = NULL;
16544 if (DECL_STRUCT_FUNCTION (fn))
16545 f = DECL_STRUCT_FUNCTION (fn)->language;
16546 if (f == NULL)
16547 f = DECL_SAVED_FUNCTION_DATA (fn);
16548 return f->x_auto_return_pattern;
16549 }
16550 return TREE_TYPE (TREE_TYPE (fn));
16551 }
16552
16553 /* Returns true iff DECL is a variable or function declared with an auto type
16554 that has not yet been deduced to a real type. */
16555
16556 bool
16557 undeduced_auto_decl (tree decl)
16558 {
16559 if (cxx_dialect < cxx11)
16560 return false;
16561 return ((VAR_OR_FUNCTION_DECL_P (decl)
16562 || TREE_CODE (decl) == TEMPLATE_DECL)
16563 && type_uses_auto (TREE_TYPE (decl)));
16564 }
16565
16566 /* Complain if DECL has an undeduced return type. */
16567
16568 bool
16569 require_deduced_type (tree decl, tsubst_flags_t complain)
16570 {
16571 if (undeduced_auto_decl (decl))
16572 {
16573 if (complain & tf_error)
16574 error ("use of %qD before deduction of %<auto%>", decl);
16575 return false;
16576 }
16577 return true;
16578 }
16579
16580 #include "gt-cp-decl.h"