xref: /dragonfly/contrib/gcc-8.0/gcc/cp/decl.c (revision 95059079af47f9a66a175f374f2da1a5020e3255)
1 /* Process declarations and variables for C++ compiler.
2    Copyright (C) 1988-2018 Free Software Foundation, Inc.
3    Contributed by Michael Tiemann (tiemann@cygnus.com)
4 
5 This file is part of GCC.
6 
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
10 any later version.
11 
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 GNU General Public License for more details.
16 
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3.  If not see
19 <http://www.gnu.org/licenses/>.  */
20 
21 
22 /* Process declarations and symbol lookup for C++ front end.
23    Also constructs types; the standard scalar types at initialization,
24    and structure, union, array and enum types when they are declared.  */
25 
26 /* ??? not all decl nodes are given the most useful possible
27    line numbers.  For example, the CONST_DECLs for enum values.  */
28 
29 #include "config.h"
30 #include "system.h"
31 #include "coretypes.h"
32 #include "target.h"
33 #include "c-family/c-target.h"
34 #include "cp-tree.h"
35 #include "timevar.h"
36 #include "stringpool.h"
37 #include "cgraph.h"
38 #include "stor-layout.h"
39 #include "varasm.h"
40 #include "attribs.h"
41 #include "flags.h"
42 #include "tree-iterator.h"
43 #include "decl.h"
44 #include "intl.h"
45 #include "toplev.h"
46 #include "c-family/c-objc.h"
47 #include "c-family/c-pragma.h"
48 #include "c-family/c-ubsan.h"
49 #include "debug.h"
50 #include "plugin.h"
51 #include "builtins.h"
52 #include "gimplify.h"
53 #include "asan.h"
54 
55 /* Possible cases of bad specifiers type used by bad_specifiers. */
56 enum bad_spec_place {
57   BSP_VAR,    /* variable */
58   BSP_PARM,   /* parameter */
59   BSP_TYPE,   /* type */
60   BSP_FIELD   /* field */
61 };
62 
63 static const char *redeclaration_error_message (tree, tree);
64 
65 static int decl_jump_unsafe (tree);
66 static void require_complete_types_for_parms (tree);
67 static void push_local_name (tree);
68 static tree grok_reference_init (tree, tree, tree, int);
69 static tree grokvardecl (tree, tree, tree, const cp_decl_specifier_seq *,
70                                int, int, int, bool, int, tree);
71 static int check_static_variable_definition (tree, tree);
72 static void record_unknown_type (tree, const char *);
73 static tree builtin_function_1 (tree, tree, bool);
74 static int member_function_or_else (tree, tree, enum overload_flags);
75 static tree local_variable_p_walkfn (tree *, int *, void *);
76 static const char *tag_name (enum tag_types);
77 static tree lookup_and_check_tag (enum tag_types, tree, tag_scope, bool);
78 static void maybe_deduce_size_from_array_init (tree, tree);
79 static void layout_var_decl (tree);
80 static tree check_initializer (tree, tree, int, vec<tree, va_gc> **);
81 static void make_rtl_for_nonlocal_decl (tree, tree, const char *);
82 static void save_function_data (tree);
83 static void copy_type_enum (tree , tree);
84 static void check_function_type (tree, tree);
85 static void finish_constructor_body (void);
86 static void begin_destructor_body (void);
87 static void finish_destructor_body (void);
88 static void record_key_method_defined (tree);
89 static tree create_array_type_for_decl (tree, tree, tree);
90 static tree get_atexit_node (void);
91 static tree get_dso_handle_node (void);
92 static tree start_cleanup_fn (void);
93 static void end_cleanup_fn (void);
94 static tree cp_make_fname_decl (location_t, tree, int);
95 static void initialize_predefined_identifiers (void);
96 static tree check_special_function_return_type
97        (special_function_kind, tree, tree, int, const location_t*);
98 static tree push_cp_library_fn (enum tree_code, tree, int);
99 static tree build_cp_library_fn (tree, enum tree_code, tree, int);
100 static void store_parm_decls (tree);
101 static void initialize_local_var (tree, tree);
102 static void expand_static_init (tree, tree);
103 
104 /* The following symbols are subsumed in the cp_global_trees array, and
105    listed here individually for documentation purposes.
106 
107    C++ extensions
108           tree wchar_decl_node;
109 
110           tree vtable_entry_type;
111           tree delta_type_node;
112           tree __t_desc_type_node;
113 
114           tree class_type_node;
115           tree unknown_type_node;
116 
117    Array type `vtable_entry_type[]'
118 
119           tree vtbl_type_node;
120           tree vtbl_ptr_type_node;
121 
122    Namespaces,
123 
124           tree std_node;
125           tree abi_node;
126 
127    A FUNCTION_DECL which can call `abort'.  Not necessarily the
128    one that the user will declare, but sufficient to be called
129    by routines that want to abort the program.
130 
131           tree abort_fndecl;
132 
133    Used by RTTI
134           tree type_info_type_node, tinfo_decl_id, tinfo_decl_type;
135           tree tinfo_var_id;  */
136 
137 tree cp_global_trees[CPTI_MAX];
138 
139 #define local_names cp_function_chain->x_local_names
140 
141 /* A list of objects which have constructors or destructors
142    which reside in the global scope.  The decl is stored in
143    the TREE_VALUE slot and the initializer is stored
144    in the TREE_PURPOSE slot.  */
145 tree static_aggregates;
146 
147 /* Like static_aggregates, but for thread_local variables.  */
148 tree tls_aggregates;
149 
150 /* -- end of C++ */
151 
152 /* A node for the integer constant 2.  */
153 
154 tree integer_two_node;
155 
156 /* vector of static decls.  */
157 vec<tree, va_gc> *static_decls;
158 
159 /* vector of keyed classes.  */
160 vec<tree, va_gc> *keyed_classes;
161 
162 /* Used only for jumps to as-yet undefined labels, since jumps to
163    defined labels can have their validity checked immediately.  */
164 
165 struct GTY((chain_next ("%h.next"))) named_label_use_entry {
166   struct named_label_use_entry *next;
167   /* The binding level to which this entry is *currently* attached.
168      This is initially the binding level in which the goto appeared,
169      but is modified as scopes are closed.  */
170   cp_binding_level *binding_level;
171   /* The head of the names list that was current when the goto appeared,
172      or the inner scope popped.  These are the decls that will *not* be
173      skipped when jumping to the label.  */
174   tree names_in_scope;
175   /* The location of the goto, for error reporting.  */
176   location_t o_goto_locus;
177   /* True if an OpenMP structured block scope has been closed since
178      the goto appeared.  This means that the branch from the label will
179      illegally exit an OpenMP scope.  */
180   bool in_omp_scope;
181 };
182 
183 /* A list of all LABEL_DECLs in the function that have names.  Here so
184    we can clear out their names' definitions at the end of the
185    function, and so we can check the validity of jumps to these labels.  */
186 
187 struct GTY((for_user)) named_label_entry {
188 
189   tree name;  /* Name of decl. */
190 
191   tree label_decl; /* LABEL_DECL, unless deleted local label. */
192 
193   named_label_entry *outer; /* Outer shadowed chain.  */
194 
195   /* The binding level to which the label is *currently* attached.
196      This is initially set to the binding level in which the label
197      is defined, but is modified as scopes are closed.  */
198   cp_binding_level *binding_level;
199 
200   /* The head of the names list that was current when the label was
201      defined, or the inner scope popped.  These are the decls that will
202      be skipped when jumping to the label.  */
203   tree names_in_scope;
204 
205   /* A vector of all decls from all binding levels that would be
206      crossed by a backward branch to the label.  */
207   vec<tree, va_gc> *bad_decls;
208 
209   /* A list of uses of the label, before the label is defined.  */
210   named_label_use_entry *uses;
211 
212   /* The following bits are set after the label is defined, and are
213      updated as scopes are popped.  They indicate that a jump to the
214      label will illegally enter a scope of the given flavor.  */
215   bool in_try_scope;
216   bool in_catch_scope;
217   bool in_omp_scope;
218   bool in_transaction_scope;
219   bool in_constexpr_if;
220 };
221 
222 #define named_labels cp_function_chain->x_named_labels
223 
224 /* The number of function bodies which we are currently processing.
225    (Zero if we are at namespace scope, one inside the body of a
226    function, two inside the body of a function in a local class, etc.)  */
227 int function_depth;
228 
229 /* Whether the exception-specifier is part of a function type (i.e. C++17).  */
230 bool flag_noexcept_type;
231 
232 /* States indicating how grokdeclarator() should handle declspecs marked
233    with __attribute__((deprecated)).  An object declared as
234    __attribute__((deprecated)) suppresses warnings of uses of other
235    deprecated items.  */
236 enum deprecated_states deprecated_state = DEPRECATED_NORMAL;
237 
238 
239 /* A list of VAR_DECLs whose type was incomplete at the time the
240    variable was declared.  */
241 
242 struct GTY(()) incomplete_var {
243   tree decl;
244   tree incomplete_type;
245 };
246 
247 
248 static GTY(()) vec<incomplete_var, va_gc> *incomplete_vars;
249 
250 /* Returns the kind of template specialization we are currently
251    processing, given that it's declaration contained N_CLASS_SCOPES
252    explicit scope qualifications.  */
253 
254 tmpl_spec_kind
current_tmpl_spec_kind(int n_class_scopes)255 current_tmpl_spec_kind (int n_class_scopes)
256 {
257   int n_template_parm_scopes = 0;
258   int seen_specialization_p = 0;
259   int innermost_specialization_p = 0;
260   cp_binding_level *b;
261 
262   /* Scan through the template parameter scopes.  */
263   for (b = current_binding_level;
264        b->kind == sk_template_parms;
265        b = b->level_chain)
266     {
267       /* If we see a specialization scope inside a parameter scope,
268            then something is wrong.  That corresponds to a declaration
269            like:
270 
271               template <class T> template <> ...
272 
273            which is always invalid since [temp.expl.spec] forbids the
274            specialization of a class member template if the enclosing
275            class templates are not explicitly specialized as well.  */
276       if (b->explicit_spec_p)
277           {
278             if (n_template_parm_scopes == 0)
279               innermost_specialization_p = 1;
280             else
281               seen_specialization_p = 1;
282           }
283       else if (seen_specialization_p == 1)
284           return tsk_invalid_member_spec;
285 
286       ++n_template_parm_scopes;
287     }
288 
289   /* Handle explicit instantiations.  */
290   if (processing_explicit_instantiation)
291     {
292       if (n_template_parm_scopes != 0)
293           /* We've seen a template parameter list during an explicit
294              instantiation.  For example:
295 
296                template <class T> template void f(int);
297 
298              This is erroneous.  */
299           return tsk_invalid_expl_inst;
300       else
301           return tsk_expl_inst;
302     }
303 
304   if (n_template_parm_scopes < n_class_scopes)
305     /* We've not seen enough template headers to match all the
306        specialized classes present.  For example:
307 
308            template <class T> void R<T>::S<T>::f(int);
309 
310        This is invalid; there needs to be one set of template
311        parameters for each class.  */
312     return tsk_insufficient_parms;
313   else if (n_template_parm_scopes == n_class_scopes)
314     /* We're processing a non-template declaration (even though it may
315        be a member of a template class.)  For example:
316 
317            template <class T> void S<T>::f(int);
318 
319        The `class T' matches the `S<T>', leaving no template headers
320        corresponding to the `f'.  */
321     return tsk_none;
322   else if (n_template_parm_scopes > n_class_scopes + 1)
323     /* We've got too many template headers.  For example:
324 
325            template <> template <class T> void f (T);
326 
327        There need to be more enclosing classes.  */
328     return tsk_excessive_parms;
329   else
330     /* This must be a template.  It's of the form:
331 
332            template <class T> template <class U> void S<T>::f(U);
333 
334        This is a specialization if the innermost level was a
335        specialization; otherwise it's just a definition of the
336        template.  */
337     return innermost_specialization_p ? tsk_expl_spec : tsk_template;
338 }
339 
340 /* Exit the current scope.  */
341 
342 void
finish_scope(void)343 finish_scope (void)
344 {
345   poplevel (0, 0, 0);
346 }
347 
348 /* When a label goes out of scope, check to see if that label was used
349    in a valid manner, and issue any appropriate warnings or errors.  */
350 
351 static void
check_label_used(tree label)352 check_label_used (tree label)
353 {
354   if (!processing_template_decl)
355     {
356       if (DECL_INITIAL (label) == NULL_TREE)
357           {
358             location_t location;
359 
360             error ("label %q+D used but not defined", label);
361             location = input_location;
362               /* FIXME want (LOCATION_FILE (input_location), (line)0) */
363             /* Avoid crashing later.  */
364             define_label (location, DECL_NAME (label));
365           }
366       else
367           warn_for_unused_label (label);
368     }
369 }
370 
371 /* Helper function to sort named label entries in a vector by DECL_UID.  */
372 
373 static int
sort_labels(const void * a,const void * b)374 sort_labels (const void *a, const void *b)
375 {
376   tree label1 = *(tree const *) a;
377   tree label2 = *(tree const *) b;
378 
379   /* DECL_UIDs can never be equal.  */
380   return DECL_UID (label1) > DECL_UID (label2) ? -1 : +1;
381 }
382 
383 /* At the end of a function, all labels declared within the function
384    go out of scope.  BLOCK is the top-level block for the
385    function.  */
386 
387 static void
pop_labels(tree block)388 pop_labels (tree block)
389 {
390   if (!named_labels)
391     return;
392 
393   /* We need to add the labels to the block chain, so debug
394      information is emitted.  But, we want the order to be stable so
395      need to sort them first.  Otherwise the debug output could be
396      randomly ordered.  I guess it's mostly stable, unless the hash
397      table implementation changes.  */
398   auto_vec<tree, 32> labels (named_labels->elements ());
399   hash_table<named_label_hash>::iterator end (named_labels->end ());
400   for (hash_table<named_label_hash>::iterator iter
401            (named_labels->begin ()); iter != end; ++iter)
402     {
403       named_label_entry *ent = *iter;
404 
405       gcc_checking_assert (!ent->outer);
406       if (ent->label_decl)
407           labels.quick_push (ent->label_decl);
408       ggc_free (ent);
409     }
410   named_labels = NULL;
411   labels.qsort (sort_labels);
412 
413   while (labels.length ())
414     {
415       tree label = labels.pop ();
416 
417       DECL_CHAIN (label) = BLOCK_VARS (block);
418       BLOCK_VARS (block) = label;
419 
420       check_label_used (label);
421     }
422 }
423 
424 /* At the end of a block with local labels, restore the outer definition.  */
425 
426 static void
pop_local_label(tree id,tree label)427 pop_local_label (tree id, tree label)
428 {
429   check_label_used (label);
430   named_label_entry **slot = named_labels->find_slot_with_hash
431     (id, IDENTIFIER_HASH_VALUE (id), NO_INSERT);
432   named_label_entry *ent = *slot;
433 
434   if (ent->outer)
435     ent = ent->outer;
436   else
437     {
438       ent = ggc_cleared_alloc<named_label_entry> ();
439       ent->name = id;
440     }
441   *slot = ent;
442 }
443 
444 /* The following two routines are used to interface to Objective-C++.
445    The binding level is purposely treated as an opaque type.  */
446 
447 void *
objc_get_current_scope(void)448 objc_get_current_scope (void)
449 {
450   return current_binding_level;
451 }
452 
453 /* The following routine is used by the NeXT-style SJLJ exceptions;
454    variables get marked 'volatile' so as to not be clobbered by
455    _setjmp()/_longjmp() calls.  All variables in the current scope,
456    as well as parent scopes up to (but not including) ENCLOSING_BLK
457    shall be thusly marked.  */
458 
459 void
objc_mark_locals_volatile(void * enclosing_blk)460 objc_mark_locals_volatile (void *enclosing_blk)
461 {
462   cp_binding_level *scope;
463 
464   for (scope = current_binding_level;
465        scope && scope != enclosing_blk;
466        scope = scope->level_chain)
467     {
468       tree decl;
469 
470       for (decl = scope->names; decl; decl = TREE_CHAIN (decl))
471           objc_volatilize_decl (decl);
472 
473       /* Do not climb up past the current function.  */
474       if (scope->kind == sk_function_parms)
475           break;
476     }
477 }
478 
479 /* True if B is the level for the condition of a constexpr if.  */
480 
481 static bool
level_for_constexpr_if(cp_binding_level * b)482 level_for_constexpr_if (cp_binding_level *b)
483 {
484   return (b->kind == sk_cond && b->this_entity
485             && TREE_CODE (b->this_entity) == IF_STMT
486             && IF_STMT_CONSTEXPR_P (b->this_entity));
487 }
488 
489 /* Update data for defined and undefined labels when leaving a scope.  */
490 
491 int
poplevel_named_label_1(named_label_entry ** slot,cp_binding_level * bl)492 poplevel_named_label_1 (named_label_entry **slot, cp_binding_level *bl)
493 {
494   named_label_entry *ent = *slot;
495   cp_binding_level *obl = bl->level_chain;
496 
497   if (ent->binding_level == bl)
498     {
499       tree decl;
500 
501       /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and
502            TREE_LISTs representing OVERLOADs, so be careful.  */
503       for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl)
504                                                                  ? DECL_CHAIN (decl)
505                                                                  : TREE_CHAIN (decl)))
506           if (decl_jump_unsafe (decl))
507             vec_safe_push (ent->bad_decls, decl);
508 
509       ent->binding_level = obl;
510       ent->names_in_scope = obl->names;
511       switch (bl->kind)
512           {
513           case sk_try:
514             ent->in_try_scope = true;
515             break;
516           case sk_catch:
517             ent->in_catch_scope = true;
518             break;
519           case sk_omp:
520             ent->in_omp_scope = true;
521             break;
522           case sk_transaction:
523             ent->in_transaction_scope = true;
524             break;
525           case sk_block:
526             if (level_for_constexpr_if (bl->level_chain))
527               ent->in_constexpr_if = true;
528             break;
529           default:
530             break;
531           }
532     }
533   else if (ent->uses)
534     {
535       struct named_label_use_entry *use;
536 
537       for (use = ent->uses; use ; use = use->next)
538           if (use->binding_level == bl)
539             {
540               use->binding_level = obl;
541               use->names_in_scope = obl->names;
542               if (bl->kind == sk_omp)
543                 use->in_omp_scope = true;
544             }
545     }
546 
547   return 1;
548 }
549 
550 /* Saved errorcount to avoid -Wunused-but-set-{parameter,variable} warnings
551    when errors were reported, except for -Werror-unused-but-set-*.  */
552 static int unused_but_set_errorcount;
553 
554 /* Exit a binding level.
555    Pop the level off, and restore the state of the identifier-decl mappings
556    that were in effect when this level was entered.
557 
558    If KEEP == 1, this level had explicit declarations, so
559    and create a "block" (a BLOCK node) for the level
560    to record its declarations and subblocks for symbol table output.
561 
562    If FUNCTIONBODY is nonzero, this level is the body of a function,
563    so create a block as if KEEP were set and also clear out all
564    label names.
565 
566    If REVERSE is nonzero, reverse the order of decls before putting
567    them into the BLOCK.  */
568 
569 tree
poplevel(int keep,int reverse,int functionbody)570 poplevel (int keep, int reverse, int functionbody)
571 {
572   tree link;
573   /* The chain of decls was accumulated in reverse order.
574      Put it into forward order, just for cleanliness.  */
575   tree decls;
576   tree subblocks;
577   tree block;
578   tree decl;
579   int leaving_for_scope;
580   scope_kind kind;
581   unsigned ix;
582 
583   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
584  restart:
585 
586   block = NULL_TREE;
587 
588   gcc_assert (current_binding_level->kind != sk_class
589                 && current_binding_level->kind != sk_namespace);
590 
591   if (current_binding_level->kind == sk_cleanup)
592     functionbody = 0;
593   subblocks = functionbody >= 0 ? current_binding_level->blocks : 0;
594 
595   gcc_assert (!vec_safe_length (current_binding_level->class_shadowed));
596 
597   /* We used to use KEEP == 2 to indicate that the new block should go
598      at the beginning of the list of blocks at this binding level,
599      rather than the end.  This hack is no longer used.  */
600   gcc_assert (keep == 0 || keep == 1);
601 
602   if (current_binding_level->keep)
603     keep = 1;
604 
605   /* Any uses of undefined labels, and any defined labels, now operate
606      under constraints of next binding contour.  */
607   if (cfun && !functionbody && named_labels)
608     named_labels->traverse<cp_binding_level *, poplevel_named_label_1>
609                        (current_binding_level);
610 
611   /* Get the decls in the order they were written.
612      Usually current_binding_level->names is in reverse order.
613      But parameter decls were previously put in forward order.  */
614 
615   decls = current_binding_level->names;
616   if (reverse)
617     {
618       decls = nreverse (decls);
619       current_binding_level->names = decls;
620     }
621 
622   /* If there were any declarations or structure tags in that level,
623      or if this level is a function body,
624      create a BLOCK to record them for the life of this function.  */
625   block = NULL_TREE;
626   /* Avoid function body block if possible.  */
627   if (functionbody && subblocks && BLOCK_CHAIN (subblocks) == NULL_TREE)
628     keep = 0;
629   else if (keep == 1 || functionbody)
630     block = make_node (BLOCK);
631   if (block != NULL_TREE)
632     {
633       BLOCK_VARS (block) = decls;
634       BLOCK_SUBBLOCKS (block) = subblocks;
635     }
636 
637   /* In each subblock, record that this is its superior.  */
638   if (keep >= 0)
639     for (link = subblocks; link; link = BLOCK_CHAIN (link))
640       BLOCK_SUPERCONTEXT (link) = block;
641 
642   /* We still support the old for-scope rules, whereby the variables
643      in a init statement were in scope after the for-statement ended.
644      We only use the new rules if flag_new_for_scope is nonzero.  */
645   leaving_for_scope
646     = current_binding_level->kind == sk_for && flag_new_for_scope;
647 
648   /* Before we remove the declarations first check for unused variables.  */
649   if ((warn_unused_variable || warn_unused_but_set_variable)
650       && current_binding_level->kind != sk_template_parms
651       && !processing_template_decl)
652     for (tree d = get_local_decls (); d; d = TREE_CHAIN (d))
653       {
654           /* There are cases where D itself is a TREE_LIST.  See in
655              push_local_binding where the list of decls returned by
656              getdecls is built.  */
657           decl = TREE_CODE (d) == TREE_LIST ? TREE_VALUE (d) : d;
658 
659           tree type = TREE_TYPE (decl);
660           if (VAR_P (decl)
661               && (! TREE_USED (decl) || !DECL_READ_P (decl))
662               && ! DECL_IN_SYSTEM_HEADER (decl)
663               /* For structured bindings, consider only real variables, not
664                  subobjects.  */
665               && (DECL_DECOMPOSITION_P (decl) ? !DECL_DECOMP_BASE (decl)
666                     : (DECL_NAME (decl) && !DECL_ARTIFICIAL (decl)))
667               && type != error_mark_node
668               && (!CLASS_TYPE_P (type)
669                     || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
670                     || lookup_attribute ("warn_unused",
671                                              TYPE_ATTRIBUTES (TREE_TYPE (decl)))))
672             {
673               if (! TREE_USED (decl))
674                 {
675                     if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
676                       warning_at (DECL_SOURCE_LOCATION (decl),
677                                     OPT_Wunused_variable,
678                                     "unused structured binding declaration");
679                     else
680                       warning_at (DECL_SOURCE_LOCATION (decl),
681                                     OPT_Wunused_variable, "unused variable %qD", decl);
682                 }
683               else if (DECL_CONTEXT (decl) == current_function_decl
684                          // For -Wunused-but-set-variable leave references alone.
685                          && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
686                          && errorcount == unused_but_set_errorcount)
687                 {
688                     if (!DECL_NAME (decl) && DECL_DECOMPOSITION_P (decl))
689                       warning_at (DECL_SOURCE_LOCATION (decl),
690                                     OPT_Wunused_but_set_variable, "structured "
691                                     "binding declaration set but not used");
692                     else
693                       warning_at (DECL_SOURCE_LOCATION (decl),
694                                     OPT_Wunused_but_set_variable,
695                                     "variable %qD set but not used", decl);
696                     unused_but_set_errorcount = errorcount;
697                 }
698             }
699       }
700 
701   /* Remove declarations for all the DECLs in this level.  */
702   for (link = decls; link; link = TREE_CHAIN (link))
703     {
704       decl = TREE_CODE (link) == TREE_LIST ? TREE_VALUE (link) : link;
705       tree name = OVL_NAME (decl);
706 
707       if (leaving_for_scope && VAR_P (decl)
708             /* It's hard to make this ARM compatibility hack play nicely with
709                lambdas, and it really isn't necessary in C++11 mode.  */
710             && cxx_dialect < cxx11
711             && name)
712           {
713             cxx_binding *ob = outer_binding (name,
714                                                      IDENTIFIER_BINDING (name),
715                                                      /*class_p=*/true);
716             tree ns_binding = NULL_TREE;
717             if (!ob)
718               ns_binding = get_namespace_binding (current_namespace, name);
719 
720             if (ob && ob->scope == current_binding_level->level_chain)
721               /* We have something like:
722 
723                      int i;
724                      for (int i; ;);
725 
726                  and we are leaving the `for' scope.  There's no reason to
727                  keep the binding of the inner `i' in this case.  */
728               ;
729             else if ((ob && (TREE_CODE (ob->value) == TYPE_DECL))
730                        || (ns_binding && TREE_CODE (ns_binding) == TYPE_DECL))
731               /* Here, we have something like:
732 
733                      typedef int I;
734 
735                      void f () {
736                        for (int I; ;);
737                      }
738 
739                  We must pop the for-scope binding so we know what's a
740                  type and what isn't.  */
741               ;
742             else
743               {
744                 /* Mark this VAR_DECL as dead so that we can tell we left it
745                      there only for backward compatibility.  */
746                 DECL_DEAD_FOR_LOCAL (link) = 1;
747 
748                 /* Keep track of what should have happened when we
749                      popped the binding.  */
750                 if (ob && ob->value)
751                     {
752                       SET_DECL_SHADOWED_FOR_VAR (link, ob->value);
753                       DECL_HAS_SHADOWED_FOR_VAR_P (link) = 1;
754                     }
755 
756                 /* Add it to the list of dead variables in the next
757                      outermost binding to that we can remove these when we
758                      leave that binding.  */
759                 vec_safe_push (
760                       current_binding_level->level_chain->dead_vars_from_for,
761                       link);
762 
763                 /* Although we don't pop the cxx_binding, we do clear
764                      its SCOPE since the scope is going away now.  */
765                 IDENTIFIER_BINDING (name)->scope
766                     = current_binding_level->level_chain;
767 
768                 /* Don't remove the binding. */
769                 name = NULL_TREE;
770               }
771           }
772       /* Remove the binding.  */
773       if (TREE_CODE (decl) == LABEL_DECL)
774           pop_local_label (name, decl);
775       else
776           pop_local_binding (name, decl);
777     }
778 
779   /* Remove declarations for any `for' variables from inner scopes
780      that we kept around.  */
781   FOR_EACH_VEC_SAFE_ELT_REVERSE (current_binding_level->dead_vars_from_for,
782                                        ix, decl)
783     pop_local_binding (DECL_NAME (decl), decl);
784 
785   /* Restore the IDENTIFIER_TYPE_VALUEs.  */
786   for (link = current_binding_level->type_shadowed;
787        link; link = TREE_CHAIN (link))
788     SET_IDENTIFIER_TYPE_VALUE (TREE_PURPOSE (link), TREE_VALUE (link));
789 
790   /* There may be OVERLOADs (wrapped in TREE_LISTs) on the BLOCK_VARs
791      list if a `using' declaration put them there.  The debugging
792      back ends won't understand OVERLOAD, so we remove them here.
793      Because the BLOCK_VARS are (temporarily) shared with
794      CURRENT_BINDING_LEVEL->NAMES we must do this fixup after we have
795      popped all the bindings.  Also remove undeduced 'auto' decls,
796      which LTO doesn't understand, and can't have been used by anything.  */
797   if (block)
798     {
799       tree* d;
800 
801       for (d = &BLOCK_VARS (block); *d; )
802           {
803             if (TREE_CODE (*d) == TREE_LIST
804                 || (!processing_template_decl
805                       && undeduced_auto_decl (*d)))
806               *d = TREE_CHAIN (*d);
807             else
808               d = &DECL_CHAIN (*d);
809           }
810     }
811 
812   /* If the level being exited is the top level of a function,
813      check over all the labels.  */
814   if (functionbody)
815     {
816       if (block)
817           {
818             /* Since this is the top level block of a function, the vars are
819                the function's parameters.  Don't leave them in the BLOCK
820                because they are found in the FUNCTION_DECL instead.  */
821             BLOCK_VARS (block) = 0;
822             pop_labels (block);
823           }
824       else
825           pop_labels (subblocks);
826     }
827 
828   kind = current_binding_level->kind;
829   if (kind == sk_cleanup)
830     {
831       tree stmt;
832 
833       /* If this is a temporary binding created for a cleanup, then we'll
834            have pushed a statement list level.  Pop that, create a new
835            BIND_EXPR for the block, and insert it into the stream.  */
836       stmt = pop_stmt_list (current_binding_level->statement_list);
837       stmt = c_build_bind_expr (input_location, block, stmt);
838       add_stmt (stmt);
839     }
840 
841   leave_scope ();
842   if (functionbody)
843     {
844       /* The current function is being defined, so its DECL_INITIAL
845            should be error_mark_node.  */
846       gcc_assert (DECL_INITIAL (current_function_decl) == error_mark_node);
847       DECL_INITIAL (current_function_decl) = block ? block : subblocks;
848       if (subblocks)
849           {
850             if (FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
851               {
852                 if (BLOCK_SUBBLOCKS (subblocks))
853                     BLOCK_OUTER_CURLY_BRACE_P (BLOCK_SUBBLOCKS (subblocks)) = 1;
854               }
855             else
856               BLOCK_OUTER_CURLY_BRACE_P (subblocks) = 1;
857           }
858     }
859   else if (block)
860     current_binding_level->blocks
861       = block_chainon (current_binding_level->blocks, block);
862 
863   /* If we did not make a block for the level just exited,
864      any blocks made for inner levels
865      (since they cannot be recorded as subblocks in that level)
866      must be carried forward so they will later become subblocks
867      of something else.  */
868   else if (subblocks)
869     current_binding_level->blocks
870       = block_chainon (current_binding_level->blocks, subblocks);
871 
872   /* Each and every BLOCK node created here in `poplevel' is important
873      (e.g. for proper debugging information) so if we created one
874      earlier, mark it as "used".  */
875   if (block)
876     TREE_USED (block) = 1;
877 
878   /* All temporary bindings created for cleanups are popped silently.  */
879   if (kind == sk_cleanup)
880     goto restart;
881 
882   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
883   return block;
884 }
885 
886 /* Call wrapup_globals_declarations for the globals in NAMESPACE.  */
887 /* Diagnose odr-used extern inline variables without definitions
888    in the current TU.  */
889 
890 int
wrapup_namespace_globals()891 wrapup_namespace_globals ()
892 {
893   if (vec<tree, va_gc> *statics = static_decls)
894     {
895       tree decl;
896       unsigned int i;
897       FOR_EACH_VEC_ELT (*statics, i, decl)
898           {
899             if (warn_unused_function
900                 && TREE_CODE (decl) == FUNCTION_DECL
901                 && DECL_INITIAL (decl) == 0
902                 && DECL_EXTERNAL (decl)
903                 && !TREE_PUBLIC (decl)
904                 && !DECL_ARTIFICIAL (decl)
905                 && !DECL_FRIEND_PSEUDO_TEMPLATE_INSTANTIATION (decl)
906                 && !TREE_NO_WARNING (decl))
907               warning_at (DECL_SOURCE_LOCATION (decl),
908                               OPT_Wunused_function,
909                               "%qF declared %<static%> but never defined", decl);
910 
911             if (VAR_P (decl)
912                 && DECL_EXTERNAL (decl)
913                 && DECL_INLINE_VAR_P (decl)
914                 && DECL_ODR_USED (decl))
915               error_at (DECL_SOURCE_LOCATION (decl),
916                           "odr-used inline variable %qD is not defined", decl);
917           }
918 
919       /* Clear out the list, so we don't rescan next time.  */
920       static_decls = NULL;
921 
922       /* Write out any globals that need to be output.  */
923       return wrapup_global_declarations (statics->address (),
924                                                    statics->length ());
925     }
926   return 0;
927 }
928 
929 /* In C++, you don't have to write `struct S' to refer to `S'; you
930    can just use `S'.  We accomplish this by creating a TYPE_DECL as
931    if the user had written `typedef struct S S'.  Create and return
932    the TYPE_DECL for TYPE.  */
933 
934 tree
create_implicit_typedef(tree name,tree type)935 create_implicit_typedef (tree name, tree type)
936 {
937   tree decl;
938 
939   decl = build_decl (input_location, TYPE_DECL, name, type);
940   DECL_ARTIFICIAL (decl) = 1;
941   /* There are other implicit type declarations, like the one *within*
942      a class that allows you to write `S::S'.  We must distinguish
943      amongst these.  */
944   SET_DECL_IMPLICIT_TYPEDEF_P (decl);
945   TYPE_NAME (type) = decl;
946   TYPE_STUB_DECL (type) = decl;
947 
948   return decl;
949 }
950 
951 /* Remember a local name for name-mangling purposes.  */
952 
953 static void
push_local_name(tree decl)954 push_local_name (tree decl)
955 {
956   size_t i, nelts;
957   tree t, name;
958 
959   timevar_start (TV_NAME_LOOKUP);
960 
961   name = DECL_NAME (decl);
962 
963   nelts = vec_safe_length (local_names);
964   for (i = 0; i < nelts; i++)
965     {
966       t = (*local_names)[i];
967       if (DECL_NAME (t) == name)
968           {
969             retrofit_lang_decl (decl);
970             DECL_LANG_SPECIFIC (decl)->u.base.u2sel = 1;
971             if (DECL_DISCRIMINATOR_SET_P (t))
972               DECL_DISCRIMINATOR (decl) = DECL_DISCRIMINATOR (t) + 1;
973             else
974               DECL_DISCRIMINATOR (decl) = 1;
975 
976             (*local_names)[i] = decl;
977             timevar_stop (TV_NAME_LOOKUP);
978             return;
979           }
980     }
981 
982   vec_safe_push (local_names, decl);
983   timevar_stop (TV_NAME_LOOKUP);
984 }
985 
986 /* Subroutine of duplicate_decls: return truthvalue of whether
987    or not types of these decls match.
988 
989    For C++, we must compare the parameter list so that `int' can match
990    `int&' in a parameter position, but `int&' is not confused with
991    `const int&'.  */
992 
993 int
decls_match(tree newdecl,tree olddecl,bool record_versions)994 decls_match (tree newdecl, tree olddecl, bool record_versions /* = true */)
995 {
996   int types_match;
997 
998   if (newdecl == olddecl)
999     return 1;
1000 
1001   if (TREE_CODE (newdecl) != TREE_CODE (olddecl))
1002     /* If the two DECLs are not even the same kind of thing, we're not
1003        interested in their types.  */
1004     return 0;
1005 
1006   gcc_assert (DECL_P (newdecl));
1007 
1008   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1009     {
1010       tree f1 = TREE_TYPE (newdecl);
1011       tree f2 = TREE_TYPE (olddecl);
1012       tree p1 = TYPE_ARG_TYPES (f1);
1013       tree p2 = TYPE_ARG_TYPES (f2);
1014       tree r2;
1015 
1016       /* Specializations of different templates are different functions
1017            even if they have the same type.  */
1018       tree t1 = (DECL_USE_TEMPLATE (newdecl)
1019                      ? DECL_TI_TEMPLATE (newdecl)
1020                      : NULL_TREE);
1021       tree t2 = (DECL_USE_TEMPLATE (olddecl)
1022                      ? DECL_TI_TEMPLATE (olddecl)
1023                      : NULL_TREE);
1024       if (t1 != t2)
1025           return 0;
1026 
1027       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1028             && ! (DECL_EXTERN_C_P (newdecl)
1029                     && DECL_EXTERN_C_P (olddecl)))
1030           return 0;
1031 
1032       /* A new declaration doesn't match a built-in one unless it
1033            is also extern "C".  */
1034       if (DECL_IS_BUILTIN (olddecl)
1035             && DECL_EXTERN_C_P (olddecl) && !DECL_EXTERN_C_P (newdecl))
1036           return 0;
1037 
1038       if (TREE_CODE (f1) != TREE_CODE (f2))
1039           return 0;
1040 
1041       /* A declaration with deduced return type should use its pre-deduction
1042            type for declaration matching.  */
1043       r2 = fndecl_declared_return_type (olddecl);
1044 
1045       if (same_type_p (TREE_TYPE (f1), r2))
1046           {
1047             if (!prototype_p (f2) && DECL_EXTERN_C_P (olddecl)
1048                 && (DECL_BUILT_IN (olddecl)
1049 #ifndef NO_IMPLICIT_EXTERN_C
1050                       || (DECL_IN_SYSTEM_HEADER (newdecl) && !DECL_CLASS_SCOPE_P (newdecl))
1051                       || (DECL_IN_SYSTEM_HEADER (olddecl) && !DECL_CLASS_SCOPE_P (olddecl))
1052 #endif
1053                 ))
1054               {
1055                 types_match = self_promoting_args_p (p1);
1056                 if (p1 == void_list_node)
1057                     TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1058               }
1059 #ifndef NO_IMPLICIT_EXTERN_C
1060             else if (!prototype_p (f1)
1061                        && (DECL_EXTERN_C_P (olddecl)
1062                            && DECL_IN_SYSTEM_HEADER (olddecl)
1063                            && !DECL_CLASS_SCOPE_P (olddecl))
1064                        && (DECL_EXTERN_C_P (newdecl)
1065                            && DECL_IN_SYSTEM_HEADER (newdecl)
1066                            && !DECL_CLASS_SCOPE_P (newdecl)))
1067               {
1068                 types_match = self_promoting_args_p (p2);
1069                 TREE_TYPE (newdecl) = TREE_TYPE (olddecl);
1070               }
1071 #endif
1072             else
1073               types_match =
1074                 compparms (p1, p2)
1075                 && type_memfn_rqual (f1) == type_memfn_rqual (f2)
1076                 && (TYPE_ATTRIBUTES (TREE_TYPE (newdecl)) == NULL_TREE
1077                     || comp_type_attributes (TREE_TYPE (newdecl),
1078                                                      TREE_TYPE (olddecl)) != 0);
1079           }
1080       else
1081           types_match = 0;
1082 
1083       /* The decls dont match if they correspond to two different versions
1084            of the same function.   Disallow extern "C" functions to be
1085            versions for now.  */
1086       if (types_match
1087             && !DECL_EXTERN_C_P (newdecl)
1088             && !DECL_EXTERN_C_P (olddecl)
1089             && record_versions
1090             && maybe_version_functions (newdecl, olddecl,
1091                                               (!DECL_FUNCTION_VERSIONED (newdecl)
1092                                                || !DECL_FUNCTION_VERSIONED (olddecl))))
1093           return 0;
1094     }
1095   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1096     {
1097       tree oldres = DECL_TEMPLATE_RESULT (olddecl);
1098       tree newres = DECL_TEMPLATE_RESULT (newdecl);
1099 
1100       if (TREE_CODE (newres) != TREE_CODE (oldres))
1101           return 0;
1102 
1103       if (!comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1104                                         DECL_TEMPLATE_PARMS (olddecl)))
1105           return 0;
1106 
1107       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1108           types_match = (same_type_p (TREE_TYPE (oldres), TREE_TYPE (newres))
1109                            && equivalently_constrained (olddecl, newdecl));
1110       else
1111           // We don't need to check equivalently_constrained for variable and
1112           // function templates because we check it on the results.
1113           types_match = decls_match (oldres, newres);
1114     }
1115   else
1116     {
1117       /* Need to check scope for variable declaration (VAR_DECL).
1118            For typedef (TYPE_DECL), scope is ignored.  */
1119       if (VAR_P (newdecl)
1120             && CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl)
1121             /* [dcl.link]
1122                Two declarations for an object with C language linkage
1123                with the same name (ignoring the namespace that qualify
1124                it) that appear in different namespace scopes refer to
1125                the same object.  */
1126             && !(DECL_EXTERN_C_P (olddecl) && DECL_EXTERN_C_P (newdecl)))
1127           return 0;
1128 
1129       if (TREE_TYPE (newdecl) == error_mark_node)
1130           types_match = TREE_TYPE (olddecl) == error_mark_node;
1131       else if (TREE_TYPE (olddecl) == NULL_TREE)
1132           types_match = TREE_TYPE (newdecl) == NULL_TREE;
1133       else if (TREE_TYPE (newdecl) == NULL_TREE)
1134           types_match = 0;
1135       else
1136           types_match = comptypes (TREE_TYPE (newdecl),
1137                                          TREE_TYPE (olddecl),
1138                                          COMPARE_REDECLARATION);
1139     }
1140 
1141   // Normal functions can be constrained, as can variable partial
1142   // specializations.
1143   if (types_match && VAR_OR_FUNCTION_DECL_P (newdecl))
1144     types_match = equivalently_constrained (newdecl, olddecl);
1145 
1146   return types_match;
1147 }
1148 
1149 /* NEWDECL and OLDDECL have identical signatures.  If they are
1150    different versions adjust them and return true.
1151    If RECORD is set to true, record function versions.  */
1152 
1153 bool
maybe_version_functions(tree newdecl,tree olddecl,bool record)1154 maybe_version_functions (tree newdecl, tree olddecl, bool record)
1155 {
1156   if (!targetm.target_option.function_versions (newdecl, olddecl))
1157     return false;
1158 
1159   if (!DECL_FUNCTION_VERSIONED (olddecl))
1160     {
1161       DECL_FUNCTION_VERSIONED (olddecl) = 1;
1162       if (DECL_ASSEMBLER_NAME_SET_P (olddecl))
1163           mangle_decl (olddecl);
1164     }
1165 
1166   if (!DECL_FUNCTION_VERSIONED (newdecl))
1167     {
1168       DECL_FUNCTION_VERSIONED (newdecl) = 1;
1169       if (DECL_ASSEMBLER_NAME_SET_P (newdecl))
1170           mangle_decl (newdecl);
1171     }
1172 
1173   if (record)
1174     cgraph_node::record_function_versions (olddecl, newdecl);
1175 
1176   return true;
1177 }
1178 
1179 /* If NEWDECL is `static' and an `extern' was seen previously,
1180    warn about it.  OLDDECL is the previous declaration.
1181 
1182    Note that this does not apply to the C++ case of declaring
1183    a variable `extern const' and then later `const'.
1184 
1185    Don't complain about built-in functions, since they are beyond
1186    the user's control.  */
1187 
1188 void
warn_extern_redeclared_static(tree newdecl,tree olddecl)1189 warn_extern_redeclared_static (tree newdecl, tree olddecl)
1190 {
1191   if (TREE_CODE (newdecl) == TYPE_DECL
1192       || TREE_CODE (newdecl) == TEMPLATE_DECL
1193       || TREE_CODE (newdecl) == CONST_DECL
1194       || TREE_CODE (newdecl) == NAMESPACE_DECL)
1195     return;
1196 
1197   /* Don't get confused by static member functions; that's a different
1198      use of `static'.  */
1199   if (TREE_CODE (newdecl) == FUNCTION_DECL
1200       && DECL_STATIC_FUNCTION_P (newdecl))
1201     return;
1202 
1203   /* If the old declaration was `static', or the new one isn't, then
1204      everything is OK.  */
1205   if (DECL_THIS_STATIC (olddecl) || !DECL_THIS_STATIC (newdecl))
1206     return;
1207 
1208   /* It's OK to declare a builtin function as `static'.  */
1209   if (TREE_CODE (olddecl) == FUNCTION_DECL
1210       && DECL_ARTIFICIAL (olddecl))
1211     return;
1212 
1213   if (permerror (DECL_SOURCE_LOCATION (newdecl),
1214                      "%qD was declared %<extern%> and later %<static%>", newdecl))
1215     inform (DECL_SOURCE_LOCATION (olddecl),
1216               "previous declaration of %qD", olddecl);
1217 }
1218 
1219 /* NEW_DECL is a redeclaration of OLD_DECL; both are functions or
1220    function templates.  If their exception specifications do not
1221    match, issue a diagnostic.  */
1222 
1223 static void
check_redeclaration_exception_specification(tree new_decl,tree old_decl)1224 check_redeclaration_exception_specification (tree new_decl,
1225                                                        tree old_decl)
1226 {
1227   tree new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1228   tree old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1229 
1230   /* Two default specs are equivalent, don't force evaluation.  */
1231   if (UNEVALUATED_NOEXCEPT_SPEC_P (new_exceptions)
1232       && UNEVALUATED_NOEXCEPT_SPEC_P (old_exceptions))
1233     return;
1234 
1235   if (!type_dependent_expression_p (old_decl))
1236     {
1237       maybe_instantiate_noexcept (new_decl);
1238       maybe_instantiate_noexcept (old_decl);
1239     }
1240   new_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (new_decl));
1241   old_exceptions = TYPE_RAISES_EXCEPTIONS (TREE_TYPE (old_decl));
1242 
1243   /* [except.spec]
1244 
1245      If any declaration of a function has an exception-specification,
1246      all declarations, including the definition and an explicit
1247      specialization, of that function shall have an
1248      exception-specification with the same set of type-ids.  */
1249   if (! DECL_IS_BUILTIN (old_decl)
1250       && !comp_except_specs (new_exceptions, old_exceptions, ce_normal))
1251     {
1252       const char *const msg
1253           = G_("declaration of %qF has a different exception specifier");
1254       bool complained = true;
1255       location_t new_loc = DECL_SOURCE_LOCATION (new_decl);
1256       if (DECL_IN_SYSTEM_HEADER (old_decl))
1257           complained = pedwarn (new_loc, OPT_Wsystem_headers, msg, new_decl);
1258       else if (!flag_exceptions)
1259           /* We used to silently permit mismatched eh specs with
1260              -fno-exceptions, so make them a pedwarn now.  */
1261           complained = pedwarn (new_loc, OPT_Wpedantic, msg, new_decl);
1262       else
1263           error_at (new_loc, msg, new_decl);
1264       if (complained)
1265           inform (DECL_SOURCE_LOCATION (old_decl),
1266                     "from previous declaration %qF", old_decl);
1267     }
1268 }
1269 
1270 /* Return true if OLD_DECL and NEW_DECL agree on constexprness.
1271    Otherwise issue diagnostics.  */
1272 
1273 static bool
validate_constexpr_redeclaration(tree old_decl,tree new_decl)1274 validate_constexpr_redeclaration (tree old_decl, tree new_decl)
1275 {
1276   old_decl = STRIP_TEMPLATE (old_decl);
1277   new_decl = STRIP_TEMPLATE (new_decl);
1278   if (!VAR_OR_FUNCTION_DECL_P (old_decl)
1279       || !VAR_OR_FUNCTION_DECL_P (new_decl))
1280     return true;
1281   if (DECL_DECLARED_CONSTEXPR_P (old_decl)
1282       == DECL_DECLARED_CONSTEXPR_P (new_decl))
1283     return true;
1284   if (TREE_CODE (old_decl) == FUNCTION_DECL)
1285     {
1286       if (DECL_BUILT_IN (old_decl))
1287           {
1288             /* Hide a built-in declaration.  */
1289             DECL_DECLARED_CONSTEXPR_P (old_decl)
1290               = DECL_DECLARED_CONSTEXPR_P (new_decl);
1291             return true;
1292           }
1293       /* 7.1.5 [dcl.constexpr]
1294            Note: An explicit specialization can differ from the template
1295            declaration with respect to the constexpr specifier.  */
1296       if (! DECL_TEMPLATE_SPECIALIZATION (old_decl)
1297             && DECL_TEMPLATE_SPECIALIZATION (new_decl))
1298           return true;
1299 
1300       error_at (DECL_SOURCE_LOCATION (new_decl),
1301                     "redeclaration %qD differs in %<constexpr%> "
1302                     "from previous declaration", new_decl);
1303       inform (DECL_SOURCE_LOCATION (old_decl),
1304                 "previous declaration %qD", old_decl);
1305       return false;
1306     }
1307   return true;
1308 }
1309 
1310 // If OLDDECL and NEWDECL are concept declarations with the same type
1311 // (i.e., and template parameters), but different requirements,
1312 // emit diagnostics and return true. Otherwise, return false.
1313 static inline bool
check_concept_refinement(tree olddecl,tree newdecl)1314 check_concept_refinement (tree olddecl, tree newdecl)
1315 {
1316   if (!DECL_DECLARED_CONCEPT_P (olddecl) || !DECL_DECLARED_CONCEPT_P (newdecl))
1317     return false;
1318 
1319   tree d1 = DECL_TEMPLATE_RESULT (olddecl);
1320   tree d2 = DECL_TEMPLATE_RESULT (newdecl);
1321   if (TREE_CODE (d1) != TREE_CODE (d2))
1322     return false;
1323 
1324   tree t1 = TREE_TYPE (d1);
1325   tree t2 = TREE_TYPE (d2);
1326   if (TREE_CODE (d1) == FUNCTION_DECL)
1327     {
1328       if (compparms (TYPE_ARG_TYPES (t1), TYPE_ARG_TYPES (t2))
1329           && comp_template_parms (DECL_TEMPLATE_PARMS (olddecl),
1330                                   DECL_TEMPLATE_PARMS (newdecl))
1331           && !equivalently_constrained (olddecl, newdecl))
1332         {
1333           error ("cannot specialize concept %q#D", olddecl);
1334           return true;
1335         }
1336     }
1337   return false;
1338 }
1339 
1340 /* DECL is a redeclaration of a function or function template.  If
1341    it does have default arguments issue a diagnostic.  Note: this
1342    function is used to enforce the requirements in C++11 8.3.6 about
1343    no default arguments in redeclarations.  */
1344 
1345 static void
check_redeclaration_no_default_args(tree decl)1346 check_redeclaration_no_default_args (tree decl)
1347 {
1348   gcc_assert (DECL_DECLARES_FUNCTION_P (decl));
1349 
1350   for (tree t = FUNCTION_FIRST_USER_PARMTYPE (decl);
1351        t && t != void_list_node; t = TREE_CHAIN (t))
1352     if (TREE_PURPOSE (t))
1353       {
1354           permerror (DECL_SOURCE_LOCATION (decl),
1355                        "redeclaration of %q#D may not have default "
1356                        "arguments", decl);
1357           return;
1358       }
1359 }
1360 
1361 /* Merge tree bits that correspond to attributes noreturn, nothrow,
1362    const,  malloc, and pure from NEWDECL with those of OLDDECL.  */
1363 
1364 static void
merge_attribute_bits(tree newdecl,tree olddecl)1365 merge_attribute_bits (tree newdecl, tree olddecl)
1366 {
1367   TREE_THIS_VOLATILE (newdecl) |= TREE_THIS_VOLATILE (olddecl);
1368   TREE_THIS_VOLATILE (olddecl) |= TREE_THIS_VOLATILE (newdecl);
1369   TREE_NOTHROW (newdecl) |= TREE_NOTHROW (olddecl);
1370   TREE_NOTHROW (olddecl) |= TREE_NOTHROW (newdecl);
1371   TREE_READONLY (newdecl) |= TREE_READONLY (olddecl);
1372   TREE_READONLY (olddecl) |= TREE_READONLY (newdecl);
1373   DECL_IS_MALLOC (newdecl) |= DECL_IS_MALLOC (olddecl);
1374   DECL_IS_MALLOC (olddecl) |= DECL_IS_MALLOC (newdecl);
1375   DECL_PURE_P (newdecl) |= DECL_PURE_P (olddecl);
1376   DECL_PURE_P (olddecl) |= DECL_PURE_P (newdecl);
1377   DECL_UNINLINABLE (newdecl) |= DECL_UNINLINABLE (olddecl);
1378   DECL_UNINLINABLE (olddecl) |= DECL_UNINLINABLE (newdecl);
1379 }
1380 
1381 #define GNU_INLINE_P(fn) (DECL_DECLARED_INLINE_P (fn)                           \
1382                                 && lookup_attribute ("gnu_inline",              \
1383                                                          DECL_ATTRIBUTES (fn)))
1384 
1385 /* If NEWDECL is a redeclaration of OLDDECL, merge the declarations.
1386    If the redeclaration is invalid, a diagnostic is issued, and the
1387    error_mark_node is returned.  Otherwise, OLDDECL is returned.
1388 
1389    If NEWDECL is not a redeclaration of OLDDECL, NULL_TREE is
1390    returned.
1391 
1392    NEWDECL_IS_FRIEND is true if NEWDECL was declared as a friend.  */
1393 
1394 tree
duplicate_decls(tree newdecl,tree olddecl,bool newdecl_is_friend)1395 duplicate_decls (tree newdecl, tree olddecl, bool newdecl_is_friend)
1396 {
1397   unsigned olddecl_uid = DECL_UID (olddecl);
1398   int olddecl_friend = 0, types_match = 0, hidden_friend = 0;
1399   int new_defines_function = 0;
1400   tree new_template_info;
1401 
1402   if (newdecl == olddecl)
1403     return olddecl;
1404 
1405   types_match = decls_match (newdecl, olddecl);
1406 
1407   /* If either the type of the new decl or the type of the old decl is an
1408      error_mark_node, then that implies that we have already issued an
1409      error (earlier) for some bogus type specification, and in that case,
1410      it is rather pointless to harass the user with yet more error message
1411      about the same declaration, so just pretend the types match here.  */
1412   if (TREE_TYPE (newdecl) == error_mark_node
1413       || TREE_TYPE (olddecl) == error_mark_node)
1414     return error_mark_node;
1415 
1416   if (DECL_NAME (newdecl)
1417       && DECL_NAME (olddecl)
1418       && UDLIT_OPER_P (DECL_NAME (newdecl))
1419       && UDLIT_OPER_P (DECL_NAME (olddecl)))
1420     {
1421       if (TREE_CODE (newdecl) == TEMPLATE_DECL
1422             && TREE_CODE (olddecl) != TEMPLATE_DECL
1423             && check_raw_literal_operator (olddecl))
1424           error ("literal operator template %q+D conflicts with"
1425                  " raw literal operator %qD", newdecl, olddecl);
1426       else if (TREE_CODE (newdecl) != TEMPLATE_DECL
1427                  && TREE_CODE (olddecl) == TEMPLATE_DECL
1428                  && check_raw_literal_operator (newdecl))
1429           error ("raw literal operator %q+D conflicts with"
1430                  " literal operator template %qD", newdecl, olddecl);
1431     }
1432 
1433   /* True to merge attributes between the declarations, false to
1434      set OLDDECL's attributes to those of NEWDECL (for template
1435      explicit specializations that specify their own attributes
1436      independent of those specified for the primary template).  */
1437   const bool merge_attr = (TREE_CODE (newdecl) != FUNCTION_DECL
1438                                  || !DECL_TEMPLATE_SPECIALIZATION (newdecl)
1439                                  || DECL_TEMPLATE_SPECIALIZATION (olddecl));
1440 
1441   if (DECL_P (olddecl)
1442       && TREE_CODE (newdecl) == FUNCTION_DECL
1443       && TREE_CODE (olddecl) == FUNCTION_DECL
1444       && merge_attr
1445       && diagnose_mismatched_attributes (olddecl, newdecl))
1446     {
1447       if (DECL_INITIAL (olddecl))
1448           inform (DECL_SOURCE_LOCATION (olddecl),
1449                     "previous definition of %qD was here", olddecl);
1450       else
1451           inform (DECL_SOURCE_LOCATION (olddecl),
1452                     "previous declaration of %qD was here", olddecl);
1453     }
1454 
1455   /* Check for redeclaration and other discrepancies.  */
1456   if (TREE_CODE (olddecl) == FUNCTION_DECL
1457       && DECL_ARTIFICIAL (olddecl))
1458     {
1459       gcc_assert (!DECL_HIDDEN_FRIEND_P (olddecl));
1460       if (TREE_CODE (newdecl) != FUNCTION_DECL)
1461           {
1462             /* Avoid warnings redeclaring built-ins which have not been
1463                explicitly declared.  */
1464             if (DECL_ANTICIPATED (olddecl))
1465               {
1466                 if (TREE_PUBLIC (newdecl)
1467                       && CP_DECL_CONTEXT (newdecl) == global_namespace)
1468                     warning_at (DECL_SOURCE_LOCATION (newdecl),
1469                                   OPT_Wbuiltin_declaration_mismatch,
1470                                   "built-in function %qD declared as non-function",
1471                                   newdecl);
1472                 return NULL_TREE;
1473               }
1474 
1475             /* If you declare a built-in or predefined function name as static,
1476                the old definition is overridden, but optionally warn this was a
1477                bad choice of name.  */
1478             if (! TREE_PUBLIC (newdecl))
1479               {
1480                 warning (OPT_Wshadow,
1481                        DECL_BUILT_IN (olddecl)
1482                        ? G_("shadowing built-in function %q#D")
1483                        : G_("shadowing library function %q#D"), olddecl);
1484                 /* Discard the old built-in function.  */
1485                 return NULL_TREE;
1486               }
1487             /* If the built-in is not ansi, then programs can override
1488                it even globally without an error.  */
1489             else if (! DECL_BUILT_IN (olddecl))
1490               warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1491                               "library function %q#D redeclared as non-function %q#D",
1492                               olddecl, newdecl);
1493             else
1494               error ("declaration of %q+#D conflicts with built-in "
1495                        "declaration %q#D", newdecl, olddecl);
1496             return NULL_TREE;
1497           }
1498       else if (DECL_OMP_DECLARE_REDUCTION_P (olddecl))
1499           {
1500             gcc_assert (DECL_OMP_DECLARE_REDUCTION_P (newdecl));
1501             error_at (DECL_SOURCE_LOCATION (newdecl),
1502                         "redeclaration of %<pragma omp declare reduction%>");
1503             inform (DECL_SOURCE_LOCATION (olddecl),
1504                       "previous %<pragma omp declare reduction%> declaration");
1505             return error_mark_node;
1506           }
1507       else if (!types_match)
1508           {
1509             /* Avoid warnings redeclaring built-ins which have not been
1510                explicitly declared.  */
1511             if (DECL_ANTICIPATED (olddecl))
1512               {
1513                 tree t1, t2;
1514 
1515                 /* A new declaration doesn't match a built-in one unless it
1516                      is also extern "C".  */
1517                 gcc_assert (DECL_IS_BUILTIN (olddecl));
1518                 gcc_assert (DECL_EXTERN_C_P (olddecl));
1519                 if (!DECL_EXTERN_C_P (newdecl))
1520                     return NULL_TREE;
1521 
1522                 for (t1 = TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1523                        t2 = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1524                        t1 || t2;
1525                        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2))
1526                     {
1527                       if (!t1 || !t2)
1528                         break;
1529                       /* FILE, tm types are not known at the time
1530                          we create the builtins.  */
1531                       for (unsigned i = 0;
1532                            i < sizeof (builtin_structptr_types)
1533                                  / sizeof (builtin_structptr_type);
1534                            ++i)
1535                         if (TREE_VALUE (t2) == builtin_structptr_types[i].node)
1536                           {
1537                               tree t = TREE_VALUE (t1);
1538 
1539                               if (TYPE_PTR_P (t)
1540                                   && TYPE_IDENTIFIER (TREE_TYPE (t))
1541                                   == get_identifier (builtin_structptr_types[i].str)
1542                                   && compparms (TREE_CHAIN (t1), TREE_CHAIN (t2)))
1543                                 {
1544                                   tree oldargs = TYPE_ARG_TYPES (TREE_TYPE (olddecl));
1545 
1546                                   TYPE_ARG_TYPES (TREE_TYPE (olddecl))
1547                                     = TYPE_ARG_TYPES (TREE_TYPE (newdecl));
1548                                   types_match = decls_match (newdecl, olddecl);
1549                                   if (types_match)
1550                                     return duplicate_decls (newdecl, olddecl,
1551                                                                   newdecl_is_friend);
1552                                   TYPE_ARG_TYPES (TREE_TYPE (olddecl)) = oldargs;
1553                                 }
1554                               goto next_arg;
1555                           }
1556 
1557                       if (! same_type_p (TREE_VALUE (t1), TREE_VALUE (t2)))
1558                         break;
1559 next_arg:;
1560                     }
1561 
1562                 warning_at (DECL_SOURCE_LOCATION (newdecl),
1563                                 OPT_Wbuiltin_declaration_mismatch,
1564                                 "declaration of %q#D conflicts with built-in "
1565                                 "declaration %q#D", newdecl, olddecl);
1566               }
1567             else if ((DECL_EXTERN_C_P (newdecl)
1568                         && DECL_EXTERN_C_P (olddecl))
1569                        || compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1570                                          TYPE_ARG_TYPES (TREE_TYPE (olddecl))))
1571               {
1572                 /* Don't really override olddecl for __* prefixed builtins
1573                      except for __[^b]*_chk, the compiler might be using those
1574                      explicitly.  */
1575                 if (DECL_BUILT_IN (olddecl))
1576                     {
1577                       tree id = DECL_NAME (olddecl);
1578                       const char *name = IDENTIFIER_POINTER (id);
1579                       size_t len;
1580 
1581                       if (name[0] == '_'
1582                           && name[1] == '_'
1583                           && (strncmp (name + 2, "builtin_",
1584                                            strlen ("builtin_")) == 0
1585                                 || (len = strlen (name)) <= strlen ("___chk")
1586                                 || memcmp (name + len - strlen ("_chk"),
1587                                              "_chk", strlen ("_chk") + 1) != 0))
1588                         {
1589                           if (DECL_INITIAL (newdecl))
1590                               {
1591                                 error_at (DECL_SOURCE_LOCATION (newdecl),
1592                                             "definition of %q#D ambiguates built-in "
1593                                             "declaration %q#D", newdecl, olddecl);
1594                                 return error_mark_node;
1595                               }
1596                           if (permerror (DECL_SOURCE_LOCATION (newdecl),
1597                                              "new declaration %q#D ambiguates built-in"
1598                                              " declaration %q#D", newdecl, olddecl)
1599                                 && flag_permissive)
1600                               inform (DECL_SOURCE_LOCATION (newdecl),
1601                                         "ignoring the %q#D declaration", newdecl);
1602                           return flag_permissive ? olddecl : error_mark_node;
1603                         }
1604                     }
1605 
1606                 /* A near match; override the builtin.  */
1607 
1608                 if (TREE_PUBLIC (newdecl))
1609                     warning_at (DECL_SOURCE_LOCATION (newdecl),
1610                                   OPT_Wbuiltin_declaration_mismatch,
1611                                   "new declaration %q#D ambiguates built-in "
1612                                   "declaration %q#D", newdecl, olddecl);
1613                 else
1614                     warning (OPT_Wshadow,
1615                          DECL_BUILT_IN (olddecl)
1616                          ? G_("shadowing built-in function %q#D")
1617                          : G_("shadowing library function %q#D"), olddecl);
1618               }
1619             else
1620               /* Discard the old built-in function.  */
1621               return NULL_TREE;
1622 
1623             /* Replace the old RTL to avoid problems with inlining.  */
1624             COPY_DECL_RTL (newdecl, olddecl);
1625           }
1626       /* Even if the types match, prefer the new declarations type for
1627            built-ins which have not been explicitly declared, for
1628            exception lists, etc...  */
1629       else if (DECL_IS_BUILTIN (olddecl))
1630           {
1631             tree type = TREE_TYPE (newdecl);
1632             tree attribs = (*targetm.merge_type_attributes)
1633               (TREE_TYPE (olddecl), type);
1634 
1635             type = cp_build_type_attribute_variant (type, attribs);
1636             TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = type;
1637           }
1638 
1639       /* If a function is explicitly declared "throw ()", propagate that to
1640            the corresponding builtin.  */
1641       if (DECL_BUILT_IN_CLASS (olddecl) == BUILT_IN_NORMAL
1642             && DECL_ANTICIPATED (olddecl)
1643             && TREE_NOTHROW (newdecl)
1644             && !TREE_NOTHROW (olddecl))
1645           {
1646             enum built_in_function fncode = DECL_FUNCTION_CODE (olddecl);
1647             tree tmpdecl = builtin_decl_explicit (fncode);
1648             if (tmpdecl && tmpdecl != olddecl && types_match)
1649               TREE_NOTHROW (tmpdecl)  = 1;
1650           }
1651 
1652       /* Whether or not the builtin can throw exceptions has no
1653            bearing on this declarator.  */
1654       TREE_NOTHROW (olddecl) = 0;
1655 
1656       if (DECL_THIS_STATIC (newdecl) && !DECL_THIS_STATIC (olddecl))
1657           {
1658             /* If a builtin function is redeclared as `static', merge
1659                the declarations, but make the original one static.  */
1660             DECL_THIS_STATIC (olddecl) = 1;
1661             TREE_PUBLIC (olddecl) = 0;
1662 
1663             /* Make the old declaration consistent with the new one so
1664                that all remnants of the builtin-ness of this function
1665                will be banished.  */
1666             SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
1667             COPY_DECL_RTL (newdecl, olddecl);
1668           }
1669     }
1670   else if (TREE_CODE (olddecl) != TREE_CODE (newdecl))
1671     {
1672       /* C++ Standard, 3.3, clause 4:
1673            "[Note: a namespace name or a class template name must be unique
1674            in its declarative region (7.3.2, clause 14). ]"  */
1675       if (TREE_CODE (olddecl) != NAMESPACE_DECL
1676             && TREE_CODE (newdecl) != NAMESPACE_DECL
1677             && (TREE_CODE (olddecl) != TEMPLATE_DECL
1678                 || TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) != TYPE_DECL)
1679             && (TREE_CODE (newdecl) != TEMPLATE_DECL
1680                 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != TYPE_DECL))
1681           {
1682             if ((TREE_CODE (olddecl) == TYPE_DECL && DECL_ARTIFICIAL (olddecl)
1683                  && TREE_CODE (newdecl) != TYPE_DECL)
1684                 || (TREE_CODE (newdecl) == TYPE_DECL && DECL_ARTIFICIAL (newdecl)
1685                       && TREE_CODE (olddecl) != TYPE_DECL))
1686               {
1687                 /* We do nothing special here, because C++ does such nasty
1688                      things with TYPE_DECLs.  Instead, just let the TYPE_DECL
1689                      get shadowed, and know that if we need to find a TYPE_DECL
1690                      for a given name, we can look in the IDENTIFIER_TYPE_VALUE
1691                      slot of the identifier.  */
1692                 return NULL_TREE;
1693               }
1694 
1695               if ((TREE_CODE (newdecl) == FUNCTION_DECL
1696                      && DECL_FUNCTION_TEMPLATE_P (olddecl))
1697                     || (TREE_CODE (olddecl) == FUNCTION_DECL
1698                         && DECL_FUNCTION_TEMPLATE_P (newdecl)))
1699                 return NULL_TREE;
1700           }
1701 
1702       error ("%q#D redeclared as different kind of symbol", newdecl);
1703       if (TREE_CODE (olddecl) == TREE_LIST)
1704           olddecl = TREE_VALUE (olddecl);
1705       inform (DECL_SOURCE_LOCATION (olddecl),
1706                 "previous declaration %q#D", olddecl);
1707 
1708       return error_mark_node;
1709     }
1710   else if (!types_match)
1711     {
1712       if (CP_DECL_CONTEXT (newdecl) != CP_DECL_CONTEXT (olddecl))
1713           /* These are certainly not duplicate declarations; they're
1714              from different scopes.  */
1715           return NULL_TREE;
1716 
1717       if (TREE_CODE (newdecl) == TEMPLATE_DECL)
1718           {
1719             /* The name of a class template may not be declared to refer to
1720                any other template, class, function, object, namespace, value,
1721                or type in the same scope.  */
1722             if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == TYPE_DECL
1723                 || TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
1724               {
1725                 error ("conflicting declaration of template %q+#D", newdecl);
1726                 inform (DECL_SOURCE_LOCATION (olddecl),
1727                           "previous declaration %q#D", olddecl);
1728                 return error_mark_node;
1729               }
1730             else if (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl)) == FUNCTION_DECL
1731                        && TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == FUNCTION_DECL
1732                        && compparms (TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (olddecl))),
1733                                          TYPE_ARG_TYPES (TREE_TYPE (DECL_TEMPLATE_RESULT (newdecl))))
1734                        && comp_template_parms (DECL_TEMPLATE_PARMS (newdecl),
1735                                                      DECL_TEMPLATE_PARMS (olddecl))
1736                        /* Template functions can be disambiguated by
1737                           return type.  */
1738                        && same_type_p (TREE_TYPE (TREE_TYPE (newdecl)),
1739                                            TREE_TYPE (TREE_TYPE (olddecl)))
1740                    // Template functions can also be disambiguated by
1741                    // constraints.
1742                    && equivalently_constrained (olddecl, newdecl))
1743               {
1744                 error ("ambiguating new declaration %q+#D", newdecl);
1745                 inform (DECL_SOURCE_LOCATION (olddecl),
1746                           "old declaration %q#D", olddecl);
1747               }
1748           else if (check_concept_refinement (olddecl, newdecl))
1749               return error_mark_node;
1750             return NULL_TREE;
1751           }
1752       if (TREE_CODE (newdecl) == FUNCTION_DECL)
1753           {
1754             if (DECL_EXTERN_C_P (newdecl) && DECL_EXTERN_C_P (olddecl))
1755               {
1756                 error ("conflicting declaration of C function %q+#D",
1757                          newdecl);
1758                 inform (DECL_SOURCE_LOCATION (olddecl),
1759                           "previous declaration %q#D", olddecl);
1760                 return NULL_TREE;
1761               }
1762             /* For function versions, params and types match, but they
1763                are not ambiguous.  */
1764             else if ((!DECL_FUNCTION_VERSIONED (newdecl)
1765                         && !DECL_FUNCTION_VERSIONED (olddecl))
1766                    // The functions have the same parameter types.
1767                        && compparms (TYPE_ARG_TYPES (TREE_TYPE (newdecl)),
1768                                          TYPE_ARG_TYPES (TREE_TYPE (olddecl)))
1769                    // And the same constraints.
1770                    && equivalently_constrained (newdecl, olddecl))
1771               {
1772                 error ("ambiguating new declaration of %q+#D", newdecl);
1773                 inform (DECL_SOURCE_LOCATION (olddecl),
1774                           "old declaration %q#D", olddecl);
1775               return error_mark_node;
1776               }
1777             else
1778               return NULL_TREE;
1779           }
1780       else
1781           {
1782             error ("conflicting declaration %q+#D", newdecl);
1783             inform (DECL_SOURCE_LOCATION (olddecl),
1784                       "previous declaration as %q#D", olddecl);
1785             return error_mark_node;
1786           }
1787     }
1788   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1789               && ((DECL_TEMPLATE_SPECIALIZATION (olddecl)
1790                      && (!DECL_TEMPLATE_INFO (newdecl)
1791                          || (DECL_TI_TEMPLATE (newdecl)
1792                                != DECL_TI_TEMPLATE (olddecl))))
1793                     || (DECL_TEMPLATE_SPECIALIZATION (newdecl)
1794                         && (!DECL_TEMPLATE_INFO (olddecl)
1795                               || (DECL_TI_TEMPLATE (olddecl)
1796                                   != DECL_TI_TEMPLATE (newdecl))))))
1797     /* It's OK to have a template specialization and a non-template
1798        with the same type, or to have specializations of two
1799        different templates with the same type.  Note that if one is a
1800        specialization, and the other is an instantiation of the same
1801        template, that we do not exit at this point.  That situation
1802        can occur if we instantiate a template class, and then
1803        specialize one of its methods.  This situation is valid, but
1804        the declarations must be merged in the usual way.  */
1805     return NULL_TREE;
1806   else if (TREE_CODE (newdecl) == FUNCTION_DECL
1807              && ((DECL_TEMPLATE_INSTANTIATION (olddecl)
1808                     && !DECL_USE_TEMPLATE (newdecl))
1809                  || (DECL_TEMPLATE_INSTANTIATION (newdecl)
1810                        && !DECL_USE_TEMPLATE (olddecl))))
1811     /* One of the declarations is a template instantiation, and the
1812        other is not a template at all.  That's OK.  */
1813     return NULL_TREE;
1814   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
1815     {
1816       /* In [namespace.alias] we have:
1817 
1818              In a declarative region, a namespace-alias-definition can be
1819              used to redefine a namespace-alias declared in that declarative
1820              region to refer only to the namespace to which it already
1821              refers.
1822 
1823            Therefore, if we encounter a second alias directive for the same
1824            alias, we can just ignore the second directive.  */
1825       if (DECL_NAMESPACE_ALIAS (newdecl)
1826             && (DECL_NAMESPACE_ALIAS (newdecl)
1827                 == DECL_NAMESPACE_ALIAS (olddecl)))
1828           return olddecl;
1829 
1830       /* Leave it to update_binding to merge or report error.  */
1831       return NULL_TREE;
1832     }
1833   else
1834     {
1835       const char *errmsg = redeclaration_error_message (newdecl, olddecl);
1836       if (errmsg)
1837           {
1838             error_at (DECL_SOURCE_LOCATION (newdecl), errmsg, newdecl);
1839             if (DECL_NAME (olddecl) != NULL_TREE)
1840               inform (DECL_SOURCE_LOCATION (olddecl),
1841                         (DECL_INITIAL (olddecl) && namespace_bindings_p ())
1842                         ? G_("%q#D previously defined here")
1843                         : G_("%q#D previously declared here"), olddecl);
1844             return error_mark_node;
1845           }
1846       else if (TREE_CODE (olddecl) == FUNCTION_DECL
1847                  && DECL_INITIAL (olddecl) != NULL_TREE
1848                  && !prototype_p (TREE_TYPE (olddecl))
1849                  && prototype_p (TREE_TYPE (newdecl)))
1850           {
1851             /* Prototype decl follows defn w/o prototype.  */
1852             if (warning_at (DECL_SOURCE_LOCATION (newdecl), 0,
1853                                 "prototype specified for %q#D", newdecl))
1854               inform (DECL_SOURCE_LOCATION (olddecl),
1855                         "previous non-prototype definition here");
1856           }
1857       else if (VAR_OR_FUNCTION_DECL_P (olddecl)
1858                  && DECL_LANGUAGE (newdecl) != DECL_LANGUAGE (olddecl))
1859           {
1860             /* [dcl.link]
1861                If two declarations of the same function or object
1862                specify different linkage-specifications ..., the program
1863                is ill-formed.... Except for functions with C++ linkage,
1864                a function declaration without a linkage specification
1865                shall not precede the first linkage specification for
1866                that function.  A function can be declared without a
1867                linkage specification after an explicit linkage
1868                specification has been seen; the linkage explicitly
1869                specified in the earlier declaration is not affected by
1870                such a function declaration.
1871 
1872                DR 563 raises the question why the restrictions on
1873                functions should not also apply to objects.  Older
1874                versions of G++ silently ignore the linkage-specification
1875                for this example:
1876 
1877                  namespace N {
1878                  extern int i;
1879                    extern "C" int i;
1880                }
1881 
1882              which is clearly wrong.  Therefore, we now treat objects
1883                like functions.  */
1884             if (current_lang_depth () == 0)
1885               {
1886                 /* There is no explicit linkage-specification, so we use
1887                      the linkage from the previous declaration.  */
1888                 retrofit_lang_decl (newdecl);
1889                 SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
1890               }
1891             else
1892               {
1893                 error ("conflicting declaration of %q+#D with %qL linkage",
1894                          newdecl, DECL_LANGUAGE (newdecl));
1895                 inform (DECL_SOURCE_LOCATION (olddecl),
1896                           "previous declaration with %qL linkage",
1897                           DECL_LANGUAGE (olddecl));
1898               }
1899           }
1900 
1901       if (DECL_LANG_SPECIFIC (olddecl) && DECL_USE_TEMPLATE (olddecl))
1902           ;
1903       else if (TREE_CODE (olddecl) == FUNCTION_DECL)
1904           {
1905             /* Note: free functions, as TEMPLATE_DECLs, are handled below.  */
1906             if (DECL_FUNCTION_MEMBER_P (olddecl)
1907                 && (/* grokfndecl passes member function templates too
1908                          as FUNCTION_DECLs.  */
1909                       DECL_TEMPLATE_INFO (olddecl)
1910                       /* C++11 8.3.6/6.
1911                          Default arguments for a member function of a class
1912                          template shall be specified on the initial declaration
1913                          of the member function within the class template.  */
1914                       || CLASSTYPE_TEMPLATE_INFO (CP_DECL_CONTEXT (olddecl))))
1915               check_redeclaration_no_default_args (newdecl);
1916             else
1917               {
1918                 tree t1 = FUNCTION_FIRST_USER_PARMTYPE (olddecl);
1919                 tree t2 = FUNCTION_FIRST_USER_PARMTYPE (newdecl);
1920                 int i = 1;
1921 
1922                 for (; t1 && t1 != void_list_node;
1923                        t1 = TREE_CHAIN (t1), t2 = TREE_CHAIN (t2), i++)
1924                     if (TREE_PURPOSE (t1) && TREE_PURPOSE (t2))
1925                       {
1926                         if (simple_cst_equal (TREE_PURPOSE (t1),
1927                                                     TREE_PURPOSE (t2)) == 1)
1928                           {
1929                               if (permerror (input_location,
1930                                                "default argument given for parameter "
1931                                                "%d of %q#D", i, newdecl))
1932                                 inform (DECL_SOURCE_LOCATION (olddecl),
1933                                           "previous specification in %q#D here",
1934                                           olddecl);
1935                           }
1936                         else
1937                           {
1938                               error ("default argument given for parameter %d "
1939                                      "of %q#D", i, newdecl);
1940                               inform (DECL_SOURCE_LOCATION (olddecl),
1941                                         "previous specification in %q#D here",
1942                                         olddecl);
1943                           }
1944                       }
1945               }
1946           }
1947     }
1948 
1949   /* Do not merge an implicit typedef with an explicit one.  In:
1950 
1951        class A;
1952        ...
1953        typedef class A A __attribute__ ((foo));
1954 
1955      the attribute should apply only to the typedef.  */
1956   if (TREE_CODE (olddecl) == TYPE_DECL
1957       && (DECL_IMPLICIT_TYPEDEF_P (olddecl)
1958             || DECL_IMPLICIT_TYPEDEF_P (newdecl)))
1959     return NULL_TREE;
1960 
1961   /* If new decl is `static' and an `extern' was seen previously,
1962      warn about it.  */
1963   warn_extern_redeclared_static (newdecl, olddecl);
1964 
1965   if (!validate_constexpr_redeclaration (olddecl, newdecl))
1966     return error_mark_node;
1967 
1968   /* We have committed to returning 1 at this point.  */
1969   if (TREE_CODE (newdecl) == FUNCTION_DECL)
1970     {
1971       /* Now that functions must hold information normally held
1972            by field decls, there is extra work to do so that
1973            declaration information does not get destroyed during
1974            definition.  */
1975       if (DECL_VINDEX (olddecl))
1976           DECL_VINDEX (newdecl) = DECL_VINDEX (olddecl);
1977       if (DECL_CONTEXT (olddecl))
1978           DECL_CONTEXT (newdecl) = DECL_CONTEXT (olddecl);
1979       DECL_STATIC_CONSTRUCTOR (newdecl) |= DECL_STATIC_CONSTRUCTOR (olddecl);
1980       DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
1981       DECL_PURE_VIRTUAL_P (newdecl) |= DECL_PURE_VIRTUAL_P (olddecl);
1982       DECL_VIRTUAL_P (newdecl) |= DECL_VIRTUAL_P (olddecl);
1983       DECL_INVALID_OVERRIDER_P (newdecl) |= DECL_INVALID_OVERRIDER_P (olddecl);
1984       DECL_FINAL_P (newdecl) |= DECL_FINAL_P (olddecl);
1985       DECL_OVERRIDE_P (newdecl) |= DECL_OVERRIDE_P (olddecl);
1986       DECL_THIS_STATIC (newdecl) |= DECL_THIS_STATIC (olddecl);
1987       if (DECL_OVERLOADED_OPERATOR_P (olddecl))
1988           DECL_OVERLOADED_OPERATOR_CODE_RAW (newdecl)
1989             = DECL_OVERLOADED_OPERATOR_CODE_RAW (olddecl);
1990       new_defines_function = DECL_INITIAL (newdecl) != NULL_TREE;
1991 
1992       /* Optionally warn about more than one declaration for the same
1993            name, but don't warn about a function declaration followed by a
1994            definition.  */
1995       if (warn_redundant_decls && ! DECL_ARTIFICIAL (olddecl)
1996             && !(new_defines_function && DECL_INITIAL (olddecl) == NULL_TREE)
1997             /* Don't warn about extern decl followed by definition.  */
1998             && !(DECL_EXTERNAL (olddecl) && ! DECL_EXTERNAL (newdecl))
1999             /* Don't warn about friends, let add_friend take care of it.  */
2000             && ! (newdecl_is_friend || DECL_FRIEND_P (olddecl))
2001             /* Don't warn about declaration followed by specialization.  */
2002             && (! DECL_TEMPLATE_SPECIALIZATION (newdecl)
2003                 || DECL_TEMPLATE_SPECIALIZATION (olddecl)))
2004           {
2005             if (warning_at (DECL_SOURCE_LOCATION (newdecl),
2006                                 OPT_Wredundant_decls,
2007                                 "redundant redeclaration of %qD in same scope",
2008                                 newdecl))
2009               inform (DECL_SOURCE_LOCATION (olddecl),
2010                         "previous declaration of %qD", olddecl);
2011           }
2012 
2013       if (!(DECL_TEMPLATE_INSTANTIATION (olddecl)
2014               && DECL_TEMPLATE_SPECIALIZATION (newdecl)))
2015           {
2016             if (DECL_DELETED_FN (newdecl))
2017               {
2018                 error ("deleted definition of %q+D", newdecl);
2019                 inform (DECL_SOURCE_LOCATION (olddecl),
2020                           "previous declaration of %qD", olddecl);
2021               }
2022             DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
2023           }
2024     }
2025 
2026   /* Deal with C++: must preserve virtual function table size.  */
2027   if (TREE_CODE (olddecl) == TYPE_DECL)
2028     {
2029       tree newtype = TREE_TYPE (newdecl);
2030       tree oldtype = TREE_TYPE (olddecl);
2031 
2032       if (newtype != error_mark_node && oldtype != error_mark_node
2033             && TYPE_LANG_SPECIFIC (newtype) && TYPE_LANG_SPECIFIC (oldtype))
2034           CLASSTYPE_FRIEND_CLASSES (newtype)
2035             = CLASSTYPE_FRIEND_CLASSES (oldtype);
2036 
2037       DECL_ORIGINAL_TYPE (newdecl) = DECL_ORIGINAL_TYPE (olddecl);
2038     }
2039 
2040   /* Copy all the DECL_... slots specified in the new decl except for
2041      any that we copy here from the old type.  */
2042   if (merge_attr)
2043     DECL_ATTRIBUTES (newdecl)
2044       = (*targetm.merge_decl_attributes) (olddecl, newdecl);
2045   else
2046     DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2047 
2048   if (DECL_DECLARES_FUNCTION_P (olddecl) && DECL_DECLARES_FUNCTION_P (newdecl))
2049     {
2050       olddecl_friend = DECL_FRIEND_P (olddecl);
2051       hidden_friend = (DECL_ANTICIPATED (olddecl)
2052                            && DECL_HIDDEN_FRIEND_P (olddecl)
2053                            && newdecl_is_friend);
2054       if (!hidden_friend)
2055           {
2056             DECL_ANTICIPATED (olddecl) = 0;
2057             DECL_HIDDEN_FRIEND_P (olddecl) = 0;
2058           }
2059     }
2060 
2061   if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2062     {
2063       tree old_result;
2064       tree new_result;
2065       old_result = DECL_TEMPLATE_RESULT (olddecl);
2066       new_result = DECL_TEMPLATE_RESULT (newdecl);
2067       TREE_TYPE (olddecl) = TREE_TYPE (old_result);
2068       DECL_TEMPLATE_SPECIALIZATIONS (olddecl)
2069           = chainon (DECL_TEMPLATE_SPECIALIZATIONS (olddecl),
2070                        DECL_TEMPLATE_SPECIALIZATIONS (newdecl));
2071 
2072       DECL_ATTRIBUTES (old_result)
2073           = (*targetm.merge_decl_attributes) (old_result, new_result);
2074 
2075       if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2076           {
2077             /* Per C++11 8.3.6/4, default arguments cannot be added in later
2078                declarations of a function template.  */
2079             if (DECL_SOURCE_LOCATION (newdecl)
2080                 != DECL_SOURCE_LOCATION (olddecl))
2081               check_redeclaration_no_default_args (newdecl);
2082 
2083             check_default_args (newdecl);
2084 
2085             if (GNU_INLINE_P (old_result) != GNU_INLINE_P (new_result)
2086                 && DECL_INITIAL (new_result))
2087               {
2088                 if (DECL_INITIAL (old_result))
2089                     DECL_UNINLINABLE (old_result) = 1;
2090                 else
2091                     DECL_UNINLINABLE (old_result) = DECL_UNINLINABLE (new_result);
2092                 DECL_EXTERNAL (old_result) = DECL_EXTERNAL (new_result);
2093                 DECL_NOT_REALLY_EXTERN (old_result)
2094                     = DECL_NOT_REALLY_EXTERN (new_result);
2095                 DECL_INTERFACE_KNOWN (old_result)
2096                     = DECL_INTERFACE_KNOWN (new_result);
2097                 DECL_DECLARED_INLINE_P (old_result)
2098                     = DECL_DECLARED_INLINE_P (new_result);
2099                 DECL_DISREGARD_INLINE_LIMITS (old_result)
2100                   |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2101 
2102               }
2103             else
2104               {
2105                 DECL_DECLARED_INLINE_P (old_result)
2106                     |= DECL_DECLARED_INLINE_P (new_result);
2107                 DECL_DISREGARD_INLINE_LIMITS (old_result)
2108                   |= DECL_DISREGARD_INLINE_LIMITS (new_result);
2109                 check_redeclaration_exception_specification (newdecl, olddecl);
2110 
2111                 merge_attribute_bits (new_result, old_result);
2112               }
2113           }
2114 
2115       /* If the new declaration is a definition, update the file and
2116            line information on the declaration, and also make
2117            the old declaration the same definition.  */
2118       if (DECL_INITIAL (new_result) != NULL_TREE)
2119           {
2120             DECL_SOURCE_LOCATION (olddecl)
2121               = DECL_SOURCE_LOCATION (old_result)
2122               = DECL_SOURCE_LOCATION (newdecl);
2123             DECL_INITIAL (old_result) = DECL_INITIAL (new_result);
2124             if (DECL_FUNCTION_TEMPLATE_P (newdecl))
2125               {
2126                 tree parm;
2127                 DECL_ARGUMENTS (old_result)
2128                     = DECL_ARGUMENTS (new_result);
2129                 for (parm = DECL_ARGUMENTS (old_result); parm;
2130                        parm = DECL_CHAIN (parm))
2131                     DECL_CONTEXT (parm) = old_result;
2132               }
2133           }
2134 
2135       return olddecl;
2136     }
2137 
2138   if (types_match)
2139     {
2140       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2141           check_redeclaration_exception_specification (newdecl, olddecl);
2142 
2143       /* Automatically handles default parameters.  */
2144       tree oldtype = TREE_TYPE (olddecl);
2145       tree newtype;
2146 
2147       /* For typedefs use the old type, as the new type's DECL_NAME points
2148            at newdecl, which will be ggc_freed.  */
2149       if (TREE_CODE (newdecl) == TYPE_DECL)
2150           {
2151             /* But NEWTYPE might have an attribute, honor that.  */
2152             tree tem = TREE_TYPE (newdecl);
2153             newtype = oldtype;
2154 
2155             if (TYPE_USER_ALIGN (tem))
2156               {
2157                 if (TYPE_ALIGN (tem) > TYPE_ALIGN (newtype))
2158                     SET_TYPE_ALIGN (newtype, TYPE_ALIGN (tem));
2159                 TYPE_USER_ALIGN (newtype) = true;
2160               }
2161 
2162             /* And remove the new type from the variants list.  */
2163             if (TYPE_NAME (TREE_TYPE (newdecl)) == newdecl)
2164               {
2165                 tree remove = TREE_TYPE (newdecl);
2166                 for (tree t = TYPE_MAIN_VARIANT (remove); ;
2167                        t = TYPE_NEXT_VARIANT (t))
2168                     if (TYPE_NEXT_VARIANT (t) == remove)
2169                       {
2170                         TYPE_NEXT_VARIANT (t) = TYPE_NEXT_VARIANT (remove);
2171                         break;
2172                       }
2173               }
2174           }
2175       else if (merge_attr)
2176           newtype = merge_types (TREE_TYPE (newdecl), TREE_TYPE (olddecl));
2177       else
2178           newtype = TREE_TYPE (newdecl);
2179 
2180       if (VAR_P (newdecl))
2181           {
2182             DECL_THIS_EXTERN (newdecl) |= DECL_THIS_EXTERN (olddecl);
2183             /* For already initialized vars, TREE_READONLY could have been
2184                cleared in cp_finish_decl, because the var needs runtime
2185                initialization or destruction.  Make sure not to set
2186                TREE_READONLY on it again.  */
2187             if (DECL_INITIALIZED_P (olddecl)
2188                 && !DECL_EXTERNAL (olddecl)
2189                 && !TREE_READONLY (olddecl))
2190               TREE_READONLY (newdecl) = 0;
2191             DECL_INITIALIZED_P (newdecl) |= DECL_INITIALIZED_P (olddecl);
2192             DECL_NONTRIVIALLY_INITIALIZED_P (newdecl)
2193               |= DECL_NONTRIVIALLY_INITIALIZED_P (olddecl);
2194             if (DECL_DEPENDENT_INIT_P (olddecl))
2195               SET_DECL_DEPENDENT_INIT_P (newdecl, true);
2196             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (newdecl)
2197               |= DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (olddecl);
2198           if (DECL_CLASS_SCOPE_P (olddecl))
2199             DECL_DECLARED_CONSTEXPR_P (newdecl)
2200                 |= DECL_DECLARED_CONSTEXPR_P (olddecl);
2201 
2202             /* Merge the threadprivate attribute from OLDDECL into NEWDECL.  */
2203             if (DECL_LANG_SPECIFIC (olddecl)
2204                 && CP_DECL_THREADPRIVATE_P (olddecl))
2205               {
2206                 /* Allocate a LANG_SPECIFIC structure for NEWDECL, if needed.  */
2207                 retrofit_lang_decl (newdecl);
2208                 CP_DECL_THREADPRIVATE_P (newdecl) = 1;
2209               }
2210           }
2211 
2212       /* An explicit specialization of a function template or of a member
2213            function of a class template can be declared transaction_safe
2214            independently of whether the corresponding template entity is declared
2215            transaction_safe. */
2216       if (flag_tm && TREE_CODE (newdecl) == FUNCTION_DECL
2217             && DECL_TEMPLATE_INSTANTIATION (olddecl)
2218             && DECL_TEMPLATE_SPECIALIZATION (newdecl)
2219             && tx_safe_fn_type_p (newtype)
2220             && !tx_safe_fn_type_p (TREE_TYPE (newdecl)))
2221           newtype = tx_unsafe_fn_variant (newtype);
2222 
2223       TREE_TYPE (newdecl) = TREE_TYPE (olddecl) = newtype;
2224 
2225       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2226           check_default_args (newdecl);
2227 
2228       /* Lay the type out, unless already done.  */
2229       if (! same_type_p (newtype, oldtype)
2230             && TREE_TYPE (newdecl) != error_mark_node
2231             && !(processing_template_decl && uses_template_parms (newdecl)))
2232           layout_type (TREE_TYPE (newdecl));
2233 
2234       if ((VAR_P (newdecl)
2235              || TREE_CODE (newdecl) == PARM_DECL
2236              || TREE_CODE (newdecl) == RESULT_DECL
2237              || TREE_CODE (newdecl) == FIELD_DECL
2238              || TREE_CODE (newdecl) == TYPE_DECL)
2239             && !(processing_template_decl && uses_template_parms (newdecl)))
2240           layout_decl (newdecl, 0);
2241 
2242       /* Merge deprecatedness.  */
2243       if (TREE_DEPRECATED (newdecl))
2244           TREE_DEPRECATED (olddecl) = 1;
2245 
2246       /* Preserve function specific target and optimization options */
2247       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2248           {
2249             if (DECL_FUNCTION_SPECIFIC_TARGET (olddecl)
2250                 && !DECL_FUNCTION_SPECIFIC_TARGET (newdecl))
2251               DECL_FUNCTION_SPECIFIC_TARGET (newdecl)
2252                 = DECL_FUNCTION_SPECIFIC_TARGET (olddecl);
2253 
2254             if (DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl)
2255                 && !DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl))
2256               DECL_FUNCTION_SPECIFIC_OPTIMIZATION (newdecl)
2257                 = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (olddecl);
2258           }
2259       else
2260           {
2261             /* Merge the const type qualifier.  */
2262             if (TREE_READONLY (newdecl))
2263               TREE_READONLY (olddecl) = 1;
2264             /* Merge the volatile type qualifier.  */
2265             if (TREE_THIS_VOLATILE (newdecl))
2266               TREE_THIS_VOLATILE (olddecl) = 1;
2267           }
2268 
2269       /* Merge the initialization information.  */
2270       if (DECL_INITIAL (newdecl) == NULL_TREE
2271             && DECL_INITIAL (olddecl) != NULL_TREE)
2272           {
2273             DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
2274             DECL_SOURCE_LOCATION (newdecl) = DECL_SOURCE_LOCATION (olddecl);
2275             if (TREE_CODE (newdecl) == FUNCTION_DECL)
2276               {
2277                 DECL_SAVED_TREE (newdecl) = DECL_SAVED_TREE (olddecl);
2278                 DECL_STRUCT_FUNCTION (newdecl) = DECL_STRUCT_FUNCTION (olddecl);
2279               }
2280           }
2281 
2282       if (TREE_CODE (newdecl) == FUNCTION_DECL)
2283           {
2284             DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (newdecl)
2285               |= DECL_NO_INSTRUMENT_FUNCTION_ENTRY_EXIT (olddecl);
2286             DECL_NO_LIMIT_STACK (newdecl) |= DECL_NO_LIMIT_STACK (olddecl);
2287             DECL_IS_OPERATOR_NEW (newdecl) |= DECL_IS_OPERATOR_NEW (olddecl);
2288             DECL_LOOPING_CONST_OR_PURE_P (newdecl)
2289               |= DECL_LOOPING_CONST_OR_PURE_P (olddecl);
2290 
2291             if (merge_attr)
2292               merge_attribute_bits (newdecl, olddecl);
2293             else
2294               {
2295                 /* Merge the noreturn bit.  */
2296                 TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2297                 TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2298                 TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2299                 DECL_IS_MALLOC (olddecl) = DECL_IS_MALLOC (newdecl);
2300                 DECL_PURE_P (olddecl) = DECL_PURE_P (newdecl);
2301               }
2302             /* Keep the old RTL.  */
2303             COPY_DECL_RTL (olddecl, newdecl);
2304           }
2305       else if (VAR_P (newdecl)
2306                  && (DECL_SIZE (olddecl) || !DECL_SIZE (newdecl)))
2307           {
2308             /* Keep the old RTL.  We cannot keep the old RTL if the old
2309                declaration was for an incomplete object and the new
2310                declaration is not since many attributes of the RTL will
2311                change.  */
2312             COPY_DECL_RTL (olddecl, newdecl);
2313           }
2314     }
2315   /* If cannot merge, then use the new type and qualifiers,
2316      and don't preserve the old rtl.  */
2317   else
2318     {
2319       /* Clean out any memory we had of the old declaration.  */
2320       tree oldstatic = value_member (olddecl, static_aggregates);
2321       if (oldstatic)
2322           TREE_VALUE (oldstatic) = error_mark_node;
2323 
2324       TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
2325       TREE_READONLY (olddecl) = TREE_READONLY (newdecl);
2326       TREE_THIS_VOLATILE (olddecl) = TREE_THIS_VOLATILE (newdecl);
2327       TREE_NOTHROW (olddecl) = TREE_NOTHROW (newdecl);
2328       TREE_SIDE_EFFECTS (olddecl) = TREE_SIDE_EFFECTS (newdecl);
2329     }
2330 
2331   /* Merge the storage class information.  */
2332   merge_weak (newdecl, olddecl);
2333 
2334   DECL_DEFER_OUTPUT (newdecl) |= DECL_DEFER_OUTPUT (olddecl);
2335   TREE_PUBLIC (newdecl) = TREE_PUBLIC (olddecl);
2336   TREE_STATIC (olddecl) = TREE_STATIC (newdecl) |= TREE_STATIC (olddecl);
2337   if (! DECL_EXTERNAL (olddecl))
2338     DECL_EXTERNAL (newdecl) = 0;
2339   if (! DECL_COMDAT (olddecl))
2340     DECL_COMDAT (newdecl) = 0;
2341 
2342   new_template_info = NULL_TREE;
2343   if (DECL_LANG_SPECIFIC (newdecl) && DECL_LANG_SPECIFIC (olddecl))
2344     {
2345       bool new_redefines_gnu_inline = false;
2346 
2347       if (new_defines_function
2348             && ((DECL_INTERFACE_KNOWN (olddecl)
2349                  && TREE_CODE (olddecl) == FUNCTION_DECL)
2350                 || (TREE_CODE (olddecl) == TEMPLATE_DECL
2351                       && (TREE_CODE (DECL_TEMPLATE_RESULT (olddecl))
2352                           == FUNCTION_DECL))))
2353           {
2354             tree fn = olddecl;
2355 
2356             if (TREE_CODE (fn) == TEMPLATE_DECL)
2357               fn = DECL_TEMPLATE_RESULT (olddecl);
2358 
2359             new_redefines_gnu_inline = GNU_INLINE_P (fn) && DECL_INITIAL (fn);
2360           }
2361 
2362       if (!new_redefines_gnu_inline)
2363           {
2364             DECL_INTERFACE_KNOWN (newdecl) |= DECL_INTERFACE_KNOWN (olddecl);
2365             DECL_NOT_REALLY_EXTERN (newdecl) |= DECL_NOT_REALLY_EXTERN (olddecl);
2366             DECL_COMDAT (newdecl) |= DECL_COMDAT (olddecl);
2367           }
2368       DECL_TEMPLATE_INSTANTIATED (newdecl)
2369           |= DECL_TEMPLATE_INSTANTIATED (olddecl);
2370       DECL_ODR_USED (newdecl) |= DECL_ODR_USED (olddecl);
2371 
2372       /* If the OLDDECL is an instantiation and/or specialization,
2373            then the NEWDECL must be too.  But, it may not yet be marked
2374            as such if the caller has created NEWDECL, but has not yet
2375            figured out that it is a redeclaration.  */
2376       if (!DECL_USE_TEMPLATE (newdecl))
2377           DECL_USE_TEMPLATE (newdecl) = DECL_USE_TEMPLATE (olddecl);
2378 
2379       /* Don't really know how much of the language-specific
2380            values we should copy from old to new.  */
2381       DECL_IN_AGGR_P (newdecl) = DECL_IN_AGGR_P (olddecl);
2382       DECL_REPO_AVAILABLE_P (newdecl) = DECL_REPO_AVAILABLE_P (olddecl);
2383       DECL_INITIALIZED_IN_CLASS_P (newdecl)
2384           |= DECL_INITIALIZED_IN_CLASS_P (olddecl);
2385 
2386       if (LANG_DECL_HAS_MIN (newdecl))
2387           {
2388             DECL_LANG_SPECIFIC (newdecl)->u.min.u2 =
2389               DECL_LANG_SPECIFIC (olddecl)->u.min.u2;
2390             if (DECL_TEMPLATE_INFO (newdecl))
2391               {
2392                 new_template_info = DECL_TEMPLATE_INFO (newdecl);
2393                 if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2394                       && DECL_TEMPLATE_SPECIALIZATION (newdecl))
2395                     /* Remember the presence of explicit specialization args.  */
2396                     TINFO_USED_TEMPLATE_ID (DECL_TEMPLATE_INFO (olddecl))
2397                       = TINFO_USED_TEMPLATE_ID (new_template_info);
2398               }
2399             DECL_TEMPLATE_INFO (newdecl) = DECL_TEMPLATE_INFO (olddecl);
2400           }
2401       /* Only functions have these fields.  */
2402       if (DECL_DECLARES_FUNCTION_P (newdecl))
2403           {
2404             DECL_NONCONVERTING_P (newdecl) = DECL_NONCONVERTING_P (olddecl);
2405             DECL_BEFRIENDING_CLASSES (newdecl)
2406               = chainon (DECL_BEFRIENDING_CLASSES (newdecl),
2407                            DECL_BEFRIENDING_CLASSES (olddecl));
2408             /* DECL_THUNKS is only valid for virtual functions,
2409                otherwise it is a DECL_FRIEND_CONTEXT.  */
2410             if (DECL_VIRTUAL_P (newdecl))
2411               SET_DECL_THUNKS (newdecl, DECL_THUNKS (olddecl));
2412           }
2413       /* Only variables have this field.  */
2414       else if (VAR_P (newdecl)
2415                  && VAR_HAD_UNKNOWN_BOUND (olddecl))
2416           SET_VAR_HAD_UNKNOWN_BOUND (newdecl);
2417     }
2418 
2419   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2420     {
2421       tree parm;
2422 
2423       /* Merge parameter attributes. */
2424       tree oldarg, newarg;
2425       for (oldarg = DECL_ARGUMENTS(olddecl),
2426                newarg = DECL_ARGUMENTS(newdecl);
2427            oldarg && newarg;
2428            oldarg = DECL_CHAIN(oldarg), newarg = DECL_CHAIN(newarg)) {
2429           DECL_ATTRIBUTES (newarg)
2430               = (*targetm.merge_decl_attributes) (oldarg, newarg);
2431           DECL_ATTRIBUTES (oldarg) = DECL_ATTRIBUTES (newarg);
2432       }
2433 
2434       if (DECL_TEMPLATE_INSTANTIATION (olddecl)
2435             && !DECL_TEMPLATE_INSTANTIATION (newdecl))
2436           {
2437             /* If newdecl is not a specialization, then it is not a
2438                template-related function at all.  And that means that we
2439                should have exited above, returning 0.  */
2440             gcc_assert (DECL_TEMPLATE_SPECIALIZATION (newdecl));
2441 
2442             if (DECL_ODR_USED (olddecl))
2443               /* From [temp.expl.spec]:
2444 
2445                  If a template, a member template or the member of a class
2446                  template is explicitly specialized then that
2447                  specialization shall be declared before the first use of
2448                  that specialization that would cause an implicit
2449                  instantiation to take place, in every translation unit in
2450                  which such a use occurs.  */
2451               error ("explicit specialization of %qD after first use",
2452                           olddecl);
2453 
2454             SET_DECL_TEMPLATE_SPECIALIZATION (olddecl);
2455             DECL_COMDAT (newdecl) = (TREE_PUBLIC (newdecl)
2456                                            && DECL_DECLARED_INLINE_P (newdecl));
2457 
2458             /* Don't propagate visibility from the template to the
2459                specialization here.  We'll do that in determine_visibility if
2460                appropriate.  */
2461             DECL_VISIBILITY_SPECIFIED (olddecl) = 0;
2462 
2463             /* [temp.expl.spec/14] We don't inline explicit specialization
2464                just because the primary template says so.  */
2465             gcc_assert (!merge_attr);
2466 
2467             DECL_DECLARED_INLINE_P (olddecl)
2468               = DECL_DECLARED_INLINE_P (newdecl);
2469 
2470             DECL_DISREGARD_INLINE_LIMITS (olddecl)
2471               = DECL_DISREGARD_INLINE_LIMITS (newdecl);
2472 
2473             DECL_UNINLINABLE (olddecl) = DECL_UNINLINABLE (newdecl);
2474           }
2475       else if (new_defines_function && DECL_INITIAL (olddecl))
2476           {
2477             /* Never inline re-defined extern inline functions.
2478                FIXME: this could be better handled by keeping both
2479                function as separate declarations.  */
2480             DECL_UNINLINABLE (newdecl) = 1;
2481           }
2482       else
2483           {
2484             if (DECL_PENDING_INLINE_P (olddecl))
2485               {
2486                 DECL_PENDING_INLINE_P (newdecl) = 1;
2487                 DECL_PENDING_INLINE_INFO (newdecl)
2488                     = DECL_PENDING_INLINE_INFO (olddecl);
2489               }
2490             else if (DECL_PENDING_INLINE_P (newdecl))
2491               ;
2492             else if (DECL_SAVED_FUNCTION_DATA (newdecl) == NULL)
2493               DECL_SAVED_FUNCTION_DATA (newdecl)
2494                 = DECL_SAVED_FUNCTION_DATA (olddecl);
2495 
2496             DECL_DECLARED_INLINE_P (newdecl) |= DECL_DECLARED_INLINE_P (olddecl);
2497 
2498             DECL_UNINLINABLE (newdecl) = DECL_UNINLINABLE (olddecl)
2499               = (DECL_UNINLINABLE (newdecl) || DECL_UNINLINABLE (olddecl));
2500 
2501             DECL_DISREGARD_INLINE_LIMITS (newdecl)
2502               = DECL_DISREGARD_INLINE_LIMITS (olddecl)
2503               = (DECL_DISREGARD_INLINE_LIMITS (newdecl)
2504                  || DECL_DISREGARD_INLINE_LIMITS (olddecl));
2505           }
2506 
2507       /* Preserve abstractness on cloned [cd]tors.  */
2508       DECL_ABSTRACT_P (newdecl) = DECL_ABSTRACT_P (olddecl);
2509 
2510       /* Update newdecl's parms to point at olddecl.  */
2511       for (parm = DECL_ARGUMENTS (newdecl); parm;
2512              parm = DECL_CHAIN (parm))
2513           DECL_CONTEXT (parm) = olddecl;
2514 
2515       if (! types_match)
2516           {
2517             SET_DECL_LANGUAGE (olddecl, DECL_LANGUAGE (newdecl));
2518             COPY_DECL_ASSEMBLER_NAME (newdecl, olddecl);
2519             COPY_DECL_RTL (newdecl, olddecl);
2520           }
2521       if (! types_match || new_defines_function)
2522           {
2523             /* These need to be copied so that the names are available.
2524                Note that if the types do match, we'll preserve inline
2525                info and other bits, but if not, we won't.  */
2526             DECL_ARGUMENTS (olddecl) = DECL_ARGUMENTS (newdecl);
2527             DECL_RESULT (olddecl) = DECL_RESULT (newdecl);
2528           }
2529       /* If redeclaring a builtin function, it stays built in
2530            if newdecl is a gnu_inline definition, or if newdecl is just
2531            a declaration.  */
2532       if (DECL_BUILT_IN (olddecl)
2533             && (new_defines_function ? GNU_INLINE_P (newdecl) : types_match))
2534           {
2535             DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
2536             DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
2537             /* If we're keeping the built-in definition, keep the rtl,
2538                regardless of declaration matches.  */
2539             COPY_DECL_RTL (olddecl, newdecl);
2540             if (DECL_BUILT_IN_CLASS (newdecl) == BUILT_IN_NORMAL)
2541               {
2542                 enum built_in_function fncode = DECL_FUNCTION_CODE (newdecl);
2543                 switch (fncode)
2544                     {
2545                       /* If a compatible prototype of these builtin functions
2546                          is seen, assume the runtime implements it with the
2547                          expected semantics.  */
2548                     case BUILT_IN_STPCPY:
2549                       if (builtin_decl_explicit_p (fncode))
2550                         set_builtin_decl_implicit_p (fncode, true);
2551                       break;
2552                     default:
2553                       if (builtin_decl_explicit_p (fncode))
2554                         set_builtin_decl_declared_p (fncode, true);
2555                       break;
2556                     }
2557               }
2558 
2559             copy_attributes_to_builtin (newdecl);
2560           }
2561       if (new_defines_function)
2562           /* If defining a function declared with other language
2563              linkage, use the previously declared language linkage.  */
2564           SET_DECL_LANGUAGE (newdecl, DECL_LANGUAGE (olddecl));
2565       else if (types_match)
2566           {
2567             DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
2568             /* Don't clear out the arguments if we're just redeclaring a
2569                function.  */
2570             if (DECL_ARGUMENTS (olddecl))
2571               DECL_ARGUMENTS (newdecl) = DECL_ARGUMENTS (olddecl);
2572           }
2573     }
2574   else if (TREE_CODE (newdecl) == NAMESPACE_DECL)
2575     NAMESPACE_LEVEL (newdecl) = NAMESPACE_LEVEL (olddecl);
2576 
2577   /* Now preserve various other info from the definition.  */
2578   TREE_ADDRESSABLE (newdecl) = TREE_ADDRESSABLE (olddecl);
2579   TREE_ASM_WRITTEN (newdecl) = TREE_ASM_WRITTEN (olddecl);
2580   DECL_COMMON (newdecl) = DECL_COMMON (olddecl);
2581   COPY_DECL_ASSEMBLER_NAME (olddecl, newdecl);
2582 
2583   /* Warn about conflicting visibility specifications.  */
2584   if (DECL_VISIBILITY_SPECIFIED (olddecl)
2585       && DECL_VISIBILITY_SPECIFIED (newdecl)
2586       && DECL_VISIBILITY (newdecl) != DECL_VISIBILITY (olddecl))
2587     {
2588       if (warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wattributes,
2589                           "%qD: visibility attribute ignored because it "
2590                           "conflicts with previous declaration", newdecl))
2591           inform (DECL_SOURCE_LOCATION (olddecl),
2592                     "previous declaration of %qD", olddecl);
2593     }
2594   /* Choose the declaration which specified visibility.  */
2595   if (DECL_VISIBILITY_SPECIFIED (olddecl))
2596     {
2597       DECL_VISIBILITY (newdecl) = DECL_VISIBILITY (olddecl);
2598       DECL_VISIBILITY_SPECIFIED (newdecl) = 1;
2599     }
2600   /* Init priority used to be merged from newdecl to olddecl by the memcpy,
2601      so keep this behavior.  */
2602   if (VAR_P (newdecl) && DECL_HAS_INIT_PRIORITY_P (newdecl))
2603     {
2604       SET_DECL_INIT_PRIORITY (olddecl, DECL_INIT_PRIORITY (newdecl));
2605       DECL_HAS_INIT_PRIORITY_P (olddecl) = 1;
2606     }
2607   /* Likewise for DECL_ALIGN, DECL_USER_ALIGN and DECL_PACKED.  */
2608   if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
2609     {
2610       SET_DECL_ALIGN (newdecl, DECL_ALIGN (olddecl));
2611       DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
2612     }
2613   DECL_USER_ALIGN (olddecl) = DECL_USER_ALIGN (newdecl);
2614   if (DECL_WARN_IF_NOT_ALIGN (olddecl)
2615       > DECL_WARN_IF_NOT_ALIGN (newdecl))
2616     SET_DECL_WARN_IF_NOT_ALIGN (newdecl,
2617                                         DECL_WARN_IF_NOT_ALIGN (olddecl));
2618   if (TREE_CODE (newdecl) == FIELD_DECL)
2619     DECL_PACKED (olddecl) = DECL_PACKED (newdecl);
2620 
2621   /* The DECL_LANG_SPECIFIC information in OLDDECL will be replaced
2622      with that from NEWDECL below.  */
2623   if (DECL_LANG_SPECIFIC (olddecl))
2624     {
2625       gcc_assert (DECL_LANG_SPECIFIC (olddecl)
2626                       != DECL_LANG_SPECIFIC (newdecl));
2627       ggc_free (DECL_LANG_SPECIFIC (olddecl));
2628     }
2629 
2630   /* Merge the USED information.  */
2631   if (TREE_USED (olddecl))
2632     TREE_USED (newdecl) = 1;
2633   else if (TREE_USED (newdecl))
2634     TREE_USED (olddecl) = 1;
2635   if (VAR_P (newdecl))
2636     {
2637       if (DECL_READ_P (olddecl))
2638           DECL_READ_P (newdecl) = 1;
2639       else if (DECL_READ_P (newdecl))
2640           DECL_READ_P (olddecl) = 1;
2641     }
2642   if (DECL_PRESERVE_P (olddecl))
2643     DECL_PRESERVE_P (newdecl) = 1;
2644   else if (DECL_PRESERVE_P (newdecl))
2645     DECL_PRESERVE_P (olddecl) = 1;
2646 
2647   /* Merge the DECL_FUNCTION_VERSIONED information.  newdecl will be copied
2648      to olddecl and deleted.  */
2649   if (TREE_CODE (newdecl) == FUNCTION_DECL
2650       && DECL_FUNCTION_VERSIONED (olddecl))
2651     {
2652       /* Set the flag for newdecl so that it gets copied to olddecl.  */
2653       DECL_FUNCTION_VERSIONED (newdecl) = 1;
2654       /* newdecl will be purged after copying to olddecl and is no longer
2655          a version.  */
2656       cgraph_node::delete_function_version_by_decl (newdecl);
2657     }
2658 
2659   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2660     {
2661       int function_size;
2662       struct symtab_node *snode = symtab_node::get (olddecl);
2663 
2664       function_size = sizeof (struct tree_decl_common);
2665 
2666       memcpy ((char *) olddecl + sizeof (struct tree_common),
2667                 (char *) newdecl + sizeof (struct tree_common),
2668                 function_size - sizeof (struct tree_common));
2669 
2670       memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2671                 (char *) newdecl + sizeof (struct tree_decl_common),
2672                 sizeof (struct tree_function_decl) - sizeof (struct tree_decl_common));
2673 
2674       /* Preserve symtab node mapping.  */
2675       olddecl->decl_with_vis.symtab_node = snode;
2676 
2677       if (new_template_info)
2678           /* If newdecl is a template instantiation, it is possible that
2679              the following sequence of events has occurred:
2680 
2681              o A friend function was declared in a class template.  The
2682              class template was instantiated.
2683 
2684              o The instantiation of the friend declaration was
2685              recorded on the instantiation list, and is newdecl.
2686 
2687              o Later, however, instantiate_class_template called pushdecl
2688              on the newdecl to perform name injection.  But, pushdecl in
2689              turn called duplicate_decls when it discovered that another
2690              declaration of a global function with the same name already
2691              existed.
2692 
2693              o Here, in duplicate_decls, we decided to clobber newdecl.
2694 
2695              If we're going to do that, we'd better make sure that
2696              olddecl, and not newdecl, is on the list of
2697              instantiations so that if we try to do the instantiation
2698              again we won't get the clobbered declaration.  */
2699           reregister_specialization (newdecl,
2700                                            new_template_info,
2701                                            olddecl);
2702     }
2703   else
2704     {
2705       size_t size = tree_code_size (TREE_CODE (newdecl));
2706 
2707       memcpy ((char *) olddecl + sizeof (struct tree_common),
2708                 (char *) newdecl + sizeof (struct tree_common),
2709                 sizeof (struct tree_decl_common) - sizeof (struct tree_common));
2710       switch (TREE_CODE (newdecl))
2711           {
2712           case LABEL_DECL:
2713           case VAR_DECL:
2714           case RESULT_DECL:
2715           case PARM_DECL:
2716           case FIELD_DECL:
2717           case TYPE_DECL:
2718           case CONST_DECL:
2719             {
2720             struct symtab_node *snode = NULL;
2721 
2722               if (VAR_P (newdecl)
2723                     && (TREE_STATIC (olddecl) || TREE_PUBLIC (olddecl)
2724                         || DECL_EXTERNAL (olddecl)))
2725                 snode = symtab_node::get (olddecl);
2726               memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2727                         (char *) newdecl + sizeof (struct tree_decl_common),
2728                         size - sizeof (struct tree_decl_common)
2729                         + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2730               if (VAR_P (newdecl))
2731                 olddecl->decl_with_vis.symtab_node = snode;
2732             }
2733             break;
2734           default:
2735             memcpy ((char *) olddecl + sizeof (struct tree_decl_common),
2736                       (char *) newdecl + sizeof (struct tree_decl_common),
2737                       sizeof (struct tree_decl_non_common) - sizeof (struct tree_decl_common)
2738                       + TREE_CODE_LENGTH (TREE_CODE (newdecl)) * sizeof (char *));
2739             break;
2740           }
2741     }
2742 
2743   if (VAR_OR_FUNCTION_DECL_P (newdecl))
2744     {
2745       if (DECL_EXTERNAL (olddecl)
2746             || TREE_PUBLIC (olddecl)
2747             || TREE_STATIC (olddecl))
2748           {
2749             /* Merge the section attribute.
2750                We want to issue an error if the sections conflict but that must be
2751                done later in decl_attributes since we are called before attributes
2752                are assigned.  */
2753             if (DECL_SECTION_NAME (newdecl) != NULL)
2754               set_decl_section_name (olddecl, DECL_SECTION_NAME (newdecl));
2755 
2756             if (DECL_ONE_ONLY (newdecl))
2757               {
2758                 struct symtab_node *oldsym, *newsym;
2759                 if (TREE_CODE (olddecl) == FUNCTION_DECL)
2760                     oldsym = cgraph_node::get_create (olddecl);
2761                 else
2762                     oldsym = varpool_node::get_create (olddecl);
2763                 newsym = symtab_node::get (newdecl);
2764                 oldsym->set_comdat_group (newsym->get_comdat_group ());
2765               }
2766           }
2767 
2768       if (VAR_P (newdecl)
2769             && CP_DECL_THREAD_LOCAL_P (newdecl))
2770           {
2771             CP_DECL_THREAD_LOCAL_P (olddecl) = true;
2772             if (!processing_template_decl)
2773               set_decl_tls_model (olddecl, DECL_TLS_MODEL (newdecl));
2774           }
2775     }
2776 
2777   DECL_UID (olddecl) = olddecl_uid;
2778   if (olddecl_friend)
2779     DECL_FRIEND_P (olddecl) = 1;
2780   if (hidden_friend)
2781     {
2782       DECL_ANTICIPATED (olddecl) = 1;
2783       DECL_HIDDEN_FRIEND_P (olddecl) = 1;
2784     }
2785 
2786   /* NEWDECL contains the merged attribute lists.
2787      Update OLDDECL to be the same.  */
2788   DECL_ATTRIBUTES (olddecl) = DECL_ATTRIBUTES (newdecl);
2789 
2790   /* If OLDDECL had its DECL_RTL instantiated, re-invoke make_decl_rtl
2791     so that encode_section_info has a chance to look at the new decl
2792     flags and attributes.  */
2793   if (DECL_RTL_SET_P (olddecl)
2794       && (TREE_CODE (olddecl) == FUNCTION_DECL
2795             || (VAR_P (olddecl)
2796                 && TREE_STATIC (olddecl))))
2797     make_decl_rtl (olddecl);
2798 
2799   /* The NEWDECL will no longer be needed.  Because every out-of-class
2800      declaration of a member results in a call to duplicate_decls,
2801      freeing these nodes represents in a significant savings.
2802 
2803      Before releasing the node, be sore to remove function from symbol
2804      table that might have been inserted there to record comdat group.
2805      Be sure to however do not free DECL_STRUCT_FUNCTION because this
2806      structure is shared in between newdecl and oldecl.  */
2807   if (TREE_CODE (newdecl) == FUNCTION_DECL)
2808     DECL_STRUCT_FUNCTION (newdecl) = NULL;
2809   if (VAR_OR_FUNCTION_DECL_P (newdecl))
2810     {
2811       struct symtab_node *snode = symtab_node::get (newdecl);
2812       if (snode)
2813           snode->remove ();
2814     }
2815 
2816   /* Remove the associated constraints for newdecl, if any, before
2817      reclaiming memory. */
2818   if (flag_concepts)
2819     remove_constraints (newdecl);
2820 
2821   ggc_free (newdecl);
2822 
2823   return olddecl;
2824 }
2825 
2826 /* Return zero if the declaration NEWDECL is valid
2827    when the declaration OLDDECL (assumed to be for the same name)
2828    has already been seen.
2829    Otherwise return an error message format string with a %s
2830    where the identifier should go.  */
2831 
2832 static const char *
redeclaration_error_message(tree newdecl,tree olddecl)2833 redeclaration_error_message (tree newdecl, tree olddecl)
2834 {
2835   if (TREE_CODE (newdecl) == TYPE_DECL)
2836     {
2837       /* Because C++ can put things into name space for free,
2838            constructs like "typedef struct foo { ... } foo"
2839            would look like an erroneous redeclaration.  */
2840       if (same_type_p (TREE_TYPE (newdecl), TREE_TYPE (olddecl)))
2841           return NULL;
2842       else
2843           return G_("redefinition of %q#D");
2844     }
2845   else if (TREE_CODE (newdecl) == FUNCTION_DECL)
2846     {
2847       /* If this is a pure function, its olddecl will actually be
2848            the original initialization to `0' (which we force to call
2849            abort()).  Don't complain about redefinition in this case.  */
2850       if (DECL_LANG_SPECIFIC (olddecl) && DECL_PURE_VIRTUAL_P (olddecl)
2851             && DECL_INITIAL (olddecl) == NULL_TREE)
2852           return NULL;
2853 
2854       /* If both functions come from different namespaces, this is not
2855            a redeclaration - this is a conflict with a used function.  */
2856       if (DECL_NAMESPACE_SCOPE_P (olddecl)
2857             && DECL_CONTEXT (olddecl) != DECL_CONTEXT (newdecl)
2858             && ! decls_match (olddecl, newdecl))
2859           return G_("%qD conflicts with used function");
2860 
2861       /* We'll complain about linkage mismatches in
2862            warn_extern_redeclared_static.  */
2863 
2864       /* Defining the same name twice is no good.  */
2865       if (decl_defined_p (olddecl)
2866             && decl_defined_p (newdecl))
2867           {
2868             if (DECL_NAME (olddecl) == NULL_TREE)
2869               return G_("%q#D not declared in class");
2870             else if (!GNU_INLINE_P (olddecl)
2871                        || GNU_INLINE_P (newdecl))
2872               return G_("redefinition of %q#D");
2873           }
2874 
2875       if (DECL_DECLARED_INLINE_P (olddecl) && DECL_DECLARED_INLINE_P (newdecl))
2876           {
2877             bool olda = GNU_INLINE_P (olddecl);
2878             bool newa = GNU_INLINE_P (newdecl);
2879 
2880             if (olda != newa)
2881               {
2882                 if (newa)
2883                     return G_("%q+D redeclared inline with "
2884                                 "%<gnu_inline%> attribute");
2885                 else
2886                     return G_("%q+D redeclared inline without "
2887                                 "%<gnu_inline%> attribute");
2888               }
2889           }
2890 
2891       check_abi_tag_redeclaration
2892           (olddecl, lookup_attribute ("abi_tag", DECL_ATTRIBUTES (olddecl)),
2893            lookup_attribute ("abi_tag", DECL_ATTRIBUTES (newdecl)));
2894 
2895       return NULL;
2896     }
2897   else if (TREE_CODE (newdecl) == TEMPLATE_DECL)
2898     {
2899       tree nt, ot;
2900 
2901       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) == TYPE_DECL)
2902           {
2903             if (COMPLETE_TYPE_P (TREE_TYPE (newdecl))
2904                 && COMPLETE_TYPE_P (TREE_TYPE (olddecl)))
2905               return G_("redefinition of %q#D");
2906             return NULL;
2907           }
2908 
2909       if (TREE_CODE (DECL_TEMPLATE_RESULT (newdecl)) != FUNCTION_DECL
2910             || (DECL_TEMPLATE_RESULT (newdecl)
2911                 == DECL_TEMPLATE_RESULT (olddecl)))
2912           return NULL;
2913 
2914       nt = DECL_TEMPLATE_RESULT (newdecl);
2915       if (DECL_TEMPLATE_INFO (nt))
2916           nt = DECL_TEMPLATE_RESULT (template_for_substitution (nt));
2917       ot = DECL_TEMPLATE_RESULT (olddecl);
2918       if (DECL_TEMPLATE_INFO (ot))
2919           ot = DECL_TEMPLATE_RESULT (template_for_substitution (ot));
2920       if (DECL_INITIAL (nt) && DECL_INITIAL (ot)
2921             && (!GNU_INLINE_P (ot) || GNU_INLINE_P (nt)))
2922           return G_("redefinition of %q#D");
2923 
2924       if (DECL_DECLARED_INLINE_P (ot) && DECL_DECLARED_INLINE_P (nt))
2925           {
2926             bool olda = GNU_INLINE_P (ot);
2927             bool newa = GNU_INLINE_P (nt);
2928 
2929             if (olda != newa)
2930               {
2931                 if (newa)
2932                     return G_("%q+D redeclared inline with "
2933                                 "%<gnu_inline%> attribute");
2934                 else
2935                     return G_("%q+D redeclared inline without "
2936                                 "%<gnu_inline%> attribute");
2937               }
2938           }
2939 
2940       /* Core issue #226 (C++0x):
2941 
2942            If a friend function template declaration specifies a
2943            default template-argument, that declaration shall be a
2944            definition and shall be the only declaration of the
2945            function template in the translation unit.  */
2946       if ((cxx_dialect != cxx98)
2947           && TREE_CODE (ot) == FUNCTION_DECL && DECL_FRIEND_P (ot)
2948           && !check_default_tmpl_args (nt, DECL_TEMPLATE_PARMS (newdecl),
2949                                        /*is_primary=*/true,
2950                                                /*is_partial=*/false,
2951                                        /*is_friend_decl=*/2))
2952         return G_("redeclaration of friend %q#D "
2953                       "may not have default template arguments");
2954 
2955       return NULL;
2956     }
2957   else if (VAR_P (newdecl)
2958              && CP_DECL_THREAD_LOCAL_P (newdecl) != CP_DECL_THREAD_LOCAL_P (olddecl)
2959              && (! DECL_LANG_SPECIFIC (olddecl)
2960                  || ! CP_DECL_THREADPRIVATE_P (olddecl)
2961                  || CP_DECL_THREAD_LOCAL_P (newdecl)))
2962     {
2963       /* Only variables can be thread-local, and all declarations must
2964            agree on this property.  */
2965       if (CP_DECL_THREAD_LOCAL_P (newdecl))
2966           return G_("thread-local declaration of %q#D follows "
2967                     "non-thread-local declaration");
2968       else
2969           return G_("non-thread-local declaration of %q#D follows "
2970                     "thread-local declaration");
2971     }
2972   else if (toplevel_bindings_p () || DECL_NAMESPACE_SCOPE_P (newdecl))
2973     {
2974       /* The objects have been declared at namespace scope.  If either
2975            is a member of an anonymous union, then this is an invalid
2976            redeclaration.  For example:
2977 
2978              int i;
2979              union { int i; };
2980 
2981              is invalid.  */
2982       if ((VAR_P (newdecl) && DECL_ANON_UNION_VAR_P (newdecl))
2983             || (VAR_P (olddecl) && DECL_ANON_UNION_VAR_P (olddecl)))
2984           return G_("redeclaration of %q#D");
2985       /* If at least one declaration is a reference, there is no
2986            conflict.  For example:
2987 
2988              int i = 3;
2989              extern int i;
2990 
2991            is valid.  */
2992       if (DECL_EXTERNAL (newdecl) || DECL_EXTERNAL (olddecl))
2993           return NULL;
2994 
2995       /* Static data member declared outside a class definition
2996            if the variable is defined within the class with constexpr
2997            specifier is declaration rather than definition (and
2998            deprecated).  */
2999       if (cxx_dialect >= cxx17
3000             && VAR_P (olddecl)
3001             && DECL_CLASS_SCOPE_P (olddecl)
3002             && DECL_DECLARED_CONSTEXPR_P (olddecl)
3003             && !DECL_INITIAL (newdecl))
3004           {
3005             DECL_EXTERNAL (newdecl) = 1;
3006             /* For now, only warn with explicit -Wdeprecated.  */
3007             if (global_options_set.x_warn_deprecated
3008                 && warning_at (DECL_SOURCE_LOCATION (newdecl), OPT_Wdeprecated,
3009                                    "redundant redeclaration of %<constexpr%> static "
3010                                    "data member %qD", newdecl))
3011               inform (DECL_SOURCE_LOCATION (olddecl),
3012                         "previous declaration of %qD", olddecl);
3013             return NULL;
3014           }
3015 
3016       /* Reject two definitions.  */
3017       return G_("redefinition of %q#D");
3018     }
3019   else
3020     {
3021       /* Objects declared with block scope:  */
3022       /* Reject two definitions, and reject a definition
3023            together with an external reference.  */
3024       if (!(DECL_EXTERNAL (newdecl) && DECL_EXTERNAL (olddecl)))
3025           return G_("redeclaration of %q#D");
3026       return NULL;
3027     }
3028 }
3029 
3030 
3031 /* Hash and equality functions for the named_label table.  */
3032 
3033 hashval_t
hash(const value_type entry)3034 named_label_hash::hash (const value_type entry)
3035 {
3036   return IDENTIFIER_HASH_VALUE (entry->name);
3037 }
3038 
3039 bool
equal(const value_type entry,compare_type name)3040 named_label_hash::equal (const value_type entry, compare_type name)
3041 {
3042   return name == entry->name;
3043 }
3044 
3045 /* Look for a label named ID in the current function.  If one cannot
3046    be found, create one.  Return the named_label_entry, or NULL on
3047    failure.  */
3048 
3049 static named_label_entry *
lookup_label_1(tree id,bool making_local_p)3050 lookup_label_1 (tree id, bool making_local_p)
3051 {
3052   /* You can't use labels at global scope.  */
3053   if (current_function_decl == NULL_TREE)
3054     {
3055       error ("label %qE referenced outside of any function", id);
3056       return NULL;
3057     }
3058 
3059   if (!named_labels)
3060     named_labels = hash_table<named_label_hash>::create_ggc (13);
3061 
3062   hashval_t hash = IDENTIFIER_HASH_VALUE (id);
3063   named_label_entry **slot
3064     = named_labels->find_slot_with_hash (id, hash, INSERT);
3065   named_label_entry *old = *slot;
3066 
3067   if (old && old->label_decl)
3068     {
3069       if (!making_local_p)
3070           return old;
3071 
3072       if (old->binding_level == current_binding_level)
3073           {
3074             error ("local label %qE conflicts with existing label", id);
3075             inform (DECL_SOURCE_LOCATION (old->label_decl), "previous label");
3076             return NULL;
3077           }
3078     }
3079 
3080   /* We are making a new decl, create or reuse the named_label_entry  */
3081   named_label_entry *ent = NULL;
3082   if (old && !old->label_decl)
3083     ent = old;
3084   else
3085     {
3086       ent = ggc_cleared_alloc<named_label_entry> ();
3087       ent->name = id;
3088       ent->outer = old;
3089       *slot = ent;
3090     }
3091 
3092   /* Now create the LABEL_DECL.  */
3093   tree decl = build_decl (input_location, LABEL_DECL, id, void_type_node);
3094 
3095   DECL_CONTEXT (decl) = current_function_decl;
3096   SET_DECL_MODE (decl, VOIDmode);
3097   if (making_local_p)
3098     {
3099       C_DECLARED_LABEL_FLAG (decl) = true;
3100       DECL_CHAIN (decl) = current_binding_level->names;
3101       current_binding_level->names = decl;
3102     }
3103 
3104   ent->label_decl = decl;
3105 
3106   return ent;
3107 }
3108 
3109 /* Wrapper for lookup_label_1.  */
3110 
3111 tree
lookup_label(tree id)3112 lookup_label (tree id)
3113 {
3114   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3115   named_label_entry *ent = lookup_label_1 (id, false);
3116   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3117   return ent ? ent->label_decl : NULL_TREE;
3118 }
3119 
3120 tree
declare_local_label(tree id)3121 declare_local_label (tree id)
3122 {
3123   bool subtime = timevar_cond_start (TV_NAME_LOOKUP);
3124   named_label_entry *ent = lookup_label_1 (id, true);
3125   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
3126   return ent ? ent->label_decl : NULL_TREE;
3127 }
3128 
3129 /* Returns nonzero if it is ill-formed to jump past the declaration of
3130    DECL.  Returns 2 if it's also a real problem.  */
3131 
3132 static int
decl_jump_unsafe(tree decl)3133 decl_jump_unsafe (tree decl)
3134 {
3135   /* [stmt.dcl]/3: A program that jumps from a point where a local variable
3136      with automatic storage duration is not in scope to a point where it is
3137      in scope is ill-formed unless the variable has scalar type, class type
3138      with a trivial default constructor and a trivial destructor, a
3139      cv-qualified version of one of these types, or an array of one of the
3140      preceding types and is declared without an initializer (8.5).  */
3141   tree type = TREE_TYPE (decl);
3142 
3143   if (!VAR_P (decl) || TREE_STATIC (decl)
3144       || type == error_mark_node)
3145     return 0;
3146 
3147   if (DECL_NONTRIVIALLY_INITIALIZED_P (decl)
3148       || variably_modified_type_p (type, NULL_TREE))
3149     return 2;
3150 
3151   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3152     return 1;
3153 
3154   return 0;
3155 }
3156 
3157 /* A subroutine of check_previous_goto_1 and check_goto to identify a branch
3158    to the user.  */
3159 
3160 static bool
identify_goto(tree decl,location_t loc,const location_t * locus,diagnostic_t diag_kind)3161 identify_goto (tree decl, location_t loc, const location_t *locus,
3162                  diagnostic_t diag_kind)
3163 {
3164   bool complained
3165     = emit_diagnostic (diag_kind, loc, 0,
3166                            decl ? N_("jump to label %qD")
3167                            : N_("jump to case label"), decl);
3168   if (complained && locus)
3169     inform (*locus, "  from here");
3170   return complained;
3171 }
3172 
3173 /* Check that a single previously seen jump to a newly defined label
3174    is OK.  DECL is the LABEL_DECL or 0; LEVEL is the binding_level for
3175    the jump context; NAMES are the names in scope in LEVEL at the jump
3176    context; LOCUS is the source position of the jump or 0.  Returns
3177    true if all is well.  */
3178 
3179 static bool
check_previous_goto_1(tree decl,cp_binding_level * level,tree names,bool exited_omp,const location_t * locus)3180 check_previous_goto_1 (tree decl, cp_binding_level* level, tree names,
3181                            bool exited_omp, const location_t *locus)
3182 {
3183   cp_binding_level *b;
3184   bool complained = false;
3185   int identified = 0;
3186   bool saw_eh = false, saw_omp = false, saw_tm = false, saw_cxif = false;
3187 
3188   if (exited_omp)
3189     {
3190       complained = identify_goto (decl, input_location, locus, DK_ERROR);
3191       if (complained)
3192           inform (input_location, "  exits OpenMP structured block");
3193       saw_omp = true;
3194       identified = 2;
3195     }
3196 
3197   for (b = current_binding_level; b ; b = b->level_chain)
3198     {
3199       tree new_decls, old_decls = (b == level ? names : NULL_TREE);
3200 
3201       for (new_decls = b->names; new_decls != old_decls;
3202              new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls)
3203                               : TREE_CHAIN (new_decls)))
3204           {
3205             int problem = decl_jump_unsafe (new_decls);
3206             if (! problem)
3207               continue;
3208 
3209             if (!identified)
3210               {
3211                 complained = identify_goto (decl, input_location, locus,
3212                                                     DK_PERMERROR);
3213                 identified = 1;
3214               }
3215             if (complained)
3216               {
3217                 if (problem > 1)
3218                     inform (DECL_SOURCE_LOCATION (new_decls),
3219                               "  crosses initialization of %q#D", new_decls);
3220                 else
3221                     inform (DECL_SOURCE_LOCATION (new_decls),
3222                               "  enters scope of %q#D, which has "
3223                               "non-trivial destructor", new_decls);
3224               }
3225           }
3226 
3227       if (b == level)
3228           break;
3229 
3230       const char *inf = NULL;
3231       location_t loc = input_location;
3232       switch (b->kind)
3233           {
3234           case sk_try:
3235             if (!saw_eh)
3236               inf = N_("enters try block");
3237             saw_eh = true;
3238             break;
3239 
3240           case sk_catch:
3241             if (!saw_eh)
3242               inf = N_("enters catch block");
3243             saw_eh = true;
3244             break;
3245 
3246           case sk_omp:
3247             if (!saw_omp)
3248               inf = N_("enters OpenMP structured block");
3249             saw_omp = true;
3250             break;
3251 
3252           case sk_transaction:
3253             if (!saw_tm)
3254               inf = N_("enters synchronized or atomic statement");
3255             saw_tm = true;
3256             break;
3257 
3258           case sk_block:
3259             if (!saw_cxif && level_for_constexpr_if (b->level_chain))
3260               {
3261                 inf = N_("enters constexpr if statement");
3262                 loc = EXPR_LOCATION (b->level_chain->this_entity);
3263                 saw_cxif = true;
3264               }
3265             break;
3266 
3267           default:
3268             break;
3269           }
3270 
3271       if (inf)
3272           {
3273             if (identified < 2)
3274               complained = identify_goto (decl, input_location, locus, DK_ERROR);
3275             identified = 2;
3276             if (complained)
3277               inform (loc, "  %s", inf);
3278           }
3279     }
3280 
3281   return !identified;
3282 }
3283 
3284 static void
check_previous_goto(tree decl,struct named_label_use_entry * use)3285 check_previous_goto (tree decl, struct named_label_use_entry *use)
3286 {
3287   check_previous_goto_1 (decl, use->binding_level,
3288                                use->names_in_scope, use->in_omp_scope,
3289                                &use->o_goto_locus);
3290 }
3291 
3292 static bool
check_switch_goto(cp_binding_level * level)3293 check_switch_goto (cp_binding_level* level)
3294 {
3295   return check_previous_goto_1 (NULL_TREE, level, level->names, false, NULL);
3296 }
3297 
3298 /* Check that a new jump to a label DECL is OK.  Called by
3299    finish_goto_stmt.  */
3300 
3301 void
check_goto(tree decl)3302 check_goto (tree decl)
3303 {
3304   /* We can't know where a computed goto is jumping.
3305      So we assume that it's OK.  */
3306   if (TREE_CODE (decl) != LABEL_DECL)
3307     return;
3308 
3309   /* We didn't record any information about this label when we created it,
3310      and there's not much point since it's trivial to analyze as a return.  */
3311   if (decl == cdtor_label)
3312     return;
3313 
3314   hashval_t hash = IDENTIFIER_HASH_VALUE (DECL_NAME (decl));
3315   named_label_entry **slot
3316     = named_labels->find_slot_with_hash (DECL_NAME (decl), hash, NO_INSERT);
3317   named_label_entry *ent = *slot;
3318 
3319   /* If the label hasn't been defined yet, defer checking.  */
3320   if (! DECL_INITIAL (decl))
3321     {
3322       /* Don't bother creating another use if the last goto had the
3323            same data, and will therefore create the same set of errors.  */
3324       if (ent->uses
3325             && ent->uses->names_in_scope == current_binding_level->names)
3326           return;
3327 
3328       named_label_use_entry *new_use
3329           = ggc_alloc<named_label_use_entry> ();
3330       new_use->binding_level = current_binding_level;
3331       new_use->names_in_scope = current_binding_level->names;
3332       new_use->o_goto_locus = input_location;
3333       new_use->in_omp_scope = false;
3334 
3335       new_use->next = ent->uses;
3336       ent->uses = new_use;
3337       return;
3338     }
3339 
3340   bool saw_catch = false, complained = false;
3341   int identified = 0;
3342   tree bad;
3343   unsigned ix;
3344 
3345   if (ent->in_try_scope || ent->in_catch_scope || ent->in_transaction_scope
3346       || ent->in_constexpr_if
3347       || ent->in_omp_scope || !vec_safe_is_empty (ent->bad_decls))
3348     {
3349       diagnostic_t diag_kind = DK_PERMERROR;
3350       if (ent->in_try_scope || ent->in_catch_scope || ent->in_constexpr_if
3351             || ent->in_transaction_scope || ent->in_omp_scope)
3352           diag_kind = DK_ERROR;
3353       complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3354                                           &input_location, diag_kind);
3355       identified = 1 + (diag_kind == DK_ERROR);
3356     }
3357 
3358   FOR_EACH_VEC_SAFE_ELT (ent->bad_decls, ix, bad)
3359     {
3360       int u = decl_jump_unsafe (bad);
3361 
3362       if (u > 1 && DECL_ARTIFICIAL (bad))
3363           {
3364             /* Can't skip init of __exception_info.  */
3365             if (identified == 1)
3366               {
3367                 complained = identify_goto (decl, DECL_SOURCE_LOCATION (decl),
3368                                                     &input_location, DK_ERROR);
3369                 identified = 2;
3370               }
3371             if (complained)
3372               inform (DECL_SOURCE_LOCATION (bad), "  enters catch block");
3373             saw_catch = true;
3374           }
3375       else if (complained)
3376           {
3377             if (u > 1)
3378               inform (DECL_SOURCE_LOCATION (bad),
3379                         "  skips initialization of %q#D", bad);
3380             else
3381               inform (DECL_SOURCE_LOCATION (bad),
3382                         "  enters scope of %q#D which has "
3383                         "non-trivial destructor", bad);
3384           }
3385     }
3386 
3387   if (complained)
3388     {
3389       if (ent->in_try_scope)
3390           inform (input_location, "  enters try block");
3391       else if (ent->in_catch_scope && !saw_catch)
3392           inform (input_location, "  enters catch block");
3393       else if (ent->in_transaction_scope)
3394           inform (input_location, "  enters synchronized or atomic statement");
3395       else if (ent->in_constexpr_if)
3396           inform (input_location, "  enters %<constexpr%> if statement");
3397     }
3398 
3399   if (ent->in_omp_scope)
3400     {
3401       if (complained)
3402           inform (input_location, "  enters OpenMP structured block");
3403     }
3404   else if (flag_openmp)
3405     for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3406       {
3407           if (b == ent->binding_level)
3408             break;
3409           if (b->kind == sk_omp)
3410             {
3411               if (identified < 2)
3412                 {
3413                     complained = identify_goto (decl,
3414                                                       DECL_SOURCE_LOCATION (decl),
3415                                                       &input_location, DK_ERROR);
3416                     identified = 2;
3417                 }
3418               if (complained)
3419                 inform (input_location, "  exits OpenMP structured block");
3420               break;
3421             }
3422       }
3423 }
3424 
3425 /* Check that a return is ok wrt OpenMP structured blocks.
3426    Called by finish_return_stmt.  Returns true if all is well.  */
3427 
3428 bool
check_omp_return(void)3429 check_omp_return (void)
3430 {
3431   for (cp_binding_level *b = current_binding_level; b ; b = b->level_chain)
3432     if (b->kind == sk_omp)
3433       {
3434           error ("invalid exit from OpenMP structured block");
3435           return false;
3436       }
3437     else if (b->kind == sk_function_parms)
3438       break;
3439   return true;
3440 }
3441 
3442 /* Define a label, specifying the location in the source file.
3443    Return the LABEL_DECL node for the label.  */
3444 
3445 static tree
define_label_1(location_t location,tree name)3446 define_label_1 (location_t location, tree name)
3447 {
3448   /* After labels, make any new cleanups in the function go into their
3449      own new (temporary) binding contour.  */
3450   for (cp_binding_level *p = current_binding_level;
3451        p->kind != sk_function_parms;
3452        p = p->level_chain)
3453     p->more_cleanups_ok = 0;
3454 
3455   named_label_entry *ent = lookup_label_1 (name, false);
3456   tree decl = ent->label_decl;
3457 
3458   if (DECL_INITIAL (decl) != NULL_TREE)
3459     {
3460       error ("duplicate label %qD", decl);
3461       return error_mark_node;
3462     }
3463   else
3464     {
3465       /* Mark label as having been defined.  */
3466       DECL_INITIAL (decl) = error_mark_node;
3467       /* Say where in the source.  */
3468       DECL_SOURCE_LOCATION (decl) = location;
3469 
3470       ent->binding_level = current_binding_level;
3471       ent->names_in_scope = current_binding_level->names;
3472 
3473       for (named_label_use_entry *use = ent->uses; use; use = use->next)
3474           check_previous_goto (decl, use);
3475       ent->uses = NULL;
3476     }
3477 
3478   return decl;
3479 }
3480 
3481 /* Wrapper for define_label_1.  */
3482 
3483 tree
define_label(location_t location,tree name)3484 define_label (location_t location, tree name)
3485 {
3486   bool running = timevar_cond_start (TV_NAME_LOOKUP);
3487   tree ret = define_label_1 (location, name);
3488   timevar_cond_stop (TV_NAME_LOOKUP, running);
3489   return ret;
3490 }
3491 
3492 
3493 struct cp_switch
3494 {
3495   cp_binding_level *level;
3496   struct cp_switch *next;
3497   /* The SWITCH_STMT being built.  */
3498   tree switch_stmt;
3499   /* A splay-tree mapping the low element of a case range to the high
3500      element, or NULL_TREE if there is no high element.  Used to
3501      determine whether or not a new case label duplicates an old case
3502      label.  We need a tree, rather than simply a hash table, because
3503      of the GNU case range extension.  */
3504   splay_tree cases;
3505   /* Remember whether there was a case value that is outside the
3506      range of the original type of the controlling expression.  */
3507   bool outside_range_p;
3508   /* Remember whether a default: case label has been seen.  */
3509   bool has_default_p;
3510   /* Remember whether a BREAK_STMT has been seen in this SWITCH_STMT.  */
3511   bool break_stmt_seen_p;
3512   /* Set if inside of {FOR,DO,WHILE}_BODY nested inside of a switch,
3513      where BREAK_STMT doesn't belong to the SWITCH_STMT.  */
3514   bool in_loop_body_p;
3515 };
3516 
3517 /* A stack of the currently active switch statements.  The innermost
3518    switch statement is on the top of the stack.  There is no need to
3519    mark the stack for garbage collection because it is only active
3520    during the processing of the body of a function, and we never
3521    collect at that point.  */
3522 
3523 static struct cp_switch *switch_stack;
3524 
3525 /* Called right after a switch-statement condition is parsed.
3526    SWITCH_STMT is the switch statement being parsed.  */
3527 
3528 void
push_switch(tree switch_stmt)3529 push_switch (tree switch_stmt)
3530 {
3531   struct cp_switch *p = XNEW (struct cp_switch);
3532   p->level = current_binding_level;
3533   p->next = switch_stack;
3534   p->switch_stmt = switch_stmt;
3535   p->cases = splay_tree_new (case_compare, NULL, NULL);
3536   p->outside_range_p = false;
3537   p->has_default_p = false;
3538   p->break_stmt_seen_p = false;
3539   p->in_loop_body_p = false;
3540   switch_stack = p;
3541 }
3542 
3543 void
pop_switch(void)3544 pop_switch (void)
3545 {
3546   struct cp_switch *cs = switch_stack;
3547   location_t switch_location;
3548 
3549   /* Emit warnings as needed.  */
3550   switch_location = EXPR_LOC_OR_LOC (cs->switch_stmt, input_location);
3551   const bool bool_cond_p
3552     = (SWITCH_STMT_TYPE (cs->switch_stmt)
3553        && TREE_CODE (SWITCH_STMT_TYPE (cs->switch_stmt)) == BOOLEAN_TYPE);
3554   if (!processing_template_decl)
3555     c_do_switch_warnings (cs->cases, switch_location,
3556                                 SWITCH_STMT_TYPE (cs->switch_stmt),
3557                                 SWITCH_STMT_COND (cs->switch_stmt),
3558                                 bool_cond_p, cs->outside_range_p);
3559 
3560   /* For the benefit of block_may_fallthru remember if the switch body
3561      case labels cover all possible values and if there are break; stmts.  */
3562   if (cs->has_default_p
3563       || (!processing_template_decl
3564             && c_switch_covers_all_cases_p (cs->cases,
3565                                                     SWITCH_STMT_TYPE (cs->switch_stmt))))
3566     SWITCH_STMT_ALL_CASES_P (cs->switch_stmt) = 1;
3567   if (!cs->break_stmt_seen_p)
3568     SWITCH_STMT_NO_BREAK_P (cs->switch_stmt) = 1;
3569   gcc_assert (!cs->in_loop_body_p);
3570   splay_tree_delete (cs->cases);
3571   switch_stack = switch_stack->next;
3572   free (cs);
3573 }
3574 
3575 /* Note that a BREAK_STMT is about to be added.  If it is inside of
3576    a SWITCH_STMT and not inside of a loop body inside of it, note
3577    in switch_stack we've seen a BREAK_STMT.  */
3578 
3579 void
note_break_stmt(void)3580 note_break_stmt (void)
3581 {
3582   if (switch_stack && !switch_stack->in_loop_body_p)
3583     switch_stack->break_stmt_seen_p = true;
3584 }
3585 
3586 /* Note the start of processing of an iteration statement's body.
3587    The note_break_stmt function will do nothing while processing it.
3588    Return a flag that should be passed to note_iteration_stmt_body_end.  */
3589 
3590 bool
note_iteration_stmt_body_start(void)3591 note_iteration_stmt_body_start (void)
3592 {
3593   if (!switch_stack)
3594     return false;
3595   bool ret = switch_stack->in_loop_body_p;
3596   switch_stack->in_loop_body_p = true;
3597   return ret;
3598 }
3599 
3600 /* Note the end of processing of an iteration statement's body.  */
3601 
3602 void
note_iteration_stmt_body_end(bool prev)3603 note_iteration_stmt_body_end (bool prev)
3604 {
3605   if (switch_stack)
3606     switch_stack->in_loop_body_p = prev;
3607 }
3608 
3609 /* Convert a case constant VALUE in a switch to the type TYPE of the switch
3610    condition.  Note that if TYPE and VALUE are already integral we don't
3611    really do the conversion because the language-independent
3612    warning/optimization code will work better that way.  */
3613 
3614 static tree
case_conversion(tree type,tree value)3615 case_conversion (tree type, tree value)
3616 {
3617   if (value == NULL_TREE)
3618     return value;
3619 
3620   value = mark_rvalue_use (value);
3621 
3622   if (cxx_dialect >= cxx11
3623       && (SCOPED_ENUM_P (type)
3624             || !INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (value))))
3625     {
3626       if (INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
3627           type = type_promotes_to (type);
3628       value = (perform_implicit_conversion_flags
3629                  (type, value, tf_warning_or_error,
3630                     LOOKUP_IMPLICIT | LOOKUP_NO_NON_INTEGRAL));
3631     }
3632   return cxx_constant_value (value);
3633 }
3634 
3635 /* Note that we've seen a definition of a case label, and complain if this
3636    is a bad place for one.  */
3637 
3638 tree
finish_case_label(location_t loc,tree low_value,tree high_value)3639 finish_case_label (location_t loc, tree low_value, tree high_value)
3640 {
3641   tree cond, r;
3642   cp_binding_level *p;
3643   tree type;
3644 
3645   if (low_value == NULL_TREE && high_value == NULL_TREE)
3646     switch_stack->has_default_p = true;
3647 
3648   if (processing_template_decl)
3649     {
3650       tree label;
3651 
3652       /* For templates, just add the case label; we'll do semantic
3653            analysis at instantiation-time.  */
3654       label = build_decl (loc, LABEL_DECL, NULL_TREE, NULL_TREE);
3655       return add_stmt (build_case_label (low_value, high_value, label));
3656     }
3657 
3658   /* Find the condition on which this switch statement depends.  */
3659   cond = SWITCH_STMT_COND (switch_stack->switch_stmt);
3660   if (cond && TREE_CODE (cond) == TREE_LIST)
3661     cond = TREE_VALUE (cond);
3662 
3663   if (!check_switch_goto (switch_stack->level))
3664     return error_mark_node;
3665 
3666   type = SWITCH_STMT_TYPE (switch_stack->switch_stmt);
3667 
3668   low_value = case_conversion (type, low_value);
3669   high_value = case_conversion (type, high_value);
3670 
3671   r = c_add_case_label (loc, switch_stack->cases, cond, type,
3672                               low_value, high_value,
3673                               &switch_stack->outside_range_p);
3674 
3675   /* After labels, make any new cleanups in the function go into their
3676      own new (temporary) binding contour.  */
3677   for (p = current_binding_level;
3678        p->kind != sk_function_parms;
3679        p = p->level_chain)
3680     p->more_cleanups_ok = 0;
3681 
3682   return r;
3683 }
3684 
3685 struct typename_info {
3686   tree scope;
3687   tree name;
3688   tree template_id;
3689   bool enum_p;
3690   bool class_p;
3691 };
3692 
3693 struct typename_hasher : ggc_ptr_hash<tree_node>
3694 {
3695   typedef typename_info *compare_type;
3696 
3697   /* Hash a TYPENAME_TYPE.  */
3698 
3699   static hashval_t
hashtypename_hasher3700   hash (tree t)
3701   {
3702     hashval_t hash;
3703 
3704     hash = (htab_hash_pointer (TYPE_CONTEXT (t))
3705               ^ htab_hash_pointer (TYPE_IDENTIFIER (t)));
3706 
3707     return hash;
3708   }
3709 
3710   /* Compare two TYPENAME_TYPEs.  */
3711 
3712   static bool
equaltypename_hasher3713   equal (tree t1, const typename_info *t2)
3714   {
3715     return (TYPE_IDENTIFIER (t1) == t2->name
3716               && TYPE_CONTEXT (t1) == t2->scope
3717               && TYPENAME_TYPE_FULLNAME (t1) == t2->template_id
3718               && TYPENAME_IS_ENUM_P (t1) == t2->enum_p
3719               && TYPENAME_IS_CLASS_P (t1) == t2->class_p);
3720   }
3721 };
3722 
3723 /* Build a TYPENAME_TYPE.  If the type is `typename T::t', CONTEXT is
3724    the type of `T', NAME is the IDENTIFIER_NODE for `t'.
3725 
3726    Returns the new TYPENAME_TYPE.  */
3727 
3728 static GTY (()) hash_table<typename_hasher> *typename_htab;
3729 
3730 tree
build_typename_type(tree context,tree name,tree fullname,enum tag_types tag_type)3731 build_typename_type (tree context, tree name, tree fullname,
3732                          enum tag_types tag_type)
3733 {
3734   tree t;
3735   tree d;
3736   typename_info ti;
3737   tree *e;
3738   hashval_t hash;
3739 
3740   if (typename_htab == NULL)
3741     typename_htab = hash_table<typename_hasher>::create_ggc (61);
3742 
3743   ti.scope = FROB_CONTEXT (context);
3744   ti.name = name;
3745   ti.template_id = fullname;
3746   ti.enum_p = tag_type == enum_type;
3747   ti.class_p = (tag_type == class_type
3748                     || tag_type == record_type
3749                     || tag_type == union_type);
3750   hash =  (htab_hash_pointer (ti.scope)
3751              ^ htab_hash_pointer (ti.name));
3752 
3753   /* See if we already have this type.  */
3754   e = typename_htab->find_slot_with_hash (&ti, hash, INSERT);
3755   if (*e)
3756     t = *e;
3757   else
3758     {
3759       /* Build the TYPENAME_TYPE.  */
3760       t = cxx_make_type (TYPENAME_TYPE);
3761       TYPE_CONTEXT (t) = ti.scope;
3762       TYPENAME_TYPE_FULLNAME (t) = ti.template_id;
3763       TYPENAME_IS_ENUM_P (t) = ti.enum_p;
3764       TYPENAME_IS_CLASS_P (t) = ti.class_p;
3765 
3766       /* Build the corresponding TYPE_DECL.  */
3767       d = build_decl (input_location, TYPE_DECL, name, t);
3768       TYPE_NAME (TREE_TYPE (d)) = d;
3769       TYPE_STUB_DECL (TREE_TYPE (d)) = d;
3770       DECL_CONTEXT (d) = FROB_CONTEXT (context);
3771       DECL_ARTIFICIAL (d) = 1;
3772 
3773       /* Store it in the hash table.  */
3774       *e = t;
3775 
3776       /* TYPENAME_TYPEs must always be compared structurally, because
3777            they may or may not resolve down to another type depending on
3778            the currently open classes. */
3779       SET_TYPE_STRUCTURAL_EQUALITY (t);
3780     }
3781 
3782   return t;
3783 }
3784 
3785 /* Resolve `typename CONTEXT::NAME'.  TAG_TYPE indicates the tag
3786    provided to name the type.  Returns an appropriate type, unless an
3787    error occurs, in which case error_mark_node is returned.  If we
3788    locate a non-artificial TYPE_DECL and TF_KEEP_TYPE_DECL is set, we
3789    return that, rather than the _TYPE it corresponds to, in other
3790    cases we look through the type decl.  If TF_ERROR is set, complain
3791    about errors, otherwise be quiet.  */
3792 
3793 tree
make_typename_type(tree context,tree name,enum tag_types tag_type,tsubst_flags_t complain)3794 make_typename_type (tree context, tree name, enum tag_types tag_type,
3795                         tsubst_flags_t complain)
3796 {
3797   tree fullname;
3798   tree t;
3799   bool want_template;
3800 
3801   if (name == error_mark_node
3802       || context == NULL_TREE
3803       || context == error_mark_node)
3804     return error_mark_node;
3805 
3806   if (TYPE_P (name))
3807     {
3808       if (!(TYPE_LANG_SPECIFIC (name)
3809               && (CLASSTYPE_IS_TEMPLATE (name)
3810                     || CLASSTYPE_USE_TEMPLATE (name))))
3811           name = TYPE_IDENTIFIER (name);
3812       else
3813           /* Create a TEMPLATE_ID_EXPR for the type.  */
3814           name = build_nt (TEMPLATE_ID_EXPR,
3815                                CLASSTYPE_TI_TEMPLATE (name),
3816                                CLASSTYPE_TI_ARGS (name));
3817     }
3818   else if (TREE_CODE (name) == TYPE_DECL)
3819     name = DECL_NAME (name);
3820 
3821   fullname = name;
3822 
3823   if (TREE_CODE (name) == TEMPLATE_ID_EXPR)
3824     {
3825       name = TREE_OPERAND (name, 0);
3826       if (DECL_TYPE_TEMPLATE_P (name))
3827           name = TREE_OPERAND (fullname, 0) = DECL_NAME (name);
3828       if (TREE_CODE (name) != IDENTIFIER_NODE)
3829           {
3830             if (complain & tf_error)
3831               error ("%qD is not a type", name);
3832             return error_mark_node;
3833           }
3834     }
3835   if (TREE_CODE (name) == TEMPLATE_DECL)
3836     {
3837       if (complain & tf_error)
3838           error ("%qD used without template parameters", name);
3839       return error_mark_node;
3840     }
3841   gcc_assert (identifier_p (name));
3842   gcc_assert (TYPE_P (context));
3843 
3844   if (!MAYBE_CLASS_TYPE_P (context))
3845     {
3846       if (complain & tf_error)
3847           error ("%q#T is not a class", context);
3848       return error_mark_node;
3849     }
3850 
3851   /* When the CONTEXT is a dependent type,  NAME could refer to a
3852      dependent base class of CONTEXT.  But look inside it anyway
3853      if CONTEXT is a currently open scope, in case it refers to a
3854      member of the current instantiation or a non-dependent base;
3855      lookup will stop when we hit a dependent base.  */
3856   if (!dependent_scope_p (context))
3857     /* We should only set WANT_TYPE when we're a nested typename type.
3858        Then we can give better diagnostics if we find a non-type.  */
3859     t = lookup_field (context, name, 2, /*want_type=*/true);
3860   else
3861     t = NULL_TREE;
3862 
3863   if ((!t || TREE_CODE (t) == TREE_LIST) && dependent_type_p (context))
3864     return build_typename_type (context, name, fullname, tag_type);
3865 
3866   want_template = TREE_CODE (fullname) == TEMPLATE_ID_EXPR;
3867 
3868   if (!t)
3869     {
3870       if (complain & tf_error)
3871           {
3872             if (!COMPLETE_TYPE_P (context))
3873               cxx_incomplete_type_error (NULL_TREE, context);
3874             else
3875               error (want_template ? G_("no class template named %q#T in %q#T")
3876                        : G_("no type named %q#T in %q#T"), name, context);
3877           }
3878       return error_mark_node;
3879     }
3880 
3881   /* Pull out the template from an injected-class-name (or multiple).  */
3882   if (want_template)
3883     t = maybe_get_template_decl_from_type_decl (t);
3884 
3885   if (TREE_CODE (t) == TREE_LIST)
3886     {
3887       if (complain & tf_error)
3888           {
3889             error ("lookup of %qT in %qT is ambiguous", name, context);
3890             print_candidates (t);
3891           }
3892       return error_mark_node;
3893     }
3894 
3895   if (want_template && !DECL_TYPE_TEMPLATE_P (t))
3896     {
3897       if (complain & tf_error)
3898           error ("%<typename %T::%D%> names %q#T, which is not a class template",
3899                  context, name, t);
3900       return error_mark_node;
3901     }
3902   if (!want_template && TREE_CODE (t) != TYPE_DECL)
3903     {
3904       if (complain & tf_error)
3905           error ("%<typename %T::%D%> names %q#T, which is not a type",
3906                  context, name, t);
3907       return error_mark_node;
3908     }
3909 
3910   if (!perform_or_defer_access_check (TYPE_BINFO (context), t, t, complain))
3911     return error_mark_node;
3912 
3913   /* If we are currently parsing a template and if T is a typedef accessed
3914      through CONTEXT then we need to remember and check access of T at
3915      template instantiation time.  */
3916   add_typedef_to_current_template_for_access_check (t, context, input_location);
3917 
3918   if (want_template)
3919     return lookup_template_class (t, TREE_OPERAND (fullname, 1),
3920                                           NULL_TREE, context,
3921                                           /*entering_scope=*/0,
3922                                           complain | tf_user);
3923 
3924   if (DECL_ARTIFICIAL (t) || !(complain & tf_keep_type_decl))
3925     t = TREE_TYPE (t);
3926 
3927   maybe_record_typedef_use (t);
3928 
3929   return t;
3930 }
3931 
3932 /* Resolve `CONTEXT::template NAME'.  Returns a TEMPLATE_DECL if the name
3933    can be resolved or an UNBOUND_CLASS_TEMPLATE, unless an error occurs,
3934    in which case error_mark_node is returned.
3935 
3936    If PARM_LIST is non-NULL, also make sure that the template parameter
3937    list of TEMPLATE_DECL matches.
3938 
3939    If COMPLAIN zero, don't complain about any errors that occur.  */
3940 
3941 tree
make_unbound_class_template(tree context,tree name,tree parm_list,tsubst_flags_t complain)3942 make_unbound_class_template (tree context, tree name, tree parm_list,
3943                                    tsubst_flags_t complain)
3944 {
3945   tree t;
3946   tree d;
3947 
3948   if (TYPE_P (name))
3949     name = TYPE_IDENTIFIER (name);
3950   else if (DECL_P (name))
3951     name = DECL_NAME (name);
3952   gcc_assert (identifier_p (name));
3953 
3954   if (!dependent_type_p (context)
3955       || currently_open_class (context))
3956     {
3957       tree tmpl = NULL_TREE;
3958 
3959       if (MAYBE_CLASS_TYPE_P (context))
3960           tmpl = lookup_field (context, name, 0, false);
3961 
3962       if (tmpl && TREE_CODE (tmpl) == TYPE_DECL)
3963           tmpl = maybe_get_template_decl_from_type_decl (tmpl);
3964 
3965       if (!tmpl || !DECL_TYPE_TEMPLATE_P (tmpl))
3966           {
3967             if (complain & tf_error)
3968               error ("no class template named %q#T in %q#T", name, context);
3969             return error_mark_node;
3970           }
3971 
3972       if (parm_list
3973             && !comp_template_parms (DECL_TEMPLATE_PARMS (tmpl), parm_list))
3974           {
3975             if (complain & tf_error)
3976               {
3977                 error ("template parameters do not match template %qD", tmpl);
3978                 inform (DECL_SOURCE_LOCATION (tmpl),
3979                           "%qD declared here", tmpl);
3980               }
3981             return error_mark_node;
3982           }
3983 
3984       if (!perform_or_defer_access_check (TYPE_BINFO (context), tmpl, tmpl,
3985                                                     complain))
3986           return error_mark_node;
3987 
3988       return tmpl;
3989     }
3990 
3991   /* Build the UNBOUND_CLASS_TEMPLATE.  */
3992   t = cxx_make_type (UNBOUND_CLASS_TEMPLATE);
3993   TYPE_CONTEXT (t) = FROB_CONTEXT (context);
3994   TREE_TYPE (t) = NULL_TREE;
3995   SET_TYPE_STRUCTURAL_EQUALITY (t);
3996 
3997   /* Build the corresponding TEMPLATE_DECL.  */
3998   d = build_decl (input_location, TEMPLATE_DECL, name, t);
3999   TYPE_NAME (TREE_TYPE (d)) = d;
4000   TYPE_STUB_DECL (TREE_TYPE (d)) = d;
4001   DECL_CONTEXT (d) = FROB_CONTEXT (context);
4002   DECL_ARTIFICIAL (d) = 1;
4003   DECL_TEMPLATE_PARMS (d) = parm_list;
4004 
4005   return t;
4006 }
4007 
4008 
4009 
4010 /* Push the declarations of builtin types into the global namespace.
4011    RID_INDEX is the index of the builtin type in the array
4012    RID_POINTERS.  NAME is the name used when looking up the builtin
4013    type.  TYPE is the _TYPE node for the builtin type.
4014 
4015    The calls to set_global_binding below should be
4016    eliminated.  Built-in types should not be looked up name; their
4017    names are keywords that the parser can recognize.  However, there
4018    is code in c-common.c that uses identifier_global_value to look up
4019    built-in types by name.  */
4020 
4021 void
record_builtin_type(enum rid rid_index,const char * name,tree type)4022 record_builtin_type (enum rid rid_index,
4023                          const char* name,
4024                          tree type)
4025 {
4026   tree decl = NULL_TREE;
4027 
4028   if (name)
4029     {
4030       tree tname = get_identifier (name);
4031       tree tdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, tname, type);
4032       DECL_ARTIFICIAL (tdecl) = 1;
4033       set_global_binding (tdecl);
4034       decl = tdecl;
4035     }
4036 
4037   if ((int) rid_index < (int) RID_MAX)
4038     if (tree rname = ridpointers[(int) rid_index])
4039       if (!decl || DECL_NAME (decl) != rname)
4040           {
4041             tree rdecl = build_decl (BUILTINS_LOCATION, TYPE_DECL, rname, type);
4042             DECL_ARTIFICIAL (rdecl) = 1;
4043             set_global_binding (rdecl);
4044             if (!decl)
4045               decl = rdecl;
4046           }
4047 
4048   if (decl)
4049     {
4050       if (!TYPE_NAME (type))
4051           TYPE_NAME (type) = decl;
4052       debug_hooks->type_decl (decl, 0);
4053     }
4054 }
4055 
4056 /* Push a type into the namespace so that the back ends ignore it.  */
4057 
4058 static void
record_unknown_type(tree type,const char * name)4059 record_unknown_type (tree type, const char* name)
4060 {
4061   tree decl = pushdecl (build_decl (UNKNOWN_LOCATION,
4062                                             TYPE_DECL, get_identifier (name), type));
4063   /* Make sure the "unknown type" typedecl gets ignored for debug info.  */
4064   DECL_IGNORED_P (decl) = 1;
4065   TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
4066   TYPE_SIZE (type) = TYPE_SIZE (void_type_node);
4067   SET_TYPE_ALIGN (type, 1);
4068   TYPE_USER_ALIGN (type) = 0;
4069   SET_TYPE_MODE (type, TYPE_MODE (void_type_node));
4070 }
4071 
4072 /* Create all the predefined identifiers.  */
4073 
4074 static void
initialize_predefined_identifiers(void)4075 initialize_predefined_identifiers (void)
4076 {
4077   struct predefined_identifier
4078   {
4079     const char *name; /* Name.  */
4080     tree *node;  /* Node to store it in.  */
4081     cp_identifier_kind kind;  /* Kind of identifier.  */
4082   };
4083 
4084   /* A table of identifiers to create at startup.  */
4085   static const predefined_identifier predefined_identifiers[] = {
4086     {"C++", &lang_name_cplusplus, cik_normal},
4087     {"C", &lang_name_c, cik_normal},
4088     /* Some of these names have a trailing space so that it is
4089        impossible for them to conflict with names written by users.  */
4090     {"__ct ", &ctor_identifier, cik_ctor},
4091     {"__ct_base ", &base_ctor_identifier, cik_ctor},
4092     {"__ct_comp ", &complete_ctor_identifier, cik_ctor},
4093     {"__dt ", &dtor_identifier, cik_dtor},
4094     {"__dt_base ", &base_dtor_identifier, cik_dtor},
4095     {"__dt_comp ", &complete_dtor_identifier, cik_dtor},
4096     {"__dt_del ", &deleting_dtor_identifier, cik_dtor},
4097     {"__conv_op ", &conv_op_identifier, cik_conv_op},
4098     {"__in_chrg", &in_charge_identifier, cik_normal},
4099     {"this", &this_identifier, cik_normal},
4100     {"__delta", &delta_identifier, cik_normal},
4101     {"__pfn", &pfn_identifier, cik_normal},
4102     {"_vptr", &vptr_identifier, cik_normal},
4103     {"__vtt_parm", &vtt_parm_identifier, cik_normal},
4104     {"::", &global_identifier, cik_normal},
4105     {"std", &std_identifier, cik_normal},
4106       /* The demangler expects anonymous namespaces to be called
4107            something starting with '_GLOBAL__N_'.  It no longer needs
4108            to be unique to the TU.  */
4109     {"_GLOBAL__N_1", &anon_identifier, cik_normal},
4110     {"auto", &auto_identifier, cik_normal},
4111     {"decltype(auto)", &decltype_auto_identifier, cik_normal},
4112     {"initializer_list", &init_list_identifier, cik_normal},
4113     {NULL, NULL, cik_normal}
4114   };
4115 
4116   for (const predefined_identifier *pid = predefined_identifiers;
4117        pid->name; ++pid)
4118     {
4119       *pid->node = get_identifier (pid->name);
4120       /* Some of these identifiers already have a special kind.  */
4121       if (pid->kind != cik_normal)
4122           set_identifier_kind (*pid->node, pid->kind);
4123     }
4124 }
4125 
4126 /* Create the predefined scalar types of C,
4127    and some nodes representing standard constants (0, 1, (void *)0).
4128    Initialize the global binding level.
4129    Make definitions for built-in primitive functions.  */
4130 
4131 void
cxx_init_decl_processing(void)4132 cxx_init_decl_processing (void)
4133 {
4134   tree void_ftype;
4135   tree void_ftype_ptr;
4136 
4137   /* Create all the identifiers we need.  */
4138   initialize_predefined_identifiers ();
4139 
4140   /* Create the global variables.  */
4141   push_to_top_level ();
4142 
4143   current_function_decl = NULL_TREE;
4144   current_binding_level = NULL;
4145   /* Enter the global namespace.  */
4146   gcc_assert (global_namespace == NULL_TREE);
4147   global_namespace = build_lang_decl (NAMESPACE_DECL, global_identifier,
4148                                               void_type_node);
4149   TREE_PUBLIC (global_namespace) = 1;
4150   DECL_CONTEXT (global_namespace)
4151     = build_translation_unit_decl (get_identifier (main_input_filename));
4152   /* Remember whether we want the empty class passing ABI change warning
4153      in this TU.  */
4154   TRANSLATION_UNIT_WARN_EMPTY_P (DECL_CONTEXT (global_namespace))
4155     = warn_abi && abi_version_crosses (12);
4156   debug_hooks->register_main_translation_unit
4157     (DECL_CONTEXT (global_namespace));
4158   begin_scope (sk_namespace, global_namespace);
4159   current_namespace = global_namespace;
4160 
4161   if (flag_visibility_ms_compat)
4162     default_visibility = VISIBILITY_HIDDEN;
4163 
4164   /* Initially, C.  */
4165   current_lang_name = lang_name_c;
4166 
4167   /* Create the `std' namespace.  */
4168   push_namespace (std_identifier);
4169   std_node = current_namespace;
4170   pop_namespace ();
4171 
4172   flag_noexcept_type = (cxx_dialect >= cxx17);
4173   /* There's no fixed location for <command-line>, the current
4174      location is <builtins>, which is somewhat confusing.  */
4175   if (!flag_new_for_scope)
4176     warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
4177                     "%<-fno-for-scope%> is deprecated");
4178   if (flag_friend_injection)
4179     warning_at (UNKNOWN_LOCATION, OPT_Wdeprecated,
4180                     "%<-ffriend-injection%> is deprecated");
4181 
4182   c_common_nodes_and_builtins ();
4183 
4184   integer_two_node = build_int_cst (NULL_TREE, 2);
4185 
4186   /* Guess at the initial static decls size.  */
4187   vec_alloc (static_decls, 500);
4188 
4189   /* ... and keyed classes.  */
4190   vec_alloc (keyed_classes, 100);
4191 
4192   record_builtin_type (RID_BOOL, "bool", boolean_type_node);
4193   truthvalue_type_node = boolean_type_node;
4194   truthvalue_false_node = boolean_false_node;
4195   truthvalue_true_node = boolean_true_node;
4196 
4197   empty_except_spec = build_tree_list (NULL_TREE, NULL_TREE);
4198   noexcept_true_spec = build_tree_list (boolean_true_node, NULL_TREE);
4199   noexcept_false_spec = build_tree_list (boolean_false_node, NULL_TREE);
4200   noexcept_deferred_spec = build_tree_list (make_node (DEFERRED_NOEXCEPT),
4201                                                       NULL_TREE);
4202 
4203 #if 0
4204   record_builtin_type (RID_MAX, NULL, string_type_node);
4205 #endif
4206 
4207   delta_type_node = ptrdiff_type_node;
4208   vtable_index_type = ptrdiff_type_node;
4209 
4210   vtt_parm_type = build_pointer_type (const_ptr_type_node);
4211   void_ftype = build_function_type_list (void_type_node, NULL_TREE);
4212   void_ftype_ptr = build_function_type_list (void_type_node,
4213                                                        ptr_type_node, NULL_TREE);
4214   void_ftype_ptr
4215     = build_exception_variant (void_ftype_ptr, empty_except_spec);
4216 
4217   /* Create the conversion operator marker.  This operator's DECL_NAME
4218      is in the identifier table, so we can use identifier equality to
4219      find it.  */
4220   conv_op_marker = build_lang_decl (FUNCTION_DECL, conv_op_identifier,
4221                                             void_ftype);
4222 
4223   /* C++ extensions */
4224 
4225   unknown_type_node = make_node (LANG_TYPE);
4226   record_unknown_type (unknown_type_node, "unknown type");
4227 
4228   /* Indirecting an UNKNOWN_TYPE node yields an UNKNOWN_TYPE node.  */
4229   TREE_TYPE (unknown_type_node) = unknown_type_node;
4230 
4231   /* Looking up TYPE_POINTER_TO and TYPE_REFERENCE_TO yield the same
4232      result.  */
4233   TYPE_POINTER_TO (unknown_type_node) = unknown_type_node;
4234   TYPE_REFERENCE_TO (unknown_type_node) = unknown_type_node;
4235 
4236   init_list_type_node = make_node (LANG_TYPE);
4237   record_unknown_type (init_list_type_node, "init list");
4238 
4239   {
4240     /* Make sure we get a unique function type, so we can give
4241        its pointer type a name.  (This wins for gdb.) */
4242     tree vfunc_type = make_node (FUNCTION_TYPE);
4243     TREE_TYPE (vfunc_type) = integer_type_node;
4244     TYPE_ARG_TYPES (vfunc_type) = NULL_TREE;
4245     layout_type (vfunc_type);
4246 
4247     vtable_entry_type = build_pointer_type (vfunc_type);
4248   }
4249   record_builtin_type (RID_MAX, "__vtbl_ptr_type", vtable_entry_type);
4250 
4251   vtbl_type_node
4252     = build_cplus_array_type (vtable_entry_type, NULL_TREE);
4253   layout_type (vtbl_type_node);
4254   vtbl_type_node = cp_build_qualified_type (vtbl_type_node, TYPE_QUAL_CONST);
4255   record_builtin_type (RID_MAX, NULL, vtbl_type_node);
4256   vtbl_ptr_type_node = build_pointer_type (vtable_entry_type);
4257   layout_type (vtbl_ptr_type_node);
4258   record_builtin_type (RID_MAX, NULL, vtbl_ptr_type_node);
4259 
4260   push_namespace (get_identifier ("__cxxabiv1"));
4261   abi_node = current_namespace;
4262   pop_namespace ();
4263 
4264   global_type_node = make_node (LANG_TYPE);
4265   record_unknown_type (global_type_node, "global type");
4266 
4267   any_targ_node = make_node (LANG_TYPE);
4268   record_unknown_type (any_targ_node, "any type");
4269 
4270   /* Now, C++.  */
4271   current_lang_name = lang_name_cplusplus;
4272 
4273   if (aligned_new_threshold > 1
4274       && !pow2p_hwi (aligned_new_threshold))
4275     {
4276       error ("-faligned-new=%d is not a power of two", aligned_new_threshold);
4277       aligned_new_threshold = 1;
4278     }
4279   if (aligned_new_threshold == -1)
4280     aligned_new_threshold = (cxx_dialect >= cxx17) ? 1 : 0;
4281   if (aligned_new_threshold == 1)
4282     aligned_new_threshold = malloc_alignment () / BITS_PER_UNIT;
4283 
4284   {
4285     tree newattrs, extvisattr;
4286     tree newtype, deltype;
4287     tree ptr_ftype_sizetype;
4288     tree new_eh_spec;
4289 
4290     ptr_ftype_sizetype
4291       = build_function_type_list (ptr_type_node, size_type_node, NULL_TREE);
4292     if (cxx_dialect == cxx98)
4293       {
4294           tree bad_alloc_id;
4295           tree bad_alloc_type_node;
4296           tree bad_alloc_decl;
4297 
4298           push_namespace (std_identifier);
4299           bad_alloc_id = get_identifier ("bad_alloc");
4300           bad_alloc_type_node = make_class_type (RECORD_TYPE);
4301           TYPE_CONTEXT (bad_alloc_type_node) = current_namespace;
4302           bad_alloc_decl
4303             = create_implicit_typedef (bad_alloc_id, bad_alloc_type_node);
4304           DECL_CONTEXT (bad_alloc_decl) = current_namespace;
4305           pop_namespace ();
4306 
4307           new_eh_spec
4308             = add_exception_specifier (NULL_TREE, bad_alloc_type_node, -1);
4309       }
4310     else
4311       new_eh_spec = noexcept_false_spec;
4312 
4313     /* Ensure attribs.c is initialized.  */
4314     init_attributes ();
4315 
4316     /* Ensure constraint.cc is initialized. */
4317     init_constraint_processing ();
4318 
4319     extvisattr = build_tree_list (get_identifier ("externally_visible"),
4320                                           NULL_TREE);
4321     newattrs = tree_cons (get_identifier ("alloc_size"),
4322                                 build_tree_list (NULL_TREE, integer_one_node),
4323                                 extvisattr);
4324     newtype = cp_build_type_attribute_variant (ptr_ftype_sizetype, newattrs);
4325     newtype = build_exception_variant (newtype, new_eh_spec);
4326     deltype = cp_build_type_attribute_variant (void_ftype_ptr, extvisattr);
4327     deltype = build_exception_variant (deltype, empty_except_spec);
4328     tree opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4329     DECL_IS_MALLOC (opnew) = 1;
4330     DECL_IS_OPERATOR_NEW (opnew) = 1;
4331     opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4332     DECL_IS_MALLOC (opnew) = 1;
4333     DECL_IS_OPERATOR_NEW (opnew) = 1;
4334     push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4335     push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4336     if (flag_sized_deallocation)
4337       {
4338           /* Also push the sized deallocation variants:
4339                void operator delete(void*, std::size_t) throw();
4340                void operator delete[](void*, std::size_t) throw();  */
4341           tree void_ftype_ptr_size
4342             = build_function_type_list (void_type_node, ptr_type_node,
4343                                               size_type_node, NULL_TREE);
4344           deltype = cp_build_type_attribute_variant (void_ftype_ptr_size,
4345                                                                extvisattr);
4346           deltype = build_exception_variant (deltype, empty_except_spec);
4347           push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4348           push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4349       }
4350 
4351     if (aligned_new_threshold)
4352       {
4353           push_namespace (std_identifier);
4354           tree align_id = get_identifier ("align_val_t");
4355           align_type_node = start_enum (align_id, NULL_TREE, size_type_node,
4356                                               NULL_TREE, /*scoped*/true, NULL);
4357           pop_namespace ();
4358 
4359           /* operator new (size_t, align_val_t); */
4360           newtype = build_function_type_list (ptr_type_node, size_type_node,
4361                                                       align_type_node, NULL_TREE);
4362           newtype = cp_build_type_attribute_variant (newtype, newattrs);
4363           newtype = build_exception_variant (newtype, new_eh_spec);
4364           opnew = push_cp_library_fn (NEW_EXPR, newtype, 0);
4365           DECL_IS_MALLOC (opnew) = 1;
4366           DECL_IS_OPERATOR_NEW (opnew) = 1;
4367           opnew = push_cp_library_fn (VEC_NEW_EXPR, newtype, 0);
4368           DECL_IS_MALLOC (opnew) = 1;
4369           DECL_IS_OPERATOR_NEW (opnew) = 1;
4370 
4371           /* operator delete (void *, align_val_t); */
4372           deltype = build_function_type_list (void_type_node, ptr_type_node,
4373                                                       align_type_node, NULL_TREE);
4374           deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4375           deltype = build_exception_variant (deltype, empty_except_spec);
4376           push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4377           push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4378 
4379           if (flag_sized_deallocation)
4380             {
4381               /* operator delete (void *, size_t, align_val_t); */
4382               deltype = build_function_type_list (void_type_node, ptr_type_node,
4383                                                             size_type_node, align_type_node,
4384                                                             NULL_TREE);
4385               deltype = cp_build_type_attribute_variant (deltype, extvisattr);
4386               deltype = build_exception_variant (deltype, empty_except_spec);
4387               push_cp_library_fn (DELETE_EXPR, deltype, ECF_NOTHROW);
4388               push_cp_library_fn (VEC_DELETE_EXPR, deltype, ECF_NOTHROW);
4389             }
4390       }
4391 
4392     nullptr_type_node = make_node (NULLPTR_TYPE);
4393     TYPE_SIZE (nullptr_type_node) = bitsize_int (GET_MODE_BITSIZE (ptr_mode));
4394     TYPE_SIZE_UNIT (nullptr_type_node) = size_int (GET_MODE_SIZE (ptr_mode));
4395     TYPE_UNSIGNED (nullptr_type_node) = 1;
4396     TYPE_PRECISION (nullptr_type_node) = GET_MODE_BITSIZE (ptr_mode);
4397     if (abi_version_at_least (9))
4398       SET_TYPE_ALIGN (nullptr_type_node, GET_MODE_ALIGNMENT (ptr_mode));
4399     SET_TYPE_MODE (nullptr_type_node, ptr_mode);
4400     record_builtin_type (RID_MAX, "decltype(nullptr)", nullptr_type_node);
4401     nullptr_node = build_int_cst (nullptr_type_node, 0);
4402   }
4403 
4404   abort_fndecl
4405     = build_library_fn_ptr ("__cxa_pure_virtual", void_ftype,
4406                                   ECF_NORETURN | ECF_NOTHROW | ECF_COLD);
4407 
4408   /* Perform other language dependent initializations.  */
4409   init_class_processing ();
4410   init_rtti_processing ();
4411   init_template_processing ();
4412 
4413   if (flag_exceptions)
4414     init_exception_processing ();
4415 
4416   if (! supports_one_only ())
4417     flag_weak = 0;
4418 
4419   make_fname_decl = cp_make_fname_decl;
4420   start_fname_decls ();
4421 
4422   /* Show we use EH for cleanups.  */
4423   if (flag_exceptions)
4424     using_eh_for_cleanups ();
4425 }
4426 
4427 /* Generate an initializer for a function naming variable from
4428    NAME. NAME may be NULL, to indicate a dependent name.  TYPE_P is
4429    filled in with the type of the init.  */
4430 
4431 tree
cp_fname_init(const char * name,tree * type_p)4432 cp_fname_init (const char* name, tree *type_p)
4433 {
4434   tree domain = NULL_TREE;
4435   tree type;
4436   tree init = NULL_TREE;
4437   size_t length = 0;
4438 
4439   if (name)
4440     {
4441       length = strlen (name);
4442       domain = build_index_type (size_int (length));
4443       init = build_string (length + 1, name);
4444     }
4445 
4446   type = cp_build_qualified_type (char_type_node, TYPE_QUAL_CONST);
4447   type = build_cplus_array_type (type, domain);
4448 
4449   *type_p = type;
4450 
4451   if (init)
4452     TREE_TYPE (init) = type;
4453   else
4454     init = error_mark_node;
4455 
4456   return init;
4457 }
4458 
4459 /* Create the VAR_DECL for __FUNCTION__ etc. ID is the name to give
4460    the decl, LOC is the location to give the decl, NAME is the
4461    initialization string and TYPE_DEP indicates whether NAME depended
4462    on the type of the function. We make use of that to detect
4463    __PRETTY_FUNCTION__ inside a template fn. This is being done lazily
4464    at the point of first use, so we mustn't push the decl now.  */
4465 
4466 static tree
cp_make_fname_decl(location_t loc,tree id,int type_dep)4467 cp_make_fname_decl (location_t loc, tree id, int type_dep)
4468 {
4469   const char *const name = (type_dep && processing_template_decl
4470                                   ? NULL : fname_as_string (type_dep));
4471   tree type;
4472   tree init = cp_fname_init (name, &type);
4473   tree decl = build_decl (loc, VAR_DECL, id, type);
4474 
4475   if (name)
4476     free (CONST_CAST (char *, name));
4477 
4478   TREE_STATIC (decl) = 1;
4479   TREE_READONLY (decl) = 1;
4480   DECL_ARTIFICIAL (decl) = 1;
4481 
4482   TREE_USED (decl) = 1;
4483 
4484   if (current_function_decl)
4485     {
4486       DECL_CONTEXT (decl) = current_function_decl;
4487       decl = pushdecl_outermost_localscope (decl);
4488       cp_finish_decl (decl, init, /*init_const_expr_p=*/false, NULL_TREE,
4489                           LOOKUP_ONLYCONVERTING);
4490     }
4491   else
4492     {
4493       DECL_THIS_STATIC (decl) = true;
4494       pushdecl_top_level_and_finish (decl, init);
4495     }
4496 
4497   return decl;
4498 }
4499 
4500 static tree
builtin_function_1(tree decl,tree context,bool is_global)4501 builtin_function_1 (tree decl, tree context, bool is_global)
4502 {
4503   tree          id = DECL_NAME (decl);
4504   const char *name = IDENTIFIER_POINTER (id);
4505 
4506   retrofit_lang_decl (decl);
4507 
4508   DECL_ARTIFICIAL (decl) = 1;
4509   SET_DECL_LANGUAGE (decl, lang_c);
4510   /* Runtime library routines are, by definition, available in an
4511      external shared object.  */
4512   DECL_VISIBILITY (decl) = VISIBILITY_DEFAULT;
4513   DECL_VISIBILITY_SPECIFIED (decl) = 1;
4514 
4515   DECL_CONTEXT (decl) = context;
4516 
4517   /* A function in the user's namespace should have an explicit
4518      declaration before it is used.  Mark the built-in function as
4519      anticipated but not actually declared.  */
4520   if (name[0] != '_' || name[1] != '_')
4521     DECL_ANTICIPATED (decl) = 1;
4522   else if (strncmp (name + 2, "builtin_", strlen ("builtin_")) != 0)
4523     {
4524       size_t len = strlen (name);
4525 
4526       /* Treat __*_chk fortification functions as anticipated as well,
4527            unless they are __builtin_*.  */
4528       if (len > strlen ("___chk")
4529             && memcmp (name + len - strlen ("_chk"),
4530                          "_chk", strlen ("_chk") + 1) == 0)
4531           DECL_ANTICIPATED (decl) = 1;
4532     }
4533 
4534   if (is_global)
4535     pushdecl_top_level (decl);
4536   else
4537     pushdecl (decl);
4538 
4539   return decl;
4540 }
4541 
4542 tree
cxx_builtin_function(tree decl)4543 cxx_builtin_function (tree decl)
4544 {
4545   tree          id = DECL_NAME (decl);
4546   const char *name = IDENTIFIER_POINTER (id);
4547   /* All builtins that don't begin with an '_' should additionally
4548      go in the 'std' namespace.  */
4549   if (name[0] != '_')
4550     {
4551       tree decl2 = copy_node(decl);
4552       push_namespace (std_identifier);
4553       builtin_function_1 (decl2, std_node, false);
4554       pop_namespace ();
4555     }
4556 
4557   return builtin_function_1 (decl, NULL_TREE, false);
4558 }
4559 
4560 /* Like cxx_builtin_function, but guarantee the function is added to the global
4561    scope.  This is to allow function specific options to add new machine
4562    dependent builtins when the target ISA changes via attribute((target(...)))
4563    which saves space on program startup if the program does not use non-generic
4564    ISAs.  */
4565 
4566 tree
cxx_builtin_function_ext_scope(tree decl)4567 cxx_builtin_function_ext_scope (tree decl)
4568 {
4569 
4570   tree          id = DECL_NAME (decl);
4571   const char *name = IDENTIFIER_POINTER (id);
4572   /* All builtins that don't begin with an '_' should additionally
4573      go in the 'std' namespace.  */
4574   if (name[0] != '_')
4575     {
4576       tree decl2 = copy_node(decl);
4577       push_namespace (std_identifier);
4578       builtin_function_1 (decl2, std_node, true);
4579       pop_namespace ();
4580     }
4581 
4582   return builtin_function_1 (decl, NULL_TREE, true);
4583 }
4584 
4585 /* Generate a FUNCTION_DECL with the typical flags for a runtime library
4586    function.  Not called directly.  */
4587 
4588 static tree
build_library_fn(tree name,enum tree_code operator_code,tree type,int ecf_flags)4589 build_library_fn (tree name, enum tree_code operator_code, tree type,
4590                       int ecf_flags)
4591 {
4592   tree fn = build_lang_decl (FUNCTION_DECL, name, type);
4593   DECL_EXTERNAL (fn) = 1;
4594   TREE_PUBLIC (fn) = 1;
4595   DECL_ARTIFICIAL (fn) = 1;
4596   DECL_OVERLOADED_OPERATOR_CODE_RAW (fn)
4597     = OVL_OP_INFO (false, operator_code)->ovl_op_code;
4598   SET_DECL_LANGUAGE (fn, lang_c);
4599   /* Runtime library routines are, by definition, available in an
4600      external shared object.  */
4601   DECL_VISIBILITY (fn) = VISIBILITY_DEFAULT;
4602   DECL_VISIBILITY_SPECIFIED (fn) = 1;
4603   set_call_expr_flags (fn, ecf_flags);
4604   return fn;
4605 }
4606 
4607 /* Returns the _DECL for a library function with C++ linkage.  */
4608 
4609 static tree
build_cp_library_fn(tree name,enum tree_code operator_code,tree type,int ecf_flags)4610 build_cp_library_fn (tree name, enum tree_code operator_code, tree type,
4611                          int ecf_flags)
4612 {
4613   tree fn = build_library_fn (name, operator_code, type, ecf_flags);
4614   DECL_CONTEXT (fn) = FROB_CONTEXT (current_namespace);
4615   SET_DECL_LANGUAGE (fn, lang_cplusplus);
4616   return fn;
4617 }
4618 
4619 /* Like build_library_fn, but takes a C string instead of an
4620    IDENTIFIER_NODE.  */
4621 
4622 tree
build_library_fn_ptr(const char * name,tree type,int ecf_flags)4623 build_library_fn_ptr (const char* name, tree type, int ecf_flags)
4624 {
4625   return build_library_fn (get_identifier (name), ERROR_MARK, type, ecf_flags);
4626 }
4627 
4628 /* Like build_cp_library_fn, but takes a C string instead of an
4629    IDENTIFIER_NODE.  */
4630 
4631 tree
build_cp_library_fn_ptr(const char * name,tree type,int ecf_flags)4632 build_cp_library_fn_ptr (const char* name, tree type, int ecf_flags)
4633 {
4634   return build_cp_library_fn (get_identifier (name), ERROR_MARK, type,
4635                                     ecf_flags);
4636 }
4637 
4638 /* Like build_library_fn, but also pushes the function so that we will
4639    be able to find it via get_global_binding.  Also, the function
4640    may throw exceptions listed in RAISES.  */
4641 
4642 tree
push_library_fn(tree name,tree type,tree raises,int ecf_flags)4643 push_library_fn (tree name, tree type, tree raises, int ecf_flags)
4644 {
4645   tree fn;
4646 
4647   if (raises)
4648     type = build_exception_variant (type, raises);
4649 
4650   fn = build_library_fn (name, ERROR_MARK, type, ecf_flags);
4651   pushdecl_top_level (fn);
4652   return fn;
4653 }
4654 
4655 /* Like build_cp_library_fn, but also pushes the function so that it
4656    will be found by normal lookup.  */
4657 
4658 static tree
push_cp_library_fn(enum tree_code operator_code,tree type,int ecf_flags)4659 push_cp_library_fn (enum tree_code operator_code, tree type,
4660                         int ecf_flags)
4661 {
4662   tree fn = build_cp_library_fn (ovl_op_identifier (false, operator_code),
4663                                          operator_code, type, ecf_flags);
4664   pushdecl (fn);
4665   if (flag_tm)
4666     apply_tm_attr (fn, get_identifier ("transaction_safe"));
4667   return fn;
4668 }
4669 
4670 /* Like push_library_fn, but takes a TREE_LIST of parm types rather than
4671    a FUNCTION_TYPE.  */
4672 
4673 tree
push_void_library_fn(tree name,tree parmtypes,int ecf_flags)4674 push_void_library_fn (tree name, tree parmtypes, int ecf_flags)
4675 {
4676   tree type = build_function_type (void_type_node, parmtypes);
4677   return push_library_fn (name, type, NULL_TREE, ecf_flags);
4678 }
4679 
4680 /* Like push_library_fn, but also note that this function throws
4681    and does not return.  Used for __throw_foo and the like.  */
4682 
4683 tree
push_throw_library_fn(tree name,tree type)4684 push_throw_library_fn (tree name, tree type)
4685 {
4686   tree fn = push_library_fn (name, type, NULL_TREE, ECF_NORETURN | ECF_COLD);
4687   return fn;
4688 }
4689 
4690 /* When we call finish_struct for an anonymous union, we create
4691    default copy constructors and such.  But, an anonymous union
4692    shouldn't have such things; this function undoes the damage to the
4693    anonymous union type T.
4694 
4695    (The reason that we create the synthesized methods is that we don't
4696    distinguish `union { int i; }' from `typedef union { int i; } U'.
4697    The first is an anonymous union; the second is just an ordinary
4698    union type.)  */
4699 
4700 void
fixup_anonymous_aggr(tree t)4701 fixup_anonymous_aggr (tree t)
4702 {
4703   /* Wipe out memory of synthesized methods.  */
4704   TYPE_HAS_USER_CONSTRUCTOR (t) = 0;
4705   TYPE_HAS_DEFAULT_CONSTRUCTOR (t) = 0;
4706   TYPE_HAS_COPY_CTOR (t) = 0;
4707   TYPE_HAS_CONST_COPY_CTOR (t) = 0;
4708   TYPE_HAS_COPY_ASSIGN (t) = 0;
4709   TYPE_HAS_CONST_COPY_ASSIGN (t) = 0;
4710 
4711   /* Splice the implicitly generated functions out of TYPE_FIELDS.  */
4712   for (tree probe, *prev_p = &TYPE_FIELDS (t); (probe = *prev_p);)
4713     if (TREE_CODE (probe) == FUNCTION_DECL && DECL_ARTIFICIAL (probe))
4714       *prev_p = DECL_CHAIN (probe);
4715     else
4716       prev_p = &DECL_CHAIN (probe);
4717 
4718   /* Anonymous aggregates cannot have fields with ctors, dtors or complex
4719      assignment operators (because they cannot have these methods themselves).
4720      For anonymous unions this is already checked because they are not allowed
4721      in any union, otherwise we have to check it.  */
4722   if (TREE_CODE (t) != UNION_TYPE)
4723     {
4724       tree field, type;
4725 
4726       for (field = TYPE_FIELDS (t); field; field = DECL_CHAIN (field))
4727           if (TREE_CODE (field) == FIELD_DECL)
4728             {
4729               type = TREE_TYPE (field);
4730               if (CLASS_TYPE_P (type))
4731                 {
4732                     if (TYPE_NEEDS_CONSTRUCTING (type))
4733                       error ("member %q+#D with constructor not allowed "
4734                                "in anonymous aggregate", field);
4735                     if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
4736                       error ("member %q+#D with destructor not allowed "
4737                                "in anonymous aggregate", field);
4738                     if (TYPE_HAS_COMPLEX_COPY_ASSIGN (type))
4739                       error ("member %q+#D with copy assignment operator "
4740                                "not allowed in anonymous aggregate", field);
4741                 }
4742             }
4743     }
4744 }
4745 
4746 /* Warn for an attribute located at LOCATION that appertains to the
4747    class type CLASS_TYPE that has not been properly placed after its
4748    class-key, in it class-specifier.  */
4749 
4750 void
warn_misplaced_attr_for_class_type(source_location location,tree class_type)4751 warn_misplaced_attr_for_class_type (source_location location,
4752                                             tree class_type)
4753 {
4754   gcc_assert (OVERLOAD_TYPE_P (class_type));
4755 
4756   if (warning_at (location, OPT_Wattributes,
4757                       "attribute ignored in declaration "
4758                       "of %q#T", class_type))
4759     inform (location,
4760               "attribute for %q#T must follow the %qs keyword",
4761               class_type, class_key_or_enum_as_string (class_type));
4762 }
4763 
4764 /* Make sure that a declaration with no declarator is well-formed, i.e.
4765    just declares a tagged type or anonymous union.
4766 
4767    Returns the type declared; or NULL_TREE if none.  */
4768 
4769 tree
check_tag_decl(cp_decl_specifier_seq * declspecs,bool explicit_type_instantiation_p)4770 check_tag_decl (cp_decl_specifier_seq *declspecs,
4771                     bool explicit_type_instantiation_p)
4772 {
4773   int saw_friend = decl_spec_seq_has_spec_p (declspecs, ds_friend);
4774   int saw_typedef = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
4775   /* If a class, struct, or enum type is declared by the DECLSPECS
4776      (i.e, if a class-specifier, enum-specifier, or non-typename
4777      elaborated-type-specifier appears in the DECLSPECS),
4778      DECLARED_TYPE is set to the corresponding type.  */
4779   tree declared_type = NULL_TREE;
4780   bool error_p = false;
4781 
4782   if (declspecs->multiple_types_p)
4783     error ("multiple types in one declaration");
4784   else if (declspecs->redefined_builtin_type)
4785     {
4786       if (!in_system_header_at (input_location))
4787           permerror (declspecs->locations[ds_redefined_builtin_type_spec],
4788                        "redeclaration of C++ built-in type %qT",
4789                        declspecs->redefined_builtin_type);
4790       return NULL_TREE;
4791     }
4792 
4793   if (declspecs->type
4794       && TYPE_P (declspecs->type)
4795       && ((TREE_CODE (declspecs->type) != TYPENAME_TYPE
4796              && MAYBE_CLASS_TYPE_P (declspecs->type))
4797             || TREE_CODE (declspecs->type) == ENUMERAL_TYPE))
4798     declared_type = declspecs->type;
4799   else if (declspecs->type == error_mark_node)
4800     error_p = true;
4801   if (declared_type == NULL_TREE && ! saw_friend && !error_p)
4802     permerror (input_location, "declaration does not declare anything");
4803   else if (declared_type != NULL_TREE && type_uses_auto (declared_type))
4804     {
4805       error_at (declspecs->locations[ds_type_spec],
4806                     "%<auto%> can only be specified for variables "
4807                     "or function declarations");
4808       return error_mark_node;
4809     }
4810   /* Check for an anonymous union.  */
4811   else if (declared_type && RECORD_OR_UNION_CODE_P (TREE_CODE (declared_type))
4812              && TYPE_UNNAMED_P (declared_type))
4813     {
4814       /* 7/3 In a simple-declaration, the optional init-declarator-list
4815            can be omitted only when declaring a class (clause 9) or
4816            enumeration (7.2), that is, when the decl-specifier-seq contains
4817            either a class-specifier, an elaborated-type-specifier with
4818            a class-key (9.1), or an enum-specifier.  In these cases and
4819            whenever a class-specifier or enum-specifier is present in the
4820            decl-specifier-seq, the identifiers in these specifiers are among
4821            the names being declared by the declaration (as class-name,
4822            enum-names, or enumerators, depending on the syntax).  In such
4823            cases, and except for the declaration of an unnamed bit-field (9.6),
4824            the decl-specifier-seq shall introduce one or more names into the
4825            program, or shall redeclare a name introduced by a previous
4826            declaration.  [Example:
4827                enum { };                          // ill-formed
4828                typedef class { };                 // ill-formed
4829            --end example]  */
4830       if (saw_typedef)
4831           {
4832             error ("missing type-name in typedef-declaration");
4833             return NULL_TREE;
4834           }
4835       /* Anonymous unions are objects, so they can have specifiers.  */;
4836       SET_ANON_AGGR_TYPE_P (declared_type);
4837 
4838       if (TREE_CODE (declared_type) != UNION_TYPE
4839             && !in_system_header_at (input_location))
4840           pedwarn (input_location, OPT_Wpedantic, "ISO C++ prohibits anonymous structs");
4841     }
4842 
4843   else
4844     {
4845       if (decl_spec_seq_has_spec_p (declspecs, ds_inline))
4846           error_at (declspecs->locations[ds_inline],
4847                       "%<inline%> can only be specified for functions");
4848       else if (decl_spec_seq_has_spec_p (declspecs, ds_virtual))
4849           error_at (declspecs->locations[ds_virtual],
4850                       "%<virtual%> can only be specified for functions");
4851       else if (saw_friend
4852                  && (!current_class_type
4853                        || current_scope () != current_class_type))
4854           error_at (declspecs->locations[ds_friend],
4855                       "%<friend%> can only be specified inside a class");
4856       else if (decl_spec_seq_has_spec_p (declspecs, ds_explicit))
4857           error_at (declspecs->locations[ds_explicit],
4858                       "%<explicit%> can only be specified for constructors");
4859       else if (declspecs->storage_class)
4860           error_at (declspecs->locations[ds_storage_class],
4861                       "a storage class can only be specified for objects "
4862                       "and functions");
4863       else if (decl_spec_seq_has_spec_p (declspecs, ds_const))
4864           error_at (declspecs->locations[ds_const],
4865                       "%<const%> can only be specified for objects and "
4866                       "functions");
4867       else if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
4868           error_at (declspecs->locations[ds_volatile],
4869                       "%<volatile%> can only be specified for objects and "
4870                       "functions");
4871       else if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
4872           error_at (declspecs->locations[ds_restrict],
4873                       "%<__restrict%> can only be specified for objects and "
4874                       "functions");
4875       else if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
4876           error_at (declspecs->locations[ds_thread],
4877                       "%<__thread%> can only be specified for objects "
4878                       "and functions");
4879       else if (saw_typedef)
4880           warning_at (declspecs->locations[ds_typedef], 0,
4881                         "%<typedef%> was ignored in this declaration");
4882       else if (decl_spec_seq_has_spec_p (declspecs,  ds_constexpr))
4883         error_at (declspecs->locations[ds_constexpr],
4884                       "%<constexpr%> cannot be used for type declarations");
4885     }
4886 
4887   if (declspecs->attributes && warn_attributes && declared_type)
4888     {
4889       location_t loc;
4890       if (!CLASS_TYPE_P (declared_type)
4891             || !CLASSTYPE_TEMPLATE_INSTANTIATION (declared_type))
4892           /* For a non-template class, use the name location.  */
4893           loc = location_of (declared_type);
4894       else
4895           /* For a template class (an explicit instantiation), use the
4896              current location.  */
4897           loc = input_location;
4898 
4899       if (explicit_type_instantiation_p)
4900           /* [dcl.attr.grammar]/4:
4901 
4902                  No attribute-specifier-seq shall appertain to an explicit
4903                  instantiation.  */
4904           {
4905             if (warning_at (loc, OPT_Wattributes,
4906                                 "attribute ignored in explicit instantiation %q#T",
4907                                 declared_type))
4908               inform (loc,
4909                         "no attribute can be applied to "
4910                         "an explicit instantiation");
4911           }
4912       else
4913           warn_misplaced_attr_for_class_type (loc, declared_type);
4914     }
4915 
4916   return declared_type;
4917 }
4918 
4919 /* Called when a declaration is seen that contains no names to declare.
4920    If its type is a reference to a structure, union or enum inherited
4921    from a containing scope, shadow that tag name for the current scope
4922    with a forward reference.
4923    If its type defines a new named structure or union
4924    or defines an enum, it is valid but we need not do anything here.
4925    Otherwise, it is an error.
4926 
4927    C++: may have to grok the declspecs to learn about static,
4928    complain for anonymous unions.
4929 
4930    Returns the TYPE declared -- or NULL_TREE if none.  */
4931 
4932 tree
shadow_tag(cp_decl_specifier_seq * declspecs)4933 shadow_tag (cp_decl_specifier_seq *declspecs)
4934 {
4935   tree t = check_tag_decl (declspecs,
4936                                  /*explicit_type_instantiation_p=*/false);
4937 
4938   if (!t)
4939     return NULL_TREE;
4940 
4941   if (maybe_process_partial_specialization (t) == error_mark_node)
4942     return NULL_TREE;
4943 
4944   /* This is where the variables in an anonymous union are
4945      declared.  An anonymous union declaration looks like:
4946      union { ... } ;
4947      because there is no declarator after the union, the parser
4948      sends that declaration here.  */
4949   if (ANON_AGGR_TYPE_P (t))
4950     {
4951       fixup_anonymous_aggr (t);
4952 
4953       if (TYPE_FIELDS (t))
4954           {
4955             tree decl = grokdeclarator (/*declarator=*/NULL,
4956                                               declspecs, NORMAL, 0, NULL);
4957             finish_anon_union (decl);
4958           }
4959     }
4960 
4961   return t;
4962 }
4963 
4964 /* Decode a "typename", such as "int **", returning a ..._TYPE node.  */
4965 
4966 tree
groktypename(cp_decl_specifier_seq * type_specifiers,const cp_declarator * declarator,bool is_template_arg)4967 groktypename (cp_decl_specifier_seq *type_specifiers,
4968                 const cp_declarator *declarator,
4969                 bool is_template_arg)
4970 {
4971   tree attrs;
4972   tree type;
4973   enum decl_context context
4974     = is_template_arg ? TEMPLATE_TYPE_ARG : TYPENAME;
4975   attrs = type_specifiers->attributes;
4976   type_specifiers->attributes = NULL_TREE;
4977   type = grokdeclarator (declarator, type_specifiers, context, 0, &attrs);
4978   if (attrs && type != error_mark_node)
4979     {
4980       if (CLASS_TYPE_P (type))
4981           warning (OPT_Wattributes, "ignoring attributes applied to class type %qT "
4982                      "outside of definition", type);
4983       else if (MAYBE_CLASS_TYPE_P (type))
4984           /* A template type parameter or other dependent type.  */
4985           warning (OPT_Wattributes, "ignoring attributes applied to dependent "
4986                      "type %qT without an associated declaration", type);
4987       else
4988           cplus_decl_attributes (&type, attrs, 0);
4989     }
4990   return type;
4991 }
4992 
4993 /* Process a DECLARATOR for a function-scope variable declaration,
4994    namespace-scope variable declaration, or function declaration.
4995    (Function definitions go through start_function; class member
4996    declarations appearing in the body of the class go through
4997    grokfield.)  The DECL corresponding to the DECLARATOR is returned.
4998    If an error occurs, the error_mark_node is returned instead.
4999 
5000    DECLSPECS are the decl-specifiers for the declaration.  INITIALIZED is
5001    SD_INITIALIZED if an explicit initializer is present, or SD_DEFAULTED
5002    for an explicitly defaulted function, or SD_DELETED for an explicitly
5003    deleted function, but 0 (SD_UNINITIALIZED) if this is a variable
5004    implicitly initialized via a default constructor.  ATTRIBUTES and
5005    PREFIX_ATTRIBUTES are GNU attributes associated with this declaration.
5006 
5007    The scope represented by the context of the returned DECL is pushed
5008    (if it is not the global namespace) and is assigned to
5009    *PUSHED_SCOPE_P.  The caller is then responsible for calling
5010    pop_scope on *PUSHED_SCOPE_P if it is set.  */
5011 
5012 tree
start_decl(const cp_declarator * declarator,cp_decl_specifier_seq * declspecs,int initialized,tree attributes,tree prefix_attributes,tree * pushed_scope_p)5013 start_decl (const cp_declarator *declarator,
5014               cp_decl_specifier_seq *declspecs,
5015               int initialized,
5016               tree attributes,
5017               tree prefix_attributes,
5018               tree *pushed_scope_p)
5019 {
5020   tree decl;
5021   tree context;
5022   bool was_public;
5023   int flags;
5024   bool alias;
5025 
5026   *pushed_scope_p = NULL_TREE;
5027 
5028   /* An object declared as __attribute__((deprecated)) suppresses
5029      warnings of uses of other deprecated items.  */
5030   if (lookup_attribute ("deprecated", attributes))
5031     deprecated_state = DEPRECATED_SUPPRESS;
5032 
5033   attributes = chainon (attributes, prefix_attributes);
5034 
5035   decl = grokdeclarator (declarator, declspecs, NORMAL, initialized,
5036                                &attributes);
5037 
5038   deprecated_state = DEPRECATED_NORMAL;
5039 
5040   if (decl == NULL_TREE || VOID_TYPE_P (decl)
5041       || decl == error_mark_node)
5042     return error_mark_node;
5043 
5044   context = CP_DECL_CONTEXT (decl);
5045   if (context != global_namespace)
5046     *pushed_scope_p = push_scope (context);
5047 
5048   /* Is it valid for this decl to have an initializer at all?
5049      If not, set INITIALIZED to zero, which will indirectly
5050      tell `cp_finish_decl' to ignore the initializer once it is parsed.  */
5051   if (initialized
5052       && TREE_CODE (decl) == TYPE_DECL)
5053     {
5054       error ("typedef %qD is initialized (use decltype instead)", decl);
5055       return error_mark_node;
5056     }
5057 
5058   if (initialized)
5059     {
5060       if (! toplevel_bindings_p ()
5061             && DECL_EXTERNAL (decl))
5062           warning (0, "declaration of %q#D has %<extern%> and is initialized",
5063                      decl);
5064       DECL_EXTERNAL (decl) = 0;
5065       if (toplevel_bindings_p ())
5066           TREE_STATIC (decl) = 1;
5067     }
5068   alias = lookup_attribute ("alias", DECL_ATTRIBUTES (decl)) != 0;
5069 
5070   if (alias && TREE_CODE (decl) == FUNCTION_DECL)
5071     record_key_method_defined (decl);
5072 
5073   /* If this is a typedef that names the class for linkage purposes
5074      (7.1.3p8), apply any attributes directly to the type.  */
5075   if (TREE_CODE (decl) == TYPE_DECL
5076       && OVERLOAD_TYPE_P (TREE_TYPE (decl))
5077       && decl == TYPE_NAME (TYPE_MAIN_VARIANT (TREE_TYPE (decl))))
5078     flags = ATTR_FLAG_TYPE_IN_PLACE;
5079   else
5080     flags = 0;
5081 
5082   /* Set attributes here so if duplicate decl, will have proper attributes.  */
5083   cplus_decl_attributes (&decl, attributes, flags);
5084 
5085   /* Dllimported symbols cannot be defined.  Static data members (which
5086      can be initialized in-class and dllimported) go through grokfield,
5087      not here, so we don't need to exclude those decls when checking for
5088      a definition.  */
5089   if (initialized && DECL_DLLIMPORT_P (decl))
5090     {
5091       error ("definition of %q#D is marked %<dllimport%>", decl);
5092       DECL_DLLIMPORT_P (decl) = 0;
5093     }
5094 
5095   /* If #pragma weak was used, mark the decl weak now.  */
5096   if (!processing_template_decl && !DECL_DECOMPOSITION_P (decl))
5097     maybe_apply_pragma_weak (decl);
5098 
5099   if (TREE_CODE (decl) == FUNCTION_DECL
5100       && DECL_DECLARED_INLINE_P (decl)
5101       && DECL_UNINLINABLE (decl)
5102       && lookup_attribute ("noinline", DECL_ATTRIBUTES (decl)))
5103     warning_at (DECL_SOURCE_LOCATION (decl), 0,
5104                     "inline function %qD given attribute noinline", decl);
5105 
5106   if (TYPE_P (context) && COMPLETE_TYPE_P (complete_type (context)))
5107     {
5108       bool this_tmpl = (processing_template_decl
5109                               > template_class_depth (context));
5110       if (VAR_P (decl))
5111           {
5112             tree field = lookup_field (context, DECL_NAME (decl), 0, false);
5113             if (field == NULL_TREE
5114                 || !(VAR_P (field) || variable_template_p (field)))
5115               error ("%q+#D is not a static data member of %q#T", decl, context);
5116             else if (variable_template_p (field)
5117                        && (DECL_LANG_SPECIFIC (decl)
5118                            && DECL_TEMPLATE_SPECIALIZATION (decl)))
5119               /* OK, specialization was already checked.  */;
5120             else if (variable_template_p (field) && !this_tmpl)
5121               {
5122                 error_at (DECL_SOURCE_LOCATION (decl),
5123                               "non-member-template declaration of %qD", decl);
5124                 inform (DECL_SOURCE_LOCATION (field), "does not match "
5125                           "member template declaration here");
5126                 return error_mark_node;
5127               }
5128             else
5129               {
5130                 if (variable_template_p (field))
5131                     field = DECL_TEMPLATE_RESULT (field);
5132 
5133                 if (DECL_CONTEXT (field) != context)
5134                     {
5135                       if (!same_type_p (DECL_CONTEXT (field), context))
5136                         permerror (input_location, "ISO C++ does not permit %<%T::%D%> "
5137                                      "to be defined as %<%T::%D%>",
5138                                      DECL_CONTEXT (field), DECL_NAME (decl),
5139                                      context, DECL_NAME (decl));
5140                       DECL_CONTEXT (decl) = DECL_CONTEXT (field);
5141                     }
5142                 /* Static data member are tricky; an in-class initialization
5143                      still doesn't provide a definition, so the in-class
5144                      declaration will have DECL_EXTERNAL set, but will have an
5145                      initialization.  Thus, duplicate_decls won't warn
5146                      about this situation, and so we check here.  */
5147                 if (initialized && DECL_INITIALIZED_IN_CLASS_P (field))
5148                     error ("duplicate initialization of %qD", decl);
5149                 field = duplicate_decls (decl, field,
5150                                                /*newdecl_is_friend=*/false);
5151                 if (field == error_mark_node)
5152                     return error_mark_node;
5153                 else if (field)
5154                     decl = field;
5155               }
5156           }
5157       else
5158           {
5159             tree field = check_classfn (context, decl,
5160                                               this_tmpl
5161                                               ? current_template_parms
5162                                               : NULL_TREE);
5163             if (field && field != error_mark_node
5164                 && duplicate_decls (decl, field,
5165                                          /*newdecl_is_friend=*/false))
5166               decl = field;
5167           }
5168 
5169       /* cp_finish_decl sets DECL_EXTERNAL if DECL_IN_AGGR_P is set.  */
5170       DECL_IN_AGGR_P (decl) = 0;
5171       /* Do not mark DECL as an explicit specialization if it was not
5172            already marked as an instantiation; a declaration should
5173            never be marked as a specialization unless we know what
5174            template is being specialized.  */
5175       if (DECL_LANG_SPECIFIC (decl) && DECL_USE_TEMPLATE (decl))
5176           {
5177             SET_DECL_TEMPLATE_SPECIALIZATION (decl);
5178             if (TREE_CODE (decl) == FUNCTION_DECL)
5179               DECL_COMDAT (decl) = (TREE_PUBLIC (decl)
5180                                           && DECL_DECLARED_INLINE_P (decl));
5181             else
5182               DECL_COMDAT (decl) = false;
5183 
5184             /* [temp.expl.spec] An explicit specialization of a static data
5185                member of a template is a definition if the declaration
5186                includes an initializer; otherwise, it is a declaration.
5187 
5188                We check for processing_specialization so this only applies
5189                to the new specialization syntax.  */
5190             if (!initialized && processing_specialization)
5191               DECL_EXTERNAL (decl) = 1;
5192           }
5193 
5194       if (DECL_EXTERNAL (decl) && ! DECL_TEMPLATE_SPECIALIZATION (decl)
5195             /* Aliases are definitions. */
5196             && !alias)
5197           permerror (input_location, "declaration of %q#D outside of class is not definition",
5198                        decl);
5199     }
5200 
5201   was_public = TREE_PUBLIC (decl);
5202 
5203   /* Enter this declaration into the symbol table.  Don't push the plain
5204      VAR_DECL for a variable template.  */
5205   if (!template_parm_scope_p ()
5206       || !VAR_P (decl))
5207     decl = maybe_push_decl (decl);
5208 
5209   if (processing_template_decl)
5210     decl = push_template_decl (decl);
5211   if (decl == error_mark_node)
5212     return error_mark_node;
5213 
5214   if (VAR_P (decl)
5215       && DECL_NAMESPACE_SCOPE_P (decl) && !TREE_PUBLIC (decl) && !was_public
5216       && !DECL_THIS_STATIC (decl) && !DECL_ARTIFICIAL (decl))
5217     {
5218       /* This is a const variable with implicit 'static'.  Set
5219            DECL_THIS_STATIC so we can tell it from variables that are
5220            !TREE_PUBLIC because of the anonymous namespace.  */
5221       gcc_assert (CP_TYPE_CONST_P (TREE_TYPE (decl)) || errorcount);
5222       DECL_THIS_STATIC (decl) = 1;
5223     }
5224 
5225   if (current_function_decl && VAR_P (decl)
5226       && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
5227     {
5228       bool ok = false;
5229       if (CP_DECL_THREAD_LOCAL_P (decl))
5230           error ("%qD declared %<thread_local%> in %<constexpr%> function",
5231                  decl);
5232       else if (TREE_STATIC (decl))
5233           error ("%qD declared %<static%> in %<constexpr%> function", decl);
5234       else
5235           ok = true;
5236       if (!ok)
5237           cp_function_chain->invalid_constexpr = true;
5238     }
5239 
5240   if (!processing_template_decl && VAR_P (decl))
5241     start_decl_1 (decl, initialized);
5242 
5243   return decl;
5244 }
5245 
5246 /* Process the declaration of a variable DECL.  INITIALIZED is true
5247    iff DECL is explicitly initialized.  (INITIALIZED is false if the
5248    variable is initialized via an implicitly-called constructor.)
5249    This function must be called for ordinary variables (including, for
5250    example, implicit instantiations of templates), but must not be
5251    called for template declarations.  */
5252 
5253 void
start_decl_1(tree decl,bool initialized)5254 start_decl_1 (tree decl, bool initialized)
5255 {
5256   tree type;
5257   bool complete_p;
5258   bool aggregate_definition_p;
5259 
5260   gcc_assert (!processing_template_decl);
5261 
5262   if (error_operand_p (decl))
5263     return;
5264 
5265   gcc_assert (VAR_P (decl));
5266 
5267   type = TREE_TYPE (decl);
5268   complete_p = COMPLETE_TYPE_P (type);
5269   aggregate_definition_p = MAYBE_CLASS_TYPE_P (type) && !DECL_EXTERNAL (decl);
5270 
5271   /* If an explicit initializer is present, or if this is a definition
5272      of an aggregate, then we need a complete type at this point.
5273      (Scalars are always complete types, so there is nothing to
5274      check.)  This code just sets COMPLETE_P; errors (if necessary)
5275      are issued below.  */
5276   if ((initialized || aggregate_definition_p)
5277       && !complete_p
5278       && COMPLETE_TYPE_P (complete_type (type)))
5279     {
5280       complete_p = true;
5281       /* We will not yet have set TREE_READONLY on DECL if the type
5282            was "const", but incomplete, before this point.  But, now, we
5283            have a complete type, so we can try again.  */
5284       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
5285     }
5286 
5287   if (initialized)
5288     /* Is it valid for this decl to have an initializer at all?  */
5289     {
5290       /* Don't allow initializations for incomplete types except for
5291            arrays which might be completed by the initialization.  */
5292       if (complete_p)
5293           ;                             /* A complete type is ok.  */
5294       else if (type_uses_auto (type))
5295           ;                             /* An auto type is ok.  */
5296       else if (TREE_CODE (type) != ARRAY_TYPE)
5297           {
5298             error ("variable %q#D has initializer but incomplete type", decl);
5299             type = TREE_TYPE (decl) = error_mark_node;
5300           }
5301       else if (!COMPLETE_TYPE_P (complete_type (TREE_TYPE (type))))
5302           {
5303             if (DECL_LANG_SPECIFIC (decl) && DECL_TEMPLATE_INFO (decl))
5304               error ("elements of array %q#D have incomplete type", decl);
5305             /* else we already gave an error in start_decl.  */
5306           }
5307     }
5308   else if (aggregate_definition_p && !complete_p)
5309     {
5310       if (type_uses_auto (type))
5311           gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (type));
5312       else
5313           {
5314             error ("aggregate %q#D has incomplete type and cannot be defined",
5315                      decl);
5316             /* Change the type so that assemble_variable will give
5317                DECL an rtl we can live with: (mem (const_int 0)).  */
5318             type = TREE_TYPE (decl) = error_mark_node;
5319           }
5320     }
5321 
5322   /* Create a new scope to hold this declaration if necessary.
5323      Whether or not a new scope is necessary cannot be determined
5324      until after the type has been completed; if the type is a
5325      specialization of a class template it is not until after
5326      instantiation has occurred that TYPE_HAS_NONTRIVIAL_DESTRUCTOR
5327      will be set correctly.  */
5328   maybe_push_cleanup_level (type);
5329 }
5330 
5331 /* Handle initialization of references.  DECL, TYPE, and INIT have the
5332    same meaning as in cp_finish_decl.  *CLEANUP must be NULL on entry,
5333    but will be set to a new CLEANUP_STMT if a temporary is created
5334    that must be destroyed subsequently.
5335 
5336    Returns an initializer expression to use to initialize DECL, or
5337    NULL if the initialization can be performed statically.
5338 
5339    Quotes on semantics can be found in ARM 8.4.3.  */
5340 
5341 static tree
grok_reference_init(tree decl,tree type,tree init,int flags)5342 grok_reference_init (tree decl, tree type, tree init, int flags)
5343 {
5344   if (init == NULL_TREE)
5345     {
5346       if ((DECL_LANG_SPECIFIC (decl) == 0
5347              || DECL_IN_AGGR_P (decl) == 0)
5348             && ! DECL_THIS_EXTERN (decl))
5349           error ("%qD declared as reference but not initialized", decl);
5350       return NULL_TREE;
5351     }
5352 
5353   if (TREE_CODE (init) == TREE_LIST)
5354     init = build_x_compound_expr_from_list (init, ELK_INIT,
5355                                                       tf_warning_or_error);
5356 
5357   tree ttype = TREE_TYPE (type);
5358   if (TREE_CODE (ttype) != ARRAY_TYPE
5359       && TREE_CODE (TREE_TYPE (init)) == ARRAY_TYPE)
5360     /* Note: default conversion is only called in very special cases.  */
5361     init = decay_conversion (init, tf_warning_or_error);
5362 
5363   /* check_initializer handles this for non-reference variables, but for
5364      references we need to do it here or the initializer will get the
5365      incomplete array type and confuse later calls to
5366      cp_complete_array_type.  */
5367   if (TREE_CODE (ttype) == ARRAY_TYPE
5368       && TYPE_DOMAIN (ttype) == NULL_TREE
5369       && (BRACE_ENCLOSED_INITIALIZER_P (init)
5370             || TREE_CODE (init) == STRING_CST))
5371     {
5372       cp_complete_array_type (&ttype, init, false);
5373       if (ttype != TREE_TYPE (type))
5374           type = cp_build_reference_type (ttype, TYPE_REF_IS_RVALUE (type));
5375     }
5376 
5377   /* Convert INIT to the reference type TYPE.  This may involve the
5378      creation of a temporary, whose lifetime must be the same as that
5379      of the reference.  If so, a DECL_EXPR for the temporary will be
5380      added just after the DECL_EXPR for DECL.  That's why we don't set
5381      DECL_INITIAL for local references (instead assigning to them
5382      explicitly); we need to allow the temporary to be initialized
5383      first.  */
5384   return initialize_reference (type, init, flags,
5385                                      tf_warning_or_error);
5386 }
5387 
5388 /* Designated initializers in arrays are not supported in GNU C++.
5389    The parser cannot detect this error since it does not know whether
5390    a given brace-enclosed initializer is for a class type or for an
5391    array.  This function checks that CE does not use a designated
5392    initializer.  If it does, an error is issued.  Returns true if CE
5393    is valid, i.e., does not have a designated initializer.  */
5394 
5395 bool
check_array_designated_initializer(constructor_elt * ce,unsigned HOST_WIDE_INT index)5396 check_array_designated_initializer (constructor_elt *ce,
5397                                             unsigned HOST_WIDE_INT index)
5398 {
5399   /* Designated initializers for array elements are not supported.  */
5400   if (ce->index)
5401     {
5402       /* The parser only allows identifiers as designated
5403            initializers.  */
5404       if (ce->index == error_mark_node)
5405           {
5406             error ("name used in a GNU-style designated "
5407                      "initializer for an array");
5408             return false;
5409           }
5410       else if (identifier_p (ce->index))
5411           {
5412             error ("name %qD used in a GNU-style designated "
5413                      "initializer for an array", ce->index);
5414             return false;
5415           }
5416 
5417       tree ce_index = build_expr_type_conversion (WANT_INT | WANT_ENUM,
5418                                                               ce->index, true);
5419       if (ce_index
5420             && INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (TREE_TYPE (ce_index))
5421             && (TREE_CODE (ce_index = fold_non_dependent_expr (ce_index))
5422                 == INTEGER_CST))
5423           {
5424             /* A C99 designator is OK if it matches the current index.  */
5425             if (wi::to_wide (ce_index) == index)
5426               {
5427                 ce->index = ce_index;
5428                 return true;
5429               }
5430             else
5431               sorry ("non-trivial designated initializers not supported");
5432           }
5433       else
5434           error ("C99 designator %qE is not an integral constant-expression",
5435                  ce->index);
5436 
5437       return false;
5438     }
5439 
5440   return true;
5441 }
5442 
5443 /* When parsing `int a[] = {1, 2};' we don't know the size of the
5444    array until we finish parsing the initializer.  If that's the
5445    situation we're in, update DECL accordingly.  */
5446 
5447 static void
maybe_deduce_size_from_array_init(tree decl,tree init)5448 maybe_deduce_size_from_array_init (tree decl, tree init)
5449 {
5450   tree type = TREE_TYPE (decl);
5451 
5452   if (TREE_CODE (type) == ARRAY_TYPE
5453       && TYPE_DOMAIN (type) == NULL_TREE
5454       && TREE_CODE (decl) != TYPE_DECL)
5455     {
5456       /* do_default is really a C-ism to deal with tentative definitions.
5457            But let's leave it here to ease the eventual merge.  */
5458       int do_default = !DECL_EXTERNAL (decl);
5459       tree initializer = init ? init : DECL_INITIAL (decl);
5460       int failure = 0;
5461 
5462       /* Check that there are no designated initializers in INIT, as
5463            those are not supported in GNU C++, and as the middle-end
5464            will crash if presented with a non-numeric designated
5465            initializer.  */
5466       if (initializer && BRACE_ENCLOSED_INITIALIZER_P (initializer))
5467           {
5468             vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initializer);
5469             constructor_elt *ce;
5470             HOST_WIDE_INT i;
5471             FOR_EACH_VEC_SAFE_ELT (v, i, ce)
5472               {
5473                 if (instantiation_dependent_expression_p (ce->index))
5474                     return;
5475                 if (!check_array_designated_initializer (ce, i))
5476                     failure = 1;
5477               }
5478           }
5479 
5480       if (failure)
5481           TREE_TYPE (decl) = error_mark_node;
5482       else
5483           {
5484             failure = cp_complete_array_type (&TREE_TYPE (decl), initializer,
5485                                                       do_default);
5486             if (failure == 1)
5487               {
5488                 error_at (EXPR_LOC_OR_LOC (initializer,
5489                                                    DECL_SOURCE_LOCATION (decl)),
5490                               "initializer fails to determine size of %qD", decl);
5491               }
5492             else if (failure == 2)
5493               {
5494                 if (do_default)
5495                     {
5496                       error_at (DECL_SOURCE_LOCATION (decl),
5497                                   "array size missing in %qD", decl);
5498                     }
5499                 /* If a `static' var's size isn't known, make it extern as
5500                      well as static, so it does not get allocated.  If it's not
5501                      `static', then don't mark it extern; finish_incomplete_decl
5502                      will give it a default size and it will get allocated.  */
5503                 else if (!pedantic && TREE_STATIC (decl) && !TREE_PUBLIC (decl))
5504                     DECL_EXTERNAL (decl) = 1;
5505               }
5506             else if (failure == 3)
5507               {
5508                 error_at (DECL_SOURCE_LOCATION (decl),
5509                               "zero-size array %qD", decl);
5510               }
5511           }
5512 
5513       cp_apply_type_quals_to_decl (cp_type_quals (TREE_TYPE (decl)), decl);
5514 
5515       relayout_decl (decl);
5516     }
5517 }
5518 
5519 /* Set DECL_SIZE, DECL_ALIGN, etc. for DECL (a VAR_DECL), and issue
5520    any appropriate error messages regarding the layout.  */
5521 
5522 static void
layout_var_decl(tree decl)5523 layout_var_decl (tree decl)
5524 {
5525   tree type;
5526 
5527   type = TREE_TYPE (decl);
5528   if (type == error_mark_node)
5529     return;
5530 
5531   /* If we haven't already laid out this declaration, do so now.
5532      Note that we must not call complete type for an external object
5533      because it's type might involve templates that we are not
5534      supposed to instantiate yet.  (And it's perfectly valid to say
5535      `extern X x' for some incomplete type `X'.)  */
5536   if (!DECL_EXTERNAL (decl))
5537     complete_type (type);
5538   if (!DECL_SIZE (decl)
5539       && TREE_TYPE (decl) != error_mark_node
5540       && complete_or_array_type_p (type))
5541     layout_decl (decl, 0);
5542 
5543   if (!DECL_EXTERNAL (decl) && DECL_SIZE (decl) == NULL_TREE)
5544     {
5545       /* An automatic variable with an incomplete type: that is an error.
5546            Don't talk about array types here, since we took care of that
5547            message in grokdeclarator.  */
5548       error_at (DECL_SOURCE_LOCATION (decl),
5549                     "storage size of %qD isn%'t known", decl);
5550       TREE_TYPE (decl) = error_mark_node;
5551     }
5552 #if 0
5553   /* Keep this code around in case we later want to control debug info
5554      based on whether a type is "used".  (jason 1999-11-11) */
5555 
5556   else if (!DECL_EXTERNAL (decl) && MAYBE_CLASS_TYPE_P (ttype))
5557     /* Let debugger know it should output info for this type.  */
5558     note_debug_info_needed (ttype);
5559 
5560   if (TREE_STATIC (decl) && DECL_CLASS_SCOPE_P (decl))
5561     note_debug_info_needed (DECL_CONTEXT (decl));
5562 #endif
5563 
5564   if ((DECL_EXTERNAL (decl) || TREE_STATIC (decl))
5565       && DECL_SIZE (decl) != NULL_TREE
5566       && ! TREE_CONSTANT (DECL_SIZE (decl)))
5567     {
5568       if (TREE_CODE (DECL_SIZE (decl)) == INTEGER_CST)
5569           constant_expression_warning (DECL_SIZE (decl));
5570       else
5571           {
5572             error_at (DECL_SOURCE_LOCATION (decl),
5573                         "storage size of %qD isn%'t constant", decl);
5574             TREE_TYPE (decl) = error_mark_node;
5575           }
5576     }
5577 }
5578 
5579 /* If a local static variable is declared in an inline function, or if
5580    we have a weak definition, we must endeavor to create only one
5581    instance of the variable at link-time.  */
5582 
5583 void
maybe_commonize_var(tree decl)5584 maybe_commonize_var (tree decl)
5585 {
5586   /* Static data in a function with comdat linkage also has comdat
5587      linkage.  */
5588   if ((TREE_STATIC (decl)
5589        /* Don't mess with __FUNCTION__.  */
5590        && ! DECL_ARTIFICIAL (decl)
5591        && DECL_FUNCTION_SCOPE_P (decl)
5592        && vague_linkage_p (DECL_CONTEXT (decl)))
5593       || (TREE_PUBLIC (decl) && DECL_INLINE_VAR_P (decl)))
5594     {
5595       if (flag_weak)
5596           {
5597             /* With weak symbols, we simply make the variable COMDAT;
5598                that will cause copies in multiple translations units to
5599                be merged.  */
5600             comdat_linkage (decl);
5601           }
5602       else
5603           {
5604             if (DECL_INITIAL (decl) == NULL_TREE
5605                 || DECL_INITIAL (decl) == error_mark_node)
5606               {
5607                 /* Without weak symbols, we can use COMMON to merge
5608                      uninitialized variables.  */
5609                 TREE_PUBLIC (decl) = 1;
5610                 DECL_COMMON (decl) = 1;
5611               }
5612             else
5613               {
5614                 /* While for initialized variables, we must use internal
5615                      linkage -- which means that multiple copies will not
5616                      be merged.  */
5617                 TREE_PUBLIC (decl) = 0;
5618                 DECL_COMMON (decl) = 0;
5619                 const char *msg;
5620                 if (DECL_INLINE_VAR_P (decl))
5621                     msg = G_("sorry: semantics of inline variable "
5622                                "%q#D are wrong (you%'ll wind up with "
5623                                "multiple copies)");
5624                 else
5625                     msg = G_("sorry: semantics of inline function "
5626                                "static data %q#D are wrong (you%'ll wind "
5627                                "up with multiple copies)");
5628                 if (warning_at (DECL_SOURCE_LOCATION (decl), 0,
5629                                     msg, decl))
5630                     inform (DECL_SOURCE_LOCATION (decl),
5631                               "you can work around this by removing the initializer");
5632               }
5633           }
5634     }
5635 }
5636 
5637 /* Issue an error message if DECL is an uninitialized const variable.
5638    CONSTEXPR_CONTEXT_P is true when the function is called in a constexpr
5639    context from potential_constant_expression.  Returns true if all is well,
5640    false otherwise.  */
5641 
5642 bool
check_for_uninitialized_const_var(tree decl,bool constexpr_context_p,tsubst_flags_t complain)5643 check_for_uninitialized_const_var (tree decl, bool constexpr_context_p,
5644                                            tsubst_flags_t complain)
5645 {
5646   tree type = strip_array_types (TREE_TYPE (decl));
5647 
5648   /* ``Unless explicitly declared extern, a const object does not have
5649      external linkage and must be initialized. ($8.4; $12.1)'' ARM
5650      7.1.6 */
5651   if (VAR_P (decl)
5652       && TREE_CODE (type) != REFERENCE_TYPE
5653       && (constexpr_context_p
5654             || CP_TYPE_CONST_P (type) || var_in_constexpr_fn (decl))
5655       && !DECL_NONTRIVIALLY_INITIALIZED_P (decl))
5656     {
5657       tree field = default_init_uninitialized_part (type);
5658       if (!field)
5659           return true;
5660 
5661       if (!constexpr_context_p)
5662           {
5663             if (CP_TYPE_CONST_P (type))
5664               {
5665                 if (complain & tf_error)
5666                     permerror (DECL_SOURCE_LOCATION (decl),
5667                                  "uninitialized const %qD", decl);
5668               }
5669             else
5670               {
5671                 if (!is_instantiation_of_constexpr (current_function_decl)
5672                       && (complain & tf_error))
5673                     error_at (DECL_SOURCE_LOCATION (decl),
5674                                 "uninitialized variable %qD in %<constexpr%> "
5675                                 "function", decl);
5676                 cp_function_chain->invalid_constexpr = true;
5677               }
5678           }
5679       else if (complain & tf_error)
5680           error_at (DECL_SOURCE_LOCATION (decl),
5681                       "uninitialized variable %qD in %<constexpr%> context",
5682                       decl);
5683 
5684       if (CLASS_TYPE_P (type) && (complain & tf_error))
5685           {
5686             tree defaulted_ctor;
5687 
5688             inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
5689                       "%q#T has no user-provided default constructor", type);
5690             defaulted_ctor = in_class_defaulted_default_constructor (type);
5691             if (defaulted_ctor)
5692               inform (DECL_SOURCE_LOCATION (defaulted_ctor),
5693                         "constructor is not user-provided because it is "
5694                         "explicitly defaulted in the class body");
5695             inform (DECL_SOURCE_LOCATION (field),
5696                       "and the implicitly-defined constructor does not "
5697                       "initialize %q#D", field);
5698           }
5699 
5700       return false;
5701     }
5702 
5703   return true;
5704 }
5705 
5706 /* Structure holding the current initializer being processed by reshape_init.
5707    CUR is a pointer to the current element being processed, END is a pointer
5708    after the last element present in the initializer.  */
5709 struct reshape_iter
5710 {
5711   constructor_elt *cur;
5712   constructor_elt *end;
5713 };
5714 
5715 static tree reshape_init_r (tree, reshape_iter *, bool, tsubst_flags_t);
5716 
5717 /* FIELD is a FIELD_DECL or NULL.  In the former case, the value
5718    returned is the next FIELD_DECL (possibly FIELD itself) that can be
5719    initialized.  If there are no more such fields, the return value
5720    will be NULL.  */
5721 
5722 tree
next_initializable_field(tree field)5723 next_initializable_field (tree field)
5724 {
5725   while (field
5726            && (TREE_CODE (field) != FIELD_DECL
5727                || DECL_UNNAMED_BIT_FIELD (field)
5728                || (DECL_ARTIFICIAL (field)
5729                      && !(cxx_dialect >= cxx17 && DECL_FIELD_IS_BASE (field)))))
5730     field = DECL_CHAIN (field);
5731 
5732   return field;
5733 }
5734 
5735 /* Return true for [dcl.init.list] direct-list-initialization from
5736    single element of enumeration with a fixed underlying type.  */
5737 
5738 bool
is_direct_enum_init(tree type,tree init)5739 is_direct_enum_init (tree type, tree init)
5740 {
5741   if (cxx_dialect >= cxx17
5742       && TREE_CODE (type) == ENUMERAL_TYPE
5743       && ENUM_FIXED_UNDERLYING_TYPE_P (type)
5744       && TREE_CODE (init) == CONSTRUCTOR
5745       && CONSTRUCTOR_IS_DIRECT_INIT (init)
5746       && CONSTRUCTOR_NELTS (init) == 1)
5747     return true;
5748   return false;
5749 }
5750 
5751 /* Subroutine of reshape_init_array and reshape_init_vector, which does
5752    the actual work. ELT_TYPE is the element type of the array. MAX_INDEX is an
5753    INTEGER_CST representing the size of the array minus one (the maximum index),
5754    or NULL_TREE if the array was declared without specifying the size. D is
5755    the iterator within the constructor.  */
5756 
5757 static tree
reshape_init_array_1(tree elt_type,tree max_index,reshape_iter * d,tsubst_flags_t complain)5758 reshape_init_array_1 (tree elt_type, tree max_index, reshape_iter *d,
5759                           tsubst_flags_t complain)
5760 {
5761   tree new_init;
5762   bool sized_array_p = (max_index && TREE_CONSTANT (max_index));
5763   unsigned HOST_WIDE_INT max_index_cst = 0;
5764   unsigned HOST_WIDE_INT index;
5765 
5766   /* The initializer for an array is always a CONSTRUCTOR.  */
5767   new_init = build_constructor (init_list_type_node, NULL);
5768 
5769   if (sized_array_p)
5770     {
5771       /* Minus 1 is used for zero sized arrays.  */
5772       if (integer_all_onesp (max_index))
5773           return new_init;
5774 
5775       if (tree_fits_uhwi_p (max_index))
5776           max_index_cst = tree_to_uhwi (max_index);
5777       /* sizetype is sign extended, not zero extended.  */
5778       else
5779           max_index_cst = tree_to_uhwi (fold_convert (size_type_node, max_index));
5780     }
5781 
5782   /* Loop until there are no more initializers.  */
5783   for (index = 0;
5784        d->cur != d->end && (!sized_array_p || index <= max_index_cst);
5785        ++index)
5786     {
5787       tree elt_init;
5788       constructor_elt *old_cur = d->cur;
5789 
5790       check_array_designated_initializer (d->cur, index);
5791       elt_init = reshape_init_r (elt_type, d, /*first_initializer_p=*/false,
5792                                          complain);
5793       if (elt_init == error_mark_node)
5794           return error_mark_node;
5795       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init),
5796                                     size_int (index), elt_init);
5797       if (!TREE_CONSTANT (elt_init))
5798           TREE_CONSTANT (new_init) = false;
5799 
5800       /* This can happen with an invalid initializer (c++/54501).  */
5801       if (d->cur == old_cur && !sized_array_p)
5802           break;
5803     }
5804 
5805   return new_init;
5806 }
5807 
5808 /* Subroutine of reshape_init_r, processes the initializers for arrays.
5809    Parameters are the same of reshape_init_r.  */
5810 
5811 static tree
reshape_init_array(tree type,reshape_iter * d,tsubst_flags_t complain)5812 reshape_init_array (tree type, reshape_iter *d, tsubst_flags_t complain)
5813 {
5814   tree max_index = NULL_TREE;
5815 
5816   gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
5817 
5818   if (TYPE_DOMAIN (type))
5819     max_index = array_type_nelts (type);
5820 
5821   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5822 }
5823 
5824 /* Subroutine of reshape_init_r, processes the initializers for vectors.
5825    Parameters are the same of reshape_init_r.  */
5826 
5827 static tree
reshape_init_vector(tree type,reshape_iter * d,tsubst_flags_t complain)5828 reshape_init_vector (tree type, reshape_iter *d, tsubst_flags_t complain)
5829 {
5830   tree max_index = NULL_TREE;
5831 
5832   gcc_assert (VECTOR_TYPE_P (type));
5833 
5834   if (COMPOUND_LITERAL_P (d->cur->value))
5835     {
5836       tree value = d->cur->value;
5837       if (!same_type_p (TREE_TYPE (value), type))
5838           {
5839             if (complain & tf_error)
5840               error ("invalid type %qT as initializer for a vector of type %qT",
5841                        TREE_TYPE (d->cur->value), type);
5842             value = error_mark_node;
5843           }
5844       ++d->cur;
5845       return value;
5846     }
5847 
5848   /* For a vector, we initialize it as an array of the appropriate size.  */
5849   if (VECTOR_TYPE_P (type))
5850     max_index = size_int (TYPE_VECTOR_SUBPARTS (type) - 1);
5851 
5852   return reshape_init_array_1 (TREE_TYPE (type), max_index, d, complain);
5853 }
5854 
5855 /* Subroutine of reshape_init_r, processes the initializers for classes
5856    or union. Parameters are the same of reshape_init_r.  */
5857 
5858 static tree
reshape_init_class(tree type,reshape_iter * d,bool first_initializer_p,tsubst_flags_t complain)5859 reshape_init_class (tree type, reshape_iter *d, bool first_initializer_p,
5860                         tsubst_flags_t complain)
5861 {
5862   tree field;
5863   tree new_init;
5864 
5865   gcc_assert (CLASS_TYPE_P (type));
5866 
5867   /* The initializer for a class is always a CONSTRUCTOR.  */
5868   new_init = build_constructor (init_list_type_node, NULL);
5869   field = next_initializable_field (TYPE_FIELDS (type));
5870 
5871   if (!field)
5872     {
5873       /* [dcl.init.aggr]
5874 
5875           An initializer for an aggregate member that is an
5876           empty class shall have the form of an empty
5877           initializer-list {}.  */
5878       if (!first_initializer_p)
5879           {
5880             if (complain & tf_error)
5881               error ("initializer for %qT must be brace-enclosed", type);
5882             return error_mark_node;
5883           }
5884       return new_init;
5885     }
5886 
5887   /* Loop through the initializable fields, gathering initializers.  */
5888   while (d->cur != d->end)
5889     {
5890       tree field_init;
5891       constructor_elt *old_cur = d->cur;
5892 
5893       /* Handle designated initializers, as an extension.  */
5894       if (d->cur->index)
5895           {
5896             if (d->cur->index == error_mark_node)
5897               return error_mark_node;
5898 
5899             if (TREE_CODE (d->cur->index) == FIELD_DECL)
5900               {
5901                 /* We already reshaped this.  */
5902                 if (field != d->cur->index)
5903                     {
5904                       tree id = DECL_NAME (d->cur->index);
5905                       gcc_assert (id);
5906                       gcc_checking_assert (d->cur->index
5907                                                == get_class_binding (type, id, false));
5908                       field = d->cur->index;
5909                     }
5910               }
5911             else if (TREE_CODE (d->cur->index) == IDENTIFIER_NODE)
5912               field = get_class_binding (type, d->cur->index, false);
5913             else
5914               {
5915                 if (complain & tf_error)
5916                     error ("%<[%E] =%> used in a GNU-style designated initializer"
5917                            " for class %qT", d->cur->index, type);
5918                 return error_mark_node;
5919               }
5920 
5921             if (!field || TREE_CODE (field) != FIELD_DECL)
5922               {
5923                 if (complain & tf_error)
5924                     error ("%qT has no non-static data member named %qD", type,
5925                            d->cur->index);
5926                 return error_mark_node;
5927               }
5928           }
5929 
5930       /* If we processed all the member of the class, we are done.  */
5931       if (!field)
5932           break;
5933 
5934       field_init = reshape_init_r (TREE_TYPE (field), d,
5935                                            /*first_initializer_p=*/false, complain);
5936       if (field_init == error_mark_node)
5937           return error_mark_node;
5938 
5939       if (d->cur == old_cur && d->cur->index)
5940           {
5941             /* This can happen with an invalid initializer for a flexible
5942                array member (c++/54441).  */
5943             if (complain & tf_error)
5944               error ("invalid initializer for %q#D", field);
5945             return error_mark_node;
5946           }
5947 
5948       CONSTRUCTOR_APPEND_ELT (CONSTRUCTOR_ELTS (new_init), field, field_init);
5949 
5950       /* [dcl.init.aggr]
5951 
5952           When a union  is  initialized with a brace-enclosed
5953           initializer, the braces shall only contain an
5954           initializer for the first member of the union.  */
5955       if (TREE_CODE (type) == UNION_TYPE)
5956           break;
5957 
5958       field = next_initializable_field (DECL_CHAIN (field));
5959     }
5960 
5961   return new_init;
5962 }
5963 
5964 /* Subroutine of reshape_init_r.  We're in a context where C99 initializer
5965    designators are not valid; either complain or return true to indicate
5966    that reshape_init_r should return error_mark_node.  */
5967 
5968 static bool
has_designator_problem(reshape_iter * d,tsubst_flags_t complain)5969 has_designator_problem (reshape_iter *d, tsubst_flags_t complain)
5970 {
5971   if (d->cur->index)
5972     {
5973       if (complain & tf_error)
5974           error ("C99 designator %qE outside aggregate initializer",
5975                  d->cur->index);
5976       else
5977           return true;
5978     }
5979   return false;
5980 }
5981 
5982 /* Subroutine of reshape_init, which processes a single initializer (part of
5983    a CONSTRUCTOR). TYPE is the type of the variable being initialized, D is the
5984    iterator within the CONSTRUCTOR which points to the initializer to process.
5985    FIRST_INITIALIZER_P is true if this is the first initializer of the
5986    outermost CONSTRUCTOR node.  */
5987 
5988 static tree
reshape_init_r(tree type,reshape_iter * d,bool first_initializer_p,tsubst_flags_t complain)5989 reshape_init_r (tree type, reshape_iter *d, bool first_initializer_p,
5990                     tsubst_flags_t complain)
5991 {
5992   tree init = d->cur->value;
5993 
5994   if (error_operand_p (init))
5995     return error_mark_node;
5996 
5997   if (first_initializer_p && !CP_AGGREGATE_TYPE_P (type)
5998       && has_designator_problem (d, complain))
5999     return error_mark_node;
6000 
6001   if (TREE_CODE (type) == COMPLEX_TYPE)
6002     {
6003       /* A complex type can be initialized from one or two initializers,
6004            but braces are not elided.  */
6005       d->cur++;
6006       if (BRACE_ENCLOSED_INITIALIZER_P (init))
6007           {
6008             if (CONSTRUCTOR_NELTS (init) > 2)
6009               {
6010                 if (complain & tf_error)
6011                     error ("too many initializers for %qT", type);
6012                 else
6013                     return error_mark_node;
6014               }
6015           }
6016       else if (first_initializer_p && d->cur != d->end)
6017           {
6018             vec<constructor_elt, va_gc> *v = 0;
6019             CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, init);
6020             CONSTRUCTOR_APPEND_ELT (v, NULL_TREE, d->cur->value);
6021             if (has_designator_problem (d, complain))
6022               return error_mark_node;
6023             d->cur++;
6024             init = build_constructor (init_list_type_node, v);
6025           }
6026       return init;
6027     }
6028 
6029   /* A non-aggregate type is always initialized with a single
6030      initializer.  */
6031   if (!CP_AGGREGATE_TYPE_P (type))
6032     {
6033       /* It is invalid to initialize a non-aggregate type with a
6034            brace-enclosed initializer before C++0x.
6035            We need to check for BRACE_ENCLOSED_INITIALIZER_P here because
6036            of g++.old-deja/g++.mike/p7626.C: a pointer-to-member constant is
6037            a CONSTRUCTOR (with a record type).  */
6038       if (TREE_CODE (init) == CONSTRUCTOR
6039             /* Don't complain about a capture-init.  */
6040             && !CONSTRUCTOR_IS_DIRECT_INIT (init)
6041             && BRACE_ENCLOSED_INITIALIZER_P (init))  /* p7626.C */
6042           {
6043             if (SCALAR_TYPE_P (type))
6044               {
6045                 if (cxx_dialect < cxx11
6046                       /* Isn't value-initialization.  */
6047                       || CONSTRUCTOR_NELTS (init) > 0)
6048                     {
6049                       if (complain & tf_error)
6050                         error ("braces around scalar initializer for type %qT",
6051                                  type);
6052                       init = error_mark_node;
6053                     }
6054               }
6055             else
6056               maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6057           }
6058 
6059       d->cur++;
6060       return init;
6061     }
6062 
6063   /* "If T is a class type and the initializer list has a single element of
6064      type cv U, where U is T or a class derived from T, the object is
6065      initialized from that element."  Even if T is an aggregate.  */
6066   if (cxx_dialect >= cxx11 && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type))
6067       && first_initializer_p
6068       && d->end - d->cur == 1
6069       && reference_related_p (type, TREE_TYPE (init)))
6070     {
6071       d->cur++;
6072       return init;
6073     }
6074 
6075   /* [dcl.init.aggr]
6076 
6077      All implicit type conversions (clause _conv_) are considered when
6078      initializing the aggregate member with an initializer from an
6079      initializer-list.  If the initializer can initialize a member,
6080      the member is initialized.  Otherwise, if the member is itself a
6081      non-empty subaggregate, brace elision is assumed and the
6082      initializer is considered for the initialization of the first
6083      member of the subaggregate.  */
6084   if (TREE_CODE (init) != CONSTRUCTOR
6085       /* But don't try this for the first initializer, since that would be
6086            looking through the outermost braces; A a2 = { a1 }; is not a
6087            valid aggregate initialization.  */
6088       && !first_initializer_p
6089       && (same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (init))
6090             || can_convert_arg (type, TREE_TYPE (init), init, LOOKUP_NORMAL,
6091                                     complain)))
6092     {
6093       d->cur++;
6094       return init;
6095     }
6096 
6097   /* [dcl.init.string]
6098 
6099       A char array (whether plain char, signed char, or unsigned char)
6100       can be initialized by a string-literal (optionally enclosed in
6101       braces); a wchar_t array can be initialized by a wide
6102       string-literal (optionally enclosed in braces).  */
6103   if (TREE_CODE (type) == ARRAY_TYPE
6104       && char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (type))))
6105     {
6106       tree str_init = init;
6107 
6108       /* Strip one level of braces if and only if they enclose a single
6109            element (as allowed by [dcl.init.string]).  */
6110       if (!first_initializer_p
6111             && TREE_CODE (str_init) == CONSTRUCTOR
6112             && CONSTRUCTOR_NELTS (str_init) == 1)
6113           {
6114             str_init = (*CONSTRUCTOR_ELTS (str_init))[0].value;
6115           }
6116 
6117       /* If it's a string literal, then it's the initializer for the array
6118            as a whole. Otherwise, continue with normal initialization for
6119            array types (one value per array element).  */
6120       if (TREE_CODE (str_init) == STRING_CST)
6121           {
6122             if (has_designator_problem (d, complain))
6123               return error_mark_node;
6124             d->cur++;
6125             return str_init;
6126           }
6127     }
6128 
6129   /* The following cases are about aggregates. If we are not within a full
6130      initializer already, and there is not a CONSTRUCTOR, it means that there
6131      is a missing set of braces (that is, we are processing the case for
6132      which reshape_init exists).  */
6133   if (!first_initializer_p)
6134     {
6135       if (TREE_CODE (init) == CONSTRUCTOR)
6136           {
6137             tree init_type = TREE_TYPE (init);
6138             if (init_type && TYPE_PTRMEMFUNC_P (init_type))
6139               /* There is no need to call reshape_init for pointer-to-member
6140                  function initializers, as they are always constructed correctly
6141                  by the front end.  Here we have e.g. {.__pfn=0B, .__delta=0},
6142                  which is missing outermost braces.  We should warn below, and
6143                  one of the routines below will wrap it in additional { }.  */;
6144             /* For a nested compound literal, there is no need to reshape since
6145                we called reshape_init in finish_compound_literal, before calling
6146                digest_init.  */
6147             else if (COMPOUND_LITERAL_P (init)
6148                        /* Similarly, a CONSTRUCTOR of the target's type is a
6149                           previously digested initializer.  */
6150                        || same_type_ignoring_top_level_qualifiers_p (type,
6151                                                                                  init_type))
6152               {
6153                 ++d->cur;
6154                 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (init));
6155                 return init;
6156               }
6157             else
6158               {
6159                 /* Something that hasn't been reshaped yet.  */
6160                 ++d->cur;
6161                 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6162                 return reshape_init (type, init, complain);
6163               }
6164           }
6165 
6166       if (complain & tf_warning)
6167           warning (OPT_Wmissing_braces,
6168                      "missing braces around initializer for %qT",
6169                      type);
6170     }
6171 
6172   /* Dispatch to specialized routines.  */
6173   if (CLASS_TYPE_P (type))
6174     return reshape_init_class (type, d, first_initializer_p, complain);
6175   else if (TREE_CODE (type) == ARRAY_TYPE)
6176     return reshape_init_array (type, d, complain);
6177   else if (VECTOR_TYPE_P (type))
6178     return reshape_init_vector (type, d, complain);
6179   else
6180     gcc_unreachable();
6181 }
6182 
6183 /* Undo the brace-elision allowed by [dcl.init.aggr] in a
6184    brace-enclosed aggregate initializer.
6185 
6186    INIT is the CONSTRUCTOR containing the list of initializers describing
6187    a brace-enclosed initializer for an entity of the indicated aggregate TYPE.
6188    It may not presently match the shape of the TYPE; for example:
6189 
6190      struct S { int a; int b; };
6191      struct S a[] = { 1, 2, 3, 4 };
6192 
6193    Here INIT will hold a vector of four elements, rather than a
6194    vector of two elements, each itself a vector of two elements.  This
6195    routine transforms INIT from the former form into the latter.  The
6196    revised CONSTRUCTOR node is returned.  */
6197 
6198 tree
reshape_init(tree type,tree init,tsubst_flags_t complain)6199 reshape_init (tree type, tree init, tsubst_flags_t complain)
6200 {
6201   vec<constructor_elt, va_gc> *v;
6202   reshape_iter d;
6203   tree new_init;
6204 
6205   gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
6206 
6207   v = CONSTRUCTOR_ELTS (init);
6208 
6209   /* An empty constructor does not need reshaping, and it is always a valid
6210      initializer.  */
6211   if (vec_safe_is_empty (v))
6212     return init;
6213 
6214   /* Handle [dcl.init.list] direct-list-initialization from
6215      single element of enumeration with a fixed underlying type.  */
6216   if (is_direct_enum_init (type, init))
6217     {
6218       tree elt = CONSTRUCTOR_ELT (init, 0)->value;
6219       type = cv_unqualified (type);
6220       if (check_narrowing (ENUM_UNDERLYING_TYPE (type), elt, complain))
6221           {
6222             warning_sentinel w (warn_useless_cast);
6223             warning_sentinel w2 (warn_ignored_qualifiers);
6224             return cp_build_c_cast (type, elt, tf_warning_or_error);
6225           }
6226       else
6227           return error_mark_node;
6228     }
6229 
6230   /* Recurse on this CONSTRUCTOR.  */
6231   d.cur = &(*v)[0];
6232   d.end = d.cur + v->length ();
6233 
6234   new_init = reshape_init_r (type, &d, true, complain);
6235   if (new_init == error_mark_node)
6236     return error_mark_node;
6237 
6238   /* Make sure all the element of the constructor were used. Otherwise,
6239      issue an error about exceeding initializers.  */
6240   if (d.cur != d.end)
6241     {
6242       if (complain & tf_error)
6243           error ("too many initializers for %qT", type);
6244       return error_mark_node;
6245     }
6246 
6247   if (CONSTRUCTOR_IS_DIRECT_INIT (init)
6248       && BRACE_ENCLOSED_INITIALIZER_P (new_init))
6249     CONSTRUCTOR_IS_DIRECT_INIT (new_init) = true;
6250 
6251   return new_init;
6252 }
6253 
6254 /* Verify array initializer.  Returns true if errors have been reported.  */
6255 
6256 bool
check_array_initializer(tree decl,tree type,tree init)6257 check_array_initializer (tree decl, tree type, tree init)
6258 {
6259   tree element_type = TREE_TYPE (type);
6260 
6261   /* The array type itself need not be complete, because the
6262      initializer may tell us how many elements are in the array.
6263      But, the elements of the array must be complete.  */
6264   if (!COMPLETE_TYPE_P (complete_type (element_type)))
6265     {
6266       if (decl)
6267           error_at (DECL_SOURCE_LOCATION (decl),
6268                       "elements of array %q#D have incomplete type", decl);
6269       else
6270           error ("elements of array %q#T have incomplete type", type);
6271       return true;
6272     }
6273   /* A compound literal can't have variable size.  */
6274   if (init && !decl
6275       && ((COMPLETE_TYPE_P (type) && !TREE_CONSTANT (TYPE_SIZE (type)))
6276             || !TREE_CONSTANT (TYPE_SIZE (element_type))))
6277     {
6278       error ("variable-sized compound literal");
6279       return true;
6280     }
6281   return false;
6282 }
6283 
6284 /* Subroutine of check_initializer; args are passed down from that function.
6285    Set stmts_are_full_exprs_p to 1 across a call to build_aggr_init.  */
6286 
6287 static tree
build_aggr_init_full_exprs(tree decl,tree init,int flags)6288 build_aggr_init_full_exprs (tree decl, tree init, int flags)
6289 
6290 {
6291   gcc_assert (stmts_are_full_exprs_p ());
6292   return build_aggr_init (decl, init, flags, tf_warning_or_error);
6293 }
6294 
6295 /* Verify INIT (the initializer for DECL), and record the
6296    initialization in DECL_INITIAL, if appropriate.  CLEANUP is as for
6297    grok_reference_init.
6298 
6299    If the return value is non-NULL, it is an expression that must be
6300    evaluated dynamically to initialize DECL.  */
6301 
6302 static tree
check_initializer(tree decl,tree init,int flags,vec<tree,va_gc> ** cleanups)6303 check_initializer (tree decl, tree init, int flags, vec<tree, va_gc> **cleanups)
6304 {
6305   tree type = TREE_TYPE (decl);
6306   tree init_code = NULL;
6307   tree core_type;
6308 
6309   /* Things that are going to be initialized need to have complete
6310      type.  */
6311   TREE_TYPE (decl) = type = complete_type (TREE_TYPE (decl));
6312 
6313   if (DECL_HAS_VALUE_EXPR_P (decl))
6314     {
6315       /* A variable with DECL_HAS_VALUE_EXPR_P set is just a placeholder,
6316            it doesn't have storage to be initialized.  */
6317       gcc_assert (init == NULL_TREE);
6318       return NULL_TREE;
6319     }
6320 
6321   if (type == error_mark_node)
6322     /* We will have already complained.  */
6323     return NULL_TREE;
6324 
6325   if (TREE_CODE (type) == ARRAY_TYPE)
6326     {
6327       if (check_array_initializer (decl, type, init))
6328           return NULL_TREE;
6329     }
6330   else if (!COMPLETE_TYPE_P (type))
6331     {
6332       error_at (DECL_SOURCE_LOCATION (decl),
6333                     "%q#D has incomplete type", decl);
6334       TREE_TYPE (decl) = error_mark_node;
6335       return NULL_TREE;
6336     }
6337   else
6338     /* There is no way to make a variable-sized class type in GNU C++.  */
6339     gcc_assert (TREE_CONSTANT (TYPE_SIZE (type)));
6340 
6341   if (init && BRACE_ENCLOSED_INITIALIZER_P (init))
6342     {
6343       int init_len = CONSTRUCTOR_NELTS (init);
6344       if (SCALAR_TYPE_P (type))
6345           {
6346             if (init_len == 0)
6347               {
6348                 maybe_warn_cpp0x (CPP0X_INITIALIZER_LISTS);
6349                 init = build_zero_init (type, NULL_TREE, false);
6350               }
6351             else if (init_len != 1 && TREE_CODE (type) != COMPLEX_TYPE)
6352               {
6353                 error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6354                               "scalar object %qD requires one element in "
6355                               "initializer", decl);
6356                 TREE_TYPE (decl) = error_mark_node;
6357                 return NULL_TREE;
6358               }
6359           }
6360     }
6361 
6362   if (TREE_CODE (decl) == CONST_DECL)
6363     {
6364       gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
6365 
6366       DECL_INITIAL (decl) = init;
6367 
6368       gcc_assert (init != NULL_TREE);
6369       init = NULL_TREE;
6370     }
6371   else if (!init && DECL_REALLY_EXTERN (decl))
6372     ;
6373   else if (init || type_build_ctor_call (type)
6374              || TREE_CODE (type) == REFERENCE_TYPE)
6375     {
6376       if (TREE_CODE (type) == REFERENCE_TYPE)
6377           {
6378             init = grok_reference_init (decl, type, init, flags);
6379             flags |= LOOKUP_ALREADY_DIGESTED;
6380           }
6381       else if (!init)
6382           check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6383                                                      tf_warning_or_error);
6384       /* Do not reshape constructors of vectors (they don't need to be
6385            reshaped.  */
6386       else if (BRACE_ENCLOSED_INITIALIZER_P (init))
6387           {
6388             if (is_std_init_list (type))
6389               {
6390                 init = perform_implicit_conversion (type, init,
6391                                                               tf_warning_or_error);
6392                 flags |= LOOKUP_ALREADY_DIGESTED;
6393               }
6394             else if (TYPE_NON_AGGREGATE_CLASS (type))
6395               {
6396                 /* Don't reshape if the class has constructors.  */
6397                 if (cxx_dialect == cxx98)
6398                     error_at (EXPR_LOC_OR_LOC (init, DECL_SOURCE_LOCATION (decl)),
6399                                 "in C++98 %qD must be initialized by "
6400                                 "constructor, not by %<{...}%>",
6401                                 decl);
6402               }
6403             else if (VECTOR_TYPE_P (type) && TYPE_VECTOR_OPAQUE (type))
6404               {
6405                 error ("opaque vector types cannot be initialized");
6406                 init = error_mark_node;
6407               }
6408             else
6409               {
6410                 init = reshape_init (type, init, tf_warning_or_error);
6411                 flags |= LOOKUP_NO_NARROWING;
6412               }
6413           }
6414       else if (TREE_CODE (init) == TREE_LIST
6415                  && TREE_TYPE (init) != unknown_type_node
6416                  && !MAYBE_CLASS_TYPE_P (type))
6417           {
6418             gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6419 
6420             /* We get here with code like `int a (2);' */
6421             init = build_x_compound_expr_from_list (init, ELK_INIT,
6422                                                               tf_warning_or_error);
6423           }
6424 
6425       /* If DECL has an array type without a specific bound, deduce the
6426            array size from the initializer.  */
6427       maybe_deduce_size_from_array_init (decl, init);
6428       type = TREE_TYPE (decl);
6429       if (type == error_mark_node)
6430           return NULL_TREE;
6431 
6432       if (((type_build_ctor_call (type) || CLASS_TYPE_P (type))
6433              && !(flags & LOOKUP_ALREADY_DIGESTED)
6434              && !(init && BRACE_ENCLOSED_INITIALIZER_P (init)
6435                     && CP_AGGREGATE_TYPE_P (type)
6436                     && (CLASS_TYPE_P (type)
6437                         || !TYPE_NEEDS_CONSTRUCTING (type)
6438                         || type_has_extended_temps (type))))
6439             || (DECL_DECOMPOSITION_P (decl) && TREE_CODE (type) == ARRAY_TYPE))
6440           {
6441             init_code = build_aggr_init_full_exprs (decl, init, flags);
6442 
6443             /* A constructor call is a non-trivial initializer even if
6444                it isn't explicitly written.  */
6445             if (TREE_SIDE_EFFECTS (init_code))
6446               DECL_NONTRIVIALLY_INITIALIZED_P (decl) = true;
6447 
6448             /* If this is a constexpr initializer, expand_default_init will
6449                have returned an INIT_EXPR rather than a CALL_EXPR.  In that
6450                case, pull the initializer back out and pass it down into
6451                store_init_value.  */
6452             while (TREE_CODE (init_code) == EXPR_STMT
6453                      || TREE_CODE (init_code) == CONVERT_EXPR)
6454               init_code = TREE_OPERAND (init_code, 0);
6455             if (TREE_CODE (init_code) == INIT_EXPR)
6456               {
6457                 init = TREE_OPERAND (init_code, 1);
6458                 init_code = NULL_TREE;
6459                 /* Don't call digest_init; it's unnecessary and will complain
6460                      about aggregate initialization of non-aggregate classes.  */
6461                 flags |= LOOKUP_ALREADY_DIGESTED;
6462               }
6463             else if (DECL_DECLARED_CONSTEXPR_P (decl))
6464               {
6465                 /* Declared constexpr, but no suitable initializer; massage
6466                      init appropriately so we can pass it into store_init_value
6467                      for the error.  */
6468                 if (CLASS_TYPE_P (type)
6469                       && (!init || TREE_CODE (init) == TREE_LIST))
6470                     {
6471                       init = build_functional_cast (type, init, tf_none);
6472                       if (TREE_CODE (init) == TARGET_EXPR)
6473                         TARGET_EXPR_DIRECT_INIT_P (init) = true;
6474                     }
6475                 init_code = NULL_TREE;
6476               }
6477             else
6478               init = NULL_TREE;
6479           }
6480 
6481       if (init && TREE_CODE (init) != TREE_VEC)
6482           {
6483             /* In aggregate initialization of a variable, each element
6484                initialization is a full-expression because there is no
6485                enclosing expression.  */
6486             gcc_assert (stmts_are_full_exprs_p ());
6487 
6488             init_code = store_init_value (decl, init, cleanups, flags);
6489 
6490             if (pedantic && TREE_CODE (type) == ARRAY_TYPE
6491                 && DECL_INITIAL (decl)
6492                 && TREE_CODE (DECL_INITIAL (decl)) == STRING_CST
6493                 && PAREN_STRING_LITERAL_P (DECL_INITIAL (decl)))
6494               warning_at (EXPR_LOC_OR_LOC (DECL_INITIAL (decl),
6495                                                    DECL_SOURCE_LOCATION (decl)),
6496                               0, "array %qD initialized by parenthesized "
6497                               "string literal %qE",
6498                               decl, DECL_INITIAL (decl));
6499             init = NULL;
6500           }
6501     }
6502   else
6503     {
6504       if (CLASS_TYPE_P (core_type = strip_array_types (type))
6505             && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
6506                 || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
6507           diagnose_uninitialized_cst_or_ref_member (core_type, /*using_new=*/false,
6508                                                               /*complain=*/true);
6509 
6510       check_for_uninitialized_const_var (decl, /*constexpr_context_p=*/false,
6511                                                    tf_warning_or_error);
6512     }
6513 
6514   if (init && init != error_mark_node)
6515     init_code = build2 (INIT_EXPR, type, decl, init);
6516 
6517   if (init_code)
6518     {
6519       /* We might have set these in cp_finish_decl.  */
6520       DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = false;
6521       TREE_CONSTANT (decl) = false;
6522     }
6523 
6524   if (init_code
6525       && (DECL_IN_AGGR_P (decl)
6526             && DECL_INITIALIZED_IN_CLASS_P (decl)
6527             && !DECL_VAR_DECLARED_INLINE_P (decl)))
6528     {
6529       static int explained = 0;
6530 
6531       if (cxx_dialect < cxx11)
6532           error ("initializer invalid for static member with constructor");
6533       else if (cxx_dialect < cxx17)
6534           error ("non-constant in-class initialization invalid for static "
6535                  "member %qD", decl);
6536       else
6537           error ("non-constant in-class initialization invalid for non-inline "
6538                  "static member %qD", decl);
6539       if (!explained)
6540           {
6541             inform (input_location,
6542                       "(an out of class initialization is required)");
6543             explained = 1;
6544           }
6545       return NULL_TREE;
6546     }
6547 
6548   return init_code;
6549 }
6550 
6551 /* If DECL is not a local variable, give it RTL.  */
6552 
6553 static void
make_rtl_for_nonlocal_decl(tree decl,tree init,const char * asmspec)6554 make_rtl_for_nonlocal_decl (tree decl, tree init, const char* asmspec)
6555 {
6556   int toplev = toplevel_bindings_p ();
6557   int defer_p;
6558 
6559   /* Set the DECL_ASSEMBLER_NAME for the object.  */
6560   if (asmspec)
6561     {
6562       /* The `register' keyword, when used together with an
6563            asm-specification, indicates that the variable should be
6564            placed in a particular register.  */
6565       if (VAR_P (decl) && DECL_REGISTER (decl))
6566           {
6567             set_user_assembler_name (decl, asmspec);
6568             DECL_HARD_REGISTER (decl) = 1;
6569           }
6570       else
6571           {
6572             if (TREE_CODE (decl) == FUNCTION_DECL
6573                 && DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL)
6574               set_builtin_user_assembler_name (decl, asmspec);
6575             set_user_assembler_name (decl, asmspec);
6576           }
6577     }
6578 
6579   /* Handle non-variables up front.  */
6580   if (!VAR_P (decl))
6581     {
6582       rest_of_decl_compilation (decl, toplev, at_eof);
6583       return;
6584     }
6585 
6586   /* If we see a class member here, it should be a static data
6587      member.  */
6588   if (DECL_LANG_SPECIFIC (decl) && DECL_IN_AGGR_P (decl))
6589     {
6590       gcc_assert (TREE_STATIC (decl));
6591       /* An in-class declaration of a static data member should be
6592            external; it is only a declaration, and not a definition.  */
6593       if (init == NULL_TREE)
6594           gcc_assert (DECL_EXTERNAL (decl)
6595                         || !TREE_PUBLIC (decl)
6596                         || DECL_INLINE_VAR_P (decl));
6597     }
6598 
6599   /* We don't create any RTL for local variables.  */
6600   if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
6601     return;
6602 
6603   /* We defer emission of local statics until the corresponding
6604      DECL_EXPR is expanded.  But with constexpr its function might never
6605      be expanded, so go ahead and tell cgraph about the variable now.  */
6606   defer_p = ((DECL_FUNCTION_SCOPE_P (decl)
6607                 && !var_in_maybe_constexpr_fn (decl))
6608                || DECL_VIRTUAL_P (decl));
6609 
6610   /* Defer template instantiations.  */
6611   if (DECL_LANG_SPECIFIC (decl)
6612       && DECL_IMPLICIT_INSTANTIATION (decl))
6613     defer_p = 1;
6614 
6615   /* If we're not deferring, go ahead and assemble the variable.  */
6616   if (!defer_p)
6617     rest_of_decl_compilation (decl, toplev, at_eof);
6618 }
6619 
6620 /* walk_tree helper for wrap_temporary_cleanups, below.  */
6621 
6622 static tree
wrap_cleanups_r(tree * stmt_p,int * walk_subtrees,void * data)6623 wrap_cleanups_r (tree *stmt_p, int *walk_subtrees, void *data)
6624 {
6625   /* Stop at types or full-expression boundaries.  */
6626   if (TYPE_P (*stmt_p)
6627       || TREE_CODE (*stmt_p) == CLEANUP_POINT_EXPR)
6628     {
6629       *walk_subtrees = 0;
6630       return NULL_TREE;
6631     }
6632 
6633   if (TREE_CODE (*stmt_p) == TARGET_EXPR)
6634     {
6635       tree guard = (tree)data;
6636       tree tcleanup = TARGET_EXPR_CLEANUP (*stmt_p);
6637 
6638       tcleanup = build2 (TRY_CATCH_EXPR, void_type_node, tcleanup, guard);
6639       /* Tell honor_protect_cleanup_actions to handle this as a separate
6640            cleanup.  */
6641       TRY_CATCH_IS_CLEANUP (tcleanup) = 1;
6642 
6643       TARGET_EXPR_CLEANUP (*stmt_p) = tcleanup;
6644     }
6645 
6646   return NULL_TREE;
6647 }
6648 
6649 /* We're initializing a local variable which has a cleanup GUARD.  If there
6650    are any temporaries used in the initializer INIT of this variable, we
6651    need to wrap their cleanups with TRY_CATCH_EXPR (, GUARD) so that the
6652    variable will be cleaned up properly if one of them throws.
6653 
6654    Unfortunately, there's no way to express this properly in terms of
6655    nesting, as the regions for the temporaries overlap the region for the
6656    variable itself; if there are two temporaries, the variable needs to be
6657    the first thing destroyed if either of them throws.  However, we only
6658    want to run the variable's cleanup if it actually got constructed.  So
6659    we need to guard the temporary cleanups with the variable's cleanup if
6660    they are run on the normal path, but not if they are run on the
6661    exceptional path.  We implement this by telling
6662    honor_protect_cleanup_actions to strip the variable cleanup from the
6663    exceptional path.  */
6664 
6665 static void
wrap_temporary_cleanups(tree init,tree guard)6666 wrap_temporary_cleanups (tree init, tree guard)
6667 {
6668   cp_walk_tree_without_duplicates (&init, wrap_cleanups_r, (void *)guard);
6669 }
6670 
6671 /* Generate code to initialize DECL (a local variable).  */
6672 
6673 static void
initialize_local_var(tree decl,tree init)6674 initialize_local_var (tree decl, tree init)
6675 {
6676   tree type = TREE_TYPE (decl);
6677   tree cleanup;
6678   int already_used;
6679 
6680   gcc_assert (VAR_P (decl)
6681                 || TREE_CODE (decl) == RESULT_DECL);
6682   gcc_assert (!TREE_STATIC (decl));
6683 
6684   if (DECL_SIZE (decl) == NULL_TREE)
6685     {
6686       /* If we used it already as memory, it must stay in memory.  */
6687       DECL_INITIAL (decl) = NULL_TREE;
6688       TREE_ADDRESSABLE (decl) = TREE_USED (decl);
6689       return;
6690     }
6691 
6692   if (type == error_mark_node)
6693     return;
6694 
6695   /* Compute and store the initial value.  */
6696   already_used = TREE_USED (decl) || TREE_USED (type);
6697   if (TREE_USED (type))
6698     DECL_READ_P (decl) = 1;
6699 
6700   /* Generate a cleanup, if necessary.  */
6701   cleanup = cxx_maybe_build_cleanup (decl, tf_warning_or_error);
6702 
6703   /* Perform the initialization.  */
6704   if (init)
6705     {
6706       tree rinit = (TREE_CODE (init) == INIT_EXPR
6707                         ? TREE_OPERAND (init, 1) : NULL_TREE);
6708       if (rinit && !TREE_SIDE_EFFECTS (rinit))
6709           {
6710             /* Stick simple initializers in DECL_INITIAL so that
6711                -Wno-init-self works (c++/34772).  */
6712             gcc_assert (TREE_OPERAND (init, 0) == decl);
6713             DECL_INITIAL (decl) = rinit;
6714 
6715             if (warn_init_self && TREE_CODE (type) == REFERENCE_TYPE)
6716               {
6717                 STRIP_NOPS (rinit);
6718                 if (rinit == decl)
6719                     warning_at (DECL_SOURCE_LOCATION (decl),
6720                                   OPT_Winit_self,
6721                                   "reference %qD is initialized with itself", decl);
6722               }
6723           }
6724       else
6725           {
6726             int saved_stmts_are_full_exprs_p;
6727 
6728             /* If we're only initializing a single object, guard the
6729                destructors of any temporaries used in its initializer with
6730                its destructor.  This isn't right for arrays because each
6731                element initialization is a full-expression.  */
6732             if (cleanup && TREE_CODE (type) != ARRAY_TYPE)
6733               wrap_temporary_cleanups (init, cleanup);
6734 
6735             gcc_assert (building_stmt_list_p ());
6736             saved_stmts_are_full_exprs_p = stmts_are_full_exprs_p ();
6737             current_stmt_tree ()->stmts_are_full_exprs_p = 1;
6738             finish_expr_stmt (init);
6739             current_stmt_tree ()->stmts_are_full_exprs_p =
6740               saved_stmts_are_full_exprs_p;
6741           }
6742     }
6743 
6744   /* Set this to 0 so we can tell whether an aggregate which was
6745      initialized was ever used.  Don't do this if it has a
6746      destructor, so we don't complain about the 'resource
6747      allocation is initialization' idiom.  Now set
6748      attribute((unused)) on types so decls of that type will be
6749      marked used. (see TREE_USED, above.)  */
6750   if (TYPE_NEEDS_CONSTRUCTING (type)
6751       && ! already_used
6752       && TYPE_HAS_TRIVIAL_DESTRUCTOR (type)
6753       && DECL_NAME (decl))
6754     TREE_USED (decl) = 0;
6755   else if (already_used)
6756     TREE_USED (decl) = 1;
6757 
6758   if (cleanup)
6759     finish_decl_cleanup (decl, cleanup);
6760 }
6761 
6762 /* DECL is a VAR_DECL for a compiler-generated variable with static
6763    storage duration (like a virtual table) whose initializer is a
6764    compile-time constant.  Initialize the variable and provide it to the
6765    back end.  */
6766 
6767 void
initialize_artificial_var(tree decl,vec<constructor_elt,va_gc> * v)6768 initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
6769 {
6770   tree init;
6771   gcc_assert (DECL_ARTIFICIAL (decl));
6772   init = build_constructor (TREE_TYPE (decl), v);
6773   gcc_assert (TREE_CODE (init) == CONSTRUCTOR);
6774   DECL_INITIAL (decl) = init;
6775   DECL_INITIALIZED_P (decl) = 1;
6776   determine_visibility (decl);
6777   layout_var_decl (decl);
6778   maybe_commonize_var (decl);
6779   make_rtl_for_nonlocal_decl (decl, init, /*asmspec=*/NULL);
6780 }
6781 
6782 /* INIT is the initializer for a variable, as represented by the
6783    parser.  Returns true iff INIT is value-dependent.  */
6784 
6785 static bool
value_dependent_init_p(tree init)6786 value_dependent_init_p (tree init)
6787 {
6788   if (TREE_CODE (init) == TREE_LIST)
6789     /* A parenthesized initializer, e.g.: int i (3, 2); ? */
6790     return any_value_dependent_elements_p (init);
6791   else if (TREE_CODE (init) == CONSTRUCTOR)
6792   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
6793     {
6794       if (dependent_type_p (TREE_TYPE (init)))
6795           return true;
6796 
6797       vec<constructor_elt, va_gc> *elts;
6798       size_t nelts;
6799       size_t i;
6800 
6801       elts = CONSTRUCTOR_ELTS (init);
6802       nelts = vec_safe_length (elts);
6803       for (i = 0; i < nelts; ++i)
6804           if (value_dependent_init_p ((*elts)[i].value))
6805             return true;
6806     }
6807   else
6808     /* It must be a simple expression, e.g., int i = 3;  */
6809     return value_dependent_expression_p (init);
6810 
6811   return false;
6812 }
6813 
6814 // Returns true if a DECL is VAR_DECL with the concept specifier.
6815 static inline bool
is_concept_var(tree decl)6816 is_concept_var (tree decl)
6817 {
6818   return (VAR_P (decl)
6819             // Not all variables have DECL_LANG_SPECIFIC.
6820           && DECL_LANG_SPECIFIC (decl)
6821           && DECL_DECLARED_CONCEPT_P (decl));
6822 }
6823 
6824 /* A helper function to be called via walk_tree.  If any label exists
6825    under *TP, it is (going to be) forced.  Set has_forced_label_in_static.  */
6826 
6827 static tree
notice_forced_label_r(tree * tp,int * walk_subtrees,void *)6828 notice_forced_label_r (tree *tp, int *walk_subtrees, void *)
6829 {
6830   if (TYPE_P (*tp))
6831     *walk_subtrees = 0;
6832   if (TREE_CODE (*tp) == LABEL_DECL)
6833     cfun->has_forced_label_in_static = 1;
6834   return NULL_TREE;
6835 }
6836 
6837 /* Finish processing of a declaration;
6838    install its line number and initial value.
6839    If the length of an array type is not known before,
6840    it must be determined now, from the initial value, or it is an error.
6841 
6842    INIT is the initializer (if any) for DECL.  If INIT_CONST_EXPR_P is
6843    true, then INIT is an integral constant expression.
6844 
6845    FLAGS is LOOKUP_ONLYCONVERTING if the = init syntax was used, else 0
6846    if the (init) syntax was used.  */
6847 
6848 void
cp_finish_decl(tree decl,tree init,bool init_const_expr_p,tree asmspec_tree,int flags)6849 cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
6850                     tree asmspec_tree, int flags)
6851 {
6852   tree type;
6853   vec<tree, va_gc> *cleanups = NULL;
6854   const char *asmspec = NULL;
6855   int was_readonly = 0;
6856   bool var_definition_p = false;
6857   tree auto_node;
6858 
6859   if (decl == error_mark_node)
6860     return;
6861   else if (! decl)
6862     {
6863       if (init)
6864           error ("assignment (not initialization) in declaration");
6865       return;
6866     }
6867 
6868   gcc_assert (TREE_CODE (decl) != RESULT_DECL);
6869   /* Parameters are handled by store_parm_decls, not cp_finish_decl.  */
6870   gcc_assert (TREE_CODE (decl) != PARM_DECL);
6871 
6872   type = TREE_TYPE (decl);
6873   if (type == error_mark_node)
6874     return;
6875 
6876   /* Warn about register storage specifiers except when in GNU global
6877      or local register variable extension.  */
6878   if (VAR_P (decl) && DECL_REGISTER (decl) && asmspec_tree == NULL_TREE)
6879     {
6880       if (cxx_dialect >= cxx17)
6881           pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6882                      "ISO C++17 does not allow %<register%> storage "
6883                      "class specifier");
6884       else
6885           warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
6886                         "%<register%> storage class specifier used");
6887     }
6888 
6889   /* If a name was specified, get the string.  */
6890   if (at_namespace_scope_p ())
6891     asmspec_tree = maybe_apply_renaming_pragma (decl, asmspec_tree);
6892   if (asmspec_tree && asmspec_tree != error_mark_node)
6893     asmspec = TREE_STRING_POINTER (asmspec_tree);
6894 
6895   if (current_class_type
6896       && CP_DECL_CONTEXT (decl) == current_class_type
6897       && TYPE_BEING_DEFINED (current_class_type)
6898       && !CLASSTYPE_TEMPLATE_INSTANTIATION (current_class_type)
6899       && (DECL_INITIAL (decl) || init))
6900     DECL_INITIALIZED_IN_CLASS_P (decl) = 1;
6901 
6902   if (TREE_CODE (decl) != FUNCTION_DECL
6903       && (auto_node = type_uses_auto (type)))
6904     {
6905       tree d_init;
6906       if (init == NULL_TREE)
6907           {
6908             if (DECL_LANG_SPECIFIC (decl)
6909                 && DECL_TEMPLATE_INSTANTIATION (decl)
6910                 && !DECL_TEMPLATE_INSTANTIATED (decl))
6911               {
6912                 /* init is null because we're deferring instantiating the
6913                      initializer until we need it.  Well, we need it now.  */
6914                 instantiate_decl (decl, /*defer_ok*/true, /*expl*/false);
6915                 return;
6916               }
6917 
6918             gcc_assert (CLASS_PLACEHOLDER_TEMPLATE (auto_node));
6919           }
6920       d_init = init;
6921       if (d_init)
6922           {
6923             if (TREE_CODE (d_init) == TREE_LIST
6924                 && !CLASS_PLACEHOLDER_TEMPLATE (auto_node))
6925               d_init = build_x_compound_expr_from_list (d_init, ELK_INIT,
6926                                                                   tf_warning_or_error);
6927             d_init = resolve_nondeduced_context (d_init, tf_warning_or_error);
6928           }
6929       enum auto_deduction_context adc = adc_variable_type;
6930       if (VAR_P (decl) && DECL_DECOMPOSITION_P (decl))
6931           adc = adc_decomp_type;
6932       type = TREE_TYPE (decl) = do_auto_deduction (type, d_init, auto_node,
6933                                                                tf_warning_or_error, adc,
6934                                                                NULL_TREE, flags);
6935       if (type == error_mark_node)
6936           return;
6937       if (TREE_CODE (type) == FUNCTION_TYPE)
6938           {
6939             error ("initializer for %<decltype(auto) %D%> has function type "
6940                      "(did you forget the %<()%> ?)", decl);
6941             TREE_TYPE (decl) = error_mark_node;
6942             return;
6943           }
6944       cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
6945     }
6946 
6947   if (ensure_literal_type_for_constexpr_object (decl) == error_mark_node)
6948     {
6949       DECL_DECLARED_CONSTEXPR_P (decl) = 0;
6950       if (VAR_P (decl) && DECL_CLASS_SCOPE_P (decl))
6951           {
6952             init = NULL_TREE;
6953             DECL_EXTERNAL (decl) = 1;
6954           }
6955     }
6956 
6957   if (VAR_P (decl)
6958       && DECL_CLASS_SCOPE_P (decl)
6959       && DECL_INITIALIZED_IN_CLASS_P (decl))
6960     check_static_variable_definition (decl, type);
6961 
6962   if (init && TREE_CODE (decl) == FUNCTION_DECL)
6963     {
6964       tree clone;
6965       if (init == ridpointers[(int)RID_DELETE])
6966           {
6967             /* FIXME check this is 1st decl.  */
6968             DECL_DELETED_FN (decl) = 1;
6969             DECL_DECLARED_INLINE_P (decl) = 1;
6970             DECL_INITIAL (decl) = error_mark_node;
6971             FOR_EACH_CLONE (clone, decl)
6972               {
6973                 DECL_DELETED_FN (clone) = 1;
6974                 DECL_DECLARED_INLINE_P (clone) = 1;
6975                 DECL_INITIAL (clone) = error_mark_node;
6976               }
6977             init = NULL_TREE;
6978           }
6979       else if (init == ridpointers[(int)RID_DEFAULT])
6980           {
6981             if (defaultable_fn_check (decl))
6982               DECL_DEFAULTED_FN (decl) = 1;
6983             else
6984               DECL_INITIAL (decl) = NULL_TREE;
6985           }
6986     }
6987 
6988   if (init && VAR_P (decl))
6989     {
6990       DECL_NONTRIVIALLY_INITIALIZED_P (decl) = 1;
6991       /* If DECL is a reference, then we want to know whether init is a
6992            reference constant; init_const_expr_p as passed tells us whether
6993            it's an rvalue constant.  */
6994       if (TREE_CODE (type) == REFERENCE_TYPE)
6995           init_const_expr_p = potential_constant_expression (init);
6996       if (init_const_expr_p)
6997           {
6998             /* Set these flags now for templates.  We'll update the flags in
6999                store_init_value for instantiations.  */
7000             DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = 1;
7001             if (decl_maybe_constant_var_p (decl)
7002                 /* FIXME setting TREE_CONSTANT on refs breaks the back end.  */
7003                 && TREE_CODE (type) != REFERENCE_TYPE)
7004               TREE_CONSTANT (decl) = 1;
7005           }
7006     }
7007 
7008   if (processing_template_decl)
7009     {
7010       bool type_dependent_p;
7011 
7012       /* Add this declaration to the statement-tree.  */
7013       if (at_function_scope_p ())
7014           add_decl_expr (decl);
7015 
7016       type_dependent_p = dependent_type_p (type);
7017 
7018       if (check_for_bare_parameter_packs (init))
7019           {
7020             init = NULL_TREE;
7021             DECL_INITIAL (decl) = NULL_TREE;
7022           }
7023 
7024       /* Generally, initializers in templates are expanded when the
7025            template is instantiated.  But, if DECL is a variable constant
7026            then it can be used in future constant expressions, so its value
7027            must be available. */
7028 
7029       bool dep_init = false;
7030 
7031       if (!VAR_P (decl) || type_dependent_p)
7032           /* We can't do anything if the decl has dependent type.  */;
7033       else if (!init && is_concept_var (decl))
7034           {
7035             error ("variable concept has no initializer");
7036             init = boolean_true_node;
7037           }
7038       else if (init
7039                  && init_const_expr_p
7040                  && TREE_CODE (type) != REFERENCE_TYPE
7041                  && decl_maybe_constant_var_p (decl)
7042                  && !(dep_init = value_dependent_init_p (init)))
7043           {
7044             /* This variable seems to be a non-dependent constant, so process
7045                its initializer.  If check_initializer returns non-null the
7046                initialization wasn't constant after all.  */
7047             tree init_code;
7048             cleanups = make_tree_vector ();
7049             init_code = check_initializer (decl, init, flags, &cleanups);
7050             if (init_code == NULL_TREE)
7051               init = NULL_TREE;
7052             release_tree_vector (cleanups);
7053           }
7054       else if (!DECL_PRETTY_FUNCTION_P (decl))
7055           {
7056             /* Deduce array size even if the initializer is dependent.  */
7057             maybe_deduce_size_from_array_init (decl, init);
7058             /* And complain about multiple initializers.  */
7059             if (init && TREE_CODE (init) == TREE_LIST && TREE_CHAIN (init)
7060                 && !MAYBE_CLASS_TYPE_P (type))
7061               init = build_x_compound_expr_from_list (init, ELK_INIT,
7062                                                                 tf_warning_or_error);
7063           }
7064 
7065       if (init)
7066           {
7067             if (TREE_CODE (init) == TREE_LIST)
7068               lookup_list_keep (init, true);
7069             DECL_INITIAL (decl) = init;
7070           }
7071       if (dep_init)
7072           {
7073             retrofit_lang_decl (decl);
7074             SET_DECL_DEPENDENT_INIT_P (decl, true);
7075           }
7076       return;
7077     }
7078 
7079   /* Just store non-static data member initializers for later.  */
7080   if (init && TREE_CODE (decl) == FIELD_DECL)
7081     DECL_INITIAL (decl) = init;
7082 
7083   /* Take care of TYPE_DECLs up front.  */
7084   if (TREE_CODE (decl) == TYPE_DECL)
7085     {
7086       if (type != error_mark_node
7087             && MAYBE_CLASS_TYPE_P (type) && DECL_NAME (decl))
7088           {
7089             if (TREE_TYPE (DECL_NAME (decl)) && TREE_TYPE (decl) != type)
7090               warning (0, "shadowing previous type declaration of %q#D", decl);
7091             set_identifier_type_value (DECL_NAME (decl), decl);
7092           }
7093 
7094       /* If we have installed this as the canonical typedef for this
7095            type, and that type has not been defined yet, delay emitting
7096            the debug information for it, as we will emit it later.  */
7097       if (TYPE_MAIN_DECL (TREE_TYPE (decl)) == decl
7098             && !COMPLETE_TYPE_P (TREE_TYPE (decl)))
7099           TYPE_DECL_SUPPRESS_DEBUG (decl) = 1;
7100 
7101       rest_of_decl_compilation (decl, DECL_FILE_SCOPE_P (decl),
7102                                         at_eof);
7103       return;
7104     }
7105 
7106   /* A reference will be modified here, as it is initialized.  */
7107   if (! DECL_EXTERNAL (decl)
7108       && TREE_READONLY (decl)
7109       && TREE_CODE (type) == REFERENCE_TYPE)
7110     {
7111       was_readonly = 1;
7112       TREE_READONLY (decl) = 0;
7113     }
7114 
7115   if (VAR_P (decl))
7116     {
7117       /* If this is a local variable that will need a mangled name,
7118            register it now.  We must do this before processing the
7119            initializer for the variable, since the initialization might
7120            require a guard variable, and since the mangled name of the
7121            guard variable will depend on the mangled name of this
7122            variable.  */
7123       if (DECL_FUNCTION_SCOPE_P (decl)
7124             && TREE_STATIC (decl)
7125             && !DECL_ARTIFICIAL (decl))
7126           {
7127             push_local_name (decl);
7128             /* Normally has_forced_label_in_static is set during GIMPLE
7129                lowering, but [cd]tors are never actually compiled directly.
7130                We need to set this early so we can deal with the label
7131                address extension.  */
7132             if ((DECL_CONSTRUCTOR_P (current_function_decl)
7133                  || DECL_DESTRUCTOR_P (current_function_decl))
7134                 && init)
7135               {
7136                 walk_tree (&init, notice_forced_label_r, NULL, NULL);
7137                 add_local_decl (cfun, decl);
7138               }
7139             /* And make sure it's in the symbol table for
7140                c_parse_final_cleanups to find.  */
7141             varpool_node::get_create (decl);
7142           }
7143 
7144       /* Convert the initializer to the type of DECL, if we have not
7145            already initialized DECL.  */
7146       if (!DECL_INITIALIZED_P (decl)
7147             /* If !DECL_EXTERNAL then DECL is being defined.  In the
7148                case of a static data member initialized inside the
7149                class-specifier, there can be an initializer even if DECL
7150                is *not* defined.  */
7151             && (!DECL_EXTERNAL (decl) || init))
7152           {
7153             cleanups = make_tree_vector ();
7154             init = check_initializer (decl, init, flags, &cleanups);
7155 
7156             /* Handle:
7157 
7158                [dcl.init]
7159 
7160                The memory occupied by any object of static storage
7161                duration is zero-initialized at program startup before
7162                any other initialization takes place.
7163 
7164                We cannot create an appropriate initializer until after
7165                the type of DECL is finalized.  If DECL_INITIAL is set,
7166                then the DECL is statically initialized, and any
7167                necessary zero-initialization has already been performed.  */
7168             if (TREE_STATIC (decl) && !DECL_INITIAL (decl))
7169               DECL_INITIAL (decl) = build_zero_init (TREE_TYPE (decl),
7170                                                                /*nelts=*/NULL_TREE,
7171                                                                /*static_storage_p=*/true);
7172             /* Remember that the initialization for this variable has
7173                taken place.  */
7174             DECL_INITIALIZED_P (decl) = 1;
7175             /* This declaration is the definition of this variable,
7176                unless we are initializing a static data member within
7177                the class specifier.  */
7178             if (!DECL_EXTERNAL (decl))
7179               var_definition_p = true;
7180           }
7181       /* If the variable has an array type, lay out the type, even if
7182            there is no initializer.  It is valid to index through the
7183            array, and we must get TYPE_ALIGN set correctly on the array
7184            type.  */
7185       else if (TREE_CODE (type) == ARRAY_TYPE)
7186           layout_type (type);
7187 
7188       if (TREE_STATIC (decl)
7189             && !at_function_scope_p ()
7190             && current_function_decl == NULL)
7191           /* So decl is a global variable or a static member of a
7192              non local class. Record the types it uses
7193              so that we can decide later to emit debug info for them.  */
7194           record_types_used_by_current_var_decl (decl);
7195     }
7196 
7197   /* Add this declaration to the statement-tree.  This needs to happen
7198      after the call to check_initializer so that the DECL_EXPR for a
7199      reference temp is added before the DECL_EXPR for the reference itself.  */
7200   if (DECL_FUNCTION_SCOPE_P (decl))
7201     {
7202       /* If we're building a variable sized type, and we might be
7203            reachable other than via the top of the current binding
7204            level, then create a new BIND_EXPR so that we deallocate
7205            the object at the right time.  */
7206       if (VAR_P (decl)
7207             && DECL_SIZE (decl)
7208             && !TREE_CONSTANT (DECL_SIZE (decl))
7209             && STATEMENT_LIST_HAS_LABEL (cur_stmt_list))
7210           {
7211             tree bind;
7212             bind = build3 (BIND_EXPR, void_type_node, NULL, NULL, NULL);
7213             TREE_SIDE_EFFECTS (bind) = 1;
7214             add_stmt (bind);
7215             BIND_EXPR_BODY (bind) = push_stmt_list ();
7216           }
7217       add_decl_expr (decl);
7218     }
7219 
7220   /* Let the middle end know about variables and functions -- but not
7221      static data members in uninstantiated class templates.  */
7222   if (VAR_OR_FUNCTION_DECL_P (decl))
7223     {
7224       if (VAR_P (decl))
7225           {
7226             layout_var_decl (decl);
7227             maybe_commonize_var (decl);
7228           }
7229 
7230       /* This needs to happen after the linkage is set. */
7231       determine_visibility (decl);
7232 
7233       if (var_definition_p && TREE_STATIC (decl))
7234           {
7235             /* If a TREE_READONLY variable needs initialization
7236                at runtime, it is no longer readonly and we need to
7237                avoid MEM_READONLY_P being set on RTL created for it.  */
7238             if (init)
7239               {
7240                 if (TREE_READONLY (decl))
7241                     TREE_READONLY (decl) = 0;
7242                 was_readonly = 0;
7243               }
7244             else if (was_readonly)
7245               TREE_READONLY (decl) = 1;
7246 
7247             /* Likewise if it needs destruction.  */
7248             if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
7249               TREE_READONLY (decl) = 0;
7250           }
7251 
7252       make_rtl_for_nonlocal_decl (decl, init, asmspec);
7253 
7254       /* Check for abstractness of the type. Notice that there is no
7255            need to strip array types here since the check for those types
7256            is already done within create_array_type_for_decl.  */
7257       abstract_virtuals_error (decl, type);
7258 
7259       if (TREE_TYPE (decl) == error_mark_node)
7260           /* No initialization required.  */
7261           ;
7262       else if (TREE_CODE (decl) == FUNCTION_DECL)
7263           {
7264             if (init)
7265               {
7266                 if (init == ridpointers[(int)RID_DEFAULT])
7267                     {
7268                       /* An out-of-class default definition is defined at
7269                          the point where it is explicitly defaulted.  */
7270                       if (DECL_DELETED_FN (decl))
7271                         maybe_explain_implicit_delete (decl);
7272                       else if (DECL_INITIAL (decl) == error_mark_node)
7273                         synthesize_method (decl);
7274                     }
7275                 else
7276                     error ("function %q#D is initialized like a variable", decl);
7277               }
7278             /* else no initialization required.  */
7279           }
7280       else if (DECL_EXTERNAL (decl)
7281                  && ! (DECL_LANG_SPECIFIC (decl)
7282                          && DECL_NOT_REALLY_EXTERN (decl)))
7283           {
7284             if (init)
7285               DECL_INITIAL (decl) = init;
7286           }
7287       /* A variable definition.  */
7288       else if (DECL_FUNCTION_SCOPE_P (decl) && !TREE_STATIC (decl))
7289           /* Initialize the local variable.  */
7290           initialize_local_var (decl, init);
7291 
7292       /* If a variable is defined, and then a subsequent
7293            definition with external linkage is encountered, we will
7294            get here twice for the same variable.  We want to avoid
7295            calling expand_static_init more than once.  For variables
7296            that are not static data members, we can call
7297            expand_static_init only when we actually process the
7298            initializer.  It is not legal to redeclare a static data
7299            member, so this issue does not arise in that case.  */
7300       else if (var_definition_p && TREE_STATIC (decl))
7301           expand_static_init (decl, init);
7302     }
7303 
7304   /* If a CLEANUP_STMT was created to destroy a temporary bound to a
7305      reference, insert it in the statement-tree now.  */
7306   if (cleanups)
7307     {
7308       unsigned i; tree t;
7309       FOR_EACH_VEC_ELT (*cleanups, i, t)
7310           push_cleanup (decl, t, false);
7311       release_tree_vector (cleanups);
7312     }
7313 
7314   if (was_readonly)
7315     TREE_READONLY (decl) = 1;
7316 
7317   if (flag_openmp
7318       && VAR_P (decl)
7319       && lookup_attribute ("omp declare target implicit",
7320                                  DECL_ATTRIBUTES (decl)))
7321     {
7322       DECL_ATTRIBUTES (decl)
7323           = remove_attribute ("omp declare target implicit",
7324                                   DECL_ATTRIBUTES (decl));
7325       complete_type (TREE_TYPE (decl));
7326       if (!cp_omp_mappable_type (TREE_TYPE (decl)))
7327           error ("%q+D in declare target directive does not have mappable type",
7328                  decl);
7329       else if (!lookup_attribute ("omp declare target",
7330                                           DECL_ATTRIBUTES (decl))
7331                  && !lookup_attribute ("omp declare target link",
7332                                              DECL_ATTRIBUTES (decl)))
7333           DECL_ATTRIBUTES (decl)
7334             = tree_cons (get_identifier ("omp declare target"),
7335                            NULL_TREE, DECL_ATTRIBUTES (decl));
7336     }
7337 
7338   invoke_plugin_callbacks (PLUGIN_FINISH_DECL, decl);
7339 }
7340 
7341 /* For class TYPE return itself or some its bases that contain
7342    any direct non-static data members.  Return error_mark_node if an
7343    error has been diagnosed.  */
7344 
7345 static tree
find_decomp_class_base(location_t loc,tree type,tree ret)7346 find_decomp_class_base (location_t loc, tree type, tree ret)
7347 {
7348   bool member_seen = false;
7349   for (tree field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
7350     if (TREE_CODE (field) != FIELD_DECL
7351           || DECL_ARTIFICIAL (field)
7352           || DECL_UNNAMED_BIT_FIELD (field))
7353       continue;
7354     else if (ret)
7355       return type;
7356     else if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
7357       {
7358           if (TREE_CODE (TREE_TYPE (field)) == RECORD_TYPE)
7359             error_at (loc, "cannot decompose class type %qT because it has an "
7360                                "anonymous struct member", type);
7361           else
7362             error_at (loc, "cannot decompose class type %qT because it has an "
7363                                "anonymous union member", type);
7364           inform (DECL_SOURCE_LOCATION (field), "declared here");
7365           return error_mark_node;
7366       }
7367     else if (!accessible_p (type, field, true))
7368       {
7369           error_at (loc, "cannot decompose inaccessible member %qD of %qT",
7370                       field, type);
7371           inform (DECL_SOURCE_LOCATION (field),
7372                     TREE_PRIVATE (field)
7373                     ? G_("declared private here")
7374                     : G_("declared protected here"));
7375           return error_mark_node;
7376       }
7377     else
7378       member_seen = true;
7379 
7380   tree base_binfo, binfo;
7381   tree orig_ret = ret;
7382   int i;
7383   if (member_seen)
7384     ret = type;
7385   for (binfo = TYPE_BINFO (type), i = 0;
7386        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
7387     {
7388       tree t = find_decomp_class_base (loc, TREE_TYPE (base_binfo), ret);
7389       if (t == error_mark_node)
7390           return error_mark_node;
7391       if (t != NULL_TREE && t != ret)
7392           {
7393             if (ret == type)
7394               {
7395                 error_at (loc, "cannot decompose class type %qT: both it and "
7396                                    "its base class %qT have non-static data members",
7397                               type, t);
7398                 return error_mark_node;
7399               }
7400             else if (orig_ret != NULL_TREE)
7401               return t;
7402             else if (ret != NULL_TREE)
7403               {
7404                 error_at (loc, "cannot decompose class type %qT: its base "
7405                                    "classes %qT and %qT have non-static data "
7406                                    "members", type, ret, t);
7407                 return error_mark_node;
7408               }
7409             else
7410               ret = t;
7411           }
7412     }
7413   return ret;
7414 }
7415 
7416 /* Return std::tuple_size<TYPE>::value.  */
7417 
7418 static tree
get_tuple_size(tree type)7419 get_tuple_size (tree type)
7420 {
7421   tree args = make_tree_vec (1);
7422   TREE_VEC_ELT (args, 0) = type;
7423   tree inst = lookup_template_class (get_identifier ("tuple_size"), args,
7424                                              /*in_decl*/NULL_TREE,
7425                                              /*context*/std_node,
7426                                              /*entering_scope*/false, tf_none);
7427   inst = complete_type (inst);
7428   if (inst == error_mark_node || !COMPLETE_TYPE_P (inst))
7429     return NULL_TREE;
7430   tree val = lookup_qualified_name (inst, get_identifier ("value"),
7431                                             /*type*/false, /*complain*/false);
7432   if (TREE_CODE (val) == VAR_DECL || TREE_CODE (val) == CONST_DECL)
7433     val = maybe_constant_value (val);
7434   if (TREE_CODE (val) == INTEGER_CST)
7435     return val;
7436   else
7437     return error_mark_node;
7438 }
7439 
7440 /* Return std::tuple_element<I,TYPE>::type.  */
7441 
7442 static tree
get_tuple_element_type(tree type,unsigned i)7443 get_tuple_element_type (tree type, unsigned i)
7444 {
7445   tree args = make_tree_vec (2);
7446   TREE_VEC_ELT (args, 0) = build_int_cst (integer_type_node, i);
7447   TREE_VEC_ELT (args, 1) = type;
7448   tree inst = lookup_template_class (get_identifier ("tuple_element"), args,
7449                                              /*in_decl*/NULL_TREE,
7450                                              /*context*/std_node,
7451                                              /*entering_scope*/false,
7452                                              tf_warning_or_error);
7453   return make_typename_type (inst, get_identifier ("type"),
7454                                    none_type, tf_warning_or_error);
7455 }
7456 
7457 /* Return e.get<i>() or get<i>(e).  */
7458 
7459 static tree
get_tuple_decomp_init(tree decl,unsigned i)7460 get_tuple_decomp_init (tree decl, unsigned i)
7461 {
7462   tree get_id = get_identifier ("get");
7463   tree targs = make_tree_vec (1);
7464   TREE_VEC_ELT (targs, 0) = build_int_cst (integer_type_node, i);
7465 
7466   tree etype = TREE_TYPE (decl);
7467   tree e = convert_from_reference (decl);
7468 
7469   /* [The id-expression] e is an lvalue if the type of the entity e is an
7470      lvalue reference and an xvalue otherwise.  */
7471   if (TREE_CODE (etype) != REFERENCE_TYPE
7472       || TYPE_REF_IS_RVALUE (etype))
7473     e = move (e);
7474 
7475   tree fns = lookup_qualified_name (TREE_TYPE (e), get_id,
7476                                             /*type*/false, /*complain*/false);
7477   bool use_member_get = false;
7478 
7479   /* To use a member get, member lookup must find at least one
7480      declaration that is a function template
7481      whose first template parameter is a non-type parameter.  */
7482   for (lkp_iterator iter (MAYBE_BASELINK_FUNCTIONS (fns)); iter; ++iter)
7483     {
7484       tree fn = *iter;
7485       if (TREE_CODE (fn) == TEMPLATE_DECL)
7486           {
7487             tree tparms = DECL_TEMPLATE_PARMS (fn);
7488             tree parm = TREE_VEC_ELT (INNERMOST_TEMPLATE_PARMS (tparms), 0);
7489             if (TREE_CODE (TREE_VALUE (parm)) == PARM_DECL)
7490               {
7491                 use_member_get = true;
7492                 break;
7493               }
7494           }
7495     }
7496 
7497   if (use_member_get)
7498     {
7499       fns = lookup_template_function (fns, targs);
7500       return build_new_method_call (e, fns, /*args*/NULL,
7501                                             /*path*/NULL_TREE, LOOKUP_NORMAL,
7502                                             /*fn_p*/NULL, tf_warning_or_error);
7503     }
7504   else
7505     {
7506       vec<tree,va_gc> *args = make_tree_vector_single (e);
7507       fns = lookup_template_function (get_id, targs);
7508       fns = perform_koenig_lookup (fns, args, tf_warning_or_error);
7509       return finish_call_expr (fns, &args, /*novirt*/false,
7510                                      /*koenig*/true, tf_warning_or_error);
7511     }
7512 }
7513 
7514 /* It's impossible to recover the decltype of a tuple decomposition variable
7515    based on the actual type of the variable, so store it in a hash table.  */
7516 
7517 static GTY((cache)) tree_cache_map *decomp_type_table;
7518 static void
store_decomp_type(tree v,tree t)7519 store_decomp_type (tree v, tree t)
7520 {
7521   if (!decomp_type_table)
7522     decomp_type_table = tree_cache_map::create_ggc (13);
7523   decomp_type_table->put (v, t);
7524 }
7525 
7526 tree
lookup_decomp_type(tree v)7527 lookup_decomp_type (tree v)
7528 {
7529   return *decomp_type_table->get (v);
7530 }
7531 
7532 /* Mangle a decomposition declaration if needed.  Arguments like
7533    in cp_finish_decomp.  */
7534 
7535 void
cp_maybe_mangle_decomp(tree decl,tree first,unsigned int count)7536 cp_maybe_mangle_decomp (tree decl, tree first, unsigned int count)
7537 {
7538   if (!processing_template_decl
7539       && !error_operand_p (decl)
7540       && DECL_NAMESPACE_SCOPE_P (decl))
7541     {
7542       auto_vec<tree, 16> v;
7543       v.safe_grow (count);
7544       tree d = first;
7545       for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7546           v[count - i - 1] = d;
7547       SET_DECL_ASSEMBLER_NAME (decl, mangle_decomp (decl, v));
7548       maybe_apply_pragma_weak (decl);
7549     }
7550 }
7551 
7552 /* Finish a decomposition declaration.  DECL is the underlying declaration
7553    "e", FIRST is the head of a chain of decls for the individual identifiers
7554    chained through DECL_CHAIN in reverse order and COUNT is the number of
7555    those decls.  */
7556 
7557 void
cp_finish_decomp(tree decl,tree first,unsigned int count)7558 cp_finish_decomp (tree decl, tree first, unsigned int count)
7559 {
7560   if (error_operand_p (decl))
7561     {
7562      error_out:
7563       while (count--)
7564           {
7565             TREE_TYPE (first) = error_mark_node;
7566             if (DECL_HAS_VALUE_EXPR_P (first))
7567               {
7568                 SET_DECL_VALUE_EXPR (first, NULL_TREE);
7569                 DECL_HAS_VALUE_EXPR_P (first) = 0;
7570               }
7571             first = DECL_CHAIN (first);
7572           }
7573       if (DECL_P (decl) && DECL_NAMESPACE_SCOPE_P (decl))
7574           SET_DECL_ASSEMBLER_NAME (decl, get_identifier ("<decomp>"));
7575       return;
7576     }
7577 
7578   location_t loc = DECL_SOURCE_LOCATION (decl);
7579   if (type_dependent_expression_p (decl)
7580       /* This happens for range for when not in templates.
7581            Still add the DECL_VALUE_EXPRs for later processing.  */
7582       || (!processing_template_decl
7583             && type_uses_auto (TREE_TYPE (decl))))
7584     {
7585       for (unsigned int i = 0; i < count; i++)
7586           {
7587             if (!DECL_HAS_VALUE_EXPR_P (first))
7588               {
7589                 tree v = build_nt (ARRAY_REF, decl,
7590                                          size_int (count - i - 1),
7591                                          NULL_TREE, NULL_TREE);
7592                 SET_DECL_VALUE_EXPR (first, v);
7593                 DECL_HAS_VALUE_EXPR_P (first) = 1;
7594               }
7595             if (processing_template_decl)
7596               fit_decomposition_lang_decl (first, decl);
7597             first = DECL_CHAIN (first);
7598           }
7599       return;
7600     }
7601 
7602   auto_vec<tree, 16> v;
7603   v.safe_grow (count);
7604   tree d = first;
7605   for (unsigned int i = 0; i < count; i++, d = DECL_CHAIN (d))
7606     {
7607       v[count - i - 1] = d;
7608       fit_decomposition_lang_decl (d, decl);
7609     }
7610 
7611   tree type = TREE_TYPE (decl);
7612   tree dexp = decl;
7613 
7614   if (TREE_CODE (type) == REFERENCE_TYPE)
7615     {
7616       dexp = convert_from_reference (dexp);
7617       type = complete_type (TREE_TYPE (type));
7618       if (type == error_mark_node)
7619           goto error_out;
7620       if (!COMPLETE_TYPE_P (type))
7621           {
7622             error_at (loc, "structured binding refers to incomplete type %qT",
7623                         type);
7624             goto error_out;
7625           }
7626     }
7627 
7628   tree eltype = NULL_TREE;
7629   unsigned HOST_WIDE_INT eltscnt = 0;
7630   if (TREE_CODE (type) == ARRAY_TYPE)
7631     {
7632       tree nelts;
7633       nelts = array_type_nelts_top (type);
7634       if (nelts == error_mark_node)
7635           goto error_out;
7636       if (!tree_fits_uhwi_p (nelts))
7637           {
7638             error_at (loc, "cannot decompose variable length array %qT", type);
7639             goto error_out;
7640           }
7641       eltscnt = tree_to_uhwi (nelts);
7642       if (count != eltscnt)
7643           {
7644        cnt_mismatch:
7645             if (count > eltscnt)
7646               error_n (loc, count,
7647                          "%u name provided for structured binding",
7648                          "%u names provided for structured binding", count);
7649             else
7650               error_n (loc, count,
7651                          "only %u name provided for structured binding",
7652                          "only %u names provided for structured binding", count);
7653             inform_n (loc, eltscnt,
7654                         "while %qT decomposes into %wu element",
7655                         "while %qT decomposes into %wu elements",
7656                         type, eltscnt);
7657             goto error_out;
7658           }
7659       eltype = TREE_TYPE (type);
7660       for (unsigned int i = 0; i < count; i++)
7661           {
7662             TREE_TYPE (v[i]) = eltype;
7663             layout_decl (v[i], 0);
7664             if (processing_template_decl)
7665               continue;
7666             tree t = unshare_expr (dexp);
7667             t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7668                                 eltype, t, size_int (i), NULL_TREE,
7669                                 NULL_TREE);
7670             SET_DECL_VALUE_EXPR (v[i], t);
7671             DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7672           }
7673     }
7674   /* 2 GNU extensions.  */
7675   else if (TREE_CODE (type) == COMPLEX_TYPE)
7676     {
7677       eltscnt = 2;
7678       if (count != eltscnt)
7679           goto cnt_mismatch;
7680       eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7681       for (unsigned int i = 0; i < count; i++)
7682           {
7683             TREE_TYPE (v[i]) = eltype;
7684             layout_decl (v[i], 0);
7685             if (processing_template_decl)
7686               continue;
7687             tree t = unshare_expr (dexp);
7688             t = build1_loc (DECL_SOURCE_LOCATION (v[i]),
7689                                 i ? IMAGPART_EXPR : REALPART_EXPR, eltype,
7690                                 t);
7691             SET_DECL_VALUE_EXPR (v[i], t);
7692             DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7693           }
7694     }
7695   else if (TREE_CODE (type) == VECTOR_TYPE)
7696     {
7697       if (!TYPE_VECTOR_SUBPARTS (type).is_constant (&eltscnt))
7698           {
7699             error_at (loc, "cannot decompose variable length vector %qT", type);
7700             goto error_out;
7701           }
7702       if (count != eltscnt)
7703           goto cnt_mismatch;
7704       eltype = cp_build_qualified_type (TREE_TYPE (type), TYPE_QUALS (type));
7705       for (unsigned int i = 0; i < count; i++)
7706           {
7707             TREE_TYPE (v[i]) = eltype;
7708             layout_decl (v[i], 0);
7709             if (processing_template_decl)
7710               continue;
7711             tree t = unshare_expr (dexp);
7712             convert_vector_to_array_for_subscript (DECL_SOURCE_LOCATION (v[i]),
7713                                                              &t, size_int (i));
7714             t = build4_loc (DECL_SOURCE_LOCATION (v[i]), ARRAY_REF,
7715                                 eltype, t, size_int (i), NULL_TREE,
7716                                 NULL_TREE);
7717             SET_DECL_VALUE_EXPR (v[i], t);
7718             DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7719           }
7720     }
7721   else if (tree tsize = get_tuple_size (type))
7722     {
7723       if (tsize == error_mark_node)
7724           {
7725             error_at (loc, "%<std::tuple_size<%T>::value%> is not an integral "
7726                                "constant expression", type);
7727             goto error_out;
7728           }
7729       if (!tree_fits_uhwi_p (tsize))
7730           {
7731             error_n (loc, count,
7732                        "%u name provided for structured binding",
7733                        "%u names provided for structured binding", count);
7734             inform (loc, "while %qT decomposes into %E elements",
7735                       type, tsize);
7736             goto error_out;
7737           }
7738       eltscnt = tree_to_uhwi (tsize);
7739       if (count != eltscnt)
7740           goto cnt_mismatch;
7741       int save_read = DECL_READ_P (decl);
7742       for (unsigned i = 0; i < count; ++i)
7743           {
7744             location_t sloc = input_location;
7745             location_t dloc = DECL_SOURCE_LOCATION (v[i]);
7746 
7747             input_location = dloc;
7748             tree init = get_tuple_decomp_init (decl, i);
7749             tree eltype = (init == error_mark_node ? error_mark_node
7750                                : get_tuple_element_type (type, i));
7751             input_location = sloc;
7752 
7753             if (init == error_mark_node || eltype == error_mark_node)
7754               {
7755                 inform (dloc, "in initialization of structured binding "
7756                           "variable %qD", v[i]);
7757                 goto error_out;
7758               }
7759             /* Save the decltype away before reference collapse.  */
7760             store_decomp_type (v[i], eltype);
7761             eltype = cp_build_reference_type (eltype, !lvalue_p (init));
7762             TREE_TYPE (v[i]) = eltype;
7763             layout_decl (v[i], 0);
7764             if (DECL_HAS_VALUE_EXPR_P (v[i]))
7765               {
7766                 /* In this case the names are variables, not just proxies.  */
7767                 SET_DECL_VALUE_EXPR (v[i], NULL_TREE);
7768                 DECL_HAS_VALUE_EXPR_P (v[i]) = 0;
7769               }
7770             if (!processing_template_decl)
7771               cp_finish_decl (v[i], init, /*constexpr*/false,
7772                                   /*asm*/NULL_TREE, LOOKUP_NORMAL);
7773           }
7774       /* Ignore reads from the underlying decl performed during initialization
7775            of the individual variables.  If those will be read, we'll mark
7776            the underlying decl as read at that point.  */
7777       DECL_READ_P (decl) = save_read;
7778     }
7779   else if (TREE_CODE (type) == UNION_TYPE)
7780     {
7781       error_at (loc, "cannot decompose union type %qT", type);
7782       goto error_out;
7783     }
7784   else if (!CLASS_TYPE_P (type))
7785     {
7786       error_at (loc, "cannot decompose non-array non-class type %qT", type);
7787       goto error_out;
7788     }
7789   else if (LAMBDA_TYPE_P (type))
7790     {
7791       error_at (loc, "cannot decompose lambda closure type %qT", type);
7792       goto error_out;
7793     }
7794   else if (processing_template_decl && !COMPLETE_TYPE_P (type))
7795     pedwarn (loc, 0, "structured binding refers to incomplete class type %qT",
7796                type);
7797   else
7798     {
7799       tree btype = find_decomp_class_base (loc, type, NULL_TREE);
7800       if (btype == error_mark_node)
7801           goto error_out;
7802       else if (btype == NULL_TREE)
7803           {
7804             error_at (loc, "cannot decompose class type %qT without non-static "
7805                                "data members", type);
7806             goto error_out;
7807           }
7808       for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7809           if (TREE_CODE (field) != FIELD_DECL
7810               || DECL_ARTIFICIAL (field)
7811               || DECL_UNNAMED_BIT_FIELD (field))
7812             continue;
7813           else
7814             eltscnt++;
7815       if (count != eltscnt)
7816           goto cnt_mismatch;
7817       tree t = dexp;
7818       if (type != btype)
7819           {
7820             t = convert_to_base (t, btype, /*check_access*/true,
7821                                      /*nonnull*/false, tf_warning_or_error);
7822             type = btype;
7823           }
7824       unsigned int i = 0;
7825       for (tree field = TYPE_FIELDS (btype); field; field = TREE_CHAIN (field))
7826           if (TREE_CODE (field) != FIELD_DECL
7827               || DECL_ARTIFICIAL (field)
7828               || DECL_UNNAMED_BIT_FIELD (field))
7829             continue;
7830           else
7831             {
7832               tree tt = finish_non_static_data_member (field, unshare_expr (t),
7833                                                                  NULL_TREE);
7834               if (REFERENCE_REF_P (tt))
7835                 tt = TREE_OPERAND (tt, 0);
7836               TREE_TYPE (v[i]) = TREE_TYPE (tt);
7837               layout_decl (v[i], 0);
7838               if (!processing_template_decl)
7839                 {
7840                     SET_DECL_VALUE_EXPR (v[i], tt);
7841                     DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7842                 }
7843               i++;
7844             }
7845     }
7846   if (processing_template_decl)
7847     {
7848       for (unsigned int i = 0; i < count; i++)
7849           if (!DECL_HAS_VALUE_EXPR_P (v[i]))
7850             {
7851               tree a = build_nt (ARRAY_REF, decl, size_int (i),
7852                                      NULL_TREE, NULL_TREE);
7853               SET_DECL_VALUE_EXPR (v[i], a);
7854               DECL_HAS_VALUE_EXPR_P (v[i]) = 1;
7855             }
7856     }
7857 }
7858 
7859 /* Returns a declaration for a VAR_DECL as if:
7860 
7861      extern "C" TYPE NAME;
7862 
7863    had been seen.  Used to create compiler-generated global
7864    variables.  */
7865 
7866 static tree
declare_global_var(tree name,tree type)7867 declare_global_var (tree name, tree type)
7868 {
7869   tree decl;
7870 
7871   push_to_top_level ();
7872   decl = build_decl (input_location, VAR_DECL, name, type);
7873   TREE_PUBLIC (decl) = 1;
7874   DECL_EXTERNAL (decl) = 1;
7875   DECL_ARTIFICIAL (decl) = 1;
7876   DECL_CONTEXT (decl) = FROB_CONTEXT (global_namespace);
7877   /* If the user has explicitly declared this variable (perhaps
7878      because the code we are compiling is part of a low-level runtime
7879      library), then it is possible that our declaration will be merged
7880      with theirs by pushdecl.  */
7881   decl = pushdecl (decl);
7882   cp_finish_decl (decl, NULL_TREE, false, NULL_TREE, 0);
7883   pop_from_top_level ();
7884 
7885   return decl;
7886 }
7887 
7888 /* Returns the type for the argument to "__cxa_atexit" (or "atexit",
7889    if "__cxa_atexit" is not being used) corresponding to the function
7890    to be called when the program exits.  */
7891 
7892 static tree
get_atexit_fn_ptr_type(void)7893 get_atexit_fn_ptr_type (void)
7894 {
7895   tree fn_type;
7896 
7897   if (!atexit_fn_ptr_type_node)
7898     {
7899       tree arg_type;
7900       if (flag_use_cxa_atexit
7901             && !targetm.cxx.use_atexit_for_cxa_atexit ())
7902           /* The parameter to "__cxa_atexit" is "void (*)(void *)".  */
7903           arg_type = ptr_type_node;
7904       else
7905           /* The parameter to "atexit" is "void (*)(void)".  */
7906           arg_type = NULL_TREE;
7907 
7908       fn_type = build_function_type_list (void_type_node,
7909                                                     arg_type, NULL_TREE);
7910       atexit_fn_ptr_type_node = build_pointer_type (fn_type);
7911     }
7912 
7913   return atexit_fn_ptr_type_node;
7914 }
7915 
7916 /* Returns a pointer to the `atexit' function.  Note that if
7917    FLAG_USE_CXA_ATEXIT is nonzero, then this will actually be the new
7918    `__cxa_atexit' function specified in the IA64 C++ ABI.  */
7919 
7920 static tree
get_atexit_node(void)7921 get_atexit_node (void)
7922 {
7923   tree atexit_fndecl;
7924   tree fn_type;
7925   tree fn_ptr_type;
7926   const char *name;
7927   bool use_aeabi_atexit;
7928 
7929   if (atexit_node)
7930     return atexit_node;
7931 
7932   if (flag_use_cxa_atexit && !targetm.cxx.use_atexit_for_cxa_atexit ())
7933     {
7934       /* The declaration for `__cxa_atexit' is:
7935 
7936              int __cxa_atexit (void (*)(void *), void *, void *)
7937 
7938            We build up the argument types and then the function type
7939            itself.  */
7940       tree argtype0, argtype1, argtype2;
7941 
7942       use_aeabi_atexit = targetm.cxx.use_aeabi_atexit ();
7943       /* First, build the pointer-to-function type for the first
7944            argument.  */
7945       fn_ptr_type = get_atexit_fn_ptr_type ();
7946       /* Then, build the rest of the argument types.  */
7947       argtype2 = ptr_type_node;
7948       if (use_aeabi_atexit)
7949           {
7950             argtype1 = fn_ptr_type;
7951             argtype0 = ptr_type_node;
7952           }
7953       else
7954           {
7955             argtype1 = ptr_type_node;
7956             argtype0 = fn_ptr_type;
7957           }
7958       /* And the final __cxa_atexit type.  */
7959       fn_type = build_function_type_list (integer_type_node,
7960                                                     argtype0, argtype1, argtype2,
7961                                                     NULL_TREE);
7962       if (use_aeabi_atexit)
7963           name = "__aeabi_atexit";
7964       else
7965           name = "__cxa_atexit";
7966     }
7967   else
7968     {
7969       /* The declaration for `atexit' is:
7970 
7971              int atexit (void (*)());
7972 
7973            We build up the argument types and then the function type
7974            itself.  */
7975       fn_ptr_type = get_atexit_fn_ptr_type ();
7976       /* Build the final atexit type.  */
7977       fn_type = build_function_type_list (integer_type_node,
7978                                                     fn_ptr_type, NULL_TREE);
7979       name = "atexit";
7980     }
7981 
7982   /* Now, build the function declaration.  */
7983   push_lang_context (lang_name_c);
7984   atexit_fndecl = build_library_fn_ptr (name, fn_type, ECF_LEAF | ECF_NOTHROW);
7985   mark_used (atexit_fndecl);
7986   pop_lang_context ();
7987   atexit_node = decay_conversion (atexit_fndecl, tf_warning_or_error);
7988 
7989   return atexit_node;
7990 }
7991 
7992 /* Like get_atexit_node, but for thread-local cleanups.  */
7993 
7994 static tree
get_thread_atexit_node(void)7995 get_thread_atexit_node (void)
7996 {
7997   /* The declaration for `__cxa_thread_atexit' is:
7998 
7999      int __cxa_thread_atexit (void (*)(void *), void *, void *) */
8000   tree fn_type = build_function_type_list (integer_type_node,
8001                                                      get_atexit_fn_ptr_type (),
8002                                                      ptr_type_node, ptr_type_node,
8003                                                      NULL_TREE);
8004 
8005   /* Now, build the function declaration.  */
8006   tree atexit_fndecl = build_library_fn_ptr ("__cxa_thread_atexit", fn_type,
8007                                                        ECF_LEAF | ECF_NOTHROW);
8008   return decay_conversion (atexit_fndecl, tf_warning_or_error);
8009 }
8010 
8011 /* Returns the __dso_handle VAR_DECL.  */
8012 
8013 static tree
get_dso_handle_node(void)8014 get_dso_handle_node (void)
8015 {
8016   if (dso_handle_node)
8017     return dso_handle_node;
8018 
8019   /* Declare the variable.  */
8020   dso_handle_node = declare_global_var (get_identifier ("__dso_handle"),
8021                                                   ptr_type_node);
8022 
8023 #ifdef HAVE_GAS_HIDDEN
8024   if (dso_handle_node != error_mark_node)
8025     {
8026       DECL_VISIBILITY (dso_handle_node) = VISIBILITY_HIDDEN;
8027       DECL_VISIBILITY_SPECIFIED (dso_handle_node) = 1;
8028     }
8029 #endif
8030 
8031   return dso_handle_node;
8032 }
8033 
8034 /* Begin a new function with internal linkage whose job will be simply
8035    to destroy some particular variable.  */
8036 
8037 static GTY(()) int start_cleanup_cnt;
8038 
8039 static tree
start_cleanup_fn(void)8040 start_cleanup_fn (void)
8041 {
8042   char name[32];
8043   tree fntype;
8044   tree fndecl;
8045   bool use_cxa_atexit = flag_use_cxa_atexit
8046                               && !targetm.cxx.use_atexit_for_cxa_atexit ();
8047 
8048   push_to_top_level ();
8049 
8050   /* No need to mangle this.  */
8051   push_lang_context (lang_name_c);
8052 
8053   /* Build the name of the function.  */
8054   sprintf (name, "__tcf_%d", start_cleanup_cnt++);
8055   /* Build the function declaration.  */
8056   fntype = TREE_TYPE (get_atexit_fn_ptr_type ());
8057   fndecl = build_lang_decl (FUNCTION_DECL, get_identifier (name), fntype);
8058   /* It's a function with internal linkage, generated by the
8059      compiler.  */
8060   TREE_PUBLIC (fndecl) = 0;
8061   DECL_ARTIFICIAL (fndecl) = 1;
8062   /* Make the function `inline' so that it is only emitted if it is
8063      actually needed.  It is unlikely that it will be inlined, since
8064      it is only called via a function pointer, but we avoid unnecessary
8065      emissions this way.  */
8066   DECL_DECLARED_INLINE_P (fndecl) = 1;
8067   DECL_INTERFACE_KNOWN (fndecl) = 1;
8068   /* Build the parameter.  */
8069   if (use_cxa_atexit)
8070     {
8071       tree parmdecl = cp_build_parm_decl (fndecl, NULL_TREE, ptr_type_node);
8072       TREE_USED (parmdecl) = 1;
8073       DECL_READ_P (parmdecl) = 1;
8074       DECL_ARGUMENTS (fndecl) = parmdecl;
8075     }
8076 
8077   pushdecl (fndecl);
8078   start_preparsed_function (fndecl, NULL_TREE, SF_PRE_PARSED);
8079 
8080   pop_lang_context ();
8081 
8082   return current_function_decl;
8083 }
8084 
8085 /* Finish the cleanup function begun by start_cleanup_fn.  */
8086 
8087 static void
end_cleanup_fn(void)8088 end_cleanup_fn (void)
8089 {
8090   expand_or_defer_fn (finish_function (/*inline_p=*/false));
8091 
8092   pop_from_top_level ();
8093 }
8094 
8095 /* Generate code to handle the destruction of DECL, an object with
8096    static storage duration.  */
8097 
8098 tree
register_dtor_fn(tree decl)8099 register_dtor_fn (tree decl)
8100 {
8101   tree cleanup;
8102   tree addr;
8103   tree compound_stmt;
8104   tree fcall;
8105   tree type;
8106   bool ob_parm, dso_parm, use_dtor;
8107   tree arg0, arg1, arg2;
8108   tree atex_node;
8109 
8110   type = TREE_TYPE (decl);
8111   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
8112     return void_node;
8113 
8114   /* If we're using "__cxa_atexit" (or "__cxa_thread_atexit" or
8115      "__aeabi_atexit"), and DECL is a class object, we can just pass the
8116      destructor to "__cxa_atexit"; we don't have to build a temporary
8117      function to do the cleanup.  */
8118   dso_parm = (flag_use_cxa_atexit
8119                 && !targetm.cxx.use_atexit_for_cxa_atexit ());
8120   ob_parm = (CP_DECL_THREAD_LOCAL_P (decl) || dso_parm);
8121   use_dtor = ob_parm && CLASS_TYPE_P (type);
8122   if (use_dtor)
8123     {
8124       cleanup = get_class_binding (type, complete_dtor_identifier);
8125 
8126       /* Make sure it is accessible.  */
8127       perform_or_defer_access_check (TYPE_BINFO (type), cleanup, cleanup,
8128                                              tf_warning_or_error);
8129     }
8130   else
8131     {
8132       /* Call build_cleanup before we enter the anonymous function so
8133            that any access checks will be done relative to the current
8134            scope, rather than the scope of the anonymous function.  */
8135       build_cleanup (decl);
8136 
8137       /* Now start the function.  */
8138       cleanup = start_cleanup_fn ();
8139 
8140       /* Now, recompute the cleanup.  It may contain SAVE_EXPRs that refer
8141            to the original function, rather than the anonymous one.  That
8142            will make the back end think that nested functions are in use,
8143            which causes confusion.  */
8144       push_deferring_access_checks (dk_no_check);
8145       fcall = build_cleanup (decl);
8146       pop_deferring_access_checks ();
8147 
8148       /* Create the body of the anonymous function.  */
8149       compound_stmt = begin_compound_stmt (BCS_FN_BODY);
8150       finish_expr_stmt (fcall);
8151       finish_compound_stmt (compound_stmt);
8152       end_cleanup_fn ();
8153     }
8154 
8155   /* Call atexit with the cleanup function.  */
8156   mark_used (cleanup);
8157   cleanup = build_address (cleanup);
8158 
8159   if (CP_DECL_THREAD_LOCAL_P (decl))
8160     atex_node = get_thread_atexit_node ();
8161   else
8162     atex_node = get_atexit_node ();
8163 
8164   if (use_dtor)
8165     {
8166       /* We must convert CLEANUP to the type that "__cxa_atexit"
8167            expects.  */
8168       cleanup = build_nop (get_atexit_fn_ptr_type (), cleanup);
8169       /* "__cxa_atexit" will pass the address of DECL to the
8170            cleanup function.  */
8171       mark_used (decl);
8172       addr = build_address (decl);
8173       /* The declared type of the parameter to "__cxa_atexit" is
8174            "void *".  For plain "T*", we could just let the
8175            machinery in cp_build_function_call convert it -- but if the
8176            type is "cv-qualified T *", then we need to convert it
8177            before passing it in, to avoid spurious errors.  */
8178       addr = build_nop (ptr_type_node, addr);
8179     }
8180   else
8181     /* Since the cleanup functions we build ignore the address
8182        they're given, there's no reason to pass the actual address
8183        in, and, in general, it's cheaper to pass NULL than any
8184        other value.  */
8185     addr = null_pointer_node;
8186 
8187   if (dso_parm)
8188     arg2 = cp_build_addr_expr (get_dso_handle_node (),
8189                                      tf_warning_or_error);
8190   else if (ob_parm)
8191     /* Just pass NULL to the dso handle parm if we don't actually
8192        have a DSO handle on this target.  */
8193     arg2 = null_pointer_node;
8194   else
8195     arg2 = NULL_TREE;
8196 
8197   if (ob_parm)
8198     {
8199       if (!CP_DECL_THREAD_LOCAL_P (decl)
8200             && targetm.cxx.use_aeabi_atexit ())
8201           {
8202             arg1 = cleanup;
8203             arg0 = addr;
8204           }
8205       else
8206           {
8207             arg1 = addr;
8208             arg0 = cleanup;
8209           }
8210     }
8211   else
8212     {
8213       arg0 = cleanup;
8214       arg1 = NULL_TREE;
8215     }
8216   return cp_build_function_call_nary (atex_node, tf_warning_or_error,
8217                                               arg0, arg1, arg2, NULL_TREE);
8218 }
8219 
8220 /* DECL is a VAR_DECL with static storage duration.  INIT, if present,
8221    is its initializer.  Generate code to handle the construction
8222    and destruction of DECL.  */
8223 
8224 static void
expand_static_init(tree decl,tree init)8225 expand_static_init (tree decl, tree init)
8226 {
8227   gcc_assert (VAR_P (decl));
8228   gcc_assert (TREE_STATIC (decl));
8229 
8230   /* Some variables require no dynamic initialization.  */
8231   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (TREE_TYPE (decl)))
8232     {
8233       /* Make sure the destructor is callable.  */
8234       cxx_maybe_build_cleanup (decl, tf_warning_or_error);
8235       if (!init)
8236           return;
8237     }
8238 
8239   if (CP_DECL_THREAD_LOCAL_P (decl) && DECL_GNU_TLS_P (decl)
8240       && !DECL_FUNCTION_SCOPE_P (decl))
8241     {
8242       if (init)
8243           error ("non-local variable %qD declared %<__thread%> "
8244                  "needs dynamic initialization", decl);
8245       else
8246           error ("non-local variable %qD declared %<__thread%> "
8247                  "has a non-trivial destructor", decl);
8248       static bool informed;
8249       if (!informed)
8250           {
8251             inform (DECL_SOURCE_LOCATION (decl),
8252                       "C++11 %<thread_local%> allows dynamic initialization "
8253                       "and destruction");
8254             informed = true;
8255           }
8256       return;
8257     }
8258 
8259   if (DECL_FUNCTION_SCOPE_P (decl))
8260     {
8261       /* Emit code to perform this initialization but once.  */
8262       tree if_stmt = NULL_TREE, inner_if_stmt = NULL_TREE;
8263       tree then_clause = NULL_TREE, inner_then_clause = NULL_TREE;
8264       tree guard, guard_addr;
8265       tree flag, begin;
8266       /* We don't need thread-safety code for thread-local vars.  */
8267       bool thread_guard = (flag_threadsafe_statics
8268                                  && !CP_DECL_THREAD_LOCAL_P (decl));
8269 
8270       /* Emit code to perform this initialization but once.  This code
8271            looks like:
8272 
8273              static <type> guard;
8274              if (!__atomic_load (guard.first_byte)) {
8275                if (__cxa_guard_acquire (&guard)) {
8276                  bool flag = false;
8277                  try {
8278                      // Do initialization.
8279                      flag = true; __cxa_guard_release (&guard);
8280                      // Register variable for destruction at end of program.
8281                  } catch {
8282                      if (!flag) __cxa_guard_abort (&guard);
8283                  }
8284                }
8285              }
8286 
8287            Note that the `flag' variable is only set to 1 *after* the
8288            initialization is complete.  This ensures that an exception,
8289            thrown during the construction, will cause the variable to
8290            reinitialized when we pass through this code again, as per:
8291 
8292              [stmt.dcl]
8293 
8294              If the initialization exits by throwing an exception, the
8295              initialization is not complete, so it will be tried again
8296              the next time control enters the declaration.
8297 
8298            This process should be thread-safe, too; multiple threads
8299            should not be able to initialize the variable more than
8300            once.  */
8301 
8302       /* Create the guard variable.  */
8303       guard = get_guard (decl);
8304 
8305       /* Begin the conditional initialization.  */
8306       if_stmt = begin_if_stmt ();
8307 
8308       finish_if_stmt_cond (get_guard_cond (guard, thread_guard), if_stmt);
8309       then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8310 
8311       if (thread_guard)
8312           {
8313             tree vfntype = NULL_TREE;
8314             tree acquire_name, release_name, abort_name;
8315             tree acquire_fn, release_fn, abort_fn;
8316             guard_addr = build_address (guard);
8317 
8318             acquire_name = get_identifier ("__cxa_guard_acquire");
8319             release_name = get_identifier ("__cxa_guard_release");
8320             abort_name = get_identifier ("__cxa_guard_abort");
8321             acquire_fn = get_global_binding (acquire_name);
8322             release_fn = get_global_binding (release_name);
8323             abort_fn = get_global_binding (abort_name);
8324             if (!acquire_fn)
8325               acquire_fn = push_library_fn
8326                 (acquire_name, build_function_type_list (integer_type_node,
8327                                                                    TREE_TYPE (guard_addr),
8328                                                                    NULL_TREE),
8329                  NULL_TREE, ECF_NOTHROW | ECF_LEAF);
8330             if (!release_fn || !abort_fn)
8331               vfntype = build_function_type_list (void_type_node,
8332                                                             TREE_TYPE (guard_addr),
8333                                                             NULL_TREE);
8334             if (!release_fn)
8335               release_fn = push_library_fn (release_name, vfntype, NULL_TREE,
8336                                                      ECF_NOTHROW | ECF_LEAF);
8337             if (!abort_fn)
8338               abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE,
8339                                                   ECF_NOTHROW | ECF_LEAF);
8340 
8341             inner_if_stmt = begin_if_stmt ();
8342             finish_if_stmt_cond (build_call_n (acquire_fn, 1, guard_addr),
8343                                      inner_if_stmt);
8344 
8345             inner_then_clause = begin_compound_stmt (BCS_NO_SCOPE);
8346             begin = get_target_expr (boolean_false_node);
8347             flag = TARGET_EXPR_SLOT (begin);
8348 
8349             TARGET_EXPR_CLEANUP (begin)
8350               = build3 (COND_EXPR, void_type_node, flag,
8351                           void_node,
8352                           build_call_n (abort_fn, 1, guard_addr));
8353             CLEANUP_EH_ONLY (begin) = 1;
8354 
8355             /* Do the initialization itself.  */
8356             init = add_stmt_to_compound (begin, init);
8357             init = add_stmt_to_compound
8358               (init, build2 (MODIFY_EXPR, void_type_node, flag, boolean_true_node));
8359             init = add_stmt_to_compound
8360               (init, build_call_n (release_fn, 1, guard_addr));
8361           }
8362       else
8363           init = add_stmt_to_compound (init, set_guard (guard));
8364 
8365       /* Use atexit to register a function for destroying this static
8366            variable.  */
8367       init = add_stmt_to_compound (init, register_dtor_fn (decl));
8368 
8369       finish_expr_stmt (init);
8370 
8371       if (thread_guard)
8372           {
8373             finish_compound_stmt (inner_then_clause);
8374             finish_then_clause (inner_if_stmt);
8375             finish_if_stmt (inner_if_stmt);
8376           }
8377 
8378       finish_compound_stmt (then_clause);
8379       finish_then_clause (if_stmt);
8380       finish_if_stmt (if_stmt);
8381     }
8382   else if (CP_DECL_THREAD_LOCAL_P (decl))
8383     tls_aggregates = tree_cons (init, decl, tls_aggregates);
8384   else
8385     static_aggregates = tree_cons (init, decl, static_aggregates);
8386 }
8387 
8388 
8389 /* Make TYPE a complete type based on INITIAL_VALUE.
8390    Return 0 if successful, 1 if INITIAL_VALUE can't be deciphered,
8391    2 if there was no information (in which case assume 0 if DO_DEFAULT),
8392    3 if the initializer list is empty (in pedantic mode). */
8393 
8394 int
cp_complete_array_type(tree * ptype,tree initial_value,bool do_default)8395 cp_complete_array_type (tree *ptype, tree initial_value, bool do_default)
8396 {
8397   int failure;
8398   tree type, elt_type;
8399 
8400   /* Don't get confused by a CONSTRUCTOR for some other type.  */
8401   if (initial_value && TREE_CODE (initial_value) == CONSTRUCTOR
8402       && !BRACE_ENCLOSED_INITIALIZER_P (initial_value)
8403       && TREE_CODE (TREE_TYPE (initial_value)) != ARRAY_TYPE)
8404     return 1;
8405 
8406   if (initial_value)
8407     {
8408       unsigned HOST_WIDE_INT i;
8409       tree value;
8410 
8411       /* An array of character type can be initialized from a
8412            brace-enclosed string constant.
8413 
8414            FIXME: this code is duplicated from reshape_init. Probably
8415            we should just call reshape_init here?  */
8416       if (char_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (*ptype)))
8417             && TREE_CODE (initial_value) == CONSTRUCTOR
8418             && !vec_safe_is_empty (CONSTRUCTOR_ELTS (initial_value)))
8419           {
8420             vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (initial_value);
8421             tree value = (*v)[0].value;
8422 
8423             if (TREE_CODE (value) == STRING_CST
8424                 && v->length () == 1)
8425               initial_value = value;
8426           }
8427 
8428       /* If any of the elements are parameter packs, we can't actually
8429            complete this type now because the array size is dependent.  */
8430       if (TREE_CODE (initial_value) == CONSTRUCTOR)
8431           {
8432             FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (initial_value),
8433                                               i, value)
8434               {
8435                 if (PACK_EXPANSION_P (value))
8436                     return 0;
8437               }
8438           }
8439     }
8440 
8441   failure = complete_array_type (ptype, initial_value, do_default);
8442 
8443   /* We can create the array before the element type is complete, which
8444      means that we didn't have these two bits set in the original type
8445      either.  In completing the type, we are expected to propagate these
8446      bits.  See also complete_type which does the same thing for arrays
8447      of fixed size.  */
8448   type = *ptype;
8449   if (type != error_mark_node && TYPE_DOMAIN (type))
8450     {
8451       elt_type = TREE_TYPE (type);
8452       TYPE_NEEDS_CONSTRUCTING (type) = TYPE_NEEDS_CONSTRUCTING (elt_type);
8453       TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
8454           = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (elt_type);
8455     }
8456 
8457   return failure;
8458 }
8459 
8460 /* As above, but either give an error or reject zero-size arrays, depending
8461    on COMPLAIN.  */
8462 
8463 int
cp_complete_array_type_or_error(tree * ptype,tree initial_value,bool do_default,tsubst_flags_t complain)8464 cp_complete_array_type_or_error (tree *ptype, tree initial_value,
8465                                          bool do_default, tsubst_flags_t complain)
8466 {
8467   int failure;
8468   bool sfinae = !(complain & tf_error);
8469   /* In SFINAE context we can't be lenient about zero-size arrays.  */
8470   if (sfinae)
8471     ++pedantic;
8472   failure = cp_complete_array_type (ptype, initial_value, do_default);
8473   if (sfinae)
8474     --pedantic;
8475   if (failure)
8476     {
8477       if (sfinae)
8478           /* Not an error.  */;
8479       else if (failure == 1)
8480           error ("initializer fails to determine size of %qT", *ptype);
8481       else if (failure == 2)
8482           {
8483             if (do_default)
8484               error ("array size missing in %qT", *ptype);
8485           }
8486       else if (failure == 3)
8487           error ("zero-size array %qT", *ptype);
8488       *ptype = error_mark_node;
8489     }
8490   return failure;
8491 }
8492 
8493 /* Return zero if something is declared to be a member of type
8494    CTYPE when in the context of CUR_TYPE.  STRING is the error
8495    message to print in that case.  Otherwise, quietly return 1.  */
8496 
8497 static int
member_function_or_else(tree ctype,tree cur_type,enum overload_flags flags)8498 member_function_or_else (tree ctype, tree cur_type, enum overload_flags flags)
8499 {
8500   if (ctype && ctype != cur_type)
8501     {
8502       if (flags == DTOR_FLAG)
8503           error ("destructor for alien class %qT cannot be a member", ctype);
8504       else
8505           error ("constructor for alien class %qT cannot be a member", ctype);
8506       return 0;
8507     }
8508   return 1;
8509 }
8510 
8511 /* Subroutine of `grokdeclarator'.  */
8512 
8513 /* Generate errors possibly applicable for a given set of specifiers.
8514    This is for ARM $7.1.2.  */
8515 
8516 static void
bad_specifiers(tree object,enum bad_spec_place type,int virtualp,int quals,int inlinep,int friendp,int raises)8517 bad_specifiers (tree object,
8518                     enum bad_spec_place type,
8519                     int virtualp,
8520                     int quals,
8521                     int inlinep,
8522                     int friendp,
8523                     int raises)
8524 {
8525   switch (type)
8526     {
8527       case BSP_VAR:
8528           if (virtualp)
8529             error ("%qD declared as a %<virtual%> variable", object);
8530           if (quals)
8531             error ("%<const%> and %<volatile%> function specifiers on "
8532                    "%qD invalid in variable declaration", object);
8533           break;
8534       case BSP_PARM:
8535           if (virtualp)
8536             error ("%qD declared as a %<virtual%> parameter", object);
8537           if (inlinep)
8538             error ("%qD declared as an %<inline%> parameter", object);
8539           if (quals)
8540             error ("%<const%> and %<volatile%> function specifiers on "
8541                      "%qD invalid in parameter declaration", object);
8542           break;
8543       case BSP_TYPE:
8544           if (virtualp)
8545             error ("%qD declared as a %<virtual%> type", object);
8546           if (inlinep)
8547             error ("%qD declared as an %<inline%> type", object);
8548           if (quals)
8549             error ("%<const%> and %<volatile%> function specifiers on "
8550                      "%qD invalid in type declaration", object);
8551           break;
8552       case BSP_FIELD:
8553           if (virtualp)
8554             error ("%qD declared as a %<virtual%> field", object);
8555           if (inlinep)
8556             error ("%qD declared as an %<inline%> field", object);
8557           if (quals)
8558             error ("%<const%> and %<volatile%> function specifiers on "
8559                      "%qD invalid in field declaration", object);
8560           break;
8561       default:
8562         gcc_unreachable();
8563     }
8564   if (friendp)
8565     error ("%q+D declared as a friend", object);
8566   if (raises
8567       && !flag_noexcept_type
8568       && (TREE_CODE (object) == TYPE_DECL
8569             || (!TYPE_PTRFN_P (TREE_TYPE (object))
8570                 && !TYPE_REFFN_P (TREE_TYPE (object))
8571                 && !TYPE_PTRMEMFUNC_P (TREE_TYPE (object)))))
8572     error ("%q+D declared with an exception specification", object);
8573 }
8574 
8575 /* DECL is a member function or static data member and is presently
8576    being defined.  Check that the definition is taking place in a
8577    valid namespace.  */
8578 
8579 static void
check_class_member_definition_namespace(tree decl)8580 check_class_member_definition_namespace (tree decl)
8581 {
8582   /* These checks only apply to member functions and static data
8583      members.  */
8584   gcc_assert (VAR_OR_FUNCTION_DECL_P (decl));
8585   /* We check for problems with specializations in pt.c in
8586      check_specialization_namespace, where we can issue better
8587      diagnostics.  */
8588   if (processing_specialization)
8589     return;
8590   /* We check this in check_explicit_instantiation_namespace.  */
8591   if (processing_explicit_instantiation)
8592     return;
8593   /* [class.mfct]
8594 
8595      A member function definition that appears outside of the
8596      class definition shall appear in a namespace scope enclosing
8597      the class definition.
8598 
8599      [class.static.data]
8600 
8601      The definition for a static data member shall appear in a
8602      namespace scope enclosing the member's class definition.  */
8603   if (!is_ancestor (current_namespace, DECL_CONTEXT (decl)))
8604     permerror (input_location, "definition of %qD is not in namespace enclosing %qT",
8605                  decl, DECL_CONTEXT (decl));
8606 }
8607 
8608 /* Build a PARM_DECL for the "this" parameter of FN.  TYPE is the
8609    METHOD_TYPE for a non-static member function; QUALS are the
8610    cv-qualifiers that apply to the function.  */
8611 
8612 tree
build_this_parm(tree fn,tree type,cp_cv_quals quals)8613 build_this_parm (tree fn, tree type, cp_cv_quals quals)
8614 {
8615   tree this_type;
8616   tree qual_type;
8617   tree parm;
8618   cp_cv_quals this_quals;
8619 
8620   if (CLASS_TYPE_P (type))
8621     {
8622       this_type
8623           = cp_build_qualified_type (type, quals & ~TYPE_QUAL_RESTRICT);
8624       this_type = build_pointer_type (this_type);
8625     }
8626   else
8627     this_type = type_of_this_parm (type);
8628   /* The `this' parameter is implicitly `const'; it cannot be
8629      assigned to.  */
8630   this_quals = (quals & TYPE_QUAL_RESTRICT) | TYPE_QUAL_CONST;
8631   qual_type = cp_build_qualified_type (this_type, this_quals);
8632   parm = build_artificial_parm (fn, this_identifier, qual_type);
8633   cp_apply_type_quals_to_decl (this_quals, parm);
8634   return parm;
8635 }
8636 
8637 /* DECL is a static member function.  Complain if it was declared
8638    with function-cv-quals.  */
8639 
8640 static void
check_static_quals(tree decl,cp_cv_quals quals)8641 check_static_quals (tree decl, cp_cv_quals quals)
8642 {
8643   if (quals != TYPE_UNQUALIFIED)
8644     error ("static member function %q#D declared with type qualifiers",
8645              decl);
8646 }
8647 
8648 // Check that FN takes no arguments and returns bool.
8649 static void
check_concept_fn(tree fn)8650 check_concept_fn (tree fn)
8651 {
8652   // A constraint is nullary.
8653   if (DECL_ARGUMENTS (fn))
8654     error ("concept %q#D declared with function parameters", fn);
8655 
8656   // The declared return type of the concept shall be bool, and
8657   // it shall not be deduced from it definition.
8658   tree type = TREE_TYPE (TREE_TYPE (fn));
8659   if (is_auto (type))
8660     error ("concept %q#D declared with a deduced return type", fn);
8661   else if (type != boolean_type_node)
8662     error ("concept %q#D with non-%<bool%> return type %qT", fn, type);
8663 }
8664 
8665 /* Helper function.  Replace the temporary this parameter injected
8666    during cp_finish_omp_declare_simd with the real this parameter.  */
8667 
8668 static tree
declare_simd_adjust_this(tree * tp,int * walk_subtrees,void * data)8669 declare_simd_adjust_this (tree *tp, int *walk_subtrees, void *data)
8670 {
8671   tree this_parm = (tree) data;
8672   if (TREE_CODE (*tp) == PARM_DECL
8673       && DECL_NAME (*tp) == this_identifier
8674       && *tp != this_parm)
8675     *tp = this_parm;
8676   else if (TYPE_P (*tp))
8677     *walk_subtrees = 0;
8678   return NULL_TREE;
8679 }
8680 
8681 /* CTYPE is class type, or null if non-class.
8682    TYPE is type this FUNCTION_DECL should have, either FUNCTION_TYPE
8683    or METHOD_TYPE.
8684    DECLARATOR is the function's name.
8685    PARMS is a chain of PARM_DECLs for the function.
8686    VIRTUALP is truthvalue of whether the function is virtual or not.
8687    FLAGS are to be passed through to `grokclassfn'.
8688    QUALS are qualifiers indicating whether the function is `const'
8689    or `volatile'.
8690    RAISES is a list of exceptions that this function can raise.
8691    CHECK is 1 if we must find this method in CTYPE, 0 if we should
8692    not look, and -1 if we should not call `grokclassfn' at all.
8693 
8694    SFK is the kind of special function (if any) for the new function.
8695 
8696    Returns `NULL_TREE' if something goes wrong, after issuing
8697    applicable error messages.  */
8698 
8699 static tree
grokfndecl(tree ctype,tree type,tree declarator,tree parms,tree orig_declarator,tree decl_reqs,int virtualp,enum overload_flags flags,cp_cv_quals quals,cp_ref_qualifier rqual,tree raises,int check,int friendp,int publicp,int inlinep,bool deletedp,special_function_kind sfk,bool funcdef_flag,int template_count,tree in_namespace,tree * attrlist,location_t location)8700 grokfndecl (tree ctype,
8701               tree type,
8702               tree declarator,
8703               tree parms,
8704               tree orig_declarator,
8705               tree decl_reqs,
8706               int virtualp,
8707               enum overload_flags flags,
8708               cp_cv_quals quals,
8709               cp_ref_qualifier rqual,
8710               tree raises,
8711               int check,
8712               int friendp,
8713               int publicp,
8714               int inlinep,
8715               bool deletedp,
8716               special_function_kind sfk,
8717               bool funcdef_flag,
8718               int template_count,
8719               tree in_namespace,
8720               tree* attrlist,
8721               location_t location)
8722 {
8723   tree decl;
8724   int staticp = ctype && TREE_CODE (type) == FUNCTION_TYPE;
8725   tree t;
8726 
8727   // Was the concept specifier present?
8728   bool concept_p = inlinep & 4;
8729 
8730   // Concept declarations must have a corresponding definition.
8731   if (concept_p && !funcdef_flag)
8732     {
8733       error ("concept %qD has no definition", declarator);
8734       return NULL_TREE;
8735     }
8736 
8737   if (rqual)
8738     type = build_ref_qualified_type (type, rqual);
8739   if (raises)
8740     type = build_exception_variant (type, raises);
8741 
8742   decl = build_lang_decl (FUNCTION_DECL, declarator, type);
8743 
8744   /* Set the constraints on the declaration. */
8745   if (flag_concepts)
8746     {
8747       tree tmpl_reqs = NULL_TREE;
8748       if (processing_template_decl > template_class_depth (ctype))
8749         tmpl_reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
8750 
8751       /* Adjust the required expression into a constraint. */
8752       if (decl_reqs)
8753         decl_reqs = normalize_expression (decl_reqs);
8754 
8755       tree ci = build_constraints (tmpl_reqs, decl_reqs);
8756       set_constraints (decl, ci);
8757     }
8758 
8759   /* If we have an explicit location, use it, otherwise use whatever
8760      build_lang_decl used (probably input_location).  */
8761   if (location != UNKNOWN_LOCATION)
8762     DECL_SOURCE_LOCATION (decl) = location;
8763 
8764   if (TREE_CODE (type) == METHOD_TYPE)
8765     {
8766       tree parm = build_this_parm (decl, type, quals);
8767       DECL_CHAIN (parm) = parms;
8768       parms = parm;
8769 
8770       /* Allocate space to hold the vptr bit if needed.  */
8771       SET_DECL_ALIGN (decl, MINIMUM_METHOD_BOUNDARY);
8772     }
8773 
8774   DECL_ARGUMENTS (decl) = parms;
8775   for (t = parms; t; t = DECL_CHAIN (t))
8776     DECL_CONTEXT (t) = decl;
8777 
8778   /* Propagate volatile out from type to decl.  */
8779   if (TYPE_VOLATILE (type))
8780     TREE_THIS_VOLATILE (decl) = 1;
8781 
8782   /* Setup decl according to sfk.  */
8783   switch (sfk)
8784     {
8785     case sfk_constructor:
8786     case sfk_copy_constructor:
8787     case sfk_move_constructor:
8788       DECL_CXX_CONSTRUCTOR_P (decl) = 1;
8789       DECL_NAME (decl) = ctor_identifier;
8790       break;
8791     case sfk_destructor:
8792       DECL_CXX_DESTRUCTOR_P (decl) = 1;
8793       DECL_NAME (decl) = dtor_identifier;
8794       break;
8795     default:
8796       break;
8797     }
8798 
8799   if (friendp && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)
8800     {
8801       if (funcdef_flag)
8802           error ("defining explicit specialization %qD in friend declaration",
8803                  orig_declarator);
8804       else
8805           {
8806             tree fns = TREE_OPERAND (orig_declarator, 0);
8807             tree args = TREE_OPERAND (orig_declarator, 1);
8808 
8809             if (PROCESSING_REAL_TEMPLATE_DECL_P ())
8810               {
8811                 /* Something like `template <class T> friend void f<T>()'.  */
8812                 error ("invalid use of template-id %qD in declaration "
8813                          "of primary template",
8814                          orig_declarator);
8815                 return NULL_TREE;
8816               }
8817 
8818 
8819             /* A friend declaration of the form friend void f<>().  Record
8820                the information in the TEMPLATE_ID_EXPR.  */
8821             SET_DECL_IMPLICIT_INSTANTIATION (decl);
8822 
8823             gcc_assert (identifier_p (fns) || TREE_CODE (fns) == OVERLOAD);
8824             DECL_TEMPLATE_INFO (decl) = build_template_info (fns, args);
8825 
8826             for (t = TYPE_ARG_TYPES (TREE_TYPE (decl)); t; t = TREE_CHAIN (t))
8827               if (TREE_PURPOSE (t)
8828                     && TREE_CODE (TREE_PURPOSE (t)) == DEFAULT_ARG)
8829               {
8830                 error ("default arguments are not allowed in declaration "
8831                          "of friend template specialization %qD",
8832                          decl);
8833                 return NULL_TREE;
8834               }
8835 
8836             if (inlinep & 1)
8837               {
8838                 error ("%<inline%> is not allowed in declaration of friend "
8839                          "template specialization %qD",
8840                          decl);
8841                 return NULL_TREE;
8842               }
8843           }
8844     }
8845 
8846   /* If this decl has namespace scope, set that up.  */
8847   if (in_namespace)
8848     set_decl_namespace (decl, in_namespace, friendp);
8849   else if (!ctype)
8850     DECL_CONTEXT (decl) = FROB_CONTEXT (current_decl_namespace ());
8851 
8852   /* `main' and builtins have implicit 'C' linkage.  */
8853   if (ctype == NULL_TREE
8854       && DECL_FILE_SCOPE_P (decl)
8855       && current_lang_name == lang_name_cplusplus
8856       && (MAIN_NAME_P (declarator)
8857             || (IDENTIFIER_LENGTH (declarator) > 10
8858                 && IDENTIFIER_POINTER (declarator)[0] == '_'
8859                 && IDENTIFIER_POINTER (declarator)[1] == '_'
8860                 && strncmp (IDENTIFIER_POINTER (declarator)+2,
8861                                 "builtin_", 8) == 0)
8862             || (targetcm.cxx_implicit_extern_c
8863                 && (targetcm.cxx_implicit_extern_c
8864                       (IDENTIFIER_POINTER (declarator))))))
8865     SET_DECL_LANGUAGE (decl, lang_c);
8866 
8867   /* Should probably propagate const out from type to decl I bet (mrs).  */
8868   if (staticp)
8869     {
8870       DECL_STATIC_FUNCTION_P (decl) = 1;
8871       DECL_CONTEXT (decl) = ctype;
8872     }
8873 
8874   if (deletedp)
8875     DECL_DELETED_FN (decl) = 1;
8876 
8877   if (ctype)
8878     {
8879       DECL_CONTEXT (decl) = ctype;
8880       if (funcdef_flag)
8881           check_class_member_definition_namespace (decl);
8882     }
8883 
8884   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
8885     {
8886       if (PROCESSING_REAL_TEMPLATE_DECL_P())
8887           error ("cannot declare %<::main%> to be a template");
8888       if (inlinep & 1)
8889           error ("cannot declare %<::main%> to be inline");
8890       if (inlinep & 2)
8891           error ("cannot declare %<::main%> to be %<constexpr%>");
8892       if (!publicp)
8893           error ("cannot declare %<::main%> to be static");
8894       inlinep = 0;
8895       publicp = 1;
8896     }
8897 
8898   /* Members of anonymous types and local classes have no linkage; make
8899      them internal.  If a typedef is made later, this will be changed.  */
8900   if (ctype && (!TREE_PUBLIC (TYPE_MAIN_DECL (ctype))
8901                     || decl_function_context (TYPE_MAIN_DECL (ctype))))
8902     publicp = 0;
8903 
8904   if (publicp && cxx_dialect == cxx98)
8905     {
8906       /* [basic.link]: A name with no linkage (notably, the name of a class
8907            or enumeration declared in a local scope) shall not be used to
8908            declare an entity with linkage.
8909 
8910            DR 757 relaxes this restriction for C++0x.  */
8911       no_linkage_error (decl);
8912     }
8913 
8914   TREE_PUBLIC (decl) = publicp;
8915   if (! publicp)
8916     {
8917       DECL_INTERFACE_KNOWN (decl) = 1;
8918       DECL_NOT_REALLY_EXTERN (decl) = 1;
8919     }
8920 
8921   /* If the declaration was declared inline, mark it as such.  */
8922   if (inlinep)
8923     {
8924       DECL_DECLARED_INLINE_P (decl) = 1;
8925       if (publicp)
8926           DECL_COMDAT (decl) = 1;
8927     }
8928   if (inlinep & 2)
8929     DECL_DECLARED_CONSTEXPR_P (decl) = true;
8930 
8931   // If the concept declaration specifier was found, check
8932   // that the declaration satisfies the necessary requirements.
8933   if (concept_p)
8934     {
8935       DECL_DECLARED_CONCEPT_P (decl) = true;
8936       check_concept_fn (decl);
8937     }
8938 
8939   DECL_EXTERNAL (decl) = 1;
8940   if (TREE_CODE (type) == FUNCTION_TYPE)
8941     {
8942       if (quals || rqual)
8943           TREE_TYPE (decl) = apply_memfn_quals (TREE_TYPE (decl),
8944                                                         TYPE_UNQUALIFIED,
8945                                                         REF_QUAL_NONE);
8946 
8947       if (quals)
8948           {
8949             error (ctype
8950                      ? G_("static member function %qD cannot have cv-qualifier")
8951                      : G_("non-member function %qD cannot have cv-qualifier"),
8952                      decl);
8953             quals = TYPE_UNQUALIFIED;
8954           }
8955 
8956       if (rqual)
8957           {
8958             error (ctype
8959                      ? G_("static member function %qD cannot have ref-qualifier")
8960                      : G_("non-member function %qD cannot have ref-qualifier"),
8961                      decl);
8962             rqual = REF_QUAL_NONE;
8963           }
8964     }
8965 
8966   if (deduction_guide_p (decl))
8967     {
8968       if (!DECL_NAMESPACE_SCOPE_P (decl))
8969           {
8970             error_at (location, "deduction guide %qD must be declared at "
8971                         "namespace scope", decl);
8972             return NULL_TREE;
8973           }
8974       if (funcdef_flag)
8975           error_at (location,
8976                       "deduction guide %qD must not have a function body", decl);
8977     }
8978   else if (IDENTIFIER_ANY_OP_P (DECL_NAME (decl))
8979              && !grok_op_properties (decl, /*complain=*/true))
8980     return NULL_TREE;
8981   else if (UDLIT_OPER_P (DECL_NAME (decl)))
8982     {
8983       bool long_long_unsigned_p;
8984       bool long_double_p;
8985       const char *suffix = NULL;
8986       /* [over.literal]/6: Literal operators shall not have C linkage. */
8987       if (DECL_LANGUAGE (decl) == lang_c)
8988           {
8989             error ("literal operator with C linkage");
8990             maybe_show_extern_c_location ();
8991             return NULL_TREE;
8992           }
8993 
8994       if (DECL_NAMESPACE_SCOPE_P (decl))
8995           {
8996             if (!check_literal_operator_args (decl, &long_long_unsigned_p,
8997                                                       &long_double_p))
8998               {
8999                 error ("%qD has invalid argument list", decl);
9000                 return NULL_TREE;
9001               }
9002 
9003             suffix = UDLIT_OP_SUFFIX (DECL_NAME (decl));
9004             if (long_long_unsigned_p)
9005               {
9006                 if (cpp_interpret_int_suffix (parse_in, suffix, strlen (suffix)))
9007                     warning (0, "integer suffix %qs"
9008                                   " shadowed by implementation", suffix);
9009               }
9010             else if (long_double_p)
9011               {
9012                 if (cpp_interpret_float_suffix (parse_in, suffix, strlen (suffix)))
9013                     warning (0, "floating point suffix %qs"
9014                                   " shadowed by implementation", suffix);
9015               }
9016             /* 17.6.3.3.5  */
9017             if (suffix[0] != '_'
9018                 && !in_system_header_at (DECL_SOURCE_LOCATION (decl))
9019                 && !current_function_decl && !(friendp && !funcdef_flag))
9020               warning (OPT_Wliteral_suffix,
9021                          "literal operator suffixes not preceded by %<_%>"
9022                          " are reserved for future standardization");
9023           }
9024       else
9025           {
9026             error ("%qD must be a non-member function", decl);
9027             return NULL_TREE;
9028           }
9029     }
9030 
9031   if (funcdef_flag)
9032     /* Make the init_value nonzero so pushdecl knows this is not
9033        tentative.  error_mark_node is replaced later with the BLOCK.  */
9034     DECL_INITIAL (decl) = error_mark_node;
9035 
9036   if (TYPE_NOTHROW_P (type) || nothrow_libfn_p (decl))
9037     TREE_NOTHROW (decl) = 1;
9038 
9039   if (flag_openmp || flag_openmp_simd)
9040     {
9041       /* Adjust "omp declare simd" attributes.  */
9042       tree ods = lookup_attribute ("omp declare simd", *attrlist);
9043       if (ods)
9044           {
9045             tree attr;
9046             for (attr = ods; attr;
9047                  attr = lookup_attribute ("omp declare simd", TREE_CHAIN (attr)))
9048               {
9049                 if (TREE_CODE (type) == METHOD_TYPE)
9050                     walk_tree (&TREE_VALUE (attr), declare_simd_adjust_this,
9051                                  DECL_ARGUMENTS (decl), NULL);
9052                 if (TREE_VALUE (attr) != NULL_TREE)
9053                     {
9054                       tree cl = TREE_VALUE (TREE_VALUE (attr));
9055                       cl = c_omp_declare_simd_clauses_to_numbers
9056                                                             (DECL_ARGUMENTS (decl), cl);
9057                       if (cl)
9058                         TREE_VALUE (TREE_VALUE (attr)) = cl;
9059                       else
9060                         TREE_VALUE (attr) = NULL_TREE;
9061                     }
9062               }
9063           }
9064     }
9065 
9066   /* Caller will do the rest of this.  */
9067   if (check < 0)
9068     return decl;
9069 
9070   if (ctype != NULL_TREE)
9071     grokclassfn (ctype, decl, flags);
9072 
9073   /* 12.4/3  */
9074   if (cxx_dialect >= cxx11
9075       && DECL_DESTRUCTOR_P (decl)
9076       && !TYPE_BEING_DEFINED (DECL_CONTEXT (decl))
9077       && !processing_template_decl)
9078     deduce_noexcept_on_destructor (decl);
9079 
9080   decl = check_explicit_specialization (orig_declarator, decl,
9081                                                   template_count,
9082                                                   2 * funcdef_flag +
9083                                                   4 * (friendp != 0) +
9084                                           8 * concept_p,
9085                                                   *attrlist);
9086   if (decl == error_mark_node)
9087     return NULL_TREE;
9088 
9089   if (DECL_STATIC_FUNCTION_P (decl))
9090     check_static_quals (decl, quals);
9091 
9092   if (attrlist)
9093     {
9094       cplus_decl_attributes (&decl, *attrlist, 0);
9095       *attrlist = NULL_TREE;
9096     }
9097 
9098   /* Check main's type after attributes have been applied.  */
9099   if (ctype == NULL_TREE && DECL_MAIN_P (decl))
9100     {
9101       if (!same_type_p (TREE_TYPE (TREE_TYPE (decl)),
9102                               integer_type_node))
9103           {
9104             tree oldtypeargs = TYPE_ARG_TYPES (TREE_TYPE (decl));
9105             tree newtype;
9106             error ("%<::main%> must return %<int%>");
9107             newtype = build_function_type (integer_type_node, oldtypeargs);
9108             TREE_TYPE (decl) = newtype;
9109           }
9110       if (warn_main)
9111           check_main_parameter_types (decl);
9112     }
9113 
9114   if (ctype != NULL_TREE && check)
9115     {
9116       tree old_decl = check_classfn (ctype, decl,
9117                                              (processing_template_decl
9118                                               > template_class_depth (ctype))
9119                                              ? current_template_parms
9120                                              : NULL_TREE);
9121 
9122       if (old_decl == error_mark_node)
9123           return NULL_TREE;
9124 
9125       if (old_decl)
9126           {
9127             tree ok;
9128             tree pushed_scope;
9129 
9130             if (TREE_CODE (old_decl) == TEMPLATE_DECL)
9131               /* Because grokfndecl is always supposed to return a
9132                  FUNCTION_DECL, we pull out the DECL_TEMPLATE_RESULT
9133                  here.  We depend on our callers to figure out that its
9134                  really a template that's being returned.  */
9135               old_decl = DECL_TEMPLATE_RESULT (old_decl);
9136 
9137             if (DECL_STATIC_FUNCTION_P (old_decl)
9138                 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
9139               {
9140                 /* Remove the `this' parm added by grokclassfn.  */
9141                 revert_static_member_fn (decl);
9142                 check_static_quals (decl, quals);
9143               }
9144             if (DECL_ARTIFICIAL (old_decl))
9145               {
9146                 error ("definition of implicitly-declared %qD", old_decl);
9147                 return NULL_TREE;
9148               }
9149             else if (DECL_DEFAULTED_FN (old_decl))
9150               {
9151                 error ("definition of explicitly-defaulted %q+D", decl);
9152                 inform (DECL_SOURCE_LOCATION (old_decl),
9153                           "%q#D explicitly defaulted here", old_decl);
9154                 return NULL_TREE;
9155               }
9156 
9157             /* Since we've smashed OLD_DECL to its
9158                DECL_TEMPLATE_RESULT, we must do the same to DECL.  */
9159             if (TREE_CODE (decl) == TEMPLATE_DECL)
9160               decl = DECL_TEMPLATE_RESULT (decl);
9161 
9162             /* Attempt to merge the declarations.  This can fail, in
9163                the case of some invalid specialization declarations.  */
9164             pushed_scope = push_scope (ctype);
9165             ok = duplicate_decls (decl, old_decl, friendp);
9166             if (pushed_scope)
9167               pop_scope (pushed_scope);
9168             if (!ok)
9169               {
9170                 error ("no %q#D member function declared in class %qT",
9171                          decl, ctype);
9172                 return NULL_TREE;
9173               }
9174             if (ok == error_mark_node)
9175               return NULL_TREE;
9176             return old_decl;
9177           }
9178     }
9179 
9180   if (DECL_CONSTRUCTOR_P (decl) && !grok_ctor_properties (ctype, decl))
9181     return NULL_TREE;
9182 
9183   if (ctype == NULL_TREE || check)
9184     return decl;
9185 
9186   if (virtualp)
9187     DECL_VIRTUAL_P (decl) = 1;
9188 
9189   return decl;
9190 }
9191 
9192 /* decl is a FUNCTION_DECL.
9193    specifiers are the parsed virt-specifiers.
9194 
9195    Set flags to reflect the virt-specifiers.
9196 
9197    Returns decl.  */
9198 
9199 static tree
set_virt_specifiers(tree decl,cp_virt_specifiers specifiers)9200 set_virt_specifiers (tree decl, cp_virt_specifiers specifiers)
9201 {
9202   if (decl == NULL_TREE)
9203     return decl;
9204   if (specifiers & VIRT_SPEC_OVERRIDE)
9205     DECL_OVERRIDE_P (decl) = 1;
9206   if (specifiers & VIRT_SPEC_FINAL)
9207     DECL_FINAL_P (decl) = 1;
9208   return decl;
9209 }
9210 
9211 /* DECL is a VAR_DECL for a static data member.  Set flags to reflect
9212    the linkage that DECL will receive in the object file.  */
9213 
9214 static void
set_linkage_for_static_data_member(tree decl)9215 set_linkage_for_static_data_member (tree decl)
9216 {
9217   /* A static data member always has static storage duration and
9218      external linkage.  Note that static data members are forbidden in
9219      local classes -- the only situation in which a class has
9220      non-external linkage.  */
9221   TREE_PUBLIC (decl) = 1;
9222   TREE_STATIC (decl) = 1;
9223   /* For non-template classes, static data members are always put
9224      out in exactly those files where they are defined, just as
9225      with ordinary namespace-scope variables.  */
9226   if (!processing_template_decl)
9227     DECL_INTERFACE_KNOWN (decl) = 1;
9228 }
9229 
9230 /* Create a VAR_DECL named NAME with the indicated TYPE.
9231 
9232    If SCOPE is non-NULL, it is the class type or namespace containing
9233    the variable.  If SCOPE is NULL, the variable should is created in
9234    the innermost enclosing scope.  */
9235 
9236 static tree
grokvardecl(tree type,tree name,tree orig_declarator,const cp_decl_specifier_seq * declspecs,int initialized,int type_quals,int inlinep,bool conceptp,int template_count,tree scope)9237 grokvardecl (tree type,
9238                tree name,
9239                tree orig_declarator,
9240                const cp_decl_specifier_seq *declspecs,
9241                int initialized,
9242                int type_quals,
9243                int inlinep,
9244                bool conceptp,
9245                int template_count,
9246                tree scope)
9247 {
9248   tree decl;
9249   tree explicit_scope;
9250 
9251   gcc_assert (!name || identifier_p (name));
9252 
9253   bool constp = (type_quals & TYPE_QUAL_CONST) != 0;
9254   bool volatilep = (type_quals & TYPE_QUAL_VOLATILE) != 0;
9255 
9256   /* Compute the scope in which to place the variable, but remember
9257      whether or not that scope was explicitly specified by the user.   */
9258   explicit_scope = scope;
9259   if (!scope)
9260     {
9261       /* An explicit "extern" specifier indicates a namespace-scope
9262            variable.  */
9263       if (declspecs->storage_class == sc_extern)
9264           scope = current_decl_namespace ();
9265       else if (!at_function_scope_p ())
9266           scope = current_scope ();
9267     }
9268 
9269   if (scope
9270       && (/* If the variable is a namespace-scope variable declared in a
9271                template, we need DECL_LANG_SPECIFIC.  */
9272             (TREE_CODE (scope) == NAMESPACE_DECL && processing_template_decl)
9273             /* Similarly for namespace-scope variables with language linkage
9274                other than C++.  */
9275             || (TREE_CODE (scope) == NAMESPACE_DECL
9276                 && current_lang_name != lang_name_cplusplus)
9277             /* Similarly for static data members.  */
9278             || TYPE_P (scope)
9279             /* Similarly for explicit specializations.  */
9280             || (orig_declarator
9281                 && TREE_CODE (orig_declarator) == TEMPLATE_ID_EXPR)))
9282     decl = build_lang_decl (VAR_DECL, name, type);
9283   else
9284     decl = build_decl (input_location, VAR_DECL, name, type);
9285 
9286   if (explicit_scope && TREE_CODE (explicit_scope) == NAMESPACE_DECL)
9287     set_decl_namespace (decl, explicit_scope, 0);
9288   else
9289     DECL_CONTEXT (decl) = FROB_CONTEXT (scope);
9290 
9291   if (declspecs->storage_class == sc_extern)
9292     {
9293       DECL_THIS_EXTERN (decl) = 1;
9294       DECL_EXTERNAL (decl) = !initialized;
9295     }
9296 
9297   if (DECL_CLASS_SCOPE_P (decl))
9298     {
9299       set_linkage_for_static_data_member (decl);
9300       /* This function is only called with out-of-class definitions.  */
9301       DECL_EXTERNAL (decl) = 0;
9302       check_class_member_definition_namespace (decl);
9303     }
9304   /* At top level, either `static' or no s.c. makes a definition
9305      (perhaps tentative), and absence of `static' makes it public.  */
9306   else if (toplevel_bindings_p ())
9307     {
9308       TREE_PUBLIC (decl) = (declspecs->storage_class != sc_static
9309                                   && (DECL_THIS_EXTERN (decl)
9310                                         || ! constp
9311                                         || volatilep
9312                                         || inlinep));
9313       TREE_STATIC (decl) = ! DECL_EXTERNAL (decl);
9314     }
9315   /* Not at top level, only `static' makes a static definition.  */
9316   else
9317     {
9318       TREE_STATIC (decl) = declspecs->storage_class == sc_static;
9319       TREE_PUBLIC (decl) = DECL_EXTERNAL (decl);
9320     }
9321 
9322   if (decl_spec_seq_has_spec_p (declspecs, ds_thread))
9323     {
9324       if (DECL_EXTERNAL (decl) || TREE_STATIC (decl))
9325           {
9326             CP_DECL_THREAD_LOCAL_P (decl) = true;
9327             if (!processing_template_decl)
9328               set_decl_tls_model (decl, decl_default_tls_model (decl));
9329           }
9330       if (declspecs->gnu_thread_keyword_p)
9331           SET_DECL_GNU_TLS_P (decl);
9332     }
9333 
9334   /* If the type of the decl has no linkage, make sure that we'll
9335      notice that in mark_used.  */
9336   if (cxx_dialect > cxx98
9337       && decl_linkage (decl) != lk_none
9338       && DECL_LANG_SPECIFIC (decl) == NULL
9339       && !DECL_EXTERN_C_P (decl)
9340       && no_linkage_check (TREE_TYPE (decl), /*relaxed_p=*/false))
9341     retrofit_lang_decl (decl);
9342 
9343   if (TREE_PUBLIC (decl))
9344     {
9345       /* [basic.link]: A name with no linkage (notably, the name of a class
9346            or enumeration declared in a local scope) shall not be used to
9347            declare an entity with linkage.
9348 
9349            DR 757 relaxes this restriction for C++0x.  */
9350       if (cxx_dialect < cxx11)
9351           no_linkage_error (decl);
9352     }
9353   else
9354     DECL_INTERFACE_KNOWN (decl) = 1;
9355 
9356   if (DECL_NAME (decl)
9357       && MAIN_NAME_P (DECL_NAME (decl))
9358       && scope == global_namespace)
9359     error ("cannot declare %<::main%> to be a global variable");
9360 
9361   /* Check that the variable can be safely declared as a concept.
9362      Note that this also forbids explicit specializations.  */
9363   if (conceptp)
9364     {
9365       if (!processing_template_decl)
9366         {
9367           error ("a non-template variable cannot be %<concept%>");
9368           return NULL_TREE;
9369         }
9370       else
9371         DECL_DECLARED_CONCEPT_P (decl) = true;
9372       if (!same_type_ignoring_top_level_qualifiers_p (type, boolean_type_node))
9373           error_at (declspecs->locations[ds_type_spec],
9374                       "concept must have type %<bool%>");
9375     }
9376   else if (flag_concepts
9377              && processing_template_decl > template_class_depth (scope))
9378     {
9379       tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
9380       tree ci = build_constraints (reqs, NULL_TREE);
9381       set_constraints (decl, ci);
9382     }
9383 
9384   // Handle explicit specializations and instantiations of variable templates.
9385   if (orig_declarator)
9386     decl = check_explicit_specialization (orig_declarator, decl,
9387                                                     template_count, conceptp * 8);
9388 
9389   return decl != error_mark_node ? decl : NULL_TREE;
9390 }
9391 
9392 /* Create and return a canonical pointer to member function type, for
9393    TYPE, which is a POINTER_TYPE to a METHOD_TYPE.  */
9394 
9395 tree
build_ptrmemfunc_type(tree type)9396 build_ptrmemfunc_type (tree type)
9397 {
9398   tree field, fields;
9399   tree t;
9400 
9401   if (type == error_mark_node)
9402     return type;
9403 
9404   /* Make sure that we always have the unqualified pointer-to-member
9405      type first.  */
9406   if (cp_cv_quals quals = cp_type_quals (type))
9407     {
9408       tree unqual = build_ptrmemfunc_type (TYPE_MAIN_VARIANT (type));
9409       return cp_build_qualified_type (unqual, quals);
9410     }
9411 
9412   /* If a canonical type already exists for this type, use it.  We use
9413      this method instead of type_hash_canon, because it only does a
9414      simple equality check on the list of field members.  */
9415 
9416   t = TYPE_PTRMEMFUNC_TYPE (type);
9417   if (t)
9418     return t;
9419 
9420   t = make_node (RECORD_TYPE);
9421 
9422   /* Let the front end know this is a pointer to member function.  */
9423   TYPE_PTRMEMFUNC_FLAG (t) = 1;
9424 
9425   field = build_decl (input_location, FIELD_DECL, pfn_identifier, type);
9426   fields = field;
9427 
9428   field = build_decl (input_location, FIELD_DECL, delta_identifier,
9429                           delta_type_node);
9430   DECL_CHAIN (field) = fields;
9431   fields = field;
9432 
9433   finish_builtin_struct (t, "__ptrmemfunc_type", fields, ptr_type_node);
9434 
9435   /* Zap out the name so that the back end will give us the debugging
9436      information for this anonymous RECORD_TYPE.  */
9437   TYPE_NAME (t) = NULL_TREE;
9438 
9439   /* Cache this pointer-to-member type so that we can find it again
9440      later.  */
9441   TYPE_PTRMEMFUNC_TYPE (type) = t;
9442 
9443   if (TYPE_STRUCTURAL_EQUALITY_P (type))
9444     SET_TYPE_STRUCTURAL_EQUALITY (t);
9445   else if (TYPE_CANONICAL (type) != type)
9446     TYPE_CANONICAL (t) = build_ptrmemfunc_type (TYPE_CANONICAL (type));
9447 
9448   return t;
9449 }
9450 
9451 /* Create and return a pointer to data member type.  */
9452 
9453 tree
build_ptrmem_type(tree class_type,tree member_type)9454 build_ptrmem_type (tree class_type, tree member_type)
9455 {
9456   if (TREE_CODE (member_type) == METHOD_TYPE)
9457     {
9458       cp_cv_quals quals = type_memfn_quals (member_type);
9459       cp_ref_qualifier rqual = type_memfn_rqual (member_type);
9460       member_type = build_memfn_type (member_type, class_type, quals, rqual);
9461       return build_ptrmemfunc_type (build_pointer_type (member_type));
9462     }
9463   else
9464     {
9465       gcc_assert (TREE_CODE (member_type) != FUNCTION_TYPE);
9466       return build_offset_type (class_type, member_type);
9467     }
9468 }
9469 
9470 /* DECL is a VAR_DECL defined in-class, whose TYPE is also given.
9471    Check to see that the definition is valid.  Issue appropriate error
9472    messages.  Return 1 if the definition is particularly bad, or 0
9473    otherwise.  */
9474 
9475 static int
check_static_variable_definition(tree decl,tree type)9476 check_static_variable_definition (tree decl, tree type)
9477 {
9478   /* Avoid redundant diagnostics on out-of-class definitions.  */
9479   if (!current_class_type || !TYPE_BEING_DEFINED (current_class_type))
9480     return 0;
9481   /* Can't check yet if we don't know the type.  */
9482   if (dependent_type_p (type))
9483     return 0;
9484   /* If DECL is declared constexpr, we'll do the appropriate checks
9485      in check_initializer.  Similarly for inline static data members.  */
9486   if (DECL_P (decl)
9487       && (DECL_DECLARED_CONSTEXPR_P (decl)
9488             || DECL_VAR_DECLARED_INLINE_P (decl)))
9489     return 0;
9490   else if (cxx_dialect >= cxx11 && !INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9491     {
9492       if (!COMPLETE_TYPE_P (type))
9493           error_at (DECL_SOURCE_LOCATION (decl),
9494                       "in-class initialization of static data member %q#D of "
9495                       "incomplete type", decl);
9496       else if (literal_type_p (type))
9497           permerror (DECL_SOURCE_LOCATION (decl),
9498                        "%<constexpr%> needed for in-class initialization of "
9499                        "static data member %q#D of non-integral type", decl);
9500       else
9501           error_at (DECL_SOURCE_LOCATION (decl),
9502                       "in-class initialization of static data member %q#D of "
9503                       "non-literal type", decl);
9504       return 1;
9505     }
9506 
9507   /* Motion 10 at San Diego: If a static const integral data member is
9508      initialized with an integral constant expression, the initializer
9509      may appear either in the declaration (within the class), or in
9510      the definition, but not both.  If it appears in the class, the
9511      member is a member constant.  The file-scope definition is always
9512      required.  */
9513   if (!ARITHMETIC_TYPE_P (type) && TREE_CODE (type) != ENUMERAL_TYPE)
9514     {
9515       error_at (DECL_SOURCE_LOCATION (decl),
9516                     "invalid in-class initialization of static data member "
9517                     "of non-integral type %qT",
9518                     type);
9519       return 1;
9520     }
9521   else if (!CP_TYPE_CONST_P (type))
9522     error_at (DECL_SOURCE_LOCATION (decl),
9523                 "ISO C++ forbids in-class initialization of non-const "
9524                 "static member %qD",
9525                 decl);
9526   else if (!INTEGRAL_OR_ENUMERATION_TYPE_P (type))
9527     pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
9528                "ISO C++ forbids initialization of member constant "
9529                "%qD of non-integral type %qT", decl, type);
9530 
9531   return 0;
9532 }
9533 
9534 /* *expr_p is part of the TYPE_SIZE of a variably-sized array.  If any
9535    SAVE_EXPRs in *expr_p wrap expressions with side-effects, break those
9536    expressions out into temporary variables so that walk_tree doesn't
9537    step into them (c++/15764).  */
9538 
9539 static tree
stabilize_save_expr_r(tree * expr_p,int * walk_subtrees,void * data)9540 stabilize_save_expr_r (tree *expr_p, int *walk_subtrees, void *data)
9541 {
9542   hash_set<tree> *pset = (hash_set<tree> *)data;
9543   tree expr = *expr_p;
9544   if (TREE_CODE (expr) == SAVE_EXPR)
9545     {
9546       tree op = TREE_OPERAND (expr, 0);
9547       cp_walk_tree (&op, stabilize_save_expr_r, data, pset);
9548       if (TREE_SIDE_EFFECTS (op))
9549           TREE_OPERAND (expr, 0) = get_temp_regvar (TREE_TYPE (op), op);
9550       *walk_subtrees = 0;
9551     }
9552   else if (!EXPR_P (expr) || !TREE_SIDE_EFFECTS (expr))
9553     *walk_subtrees = 0;
9554   return NULL;
9555 }
9556 
9557 /* Entry point for the above.  */
9558 
9559 static void
stabilize_vla_size(tree size)9560 stabilize_vla_size (tree size)
9561 {
9562   hash_set<tree> pset;
9563   /* Break out any function calls into temporary variables.  */
9564   cp_walk_tree (&size, stabilize_save_expr_r, &pset, &pset);
9565 }
9566 
9567 /* Reduce a SIZEOF_EXPR to its value.  */
9568 
9569 tree
fold_sizeof_expr(tree t)9570 fold_sizeof_expr (tree t)
9571 {
9572   tree r;
9573   if (SIZEOF_EXPR_TYPE_P (t))
9574     r = cxx_sizeof_or_alignof_type (TREE_TYPE (TREE_OPERAND (t, 0)),
9575                                             SIZEOF_EXPR, false, false);
9576   else if (TYPE_P (TREE_OPERAND (t, 0)))
9577     r = cxx_sizeof_or_alignof_type (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9578                                             false, false);
9579   else
9580     r = cxx_sizeof_or_alignof_expr (TREE_OPERAND (t, 0), SIZEOF_EXPR,
9581                                             false);
9582   if (r == error_mark_node)
9583     r = size_one_node;
9584   return r;
9585 }
9586 
9587 /* Given the SIZE (i.e., number of elements) in an array, compute
9588    an appropriate index type for the array.  If non-NULL, NAME is
9589    the name of the entity being declared.  */
9590 
9591 tree
compute_array_index_type(tree name,tree size,tsubst_flags_t complain)9592 compute_array_index_type (tree name, tree size, tsubst_flags_t complain)
9593 {
9594   tree itype;
9595   tree osize = size;
9596 
9597   if (error_operand_p (size))
9598     return error_mark_node;
9599 
9600   if (!type_dependent_expression_p (size))
9601     {
9602       osize = size = mark_rvalue_use (size);
9603 
9604       if (cxx_dialect < cxx11 && TREE_CODE (size) == NOP_EXPR
9605             && TREE_SIDE_EFFECTS (size))
9606           /* In C++98, we mark a non-constant array bound with a magic
9607              NOP_EXPR with TREE_SIDE_EFFECTS; don't fold in that case.  */;
9608       else
9609           {
9610             size = instantiate_non_dependent_expr_sfinae (size, complain);
9611             size = build_converted_constant_expr (size_type_node, size, complain);
9612             size = maybe_constant_value (size);
9613 
9614             if (!TREE_CONSTANT (size))
9615               size = osize;
9616           }
9617 
9618       if (error_operand_p (size))
9619           return error_mark_node;
9620 
9621       /* The array bound must be an integer type.  */
9622       tree type = TREE_TYPE (size);
9623       if (!INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P (type))
9624           {
9625             if (!(complain & tf_error))
9626               return error_mark_node;
9627             if (name)
9628               error ("size of array %qD has non-integral type %qT", name, type);
9629             else
9630               error ("size of array has non-integral type %qT", type);
9631             size = integer_one_node;
9632           }
9633     }
9634 
9635   /* A type is dependent if it is...an array type constructed from any
9636      dependent type or whose size is specified by a constant expression
9637      that is value-dependent.  */
9638   /* We can only call value_dependent_expression_p on integral constant
9639      expressions; treat non-constant expressions as dependent, too.  */
9640   if (processing_template_decl
9641       && (type_dependent_expression_p (size)
9642             || !TREE_CONSTANT (size) || value_dependent_expression_p (size)))
9643     {
9644       /* We cannot do any checking for a SIZE that isn't known to be
9645            constant. Just build the index type and mark that it requires
9646            structural equality checks.  */
9647       itype = build_index_type (build_min (MINUS_EXPR, sizetype,
9648                                                      size, size_one_node));
9649       TYPE_DEPENDENT_P (itype) = 1;
9650       TYPE_DEPENDENT_P_VALID (itype) = 1;
9651       SET_TYPE_STRUCTURAL_EQUALITY (itype);
9652       return itype;
9653     }
9654 
9655   if (TREE_CODE (size) != INTEGER_CST)
9656     {
9657       tree folded = cp_fully_fold (size);
9658       if (TREE_CODE (folded) == INTEGER_CST)
9659           pedwarn (location_of (size), OPT_Wpedantic,
9660                      "size of array is not an integral constant-expression");
9661       /* Use the folded result for VLAs, too; it will have resolved
9662            SIZEOF_EXPR.  */
9663       size = folded;
9664     }
9665 
9666   /* Normally, the array-bound will be a constant.  */
9667   if (TREE_CODE (size) == INTEGER_CST)
9668     {
9669       /* An array must have a positive number of elements.  */
9670       if (!valid_constant_size_p (size))
9671           {
9672             if (!(complain & tf_error))
9673               return error_mark_node;
9674 
9675             if (name)
9676               error ("size of array %qD is negative", name);
9677             else
9678               error ("size of array is negative");
9679             size = integer_one_node;
9680           }
9681       /* As an extension we allow zero-sized arrays.  */
9682       else if (integer_zerop (size))
9683           {
9684             if (!(complain & tf_error))
9685               /* We must fail if performing argument deduction (as
9686                  indicated by the state of complain), so that
9687                  another substitution can be found.  */
9688               return error_mark_node;
9689             else if (in_system_header_at (input_location))
9690               /* Allow them in system headers because glibc uses them.  */;
9691             else if (name)
9692               pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array %qD", name);
9693             else
9694               pedwarn (input_location, OPT_Wpedantic, "ISO C++ forbids zero-size array");
9695           }
9696     }
9697   else if (TREE_CONSTANT (size)
9698              /* We don't allow VLAs at non-function scopes, or during
9699                 tentative template substitution.  */
9700              || !at_function_scope_p ()
9701              || !(complain & tf_error))
9702     {
9703       if (!(complain & tf_error))
9704           return error_mark_node;
9705       /* `(int) &fn' is not a valid array bound.  */
9706       if (name)
9707           error ("size of array %qD is not an integral constant-expression",
9708                  name);
9709       else
9710           error ("size of array is not an integral constant-expression");
9711       size = integer_one_node;
9712     }
9713   else if (pedantic && warn_vla != 0)
9714     {
9715       if (name)
9716           pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array %qD", name);
9717       else
9718           pedwarn (input_location, OPT_Wvla, "ISO C++ forbids variable length array");
9719     }
9720   else if (warn_vla > 0)
9721     {
9722       if (name)
9723           warning (OPT_Wvla,
9724                  "variable length array %qD is used", name);
9725       else
9726           warning (OPT_Wvla,
9727                  "variable length array is used");
9728     }
9729 
9730   if (processing_template_decl && !TREE_CONSTANT (size))
9731     /* A variable sized array.  */
9732     itype = build_min (MINUS_EXPR, sizetype, size, integer_one_node);
9733   else
9734     {
9735       /* Compute the index of the largest element in the array.  It is
9736            one less than the number of elements in the array.  We save
9737            and restore PROCESSING_TEMPLATE_DECL so that computations in
9738            cp_build_binary_op will be appropriately folded.  */
9739       {
9740           processing_template_decl_sentinel s;
9741           itype = cp_build_binary_op (input_location,
9742                                             MINUS_EXPR,
9743                                             cp_convert (ssizetype, size, complain),
9744                                             cp_convert (ssizetype, integer_one_node,
9745                                                             complain),
9746                                             complain);
9747           itype = maybe_constant_value (itype);
9748       }
9749 
9750       if (!TREE_CONSTANT (itype))
9751           {
9752             /* A variable sized array.  */
9753             itype = variable_size (itype);
9754 
9755             stabilize_vla_size (itype);
9756 
9757             if (sanitize_flags_p (SANITIZE_VLA)
9758                 && current_function_decl != NULL_TREE)
9759               {
9760                 /* We have to add 1 -- in the ubsan routine we generate
9761                      LE_EXPR rather than LT_EXPR.  */
9762                 tree t = fold_build2 (PLUS_EXPR, TREE_TYPE (itype), itype,
9763                                             build_one_cst (TREE_TYPE (itype)));
9764                 t = ubsan_instrument_vla (input_location, t);
9765                 finish_expr_stmt (t);
9766               }
9767           }
9768       /* Make sure that there was no overflow when creating to a signed
9769            index type.  (For example, on a 32-bit machine, an array with
9770            size 2^32 - 1 is too big.)  */
9771       else if (TREE_CODE (itype) == INTEGER_CST
9772                  && TREE_OVERFLOW (itype))
9773           {
9774             if (!(complain & tf_error))
9775               return error_mark_node;
9776             error ("overflow in array dimension");
9777             TREE_OVERFLOW (itype) = 0;
9778           }
9779     }
9780 
9781   /* Create and return the appropriate index type.  */
9782   itype = build_index_type (itype);
9783 
9784   /* If the index type were dependent, we would have returned early, so
9785      remember that it isn't.  */
9786   TYPE_DEPENDENT_P (itype) = 0;
9787   TYPE_DEPENDENT_P_VALID (itype) = 1;
9788   return itype;
9789 }
9790 
9791 /* Returns the scope (if any) in which the entity declared by
9792    DECLARATOR will be located.  If the entity was declared with an
9793    unqualified name, NULL_TREE is returned.  */
9794 
9795 tree
get_scope_of_declarator(const cp_declarator * declarator)9796 get_scope_of_declarator (const cp_declarator *declarator)
9797 {
9798   while (declarator && declarator->kind != cdk_id)
9799     declarator = declarator->declarator;
9800 
9801   /* If the declarator-id is a SCOPE_REF, the scope in which the
9802      declaration occurs is the first operand.  */
9803   if (declarator
9804       && declarator->u.id.qualifying_scope)
9805     return declarator->u.id.qualifying_scope;
9806 
9807   /* Otherwise, the declarator is not a qualified name; the entity will
9808      be declared in the current scope.  */
9809   return NULL_TREE;
9810 }
9811 
9812 /* Returns an ARRAY_TYPE for an array with SIZE elements of the
9813    indicated TYPE.  If non-NULL, NAME is the NAME of the declaration
9814    with this type.  */
9815 
9816 static tree
create_array_type_for_decl(tree name,tree type,tree size)9817 create_array_type_for_decl (tree name, tree type, tree size)
9818 {
9819   tree itype = NULL_TREE;
9820 
9821   /* If things have already gone awry, bail now.  */
9822   if (type == error_mark_node || size == error_mark_node)
9823     return error_mark_node;
9824 
9825   /* 8.3.4/1: If the type of the identifier of D contains the auto
9826      type-specifier, the program is ill-formed.  */
9827   if (type_uses_auto (type))
9828     {
9829       error ("%qD declared as array of %qT", name, type);
9830       return error_mark_node;
9831     }
9832 
9833   /* If there are some types which cannot be array elements,
9834      issue an error-message and return.  */
9835   switch (TREE_CODE (type))
9836     {
9837     case VOID_TYPE:
9838       if (name)
9839         error ("declaration of %qD as array of void", name);
9840       else
9841         error ("creating array of void");
9842       return error_mark_node;
9843 
9844     case FUNCTION_TYPE:
9845       if (name)
9846         error ("declaration of %qD as array of functions", name);
9847       else
9848         error ("creating array of functions");
9849       return error_mark_node;
9850 
9851     case REFERENCE_TYPE:
9852       if (name)
9853         error ("declaration of %qD as array of references", name);
9854       else
9855         error ("creating array of references");
9856       return error_mark_node;
9857 
9858     case METHOD_TYPE:
9859       if (name)
9860         error ("declaration of %qD as array of function members", name);
9861       else
9862         error ("creating array of function members");
9863       return error_mark_node;
9864 
9865     default:
9866       break;
9867     }
9868 
9869   /* [dcl.array]
9870 
9871      The constant expressions that specify the bounds of the arrays
9872      can be omitted only for the first member of the sequence.  */
9873   if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
9874     {
9875       if (name)
9876           error ("declaration of %qD as multidimensional array must "
9877                  "have bounds for all dimensions except the first",
9878                  name);
9879       else
9880           error ("multidimensional array must have bounds for all "
9881                  "dimensions except the first");
9882 
9883       return error_mark_node;
9884     }
9885 
9886   /* Figure out the index type for the array.  */
9887   if (size)
9888     itype = compute_array_index_type (name, size, tf_warning_or_error);
9889 
9890   /* [dcl.array]
9891      T is called the array element type; this type shall not be [...] an
9892      abstract class type.  */
9893   abstract_virtuals_error (name, type);
9894 
9895   return build_cplus_array_type (type, itype);
9896 }
9897 
9898 /* Returns the smallest location != UNKNOWN_LOCATION among the
9899    three stored in LOCATIONS[ds_const], LOCATIONS[ds_volatile],
9900    and LOCATIONS[ds_restrict].  */
9901 
9902 static location_t
smallest_type_quals_location(int type_quals,const location_t * locations)9903 smallest_type_quals_location (int type_quals, const location_t* locations)
9904 {
9905   location_t loc = UNKNOWN_LOCATION;
9906 
9907   if (type_quals & TYPE_QUAL_CONST)
9908     loc = locations[ds_const];
9909 
9910   if ((type_quals & TYPE_QUAL_VOLATILE)
9911       && (loc == UNKNOWN_LOCATION || locations[ds_volatile] < loc))
9912     loc = locations[ds_volatile];
9913 
9914   if ((type_quals & TYPE_QUAL_RESTRICT)
9915       && (loc == UNKNOWN_LOCATION || locations[ds_restrict] < loc))
9916     loc = locations[ds_restrict];
9917 
9918   return loc;
9919 }
9920 
9921 /* Check that it's OK to declare a function with the indicated TYPE
9922    and TYPE_QUALS.  SFK indicates the kind of special function (if any)
9923    that this function is.  OPTYPE is the type given in a conversion
9924    operator declaration, or the class type for a constructor/destructor.
9925    Returns the actual return type of the function; that may be different
9926    than TYPE if an error occurs, or for certain special functions.  */
9927 
9928 static tree
check_special_function_return_type(special_function_kind sfk,tree type,tree optype,int type_quals,const location_t * locations)9929 check_special_function_return_type (special_function_kind sfk,
9930                                             tree type,
9931                                             tree optype,
9932                                             int type_quals,
9933                                             const location_t* locations)
9934 {
9935   switch (sfk)
9936     {
9937     case sfk_constructor:
9938       if (type)
9939           error ("return type specification for constructor invalid");
9940       else if (type_quals != TYPE_UNQUALIFIED)
9941           error_at (smallest_type_quals_location (type_quals, locations),
9942                       "qualifiers are not allowed on constructor declaration");
9943 
9944       if (targetm.cxx.cdtor_returns_this ())
9945           type = build_pointer_type (optype);
9946       else
9947           type = void_type_node;
9948       break;
9949 
9950     case sfk_destructor:
9951       if (type)
9952           error ("return type specification for destructor invalid");
9953       else if (type_quals != TYPE_UNQUALIFIED)
9954           error_at (smallest_type_quals_location (type_quals, locations),
9955                       "qualifiers are not allowed on destructor declaration");
9956 
9957       /* We can't use the proper return type here because we run into
9958            problems with ambiguous bases and covariant returns.  */
9959       if (targetm.cxx.cdtor_returns_this ())
9960           type = build_pointer_type (void_type_node);
9961       else
9962           type = void_type_node;
9963       break;
9964 
9965     case sfk_conversion:
9966       if (type)
9967           error ("return type specified for %<operator %T%>", optype);
9968       else if (type_quals != TYPE_UNQUALIFIED)
9969           error_at (smallest_type_quals_location (type_quals, locations),
9970                       "qualifiers are not allowed on declaration of "
9971                       "%<operator %T%>", optype);
9972 
9973       type = optype;
9974       break;
9975 
9976     case sfk_deduction_guide:
9977       if (type)
9978           error ("return type specified for deduction guide");
9979       else if (type_quals != TYPE_UNQUALIFIED)
9980           error_at (smallest_type_quals_location (type_quals, locations),
9981                       "qualifiers are not allowed on declaration of "
9982                       "deduction guide");
9983       if (TREE_CODE (optype) == TEMPLATE_TEMPLATE_PARM)
9984           {
9985             error ("template template parameter %qT in declaration of "
9986                      "deduction guide", optype);
9987             type = error_mark_node;
9988           }
9989       else
9990           type = make_template_placeholder (CLASSTYPE_TI_TEMPLATE (optype));
9991       for (int i = 0; i < ds_last; ++i)
9992           if (i != ds_explicit && locations[i])
9993             error_at (locations[i],
9994                         "decl-specifier in declaration of deduction guide");
9995       break;
9996 
9997     default:
9998       gcc_unreachable ();
9999     }
10000 
10001   return type;
10002 }
10003 
10004 /* A variable or data member (whose unqualified name is IDENTIFIER)
10005    has been declared with the indicated TYPE.  If the TYPE is not
10006    acceptable, issue an error message and return a type to use for
10007    error-recovery purposes.  */
10008 
10009 tree
check_var_type(tree identifier,tree type)10010 check_var_type (tree identifier, tree type)
10011 {
10012   if (VOID_TYPE_P (type))
10013     {
10014       if (!identifier)
10015           error ("unnamed variable or field declared void");
10016       else if (identifier_p (identifier))
10017           {
10018             gcc_assert (!IDENTIFIER_ANY_OP_P (identifier));
10019             error ("variable or field %qE declared void", identifier);
10020           }
10021       else
10022           error ("variable or field declared void");
10023       type = error_mark_node;
10024     }
10025 
10026   return type;
10027 }
10028 
10029 /* Handle declaring DECL as an inline variable.  */
10030 
10031 static void
mark_inline_variable(tree decl)10032 mark_inline_variable (tree decl)
10033 {
10034   bool inlinep = true;
10035   if (! toplevel_bindings_p ())
10036     {
10037       error ("%<inline%> specifier invalid for variable "
10038                "%qD declared at block scope", decl);
10039       inlinep = false;
10040     }
10041   else if (cxx_dialect < cxx17)
10042     pedwarn (DECL_SOURCE_LOCATION (decl), 0,
10043                "inline variables are only available "
10044                "with -std=c++17 or -std=gnu++17");
10045   if (inlinep)
10046     {
10047       retrofit_lang_decl (decl);
10048       SET_DECL_VAR_DECLARED_INLINE_P (decl);
10049     }
10050 }
10051 
10052 
10053 /* Assign a typedef-given name to a class or enumeration type declared
10054    as anonymous at first.  This was split out of grokdeclarator
10055    because it is also used in libcc1.  */
10056 
10057 void
name_unnamed_type(tree type,tree decl)10058 name_unnamed_type (tree type, tree decl)
10059 {
10060   gcc_assert (TYPE_UNNAMED_P (type));
10061 
10062   /* Replace the anonymous name with the real name everywhere.  */
10063   for (tree t = TYPE_MAIN_VARIANT (type); t; t = TYPE_NEXT_VARIANT (t))
10064     {
10065       if (anon_aggrname_p (TYPE_IDENTIFIER (t)))
10066           /* We do not rename the debug info representing the
10067              unnamed tagged type because the standard says in
10068              [dcl.typedef] that the naming applies only for
10069              linkage purposes.  */
10070           /*debug_hooks->set_name (t, decl);*/
10071           TYPE_NAME (t) = decl;
10072     }
10073 
10074   if (TYPE_LANG_SPECIFIC (type))
10075     TYPE_WAS_UNNAMED (type) = 1;
10076 
10077   /* If this is a typedef within a template class, the nested
10078      type is a (non-primary) template.  The name for the
10079      template needs updating as well.  */
10080   if (TYPE_LANG_SPECIFIC (type) && CLASSTYPE_TEMPLATE_INFO (type))
10081     DECL_NAME (CLASSTYPE_TI_TEMPLATE (type))
10082       = TYPE_IDENTIFIER (type);
10083 
10084   /* Adjust linkage now that we aren't unnamed anymore.  */
10085   reset_type_linkage (type);
10086 
10087   /* FIXME remangle member functions; member functions of a
10088      type with external linkage have external linkage.  */
10089 
10090   /* Check that our job is done, and that it would fail if we
10091      attempted to do it again.  */
10092   gcc_assert (!TYPE_UNNAMED_P (type));
10093 }
10094 
10095 /* Given declspecs and a declarator (abstract or otherwise), determine
10096    the name and type of the object declared and construct a DECL node
10097    for it.
10098 
10099    DECLSPECS points to the representation of declaration-specifier
10100    sequence that precedes declarator.
10101 
10102    DECL_CONTEXT says which syntactic context this declaration is in:
10103      NORMAL for most contexts.  Make a VAR_DECL or FUNCTION_DECL or TYPE_DECL.
10104      FUNCDEF for a function definition.  Like NORMAL but a few different
10105       error messages in each case.  Return value may be zero meaning
10106       this definition is too screwy to try to parse.
10107      MEMFUNCDEF for a function definition.  Like FUNCDEF but prepares to
10108       handle member functions (which have FIELD context).
10109       Return value may be zero meaning this definition is too screwy to
10110       try to parse.
10111      PARM for a parameter declaration (either within a function prototype
10112       or before a function body).  Make a PARM_DECL, or return void_type_node.
10113      TPARM for a template parameter declaration.
10114      CATCHPARM for a parameter declaration before a catch clause.
10115      TYPENAME if for a typename (in a cast or sizeof).
10116       Don't make a DECL node; just return the ..._TYPE node.
10117      FIELD for a struct or union field; make a FIELD_DECL.
10118      BITFIELD for a field with specified width.
10119 
10120    INITIALIZED is as for start_decl.
10121 
10122    ATTRLIST is a pointer to the list of attributes, which may be NULL
10123    if there are none; *ATTRLIST may be modified if attributes from inside
10124    the declarator should be applied to the declaration.
10125 
10126    When this function is called, scoping variables (such as
10127    CURRENT_CLASS_TYPE) should reflect the scope in which the
10128    declaration occurs, not the scope in which the new declaration will
10129    be placed.  For example, on:
10130 
10131      void S::f() { ... }
10132 
10133    when grokdeclarator is called for `S::f', the CURRENT_CLASS_TYPE
10134    should not be `S'.
10135 
10136    Returns a DECL (if a declarator is present), a TYPE (if there is no
10137    declarator, in cases like "struct S;"), or the ERROR_MARK_NODE if an
10138    error occurs. */
10139 
10140 tree
grokdeclarator(const cp_declarator * declarator,cp_decl_specifier_seq * declspecs,enum decl_context decl_context,int initialized,tree * attrlist)10141 grokdeclarator (const cp_declarator *declarator,
10142                     cp_decl_specifier_seq *declspecs,
10143                     enum decl_context decl_context,
10144                     int initialized,
10145                     tree* attrlist)
10146 {
10147   tree type = NULL_TREE;
10148   int longlong = 0;
10149   int explicit_intN = 0;
10150   int virtualp, explicitp, friendp, inlinep, staticp;
10151   int explicit_int = 0;
10152   int explicit_char = 0;
10153   int defaulted_int = 0;
10154 
10155   tree typedef_decl = NULL_TREE;
10156   const char *name = NULL;
10157   tree typedef_type = NULL_TREE;
10158   /* True if this declarator is a function definition.  */
10159   bool funcdef_flag = false;
10160   cp_declarator_kind innermost_code = cdk_error;
10161   int bitfield = 0;
10162 #if 0
10163   /* See the code below that used this.  */
10164   tree decl_attr = NULL_TREE;
10165 #endif
10166 
10167   /* Keep track of what sort of function is being processed
10168      so that we can warn about default return values, or explicit
10169      return values which do not match prescribed defaults.  */
10170   special_function_kind sfk = sfk_none;
10171 
10172   tree dname = NULL_TREE;
10173   tree ctor_return_type = NULL_TREE;
10174   enum overload_flags flags = NO_SPECIAL;
10175   /* cv-qualifiers that apply to the declarator, for a declaration of
10176      a member function.  */
10177   cp_cv_quals memfn_quals = TYPE_UNQUALIFIED;
10178   /* virt-specifiers that apply to the declarator, for a declaration of
10179      a member function.  */
10180   cp_virt_specifiers virt_specifiers = VIRT_SPEC_UNSPECIFIED;
10181   /* ref-qualifier that applies to the declarator, for a declaration of
10182      a member function.  */
10183   cp_ref_qualifier rqual = REF_QUAL_NONE;
10184   /* cv-qualifiers that apply to the type specified by the DECLSPECS.  */
10185   int type_quals = TYPE_UNQUALIFIED;
10186   tree raises = NULL_TREE;
10187   int template_count = 0;
10188   tree returned_attrs = NULL_TREE;
10189   tree parms = NULL_TREE;
10190   const cp_declarator *id_declarator;
10191   /* The unqualified name of the declarator; either an
10192      IDENTIFIER_NODE, BIT_NOT_EXPR, or TEMPLATE_ID_EXPR.  */
10193   tree unqualified_id;
10194   /* The class type, if any, in which this entity is located,
10195      or NULL_TREE if none.  Note that this value may be different from
10196      the current class type; for example if an attempt is made to declare
10197      "A::f" inside "B", this value will be "A".  */
10198   tree ctype = current_class_type;
10199   /* The NAMESPACE_DECL for the namespace in which this entity is
10200      located.  If an unqualified name is used to declare the entity,
10201      this value will be NULL_TREE, even if the entity is located at
10202      namespace scope.  */
10203   tree in_namespace = NULL_TREE;
10204   cp_storage_class storage_class;
10205   bool unsigned_p, signed_p, short_p, long_p, thread_p;
10206   bool type_was_error_mark_node = false;
10207   bool parameter_pack_p = declarator ? declarator->parameter_pack_p : false;
10208   bool template_type_arg = false;
10209   bool template_parm_flag = false;
10210   bool typedef_p = decl_spec_seq_has_spec_p (declspecs, ds_typedef);
10211   bool constexpr_p = decl_spec_seq_has_spec_p (declspecs, ds_constexpr);
10212   bool late_return_type_p = false;
10213   bool array_parameter_p = false;
10214   source_location saved_loc = input_location;
10215   tree reqs = NULL_TREE;
10216 
10217   signed_p = decl_spec_seq_has_spec_p (declspecs, ds_signed);
10218   unsigned_p = decl_spec_seq_has_spec_p (declspecs, ds_unsigned);
10219   short_p = decl_spec_seq_has_spec_p (declspecs, ds_short);
10220   long_p = decl_spec_seq_has_spec_p (declspecs, ds_long);
10221   longlong = decl_spec_seq_has_spec_p (declspecs, ds_long_long);
10222   explicit_intN = declspecs->explicit_intN_p;
10223   thread_p = decl_spec_seq_has_spec_p (declspecs, ds_thread);
10224 
10225   // Was concept_p specified? Note that ds_concept
10226   // implies ds_constexpr!
10227   bool concept_p = decl_spec_seq_has_spec_p (declspecs, ds_concept);
10228   if (concept_p)
10229     constexpr_p = true;
10230 
10231   if (decl_spec_seq_has_spec_p (declspecs, ds_const))
10232     type_quals |= TYPE_QUAL_CONST;
10233   if (decl_spec_seq_has_spec_p (declspecs, ds_volatile))
10234     type_quals |= TYPE_QUAL_VOLATILE;
10235   if (decl_spec_seq_has_spec_p (declspecs, ds_restrict))
10236     type_quals |= TYPE_QUAL_RESTRICT;
10237 
10238   if (decl_context == FUNCDEF)
10239     funcdef_flag = true, decl_context = NORMAL;
10240   else if (decl_context == MEMFUNCDEF)
10241     funcdef_flag = true, decl_context = FIELD;
10242   else if (decl_context == BITFIELD)
10243     bitfield = 1, decl_context = FIELD;
10244   else if (decl_context == TEMPLATE_TYPE_ARG)
10245     template_type_arg = true, decl_context = TYPENAME;
10246   else if (decl_context == TPARM)
10247     template_parm_flag = true, decl_context = PARM;
10248 
10249   if (initialized > 1)
10250     funcdef_flag = true;
10251 
10252   location_t typespec_loc = smallest_type_quals_location (type_quals,
10253                                                                   declspecs->locations);
10254   if (typespec_loc == UNKNOWN_LOCATION)
10255     typespec_loc = declspecs->locations[ds_type_spec];
10256   if (typespec_loc == UNKNOWN_LOCATION)
10257     typespec_loc = input_location;
10258 
10259   /* Look inside a declarator for the name being declared
10260      and get it as a string, for an error message.  */
10261   for (id_declarator = declarator;
10262        id_declarator;
10263        id_declarator = id_declarator->declarator)
10264     {
10265       if (id_declarator->kind != cdk_id)
10266           innermost_code = id_declarator->kind;
10267 
10268       switch (id_declarator->kind)
10269           {
10270           case cdk_function:
10271             if (id_declarator->declarator
10272                 && id_declarator->declarator->kind == cdk_id)
10273               {
10274                 sfk = id_declarator->declarator->u.id.sfk;
10275                 if (sfk == sfk_destructor)
10276                     flags = DTOR_FLAG;
10277               }
10278             break;
10279 
10280           case cdk_id:
10281             {
10282               tree qualifying_scope = id_declarator->u.id.qualifying_scope;
10283               tree decl = id_declarator->u.id.unqualified_name;
10284               if (!decl)
10285                 break;
10286               if (qualifying_scope)
10287                 {
10288                     if (check_for_bare_parameter_packs (qualifying_scope,
10289                                                                 id_declarator->id_loc))
10290                       return error_mark_node;
10291                     if (at_function_scope_p ())
10292                       {
10293                         /* [dcl.meaning]
10294 
10295                            A declarator-id shall not be qualified except
10296                            for ...
10297 
10298                            None of the cases are permitted in block
10299                            scope.  */
10300                         if (qualifying_scope == global_namespace)
10301                           error ("invalid use of qualified-name %<::%D%>",
10302                                    decl);
10303                         else if (TYPE_P (qualifying_scope))
10304                           error ("invalid use of qualified-name %<%T::%D%>",
10305                                    qualifying_scope, decl);
10306                         else
10307                           error ("invalid use of qualified-name %<%D::%D%>",
10308                                    qualifying_scope, decl);
10309                         return error_mark_node;
10310                       }
10311                     else if (TYPE_P (qualifying_scope))
10312                       {
10313                         ctype = qualifying_scope;
10314                         if (!MAYBE_CLASS_TYPE_P (ctype))
10315                           {
10316                               error ("%q#T is not a class or a namespace", ctype);
10317                               ctype = NULL_TREE;
10318                           }
10319                         else if (innermost_code != cdk_function
10320                                    && current_class_type
10321                                    && !uniquely_derived_from_p (ctype,
10322                                                                         current_class_type))
10323                           {
10324                               error ("invalid use of qualified-name %<%T::%D%>",
10325                                      qualifying_scope, decl);
10326                               return error_mark_node;
10327                           }
10328                       }
10329                     else if (TREE_CODE (qualifying_scope) == NAMESPACE_DECL)
10330                       in_namespace = qualifying_scope;
10331                 }
10332               switch (TREE_CODE (decl))
10333                 {
10334                 case BIT_NOT_EXPR:
10335                     {
10336                       if (innermost_code != cdk_function)
10337                         {
10338                           error ("declaration of %qD as non-function", decl);
10339                           return error_mark_node;
10340                         }
10341                       else if (!qualifying_scope
10342                                  && !(current_class_type && at_class_scope_p ()))
10343                         {
10344                           error ("declaration of %qD as non-member", decl);
10345                           return error_mark_node;
10346                         }
10347 
10348                       tree type = TREE_OPERAND (decl, 0);
10349                       if (TYPE_P (type))
10350                         type = constructor_name (type);
10351                       name = identifier_to_locale (IDENTIFIER_POINTER (type));
10352                       dname = decl;
10353                     }
10354                     break;
10355 
10356                 case TEMPLATE_ID_EXPR:
10357                     {
10358                       tree fns = TREE_OPERAND (decl, 0);
10359 
10360                       dname = fns;
10361                       if (!identifier_p (dname))
10362                         dname = OVL_NAME (dname);
10363                     }
10364                     /* Fall through.  */
10365 
10366                 case IDENTIFIER_NODE:
10367                     if (identifier_p (decl))
10368                       dname = decl;
10369 
10370                     if (IDENTIFIER_KEYWORD_P (dname))
10371                       {
10372                         error ("declarator-id missing; using reserved word %qD",
10373                                  dname);
10374                         name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10375                       }
10376                     else if (!IDENTIFIER_CONV_OP_P (dname))
10377                       name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10378                     else
10379                       {
10380                         gcc_assert (flags == NO_SPECIAL);
10381                         flags = TYPENAME_FLAG;
10382                         sfk = sfk_conversion;
10383                         tree glob = get_global_binding (dname);
10384                         if (glob && TREE_CODE (glob) == TYPE_DECL)
10385                           name = identifier_to_locale (IDENTIFIER_POINTER (dname));
10386                         else
10387                           name = "<invalid operator>";
10388                       }
10389                     break;
10390 
10391                 default:
10392                     gcc_unreachable ();
10393                 }
10394               break;
10395             }
10396 
10397           case cdk_array:
10398           case cdk_pointer:
10399           case cdk_reference:
10400           case cdk_ptrmem:
10401             break;
10402 
10403           case cdk_decomp:
10404             name = "structured binding";
10405             break;
10406 
10407           case cdk_error:
10408             return error_mark_node;
10409 
10410           default:
10411             gcc_unreachable ();
10412           }
10413       if (id_declarator->kind == cdk_id)
10414           break;
10415     }
10416 
10417   /* [dcl.fct.edf]
10418 
10419      The declarator in a function-definition shall have the form
10420      D1 ( parameter-declaration-clause) ...  */
10421   if (funcdef_flag && innermost_code != cdk_function)
10422     {
10423       error ("function definition does not declare parameters");
10424       return error_mark_node;
10425     }
10426 
10427   if (flags == TYPENAME_FLAG
10428       && innermost_code != cdk_function
10429       && ! (ctype && !declspecs->any_specifiers_p))
10430     {
10431       error ("declaration of %qD as non-function", dname);
10432       return error_mark_node;
10433     }
10434 
10435   if (dname && identifier_p (dname))
10436     {
10437       if (UDLIT_OPER_P (dname)
10438             && innermost_code != cdk_function)
10439           {
10440             error ("declaration of %qD as non-function", dname);
10441             return error_mark_node;
10442           }
10443 
10444       if (IDENTIFIER_ANY_OP_P (dname))
10445           {
10446             if (typedef_p)
10447               {
10448                 error ("declaration of %qD as %<typedef%>", dname);
10449                 return error_mark_node;
10450               }
10451             else if (decl_context == PARM || decl_context == CATCHPARM)
10452               {
10453                 error ("declaration of %qD as parameter", dname);
10454                 return error_mark_node;
10455               }
10456           }
10457     }
10458 
10459   /* Anything declared one level down from the top level
10460      must be one of the parameters of a function
10461      (because the body is at least two levels down).  */
10462 
10463   /* This heuristic cannot be applied to C++ nodes! Fixed, however,
10464      by not allowing C++ class definitions to specify their parameters
10465      with xdecls (must be spec.d in the parmlist).
10466 
10467      Since we now wait to push a class scope until we are sure that
10468      we are in a legitimate method context, we must set oldcname
10469      explicitly (since current_class_name is not yet alive).
10470 
10471      We also want to avoid calling this a PARM if it is in a namespace.  */
10472 
10473   if (decl_context == NORMAL && !toplevel_bindings_p ())
10474     {
10475       cp_binding_level *b = current_binding_level;
10476       current_binding_level = b->level_chain;
10477       if (current_binding_level != 0 && toplevel_bindings_p ())
10478           decl_context = PARM;
10479       current_binding_level = b;
10480     }
10481 
10482   if (name == NULL)
10483     name = decl_context == PARM ? "parameter" : "type name";
10484 
10485   if (concept_p && typedef_p)
10486     {
10487       error ("%<concept%> cannot appear in a typedef declaration");
10488       return error_mark_node;
10489     }
10490 
10491   if (constexpr_p && typedef_p)
10492     {
10493       error ("%<constexpr%> cannot appear in a typedef declaration");
10494       return error_mark_node;
10495     }
10496 
10497   /* If there were multiple types specified in the decl-specifier-seq,
10498      issue an error message.  */
10499   if (declspecs->multiple_types_p)
10500     {
10501       error ("two or more data types in declaration of %qs", name);
10502       return error_mark_node;
10503     }
10504 
10505   if (declspecs->conflicting_specifiers_p)
10506     {
10507       error ("conflicting specifiers in declaration of %qs", name);
10508       return error_mark_node;
10509     }
10510 
10511   /* Extract the basic type from the decl-specifier-seq.  */
10512   type = declspecs->type;
10513   if (type == error_mark_node)
10514     {
10515       type = NULL_TREE;
10516       type_was_error_mark_node = true;
10517     }
10518   /* If the entire declaration is itself tagged as deprecated then
10519      suppress reports of deprecated items.  */
10520   if (type && TREE_DEPRECATED (type)
10521       && deprecated_state != DEPRECATED_SUPPRESS)
10522     cp_warn_deprecated_use (type);
10523   if (type && TREE_CODE (type) == TYPE_DECL)
10524     {
10525       typedef_decl = type;
10526       type = TREE_TYPE (typedef_decl);
10527       if (TREE_DEPRECATED (type)
10528             && DECL_ARTIFICIAL (typedef_decl)
10529             && deprecated_state != DEPRECATED_SUPPRESS)
10530           cp_warn_deprecated_use (type);
10531     }
10532   /* No type at all: default to `int', and set DEFAULTED_INT
10533      because it was not a user-defined typedef.  */
10534   if (type == NULL_TREE)
10535     {
10536       if (signed_p || unsigned_p || long_p || short_p)
10537           {
10538             /* These imply 'int'.  */
10539             type = integer_type_node;
10540             defaulted_int = 1;
10541           }
10542       /* If we just have "complex", it is equivalent to "complex double".  */
10543       else if (!longlong && !explicit_intN
10544                  && decl_spec_seq_has_spec_p (declspecs, ds_complex))
10545           {
10546             type = double_type_node;
10547             pedwarn (declspecs->locations[ds_complex], OPT_Wpedantic,
10548                        "ISO C++ does not support plain %<complex%> meaning "
10549                        "%<double complex%>");
10550           }
10551     }
10552   /* Gather flags.  */
10553   explicit_int = declspecs->explicit_int_p;
10554   explicit_char = declspecs->explicit_char_p;
10555 
10556 #if 0
10557   /* See the code below that used this.  */
10558   if (typedef_decl)
10559     decl_attr = DECL_ATTRIBUTES (typedef_decl);
10560 #endif
10561   typedef_type = type;
10562 
10563   if (sfk == sfk_conversion || sfk == sfk_deduction_guide)
10564     ctor_return_type = TREE_TYPE (dname);
10565   else
10566     ctor_return_type = ctype;
10567 
10568   if (sfk != sfk_none)
10569     {
10570       type = check_special_function_return_type (sfk, type,
10571                                                              ctor_return_type,
10572                                                              type_quals,
10573                                                              declspecs->locations);
10574       type_quals = TYPE_UNQUALIFIED;
10575     }
10576   else if (type == NULL_TREE)
10577     {
10578       int is_main;
10579 
10580       explicit_int = -1;
10581 
10582       /* We handle `main' specially here, because 'main () { }' is so
10583            common.  With no options, it is allowed.  With -Wreturn-type,
10584            it is a warning.  It is only an error with -pedantic-errors.  */
10585       is_main = (funcdef_flag
10586                      && dname && identifier_p (dname)
10587                      && MAIN_NAME_P (dname)
10588                      && ctype == NULL_TREE
10589                      && in_namespace == NULL_TREE
10590                      && current_namespace == global_namespace);
10591 
10592       if (type_was_error_mark_node)
10593           /* We've already issued an error, don't complain more.  */;
10594       else if (in_system_header_at (input_location) || flag_ms_extensions)
10595           /* Allow it, sigh.  */;
10596       else if (! is_main)
10597           permerror (input_location, "ISO C++ forbids declaration of %qs with no type", name);
10598       else if (pedantic)
10599           pedwarn (input_location, OPT_Wpedantic,
10600                      "ISO C++ forbids declaration of %qs with no type", name);
10601       else
10602           warning (OPT_Wreturn_type,
10603                  "ISO C++ forbids declaration of %qs with no type", name);
10604 
10605       if (type_was_error_mark_node && template_parm_flag)
10606           /* FIXME we should be able to propagate the error_mark_node as is
10607              for other contexts too.  */
10608           type = error_mark_node;
10609       else
10610           type = integer_type_node;
10611     }
10612 
10613   ctype = NULL_TREE;
10614 
10615   if (explicit_intN)
10616     {
10617       if (! int_n_enabled_p[declspecs->int_n_idx])
10618           {
10619             error ("%<__int%d%> is not supported by this target",
10620                      int_n_data[declspecs->int_n_idx].bitsize);
10621             explicit_intN = false;
10622           }
10623       else if (pedantic && ! in_system_header_at (input_location))
10624           pedwarn (input_location, OPT_Wpedantic,
10625                      "ISO C++ does not support %<__int%d%> for %qs",
10626                      int_n_data[declspecs->int_n_idx].bitsize, name);
10627     }
10628 
10629   /* Now process the modifiers that were specified
10630      and check for invalid combinations.  */
10631 
10632   /* Long double is a special combination.  */
10633   if (long_p && !longlong && TYPE_MAIN_VARIANT (type) == double_type_node)
10634     {
10635       long_p = false;
10636       type = cp_build_qualified_type (long_double_type_node,
10637                                               cp_type_quals (type));
10638     }
10639 
10640   /* Check all other uses of type modifiers.  */
10641 
10642   if (unsigned_p || signed_p || long_p || short_p)
10643     {
10644       int ok = 0;
10645 
10646       if ((signed_p || unsigned_p) && TREE_CODE (type) != INTEGER_TYPE)
10647           error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10648       else if (signed_p && unsigned_p)
10649           error ("%<signed%> and %<unsigned%> specified together for %qs", name);
10650       else if (longlong && TREE_CODE (type) != INTEGER_TYPE)
10651           error ("%<long long%> invalid for %qs", name);
10652       else if (long_p && TREE_CODE (type) == REAL_TYPE)
10653           error ("%<long%> invalid for %qs", name);
10654       else if (short_p && TREE_CODE (type) == REAL_TYPE)
10655           error ("%<short%> invalid for %qs", name);
10656       else if ((long_p || short_p) && TREE_CODE (type) != INTEGER_TYPE)
10657           error ("%<long%> or %<short%> invalid for %qs", name);
10658       else if ((long_p || short_p || explicit_char || explicit_int) && explicit_intN)
10659           error ("%<long%>, %<int%>, %<short%>, or %<char%> invalid for %qs", name);
10660       else if ((long_p || short_p) && explicit_char)
10661           error ("%<long%> or %<short%> specified with char for %qs", name);
10662       else if (long_p && short_p)
10663           error ("%<long%> and %<short%> specified together for %qs", name);
10664       else if (type == char16_type_node || type == char32_type_node)
10665           {
10666             if (signed_p || unsigned_p)
10667               error ("%<signed%> or %<unsigned%> invalid for %qs", name);
10668             else if (short_p || long_p)
10669               error ("%<short%> or %<long%> invalid for %qs", name);
10670           }
10671       else
10672           {
10673             ok = 1;
10674             if (!explicit_int && !defaulted_int && !explicit_char && !explicit_intN && pedantic)
10675               {
10676                 pedwarn (input_location, OPT_Wpedantic,
10677                            "long, short, signed or unsigned used invalidly for %qs",
10678                            name);
10679                 if (flag_pedantic_errors)
10680                     ok = 0;
10681               }
10682           }
10683 
10684       /* Discard the type modifiers if they are invalid.  */
10685       if (! ok)
10686           {
10687             unsigned_p = false;
10688             signed_p = false;
10689             long_p = false;
10690             short_p = false;
10691             longlong = 0;
10692           }
10693     }
10694 
10695   /* Decide whether an integer type is signed or not.
10696      Optionally treat bitfields as signed by default.  */
10697   if (unsigned_p
10698       /* [class.bit]
10699 
10700            It is implementation-defined whether a plain (neither
10701            explicitly signed or unsigned) char, short, int, or long
10702            bit-field is signed or unsigned.
10703 
10704            Naturally, we extend this to long long as well.  Note that
10705            this does not include wchar_t.  */
10706       || (bitfield && !flag_signed_bitfields
10707             && !signed_p
10708             /* A typedef for plain `int' without `signed' can be
10709                controlled just like plain `int', but a typedef for
10710                `signed int' cannot be so controlled.  */
10711             && !(typedef_decl
10712                  && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl))
10713             && TREE_CODE (type) == INTEGER_TYPE
10714             && !same_type_p (TYPE_MAIN_VARIANT (type), wchar_type_node)))
10715     {
10716       if (explicit_intN)
10717           type = int_n_trees[declspecs->int_n_idx].unsigned_type;
10718       else if (longlong)
10719           type = long_long_unsigned_type_node;
10720       else if (long_p)
10721           type = long_unsigned_type_node;
10722       else if (short_p)
10723           type = short_unsigned_type_node;
10724       else if (type == char_type_node)
10725           type = unsigned_char_type_node;
10726       else if (typedef_decl)
10727           type = unsigned_type_for (type);
10728       else
10729           type = unsigned_type_node;
10730     }
10731   else if (signed_p && type == char_type_node)
10732     type = signed_char_type_node;
10733   else if (explicit_intN)
10734     type = int_n_trees[declspecs->int_n_idx].signed_type;
10735   else if (longlong)
10736     type = long_long_integer_type_node;
10737   else if (long_p)
10738     type = long_integer_type_node;
10739   else if (short_p)
10740     type = short_integer_type_node;
10741 
10742   if (decl_spec_seq_has_spec_p (declspecs, ds_complex))
10743     {
10744       if (TREE_CODE (type) != INTEGER_TYPE && TREE_CODE (type) != REAL_TYPE)
10745           error ("complex invalid for %qs", name);
10746       /* If a modifier is specified, the resulting complex is the complex
10747            form of TYPE.  E.g, "complex short" is "complex short int".  */
10748       else if (type == integer_type_node)
10749           type = complex_integer_type_node;
10750       else if (type == float_type_node)
10751           type = complex_float_type_node;
10752       else if (type == double_type_node)
10753           type = complex_double_type_node;
10754       else if (type == long_double_type_node)
10755           type = complex_long_double_type_node;
10756       else
10757           type = build_complex_type (type);
10758     }
10759 
10760   /* If we're using the injected-class-name to form a compound type or a
10761      declaration, replace it with the underlying class so we don't get
10762      redundant typedefs in the debug output.  But if we are returning the
10763      type unchanged, leave it alone so that it's available to
10764      maybe_get_template_decl_from_type_decl.  */
10765   if (CLASS_TYPE_P (type)
10766       && DECL_SELF_REFERENCE_P (TYPE_NAME (type))
10767       && type == TREE_TYPE (TYPE_NAME (type))
10768       && (declarator || type_quals))
10769     type = DECL_ORIGINAL_TYPE (TYPE_NAME (type));
10770 
10771   type_quals |= cp_type_quals (type);
10772   type = cp_build_qualified_type_real
10773     (type, type_quals, ((((typedef_decl && !DECL_ARTIFICIAL (typedef_decl))
10774                                 || declspecs->decltype_p)
10775                                ? tf_ignore_bad_quals : 0) | tf_warning_or_error));
10776   /* We might have ignored or rejected some of the qualifiers.  */
10777   type_quals = cp_type_quals (type);
10778 
10779   if (cxx_dialect >= cxx17 && type && is_auto (type)
10780       && innermost_code != cdk_function
10781       && id_declarator && declarator != id_declarator)
10782     if (tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (type))
10783     {
10784       error_at (typespec_loc, "template placeholder type %qT must be followed "
10785                     "by a simple declarator-id", type);
10786       inform (DECL_SOURCE_LOCATION (tmpl), "%qD declared here", tmpl);
10787     }
10788 
10789   staticp = 0;
10790   inlinep = decl_spec_seq_has_spec_p (declspecs, ds_inline);
10791   virtualp =  decl_spec_seq_has_spec_p (declspecs, ds_virtual);
10792   explicitp = decl_spec_seq_has_spec_p (declspecs, ds_explicit);
10793 
10794   storage_class = declspecs->storage_class;
10795   if (storage_class == sc_static)
10796     staticp = 1 + (decl_context == FIELD);
10797 
10798   if (virtualp)
10799     {
10800       if (staticp == 2)
10801           {
10802             error ("member %qD cannot be declared both %<virtual%> "
10803                      "and %<static%>", dname);
10804             storage_class = sc_none;
10805             staticp = 0;
10806           }
10807       if (constexpr_p)
10808           error ("member %qD cannot be declared both %<virtual%> "
10809                  "and %<constexpr%>", dname);
10810     }
10811   friendp = decl_spec_seq_has_spec_p (declspecs, ds_friend);
10812 
10813   /* Issue errors about use of storage classes for parameters.  */
10814   if (decl_context == PARM)
10815     {
10816       if (typedef_p)
10817           {
10818             error ("typedef declaration invalid in parameter declaration");
10819             return error_mark_node;
10820           }
10821       else if (template_parm_flag && storage_class != sc_none)
10822           {
10823             error ("storage class specified for template parameter %qs", name);
10824             return error_mark_node;
10825           }
10826       else if (storage_class == sc_static
10827                  || storage_class == sc_extern
10828                  || thread_p)
10829           error ("storage class specifiers invalid in parameter declarations");
10830 
10831       /* Function parameters cannot be concept. */
10832       if (concept_p)
10833           error ("a parameter cannot be declared %<concept%>");
10834       /* Function parameters cannot be constexpr.  If we saw one, moan
10835          and pretend it wasn't there.  */
10836       else if (constexpr_p)
10837         {
10838           error ("a parameter cannot be declared %<constexpr%>");
10839           constexpr_p = 0;
10840         }
10841     }
10842 
10843   /* Give error if `virtual' is used outside of class declaration.  */
10844   if (virtualp
10845       && (current_class_name == NULL_TREE || decl_context != FIELD))
10846     {
10847       error_at (declspecs->locations[ds_virtual],
10848                     "%<virtual%> outside class declaration");
10849       virtualp = 0;
10850     }
10851 
10852   if (innermost_code == cdk_decomp)
10853     {
10854       location_t loc = (declarator->kind == cdk_reference
10855                               ? declarator->declarator->id_loc : declarator->id_loc);
10856       if (inlinep)
10857           error_at (declspecs->locations[ds_inline],
10858                       "structured binding declaration cannot be %<inline%>");
10859       if (typedef_p)
10860           error_at (declspecs->locations[ds_typedef],
10861                       "structured binding declaration cannot be %<typedef%>");
10862       if (constexpr_p)
10863           error_at (declspecs->locations[ds_constexpr], "structured "
10864                       "binding declaration cannot be %<constexpr%>");
10865       if (thread_p)
10866           error_at (declspecs->locations[ds_thread],
10867                       "structured binding declaration cannot be %qs",
10868                       declspecs->gnu_thread_keyword_p
10869                       ? "__thread" : "thread_local");
10870       if (concept_p)
10871           error_at (declspecs->locations[ds_concept],
10872                       "structured binding declaration cannot be %<concept%>");
10873       switch (storage_class)
10874           {
10875           case sc_none:
10876             break;
10877           case sc_register:
10878             error_at (loc, "structured binding declaration cannot be "
10879                         "%<register%>");
10880             break;
10881           case sc_static:
10882             error_at (loc, "structured binding declaration cannot be "
10883                         "%<static%>");
10884             break;
10885           case sc_extern:
10886             error_at (loc, "structured binding declaration cannot be "
10887                         "%<extern%>");
10888             break;
10889           case sc_mutable:
10890             error_at (loc, "structured binding declaration cannot be "
10891                         "%<mutable%>");
10892             break;
10893           case sc_auto:
10894             error_at (loc, "structured binding declaration cannot be "
10895                         "C++98 %<auto%>");
10896             break;
10897           default:
10898             gcc_unreachable ();
10899           }
10900       if (TREE_CODE (type) != TEMPLATE_TYPE_PARM
10901             || TYPE_IDENTIFIER (type) != auto_identifier)
10902           {
10903             if (type != error_mark_node)
10904               {
10905                 error_at (loc, "structured binding declaration cannot have "
10906                               "type %qT", type);
10907                 inform (loc,
10908                           "type must be cv-qualified %<auto%> or reference to "
10909                           "cv-qualified %<auto%>");
10910               }
10911             type = build_qualified_type (make_auto (), type_quals);
10912             declspecs->type = type;
10913           }
10914       inlinep = 0;
10915       typedef_p = 0;
10916       constexpr_p = 0;
10917       thread_p = 0;
10918       concept_p = 0;
10919       storage_class = sc_none;
10920       staticp = 0;
10921       declspecs->storage_class = sc_none;
10922       declspecs->locations[ds_thread] = UNKNOWN_LOCATION;
10923     }
10924 
10925   /* Static anonymous unions are dealt with here.  */
10926   if (staticp && decl_context == TYPENAME
10927       && declspecs->type
10928       && ANON_AGGR_TYPE_P (declspecs->type))
10929     decl_context = FIELD;
10930 
10931   /* Warn about storage classes that are invalid for certain
10932      kinds of declarations (parameters, typenames, etc.).  */
10933   if (thread_p
10934       && ((storage_class
10935              && storage_class != sc_extern
10936              && storage_class != sc_static)
10937             || typedef_p))
10938     {
10939       error ("multiple storage classes in declaration of %qs", name);
10940       thread_p = false;
10941     }
10942   if (decl_context != NORMAL
10943       && ((storage_class != sc_none
10944              && storage_class != sc_mutable)
10945             || thread_p))
10946     {
10947       if ((decl_context == PARM || decl_context == CATCHPARM)
10948             && (storage_class == sc_register
10949                 || storage_class == sc_auto))
10950           ;
10951       else if (typedef_p)
10952           ;
10953       else if (decl_context == FIELD
10954                  /* C++ allows static class elements.  */
10955                  && storage_class == sc_static)
10956           /* C++ also allows inlines and signed and unsigned elements,
10957              but in those cases we don't come in here.  */
10958           ;
10959       else
10960           {
10961             if (decl_context == FIELD)
10962               error ("storage class specified for %qs", name);
10963             else
10964               {
10965                 if (decl_context == PARM || decl_context == CATCHPARM)
10966                     error ("storage class specified for parameter %qs", name);
10967                 else
10968                     error ("storage class specified for typename");
10969               }
10970             if (storage_class == sc_register
10971                 || storage_class == sc_auto
10972                 || storage_class == sc_extern
10973                 || thread_p)
10974               storage_class = sc_none;
10975           }
10976     }
10977   else if (storage_class == sc_extern && funcdef_flag
10978              && ! toplevel_bindings_p ())
10979     error ("nested function %qs declared %<extern%>", name);
10980   else if (toplevel_bindings_p ())
10981     {
10982       if (storage_class == sc_auto)
10983           error ("top-level declaration of %qs specifies %<auto%>", name);
10984     }
10985   else if (thread_p
10986              && storage_class != sc_extern
10987              && storage_class != sc_static)
10988     {
10989       if (declspecs->gnu_thread_keyword_p)
10990           pedwarn (input_location, 0, "function-scope %qs implicitly auto and "
10991                      "declared %<__thread%>", name);
10992 
10993       /* When thread_local is applied to a variable of block scope the
10994            storage-class-specifier static is implied if it does not appear
10995            explicitly.  */
10996       storage_class = declspecs->storage_class = sc_static;
10997       staticp = 1;
10998     }
10999 
11000   if (storage_class && friendp)
11001     {
11002       error ("storage class specifiers invalid in friend function declarations");
11003       storage_class = sc_none;
11004       staticp = 0;
11005     }
11006 
11007   if (!id_declarator)
11008     unqualified_id = NULL_TREE;
11009   else
11010     {
11011       unqualified_id = id_declarator->u.id.unqualified_name;
11012       switch (TREE_CODE (unqualified_id))
11013           {
11014           case BIT_NOT_EXPR:
11015             unqualified_id = TREE_OPERAND (unqualified_id, 0);
11016             if (TYPE_P (unqualified_id))
11017               unqualified_id = constructor_name (unqualified_id);
11018             break;
11019 
11020           case IDENTIFIER_NODE:
11021           case TEMPLATE_ID_EXPR:
11022             break;
11023 
11024           default:
11025             gcc_unreachable ();
11026           }
11027     }
11028 
11029   if (declspecs->std_attributes)
11030     {
11031       location_t attr_loc = declspecs->locations[ds_std_attribute];
11032       if (warning_at (attr_loc, OPT_Wattributes, "attribute ignored"))
11033           inform (attr_loc, "an attribute that appertains to a type-specifier "
11034                     "is ignored");
11035     }
11036 
11037   /* Determine the type of the entity declared by recurring on the
11038      declarator.  */
11039   for (; declarator; declarator = declarator->declarator)
11040     {
11041       const cp_declarator *inner_declarator;
11042       tree attrs;
11043 
11044       if (type == error_mark_node)
11045           return error_mark_node;
11046 
11047       attrs = declarator->attributes;
11048       if (attrs)
11049           {
11050             int attr_flags;
11051 
11052             attr_flags = 0;
11053             if (declarator == NULL || declarator->kind == cdk_id)
11054               attr_flags |= (int) ATTR_FLAG_DECL_NEXT;
11055             if (declarator->kind == cdk_function)
11056               attr_flags |= (int) ATTR_FLAG_FUNCTION_NEXT;
11057             if (declarator->kind == cdk_array)
11058               attr_flags |= (int) ATTR_FLAG_ARRAY_NEXT;
11059             returned_attrs = decl_attributes (&type,
11060                                                       chainon (returned_attrs, attrs),
11061                                                       attr_flags);
11062           }
11063 
11064       inner_declarator = declarator->declarator;
11065 
11066       /* We don't want to warn in parameter context because we don't
11067            yet know if the parse will succeed, and this might turn out
11068            to be a constructor call.  */
11069       if (decl_context != PARM
11070             && decl_context != TYPENAME
11071             && !typedef_p
11072             && declarator->parenthesized != UNKNOWN_LOCATION
11073             /* If the type is class-like and the inner name used a
11074                global namespace qualifier, we need the parens.
11075                Unfortunately all we can tell is whether a qualified name
11076                was used or not.  */
11077             && !(inner_declarator
11078                  && inner_declarator->kind == cdk_id
11079                  && inner_declarator->u.id.qualifying_scope
11080                  && (MAYBE_CLASS_TYPE_P (type)
11081                        || TREE_CODE (type) == ENUMERAL_TYPE)))
11082           warning_at (declarator->parenthesized, OPT_Wparentheses,
11083                         "unnecessary parentheses in declaration of %qs", name);
11084       if (declarator->kind == cdk_id || declarator->kind == cdk_decomp)
11085           break;
11086 
11087       switch (declarator->kind)
11088           {
11089           case cdk_array:
11090             type = create_array_type_for_decl (dname, type,
11091                                                        declarator->u.array.bounds);
11092             if (!valid_array_size_p (input_location, type, dname))
11093               type = error_mark_node;
11094 
11095             if (declarator->std_attributes)
11096               /* [dcl.array]/1:
11097 
11098                  The optional attribute-specifier-seq appertains to the
11099                  array.  */
11100               returned_attrs = chainon (returned_attrs,
11101                                               declarator->std_attributes);
11102             break;
11103 
11104           case cdk_function:
11105             {
11106               tree arg_types;
11107               int funcdecl_p;
11108 
11109               /* Declaring a function type.  */
11110 
11111               input_location = declspecs->locations[ds_type_spec];
11112               abstract_virtuals_error (ACU_RETURN, type);
11113               input_location = saved_loc;
11114 
11115               /* Pick up type qualifiers which should be applied to `this'.  */
11116               memfn_quals = declarator->u.function.qualifiers;
11117               /* Pick up virt-specifiers.  */
11118             virt_specifiers = declarator->u.function.virt_specifiers;
11119               /* And ref-qualifier, too */
11120               rqual = declarator->u.function.ref_qualifier;
11121               /* And tx-qualifier.  */
11122               tree tx_qual = declarator->u.function.tx_qualifier;
11123               /* Pick up the exception specifications.  */
11124               raises = declarator->u.function.exception_specification;
11125               /* If the exception-specification is ill-formed, let's pretend
11126                  there wasn't one.  */
11127               if (raises == error_mark_node)
11128                 raises = NULL_TREE;
11129 
11130               if (reqs)
11131                 error_at (location_of (reqs), "requires-clause on return type");
11132               reqs = declarator->u.function.requires_clause;
11133 
11134               /* Say it's a definition only for the CALL_EXPR
11135                  closest to the identifier.  */
11136               funcdecl_p = inner_declarator && inner_declarator->kind == cdk_id;
11137 
11138               /* Handle a late-specified return type.  */
11139               tree late_return_type = declarator->u.function.late_return_type;
11140               if (funcdecl_p)
11141                 {
11142                     if (tree auto_node = type_uses_auto (type))
11143                       {
11144                         if (!late_return_type)
11145                           {
11146                               if (current_class_type
11147                                   && LAMBDA_TYPE_P (current_class_type))
11148                                 /* OK for C++11 lambdas.  */;
11149                               else if (cxx_dialect < cxx14)
11150                                 {
11151                                   error ("%qs function uses "
11152                                            "%<auto%> type specifier without trailing "
11153                                            "return type", name);
11154                                   inform (input_location, "deduced return type "
11155                                             "only available with -std=c++14 or "
11156                                             "-std=gnu++14");
11157                                 }
11158                               else if (virtualp)
11159                                 {
11160                                   error ("virtual function cannot "
11161                                            "have deduced return type");
11162                                   virtualp = false;
11163                                 }
11164                           }
11165                         else if (!is_auto (type) && sfk != sfk_conversion)
11166                           {
11167                               error ("%qs function with trailing return type has"
11168                                      " %qT as its type rather than plain %<auto%>",
11169                                      name, type);
11170                               return error_mark_node;
11171                           }
11172                         tree tmpl = CLASS_PLACEHOLDER_TEMPLATE (auto_node);
11173                         if (!tmpl)
11174                           if (tree late_auto = type_uses_auto (late_return_type))
11175                               tmpl = CLASS_PLACEHOLDER_TEMPLATE (late_auto);
11176                         if (tmpl)
11177                           {
11178                               if (!dguide_name_p (unqualified_id))
11179                                 {
11180                                   error_at (declarator->id_loc, "deduced class "
11181                                               "type %qD in function return type",
11182                                               DECL_NAME (tmpl));
11183                                   inform (DECL_SOURCE_LOCATION (tmpl),
11184                                             "%qD declared here", tmpl);
11185                                   return error_mark_node;
11186                                 }
11187                               else if (!late_return_type)
11188                                 {
11189                                   error_at (declarator->id_loc, "deduction guide "
11190                                               "for %qT must have trailing return "
11191                                               "type", TREE_TYPE (tmpl));
11192                                   inform (DECL_SOURCE_LOCATION (tmpl),
11193                                             "%qD declared here", tmpl);
11194                                   return error_mark_node;
11195                                 }
11196                               else if (CLASS_TYPE_P (late_return_type)
11197                                          && CLASSTYPE_TEMPLATE_INFO (late_return_type)
11198                                          && (CLASSTYPE_TI_TEMPLATE (late_return_type)
11199                                              == tmpl))
11200                                 /* OK */;
11201                               else
11202                                 error ("trailing return type %qT of deduction guide "
11203                                          "is not a specialization of %qT",
11204                                          late_return_type, TREE_TYPE (tmpl));
11205                           }
11206                       }
11207                     else if (late_return_type
11208                                && sfk != sfk_conversion)
11209                       {
11210                         if (cxx_dialect < cxx11)
11211                           /* Not using maybe_warn_cpp0x because this should
11212                                always be an error.  */
11213                           error ("trailing return type only available with "
11214                                    "-std=c++11 or -std=gnu++11");
11215                         else
11216                           error ("%qs function with trailing return type not "
11217                                    "declared with %<auto%> type specifier", name);
11218                         return error_mark_node;
11219                       }
11220                 }
11221               type = splice_late_return_type (type, late_return_type);
11222               if (type == error_mark_node)
11223                 return error_mark_node;
11224 
11225               if (late_return_type)
11226                 {
11227                     late_return_type_p = true;
11228                     type_quals = cp_type_quals (type);
11229                 }
11230 
11231               if (type_quals != TYPE_UNQUALIFIED)
11232                 {
11233                     if (SCALAR_TYPE_P (type) || VOID_TYPE_P (type))
11234                       warning_at (typespec_loc, OPT_Wignored_qualifiers, "type "
11235                                     "qualifiers ignored on function return type");
11236                     /* We now know that the TYPE_QUALS don't apply to the
11237                        decl, but to its return type.  */
11238                     type_quals = TYPE_UNQUALIFIED;
11239                 }
11240 
11241               /* Error about some types functions can't return.  */
11242 
11243               if (TREE_CODE (type) == FUNCTION_TYPE)
11244                 {
11245                     error_at (typespec_loc, "%qs declared as function returning "
11246                                 "a function", name);
11247                     return error_mark_node;
11248                 }
11249               if (TREE_CODE (type) == ARRAY_TYPE)
11250                 {
11251                     error_at (typespec_loc, "%qs declared as function returning "
11252                                 "an array", name);
11253                     return error_mark_node;
11254                 }
11255 
11256               if (ctype == NULL_TREE
11257                     && decl_context == FIELD
11258                     && funcdecl_p
11259                     && friendp == 0)
11260                 ctype = current_class_type;
11261 
11262               if (ctype && (sfk == sfk_constructor
11263                                 || sfk == sfk_destructor))
11264                 {
11265                     /* We are within a class's scope. If our declarator name
11266                        is the same as the class name, and we are defining
11267                        a function, then it is a constructor/destructor, and
11268                        therefore returns a void type.  */
11269 
11270                     /* ISO C++ 12.4/2.  A destructor may not be declared
11271                        const or volatile.  A destructor may not be static.
11272                        A destructor may not be declared with ref-qualifier.
11273 
11274                        ISO C++ 12.1.  A constructor may not be declared
11275                        const or volatile.  A constructor may not be
11276                        virtual.  A constructor may not be static.
11277                        A constructor may not be declared with ref-qualifier. */
11278                     if (staticp == 2)
11279                       error ((flags == DTOR_FLAG)
11280                                ? G_("destructor cannot be static member function")
11281                                : G_("constructor cannot be static member function"));
11282                     if (memfn_quals)
11283                       {
11284                         error ((flags == DTOR_FLAG)
11285                                  ? G_("destructors may not be cv-qualified")
11286                                  : G_("constructors may not be cv-qualified"));
11287                         memfn_quals = TYPE_UNQUALIFIED;
11288                       }
11289 
11290                     if (rqual)
11291                       {
11292                         maybe_warn_cpp0x (CPP0X_REF_QUALIFIER);
11293                         error ((flags == DTOR_FLAG)
11294                                  ? G_("destructors may not be ref-qualified")
11295                                  : G_("constructors may not be ref-qualified"));
11296                         rqual = REF_QUAL_NONE;
11297                       }
11298 
11299                     if (decl_context == FIELD
11300                         && !member_function_or_else (ctype,
11301                                                              current_class_type,
11302                                                              flags))
11303                       return error_mark_node;
11304 
11305                     if (flags != DTOR_FLAG)
11306                       {
11307                         /* It's a constructor.  */
11308                         if (explicitp == 1)
11309                           explicitp = 2;
11310                         if (virtualp)
11311                           {
11312                               permerror (input_location,
11313                                            "constructors cannot be declared %<virtual%>");
11314                               virtualp = 0;
11315                           }
11316                         if (decl_context == FIELD
11317                               && sfk != sfk_constructor)
11318                           return error_mark_node;
11319                       }
11320                     if (decl_context == FIELD)
11321                       staticp = 0;
11322                 }
11323               else if (friendp)
11324                 {
11325                     if (virtualp)
11326                       {
11327                         /* Cannot be both friend and virtual.  */
11328                         error ("virtual functions cannot be friends");
11329                         friendp = 0;
11330                       }
11331                     if (decl_context == NORMAL)
11332                       error ("friend declaration not in class definition");
11333                     if (current_function_decl && funcdef_flag)
11334                       error ("can%'t define friend function %qs in a local "
11335                                "class definition",
11336                                name);
11337                 }
11338               else if (ctype && sfk == sfk_conversion)
11339                 {
11340                     if (explicitp == 1)
11341                       {
11342                         maybe_warn_cpp0x (CPP0X_EXPLICIT_CONVERSION);
11343                         explicitp = 2;
11344                       }
11345                     if (late_return_type_p)
11346                       error ("a conversion function cannot have a trailing return type");
11347                 }
11348               else if (sfk == sfk_deduction_guide)
11349                 {
11350                     if (explicitp == 1)
11351                       explicitp = 2;
11352                 }
11353 
11354               tree pushed_scope = NULL_TREE;
11355               if (funcdecl_p
11356                     && decl_context != FIELD
11357                     && inner_declarator->u.id.qualifying_scope
11358                     && CLASS_TYPE_P (inner_declarator->u.id.qualifying_scope))
11359                 pushed_scope
11360                     = push_scope (inner_declarator->u.id.qualifying_scope);
11361 
11362               arg_types = grokparms (declarator->u.function.parameters, &parms);
11363 
11364               if (pushed_scope)
11365                 pop_scope (pushed_scope);
11366 
11367               if (inner_declarator
11368                     && inner_declarator->kind == cdk_id
11369                     && inner_declarator->u.id.sfk == sfk_destructor
11370                     && arg_types != void_list_node)
11371                 {
11372                     error ("destructors may not have parameters");
11373                     arg_types = void_list_node;
11374                     parms = NULL_TREE;
11375                 }
11376 
11377               type = build_function_type (type, arg_types);
11378 
11379               tree attrs = declarator->std_attributes;
11380               if (tx_qual)
11381                 {
11382                     tree att = build_tree_list (tx_qual, NULL_TREE);
11383                     /* transaction_safe applies to the type, but
11384                        transaction_safe_dynamic applies to the function.  */
11385                     if (is_attribute_p ("transaction_safe", tx_qual))
11386                       attrs = chainon (attrs, att);
11387                     else
11388                       returned_attrs = chainon (returned_attrs, att);
11389                 }
11390               if (attrs)
11391                 /* [dcl.fct]/2:
11392 
11393                      The optional attribute-specifier-seq appertains to
11394                      the function type.  */
11395                 decl_attributes (&type, attrs, 0);
11396 
11397               if (raises)
11398                 type = build_exception_variant (type, raises);
11399             }
11400             break;
11401 
11402           case cdk_pointer:
11403           case cdk_reference:
11404           case cdk_ptrmem:
11405             /* Filter out pointers-to-references and references-to-references.
11406                We can get these if a TYPE_DECL is used.  */
11407 
11408             if (TREE_CODE (type) == REFERENCE_TYPE)
11409               {
11410                 if (declarator->kind != cdk_reference)
11411                     {
11412                       error ("cannot declare pointer to %q#T", type);
11413                       type = TREE_TYPE (type);
11414                     }
11415 
11416                 /* In C++0x, we allow reference to reference declarations
11417                      that occur indirectly through typedefs [7.1.3/8 dcl.typedef]
11418                      and template type arguments [14.3.1/4 temp.arg.type]. The
11419                      check for direct reference to reference declarations, which
11420                      are still forbidden, occurs below. Reasoning behind the change
11421                      can be found in DR106, DR540, and the rvalue reference
11422                      proposals. */
11423                 else if (cxx_dialect == cxx98)
11424                     {
11425                       error ("cannot declare reference to %q#T", type);
11426                       type = TREE_TYPE (type);
11427                     }
11428               }
11429             else if (VOID_TYPE_P (type))
11430               {
11431                 if (declarator->kind == cdk_reference)
11432                     error ("cannot declare reference to %q#T", type);
11433                 else if (declarator->kind == cdk_ptrmem)
11434                     error ("cannot declare pointer to %q#T member", type);
11435               }
11436 
11437             /* We now know that the TYPE_QUALS don't apply to the decl,
11438                but to the target of the pointer.  */
11439             type_quals = TYPE_UNQUALIFIED;
11440 
11441             /* This code used to handle METHOD_TYPE, but I don't think it's
11442                possible to get it here anymore.  */
11443             gcc_assert (TREE_CODE (type) != METHOD_TYPE);
11444             if (declarator->kind == cdk_ptrmem
11445                 && TREE_CODE (type) == FUNCTION_TYPE)
11446               {
11447                 memfn_quals |= type_memfn_quals (type);
11448                 type = build_memfn_type (type,
11449                                                declarator->u.pointer.class_type,
11450                                                memfn_quals,
11451                                                rqual);
11452                 if (type == error_mark_node)
11453                     return error_mark_node;
11454 
11455                 rqual = REF_QUAL_NONE;
11456                 memfn_quals = TYPE_UNQUALIFIED;
11457               }
11458 
11459             if (TREE_CODE (type) == FUNCTION_TYPE
11460                 && (type_memfn_quals (type) != TYPE_UNQUALIFIED
11461                       || type_memfn_rqual (type) != REF_QUAL_NONE))
11462             error (declarator->kind == cdk_reference
11463                    ? G_("cannot declare reference to qualified function type %qT")
11464                    : G_("cannot declare pointer to qualified function type %qT"),
11465                        type);
11466 
11467             /* When the pointed-to type involves components of variable size,
11468                care must be taken to ensure that the size evaluation code is
11469                emitted early enough to dominate all the possible later uses
11470                and late enough for the variables on which it depends to have
11471                been assigned.
11472 
11473                This is expected to happen automatically when the pointed-to
11474                type has a name/declaration of it's own, but special attention
11475                is required if the type is anonymous.
11476 
11477                We handle the NORMAL and FIELD contexts here by inserting a
11478                dummy statement that just evaluates the size at a safe point
11479                and ensures it is not deferred until e.g. within a deeper
11480                conditional context (c++/43555).
11481 
11482                We expect nothing to be needed here for PARM or TYPENAME.
11483                Evaluating the size at this point for TYPENAME would
11484                actually be incorrect, as we might be in the middle of an
11485                expression with side effects on the pointed-to type size
11486                "arguments" prior to the pointer declaration point and the
11487                size evaluation could end up prior to the side effects.  */
11488 
11489             if (!TYPE_NAME (type)
11490                 && (decl_context == NORMAL || decl_context == FIELD)
11491                 && at_function_scope_p ()
11492                 && variably_modified_type_p (type, NULL_TREE))
11493               {
11494                 TYPE_NAME (type) = build_decl (UNKNOWN_LOCATION, TYPE_DECL,
11495                                                        NULL_TREE, type);
11496                 add_decl_expr (TYPE_NAME (type));
11497               }
11498 
11499             if (declarator->kind == cdk_reference)
11500               {
11501                 /* In C++0x, the type we are creating a reference to might be
11502                      a typedef which is itself a reference type. In that case,
11503                      we follow the reference collapsing rules in
11504                      [7.1.3/8 dcl.typedef] to create the final reference type:
11505 
11506                      "If a typedef TD names a type that is a reference to a type
11507                      T, an attempt to create the type 'lvalue reference to cv TD'
11508                      creates the type 'lvalue reference to T,' while an attempt
11509                      to create the type "rvalue reference to cv TD' creates the
11510                      type TD."
11511               */
11512                 if (VOID_TYPE_P (type))
11513                     /* We already gave an error.  */;
11514                 else if (TREE_CODE (type) == REFERENCE_TYPE)
11515                     {
11516                       if (declarator->u.reference.rvalue_ref)
11517                         /* Leave type alone.  */;
11518                       else
11519                         type = cp_build_reference_type (TREE_TYPE (type), false);
11520                     }
11521                 else
11522                     type = cp_build_reference_type
11523                       (type, declarator->u.reference.rvalue_ref);
11524 
11525                 /* In C++0x, we need this check for direct reference to
11526                      reference declarations, which are forbidden by
11527                      [8.3.2/5 dcl.ref]. Reference to reference declarations
11528                      are only allowed indirectly through typedefs and template
11529                      type arguments. Example:
11530 
11531                        void foo(int & &);      // invalid ref-to-ref decl
11532 
11533                        typedef int & int_ref;
11534                        void foo(int_ref &);    // valid ref-to-ref decl
11535                 */
11536                 if (inner_declarator && inner_declarator->kind == cdk_reference)
11537                     error ("cannot declare reference to %q#T, which is not "
11538                            "a typedef or a template type argument", type);
11539               }
11540             else if (TREE_CODE (type) == METHOD_TYPE)
11541               type = build_ptrmemfunc_type (build_pointer_type (type));
11542             else if (declarator->kind == cdk_ptrmem)
11543               {
11544                 gcc_assert (TREE_CODE (declarator->u.pointer.class_type)
11545                                 != NAMESPACE_DECL);
11546                 if (declarator->u.pointer.class_type == error_mark_node)
11547                     /* We will already have complained.  */
11548                     type = error_mark_node;
11549                 else
11550                     type = build_ptrmem_type (declarator->u.pointer.class_type,
11551                                                     type);
11552               }
11553             else
11554               type = build_pointer_type (type);
11555 
11556             /* Process a list of type modifier keywords (such as
11557                const or volatile) that were given inside the `*' or `&'.  */
11558 
11559             if (declarator->u.pointer.qualifiers)
11560               {
11561                 type
11562                     = cp_build_qualified_type (type,
11563                                                      declarator->u.pointer.qualifiers);
11564                 type_quals = cp_type_quals (type);
11565               }
11566 
11567             /* Apply C++11 attributes to the pointer, and not to the
11568                type pointed to.  This is unlike what is done for GNU
11569                attributes above.  It is to comply with [dcl.ptr]/1:
11570 
11571                      [the optional attribute-specifier-seq (7.6.1) appertains
11572                       to the pointer and not to the object pointed to].  */
11573             if (declarator->std_attributes)
11574               decl_attributes (&type, declarator->std_attributes,
11575                                    0);
11576 
11577             ctype = NULL_TREE;
11578             break;
11579 
11580           case cdk_error:
11581             break;
11582 
11583           default:
11584             gcc_unreachable ();
11585           }
11586     }
11587 
11588   /* A `constexpr' specifier used in an object declaration declares
11589      the object as `const'.  */
11590   if (constexpr_p && innermost_code != cdk_function)
11591     {
11592       /* DR1688 says that a `constexpr' specifier in combination with
11593            `volatile' is valid.  */
11594 
11595       if (TREE_CODE (type) != REFERENCE_TYPE)
11596           {
11597             type_quals |= TYPE_QUAL_CONST;
11598             type = cp_build_qualified_type (type, type_quals);
11599           }
11600     }
11601 
11602   if (unqualified_id && TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR
11603       && TREE_CODE (type) != FUNCTION_TYPE
11604       && TREE_CODE (type) != METHOD_TYPE
11605       && !variable_template_p (TREE_OPERAND (unqualified_id, 0)))
11606     {
11607       error ("template-id %qD used as a declarator",
11608                unqualified_id);
11609       unqualified_id = dname;
11610     }
11611 
11612   /* If TYPE is a FUNCTION_TYPE, but the function name was explicitly
11613      qualified with a class-name, turn it into a METHOD_TYPE, unless
11614      we know that the function is static.  We take advantage of this
11615      opportunity to do other processing that pertains to entities
11616      explicitly declared to be class members.  Note that if DECLARATOR
11617      is non-NULL, we know it is a cdk_id declarator; otherwise, we
11618      would not have exited the loop above.  */
11619   if (declarator
11620       && declarator->kind == cdk_id
11621       && declarator->u.id.qualifying_scope
11622       && MAYBE_CLASS_TYPE_P (declarator->u.id.qualifying_scope))
11623     {
11624       ctype = declarator->u.id.qualifying_scope;
11625       ctype = TYPE_MAIN_VARIANT (ctype);
11626       template_count = num_template_headers_for_class (ctype);
11627 
11628       if (ctype == current_class_type)
11629           {
11630             if (friendp)
11631               {
11632                 permerror (input_location, "member functions are implicitly "
11633                                                    "friends of their class");
11634                 friendp = 0;
11635               }
11636             else
11637               permerror (declarator->id_loc,
11638                            "extra qualification %<%T::%> on member %qs",
11639                            ctype, name);
11640           }
11641       else if (/* If the qualifying type is already complete, then we
11642                       can skip the following checks.  */
11643                  !COMPLETE_TYPE_P (ctype)
11644                  && (/* If the function is being defined, then
11645                           qualifying type must certainly be complete.  */
11646                        funcdef_flag
11647                        /* A friend declaration of "T::f" is OK, even if
11648                           "T" is a template parameter.  But, if this
11649                           function is not a friend, the qualifying type
11650                           must be a class.  */
11651                        || (!friendp && !CLASS_TYPE_P (ctype))
11652                        /* For a declaration, the type need not be
11653                           complete, if either it is dependent (since there
11654                           is no meaningful definition of complete in that
11655                           case) or the qualifying class is currently being
11656                           defined.  */
11657                        || !(dependent_type_p (ctype)
11658                               || currently_open_class (ctype)))
11659                  /* Check that the qualifying type is complete.  */
11660                  && !complete_type_or_else (ctype, NULL_TREE))
11661           return error_mark_node;
11662       else if (TREE_CODE (type) == FUNCTION_TYPE)
11663           {
11664             if (current_class_type
11665                 && (!friendp || funcdef_flag || initialized))
11666               {
11667                 error (funcdef_flag || initialized
11668                          ? G_("cannot define member function %<%T::%s%> "
11669                                 "within %qT")
11670                          : G_("cannot declare member function %<%T::%s%> "
11671                                 "within %qT"),
11672                          ctype, name, current_class_type);
11673                 return error_mark_node;
11674               }
11675           }
11676       else if (typedef_p && current_class_type)
11677           {
11678             error ("cannot declare member %<%T::%s%> within %qT",
11679                      ctype, name, current_class_type);
11680             return error_mark_node;
11681           }
11682     }
11683 
11684   if (ctype == NULL_TREE && decl_context == FIELD && friendp == 0)
11685     ctype = current_class_type;
11686 
11687   /* Now TYPE has the actual type.  */
11688 
11689   if (returned_attrs)
11690     {
11691       if (attrlist)
11692           *attrlist = chainon (returned_attrs, *attrlist);
11693       else
11694           attrlist = &returned_attrs;
11695     }
11696 
11697   if (declarator
11698       && declarator->kind == cdk_id
11699       && declarator->std_attributes
11700       && attrlist != NULL)
11701     {
11702       /* [dcl.meaning]/1: The optional attribute-specifier-seq following
11703            a declarator-id appertains to the entity that is declared.  */
11704       if (declarator->std_attributes != error_mark_node)
11705           *attrlist = chainon (*attrlist, declarator->std_attributes);
11706       else
11707           /* We should have already diagnosed the issue (c++/78344).  */
11708           gcc_assert (seen_error ());
11709     }
11710 
11711   /* Handle parameter packs. */
11712   if (parameter_pack_p)
11713     {
11714       if (decl_context == PARM)
11715         /* Turn the type into a pack expansion.*/
11716         type = make_pack_expansion (type);
11717       else
11718         error ("non-parameter %qs cannot be a parameter pack", name);
11719     }
11720 
11721   if ((decl_context == FIELD || decl_context == PARM)
11722       && !processing_template_decl
11723       && variably_modified_type_p (type, NULL_TREE))
11724     {
11725       if (decl_context == FIELD)
11726           error ("data member may not have variably modified type %qT", type);
11727       else
11728           error ("parameter may not have variably modified type %qT", type);
11729       type = error_mark_node;
11730     }
11731 
11732   if (explicitp == 1 || (explicitp && friendp))
11733     {
11734       /* [dcl.fct.spec] (C++11) The explicit specifier shall be used only
11735            in the declaration of a constructor or conversion function within
11736            a class definition.  */
11737       if (!current_class_type)
11738           error_at (declspecs->locations[ds_explicit],
11739                       "%<explicit%> outside class declaration");
11740       else if (friendp)
11741           error_at (declspecs->locations[ds_explicit],
11742                       "%<explicit%> in friend declaration");
11743       else
11744           error_at (declspecs->locations[ds_explicit],
11745                       "only declarations of constructors and conversion operators "
11746                       "can be %<explicit%>");
11747       explicitp = 0;
11748     }
11749 
11750   if (storage_class == sc_mutable)
11751     {
11752       if (decl_context != FIELD || friendp)
11753           {
11754             error ("non-member %qs cannot be declared %<mutable%>", name);
11755             storage_class = sc_none;
11756           }
11757       else if (decl_context == TYPENAME || typedef_p)
11758           {
11759             error ("non-object member %qs cannot be declared %<mutable%>", name);
11760             storage_class = sc_none;
11761           }
11762       else if (TREE_CODE (type) == FUNCTION_TYPE
11763                  || TREE_CODE (type) == METHOD_TYPE)
11764           {
11765             error ("function %qs cannot be declared %<mutable%>", name);
11766             storage_class = sc_none;
11767           }
11768       else if (staticp)
11769           {
11770             error ("static %qs cannot be declared %<mutable%>", name);
11771             storage_class = sc_none;
11772           }
11773       else if (type_quals & TYPE_QUAL_CONST)
11774           {
11775             error ("const %qs cannot be declared %<mutable%>", name);
11776             storage_class = sc_none;
11777           }
11778       else if (TREE_CODE (type) == REFERENCE_TYPE)
11779           {
11780             permerror (input_location, "reference %qs cannot be declared "
11781                        "%<mutable%>", name);
11782             storage_class = sc_none;
11783           }
11784     }
11785 
11786   /* If this is declaring a typedef name, return a TYPE_DECL.  */
11787   if (typedef_p && decl_context != TYPENAME)
11788     {
11789       tree decl;
11790 
11791       /* This declaration:
11792 
11793              typedef void f(int) const;
11794 
11795            declares a function type which is not a member of any
11796            particular class, but which is cv-qualified; for
11797            example "f S::*" declares a pointer to a const-qualified
11798            member function of S.  We record the cv-qualification in the
11799            function type.  */
11800       if ((rqual || memfn_quals) && TREE_CODE (type) == FUNCTION_TYPE)
11801         {
11802           type = apply_memfn_quals (type, memfn_quals, rqual);
11803 
11804           /* We have now dealt with these qualifiers.  */
11805           memfn_quals = TYPE_UNQUALIFIED;
11806             rqual = REF_QUAL_NONE;
11807         }
11808 
11809       if (type_uses_auto (type))
11810           {
11811             error ("typedef declared %<auto%>");
11812             type = error_mark_node;
11813           }
11814 
11815       if (reqs)
11816           error_at (location_of (reqs), "requires-clause on typedef");
11817 
11818       if (id_declarator && declarator->u.id.qualifying_scope)
11819           {
11820             error ("typedef name may not be a nested-name-specifier");
11821             type = error_mark_node;
11822           }
11823 
11824       if (decl_context == FIELD)
11825           decl = build_lang_decl (TYPE_DECL, unqualified_id, type);
11826       else
11827           decl = build_decl (input_location, TYPE_DECL, unqualified_id, type);
11828 
11829       if (decl_context != FIELD)
11830           {
11831             if (!current_function_decl)
11832               DECL_CONTEXT (decl) = FROB_CONTEXT (current_namespace);
11833             else if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (current_function_decl)
11834                        || (DECL_MAYBE_IN_CHARGE_DESTRUCTOR_P
11835                            (current_function_decl)))
11836               /* The TYPE_DECL is "abstract" because there will be
11837                  clones of this constructor/destructor, and there will
11838                  be copies of this TYPE_DECL generated in those
11839                  clones.  The decloning optimization (for space) may
11840                revert this subsequently if it determines that
11841                the clones should share a common implementation.  */
11842               DECL_ABSTRACT_P (decl) = true;
11843           }
11844       else if (current_class_type
11845                  && constructor_name_p (unqualified_id, current_class_type))
11846           permerror (input_location, "ISO C++ forbids nested type %qD with same name "
11847                        "as enclosing class",
11848                        unqualified_id);
11849 
11850       /* If the user declares "typedef struct {...} foo" then the
11851            struct will have an anonymous name.  Fill that name in now.
11852            Nothing can refer to it, so nothing needs know about the name
11853            change.  */
11854       if (type != error_mark_node
11855             && unqualified_id
11856             && TYPE_NAME (type)
11857             && TREE_CODE (TYPE_NAME (type)) == TYPE_DECL
11858             && TYPE_UNNAMED_P (type)
11859             && declspecs->type_definition_p
11860             && attributes_naming_typedef_ok (*attrlist)
11861             && cp_type_quals (type) == TYPE_UNQUALIFIED)
11862           name_unnamed_type (type, decl);
11863 
11864       if (signed_p
11865             || (typedef_decl && C_TYPEDEF_EXPLICITLY_SIGNED (typedef_decl)))
11866           C_TYPEDEF_EXPLICITLY_SIGNED (decl) = 1;
11867 
11868       bad_specifiers (decl, BSP_TYPE, virtualp,
11869                           memfn_quals != TYPE_UNQUALIFIED,
11870                           inlinep, friendp, raises != NULL_TREE);
11871 
11872       if (decl_spec_seq_has_spec_p (declspecs, ds_alias))
11873           /* Acknowledge that this was written:
11874                `using analias = atype;'.  */
11875           TYPE_DECL_ALIAS_P (decl) = 1;
11876 
11877       return decl;
11878     }
11879 
11880   /* Detect the case of an array type of unspecified size
11881      which came, as such, direct from a typedef name.
11882      We must copy the type, so that the array's domain can be
11883      individually set by the object's initializer.  */
11884 
11885   if (type && typedef_type
11886       && TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
11887       && TYPE_MAIN_VARIANT (type) == TYPE_MAIN_VARIANT (typedef_type))
11888     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
11889 
11890   /* Detect where we're using a typedef of function type to declare a
11891      function. PARMS will not be set, so we must create it now.  */
11892 
11893   if (type == typedef_type && TREE_CODE (type) == FUNCTION_TYPE)
11894     {
11895       tree decls = NULL_TREE;
11896       tree args;
11897 
11898       for (args = TYPE_ARG_TYPES (type);
11899              args && args != void_list_node;
11900              args = TREE_CHAIN (args))
11901           {
11902             tree decl = cp_build_parm_decl (NULL_TREE, NULL_TREE,
11903                                                     TREE_VALUE (args));
11904 
11905             DECL_CHAIN (decl) = decls;
11906             decls = decl;
11907           }
11908 
11909       parms = nreverse (decls);
11910 
11911       if (decl_context != TYPENAME)
11912           {
11913             /* The qualifiers on the function type become the qualifiers on
11914                the non-static member function. */
11915             memfn_quals |= type_memfn_quals (type);
11916             rqual = type_memfn_rqual (type);
11917             type_quals = TYPE_UNQUALIFIED;
11918           }
11919     }
11920 
11921   /* If this is a type name (such as, in a cast or sizeof),
11922      compute the type and return it now.  */
11923 
11924   if (decl_context == TYPENAME)
11925     {
11926       /* Note that here we don't care about type_quals.  */
11927 
11928       /* Special case: "friend class foo" looks like a TYPENAME context.  */
11929       if (friendp)
11930           {
11931             if (inlinep)
11932               {
11933                 error ("%<inline%> specified for friend class declaration");
11934                 inlinep = 0;
11935               }
11936 
11937             if (!current_aggr)
11938               {
11939                 /* Don't allow friend declaration without a class-key.  */
11940                 if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
11941                     permerror (input_location, "template parameters cannot be friends");
11942                 else if (TREE_CODE (type) == TYPENAME_TYPE)
11943                     permerror (input_location, "friend declaration requires class-key, "
11944                                  "i.e. %<friend class %T::%D%>",
11945                                  TYPE_CONTEXT (type), TYPENAME_TYPE_FULLNAME (type));
11946                 else
11947                     permerror (input_location, "friend declaration requires class-key, "
11948                                  "i.e. %<friend %#T%>",
11949                                  type);
11950               }
11951 
11952             /* Only try to do this stuff if we didn't already give up.  */
11953             if (type != integer_type_node)
11954               {
11955                 /* A friendly class?  */
11956                 if (current_class_type)
11957                     make_friend_class (current_class_type, TYPE_MAIN_VARIANT (type),
11958                                            /*complain=*/true);
11959                 else
11960                     error ("trying to make class %qT a friend of global scope",
11961                            type);
11962 
11963                 type = void_type_node;
11964               }
11965           }
11966       else if (memfn_quals || rqual)
11967           {
11968             if (ctype == NULL_TREE
11969                 && TREE_CODE (type) == METHOD_TYPE)
11970               ctype = TYPE_METHOD_BASETYPE (type);
11971 
11972             if (ctype)
11973               type = build_memfn_type (type, ctype, memfn_quals, rqual);
11974             /* Core issue #547: need to allow this in template type args.
11975                Allow it in general in C++11 for alias-declarations.  */
11976             else if ((template_type_arg || cxx_dialect >= cxx11)
11977                        && TREE_CODE (type) == FUNCTION_TYPE)
11978               type = apply_memfn_quals (type, memfn_quals, rqual);
11979             else
11980               error ("invalid qualifiers on non-member function type");
11981           }
11982 
11983       if (reqs)
11984           error_at (location_of (reqs), "requires-clause on type-id");
11985 
11986       return type;
11987     }
11988   else if (unqualified_id == NULL_TREE && decl_context != PARM
11989              && decl_context != CATCHPARM
11990              && TREE_CODE (type) != UNION_TYPE
11991              && ! bitfield
11992              && innermost_code != cdk_decomp)
11993     {
11994       error ("abstract declarator %qT used as declaration", type);
11995       return error_mark_node;
11996     }
11997 
11998   if (!FUNC_OR_METHOD_TYPE_P (type))
11999     {
12000       /* Only functions may be declared using an operator-function-id.  */
12001       if (dname && IDENTIFIER_ANY_OP_P (dname))
12002           {
12003             error ("declaration of %qD as non-function", dname);
12004             return error_mark_node;
12005           }
12006 
12007       if (reqs)
12008           error_at (location_of (reqs),
12009                       "requires-clause on declaration of non-function type %qT",
12010                       type);
12011     }
12012 
12013   /* We don't check parameter types here because we can emit a better
12014      error message later.  */
12015   if (decl_context != PARM)
12016     {
12017       type = check_var_type (unqualified_id, type);
12018       if (type == error_mark_node)
12019         return error_mark_node;
12020     }
12021 
12022   /* Now create the decl, which may be a VAR_DECL, a PARM_DECL
12023      or a FUNCTION_DECL, depending on DECL_CONTEXT and TYPE.  */
12024 
12025   if (decl_context == PARM || decl_context == CATCHPARM)
12026     {
12027       if (ctype || in_namespace)
12028           error ("cannot use %<::%> in parameter declaration");
12029 
12030       if (type_uses_auto (type)
12031             && !(cxx_dialect >= cxx17 && template_parm_flag))
12032           {
12033             if (cxx_dialect >= cxx14)
12034               error ("%<auto%> parameter not permitted in this context");
12035             else
12036               error ("parameter declared %<auto%>");
12037             type = error_mark_node;
12038           }
12039 
12040       /* A parameter declared as an array of T is really a pointer to T.
12041            One declared as a function is really a pointer to a function.
12042            One declared as a member is really a pointer to member.  */
12043 
12044       if (TREE_CODE (type) == ARRAY_TYPE)
12045           {
12046             /* Transfer const-ness of array into that of type pointed to.  */
12047             type = build_pointer_type (TREE_TYPE (type));
12048             type_quals = TYPE_UNQUALIFIED;
12049             array_parameter_p = true;
12050           }
12051       else if (TREE_CODE (type) == FUNCTION_TYPE)
12052           type = build_pointer_type (type);
12053     }
12054 
12055   if (ctype && TREE_CODE (type) == FUNCTION_TYPE && staticp < 2
12056       && !(identifier_p (unqualified_id)
12057              && IDENTIFIER_NEWDEL_OP_P (unqualified_id)))
12058     {
12059       cp_cv_quals real_quals = memfn_quals;
12060       if (cxx_dialect < cxx14 && constexpr_p
12061             && sfk != sfk_constructor && sfk != sfk_destructor)
12062           real_quals |= TYPE_QUAL_CONST;
12063       type = build_memfn_type (type, ctype, real_quals, rqual);
12064     }
12065 
12066   {
12067     tree decl = NULL_TREE;
12068 
12069     if (decl_context == PARM)
12070       {
12071           decl = cp_build_parm_decl (NULL_TREE, unqualified_id, type);
12072           DECL_ARRAY_PARAMETER_P (decl) = array_parameter_p;
12073 
12074           bad_specifiers (decl, BSP_PARM, virtualp,
12075                               memfn_quals != TYPE_UNQUALIFIED,
12076                               inlinep, friendp, raises != NULL_TREE);
12077       }
12078     else if (decl_context == FIELD)
12079       {
12080           if (!staticp && !friendp && TREE_CODE (type) != METHOD_TYPE)
12081             if (tree auto_node = type_uses_auto (type))
12082               {
12083                 location_t loc = declspecs->locations[ds_type_spec];
12084                 if (CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12085                     error_at (loc, "invalid use of template-name %qE without an "
12086                                 "argument list",
12087                                 CLASS_PLACEHOLDER_TEMPLATE (auto_node));
12088                 else
12089                     error_at (loc, "non-static data member declared with "
12090                                 "placeholder %qT", auto_node);
12091                 type = error_mark_node;
12092               }
12093 
12094           /* The C99 flexible array extension.  */
12095           if (!staticp && TREE_CODE (type) == ARRAY_TYPE
12096               && TYPE_DOMAIN (type) == NULL_TREE)
12097             {
12098               if (ctype
12099                     && (TREE_CODE (ctype) == UNION_TYPE
12100                         || TREE_CODE (ctype) == QUAL_UNION_TYPE))
12101                 {
12102                     error ("flexible array member in union");
12103                     type = error_mark_node;
12104                 }
12105               else
12106                 {
12107                     /* Array is a flexible member.  */
12108                     if (in_system_header_at (input_location))
12109                       /* Do not warn on flexible array members in system
12110                          headers because glibc uses them.  */;
12111                     else if (name)
12112                       pedwarn (input_location, OPT_Wpedantic,
12113                                  "ISO C++ forbids flexible array member %qs", name);
12114                     else
12115                       pedwarn (input_location, OPT_Wpedantic,
12116                                  "ISO C++ forbids flexible array members");
12117 
12118                     /* Flexible array member has a null domain.  */
12119                     type = build_cplus_array_type (TREE_TYPE (type), NULL_TREE);
12120                 }
12121             }
12122 
12123           if (type == error_mark_node)
12124             {
12125               /* Happens when declaring arrays of sizes which
12126                  are error_mark_node, for example.  */
12127               decl = NULL_TREE;
12128             }
12129           else if (in_namespace && !friendp)
12130             {
12131               /* Something like struct S { int N::j; };  */
12132               error ("invalid use of %<::%>");
12133               return error_mark_node;
12134             }
12135           else if (TREE_CODE (type) == FUNCTION_TYPE
12136                      || TREE_CODE (type) == METHOD_TYPE)
12137             {
12138               int publicp = 0;
12139               tree function_context;
12140 
12141               if (friendp == 0)
12142                 {
12143                     /* This should never happen in pure C++ (the check
12144                        could be an assert).  It could happen in
12145                        Objective-C++ if someone writes invalid code that
12146                        uses a function declaration for an instance
12147                        variable or property (instance variables and
12148                        properties are parsed as FIELD_DECLs, but they are
12149                        part of an Objective-C class, not a C++ class).
12150                        That code is invalid and is caught by this
12151                        check.  */
12152                     if (!ctype)
12153                       {
12154                         error ("declaration of function %qD in invalid context",
12155                                  unqualified_id);
12156                         return error_mark_node;
12157                       }
12158 
12159                     /* ``A union may [ ... ] not [ have ] virtual functions.''
12160                        ARM 9.5 */
12161                     if (virtualp && TREE_CODE (ctype) == UNION_TYPE)
12162                       {
12163                         error ("function %qD declared %<virtual%> inside a union",
12164                                  unqualified_id);
12165                         return error_mark_node;
12166                       }
12167 
12168                     if (virtualp
12169                         && identifier_p (unqualified_id)
12170                         && IDENTIFIER_NEWDEL_OP_P (unqualified_id))
12171                       {
12172                         error ("%qD cannot be declared %<virtual%>, since it "
12173                                  "is always static", unqualified_id);
12174                         virtualp = 0;
12175                       }
12176                 }
12177 
12178               /* Check that the name used for a destructor makes sense.  */
12179               if (sfk == sfk_destructor)
12180                 {
12181                     tree uqname = id_declarator->u.id.unqualified_name;
12182 
12183                     if (!ctype)
12184                       {
12185                         gcc_assert (friendp);
12186                         error ("expected qualified name in friend declaration "
12187                                  "for destructor %qD", uqname);
12188                         return error_mark_node;
12189                       }
12190 
12191                     if (!check_dtor_name (ctype, TREE_OPERAND (uqname, 0)))
12192                       {
12193                         error ("declaration of %qD as member of %qT",
12194                                  uqname, ctype);
12195                         return error_mark_node;
12196                       }
12197                 if (concept_p)
12198                   {
12199                     error ("a destructor cannot be %<concept%>");
12200                     return error_mark_node;
12201                   }
12202                 if (constexpr_p)
12203                   {
12204                     error ("a destructor cannot be %<constexpr%>");
12205                     return error_mark_node;
12206                   }
12207                 }
12208               else if (sfk == sfk_constructor && friendp && !ctype)
12209                 {
12210                     error ("expected qualified name in friend declaration "
12211                            "for constructor %qD",
12212                            id_declarator->u.id.unqualified_name);
12213                     return error_mark_node;
12214                 }
12215               if (sfk == sfk_constructor)
12216                 if (concept_p)
12217                     {
12218                       error ("a constructor cannot be %<concept%>");
12219                       return error_mark_node;
12220                     }
12221               if (concept_p)
12222                 {
12223                     error ("a concept cannot be a member function");
12224                     concept_p = false;
12225                 }
12226 
12227               if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12228                 {
12229                     tree tmpl = TREE_OPERAND (unqualified_id, 0);
12230                     if (variable_template_p (tmpl))
12231                       {
12232                         error ("specialization of variable template %qD "
12233                                  "declared as function", tmpl);
12234                         inform (DECL_SOURCE_LOCATION (tmpl),
12235                                   "variable template declared here");
12236                         return error_mark_node;
12237                       }
12238                 }
12239 
12240               /* Tell grokfndecl if it needs to set TREE_PUBLIC on the node.  */
12241               function_context = (ctype != NULL_TREE) ?
12242                 decl_function_context (TYPE_MAIN_DECL (ctype)) : NULL_TREE;
12243               publicp = (! friendp || ! staticp)
12244                 && function_context == NULL_TREE;
12245 
12246               if (late_return_type_p)
12247                 TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12248 
12249               decl = grokfndecl (ctype, type,
12250                                      TREE_CODE (unqualified_id) != TEMPLATE_ID_EXPR
12251                                      ? unqualified_id : dname,
12252                                      parms,
12253                                      unqualified_id,
12254                                      reqs,
12255                                      virtualp, flags, memfn_quals, rqual, raises,
12256                                      friendp ? -1 : 0, friendp, publicp,
12257                                inlinep | (2 * constexpr_p) | (4 * concept_p),
12258                                      initialized == SD_DELETED, sfk,
12259                                      funcdef_flag, template_count, in_namespace,
12260                                      attrlist, declarator->id_loc);
12261             decl = set_virt_specifiers (decl, virt_specifiers);
12262               if (decl == NULL_TREE)
12263                 return error_mark_node;
12264 #if 0
12265               /* This clobbers the attrs stored in `decl' from `attrlist'.  */
12266               /* The decl and setting of decl_attr is also turned off.  */
12267               decl = build_decl_attribute_variant (decl, decl_attr);
12268 #endif
12269 
12270               /* [class.conv.ctor]
12271 
12272                  A constructor declared without the function-specifier
12273                  explicit that can be called with a single parameter
12274                  specifies a conversion from the type of its first
12275                  parameter to the type of its class.  Such a constructor
12276                  is called a converting constructor.  */
12277               if (explicitp == 2)
12278                 DECL_NONCONVERTING_P (decl) = 1;
12279             }
12280           else if (!staticp && !dependent_type_p (type)
12281                      && !COMPLETE_TYPE_P (complete_type (type))
12282                      && (!complete_or_array_type_p (type)
12283                          || initialized == 0))
12284             {
12285               if (TREE_CODE (type) != ARRAY_TYPE
12286                     || !COMPLETE_TYPE_P (TREE_TYPE (type)))
12287                 {
12288                     if (unqualified_id)
12289                       {
12290                         error ("field %qD has incomplete type %qT",
12291                                  unqualified_id, type);
12292                         cxx_incomplete_type_inform (strip_array_types (type));
12293                       }
12294                     else
12295                       error ("name %qT has incomplete type", type);
12296 
12297                     type = error_mark_node;
12298                     decl = NULL_TREE;
12299                 }
12300             }
12301           else
12302             {
12303               if (friendp)
12304                 {
12305                     error ("%qE is neither function nor member function; "
12306                            "cannot be declared friend", unqualified_id);
12307                     return error_mark_node;
12308                 }
12309               decl = NULL_TREE;
12310             }
12311 
12312           if (friendp)
12313             {
12314               /* Friends are treated specially.  */
12315               if (ctype == current_class_type)
12316                 ;  /* We already issued a permerror.  */
12317               else if (decl && DECL_NAME (decl))
12318                 {
12319                     if (template_class_depth (current_class_type) == 0)
12320                       {
12321                         decl = check_explicit_specialization
12322                           (unqualified_id, decl, template_count,
12323                            2 * funcdef_flag + 4);
12324                         if (decl == error_mark_node)
12325                           return error_mark_node;
12326                       }
12327 
12328                     decl = do_friend (ctype, unqualified_id, decl,
12329                                           *attrlist, flags,
12330                                           funcdef_flag);
12331                     return decl;
12332                 }
12333               else
12334                 return error_mark_node;
12335             }
12336 
12337           /* Structure field.  It may not be a function, except for C++.  */
12338 
12339           if (decl == NULL_TREE)
12340             {
12341               if (staticp)
12342                 {
12343                     /* C++ allows static class members.  All other work
12344                        for this is done by grokfield.  */
12345                     decl = build_lang_decl_loc (declarator
12346                                                       ? declarator->id_loc
12347                                                       : input_location,
12348                                                       VAR_DECL, unqualified_id, type);
12349                     set_linkage_for_static_data_member (decl);
12350                     if (concept_p)
12351                         error ("static data member %qE declared %<concept%>",
12352                                  unqualified_id);
12353                     else if (constexpr_p && !initialized)
12354                       {
12355                         error ("%<constexpr%> static data member %qD must have an "
12356                                  "initializer", decl);
12357                         constexpr_p = false;
12358                       }
12359 
12360                     if (inlinep)
12361                       mark_inline_variable (decl);
12362 
12363                     if (!DECL_VAR_DECLARED_INLINE_P (decl)
12364                         && !(cxx_dialect >= cxx17 && constexpr_p))
12365                       /* Even if there is an in-class initialization, DECL
12366                          is considered undefined until an out-of-class
12367                          definition is provided, unless this is an inline
12368                          variable.  */
12369                       DECL_EXTERNAL (decl) = 1;
12370 
12371                     if (thread_p)
12372                       {
12373                         CP_DECL_THREAD_LOCAL_P (decl) = true;
12374                         if (!processing_template_decl)
12375                           set_decl_tls_model (decl, decl_default_tls_model (decl));
12376                         if (declspecs->gnu_thread_keyword_p)
12377                           SET_DECL_GNU_TLS_P (decl);
12378                       }
12379                 }
12380               else
12381                 {
12382                     if (concept_p)
12383                       error ("non-static data member %qE declared %<concept%>",
12384                                unqualified_id);
12385                 else if (constexpr_p)
12386                       {
12387                         error ("non-static data member %qE declared %<constexpr%>",
12388                                  unqualified_id);
12389                         constexpr_p = false;
12390                       }
12391                     decl = build_decl (input_location,
12392                                            FIELD_DECL, unqualified_id, type);
12393                     DECL_NONADDRESSABLE_P (decl) = bitfield;
12394                     if (bitfield && !unqualified_id)
12395                       {
12396                         TREE_NO_WARNING (decl) = 1;
12397                         DECL_PADDING_P (decl) = 1;
12398                       }
12399 
12400                     if (storage_class == sc_mutable)
12401                       {
12402                         DECL_MUTABLE_P (decl) = 1;
12403                         storage_class = sc_none;
12404                       }
12405 
12406                     if (initialized)
12407                       {
12408                         /* An attempt is being made to initialize a non-static
12409                            member.  This is new in C++11.  */
12410                         maybe_warn_cpp0x (CPP0X_NSDMI);
12411 
12412                         /* If this has been parsed with static storage class, but
12413                            errors forced staticp to be cleared, ensure NSDMI is
12414                            not present.  */
12415                         if (declspecs->storage_class == sc_static)
12416                           DECL_INITIAL (decl) = error_mark_node;
12417                       }
12418                 }
12419 
12420               bad_specifiers (decl, BSP_FIELD, virtualp,
12421                                   memfn_quals != TYPE_UNQUALIFIED,
12422                                   staticp ? false : inlinep, friendp,
12423                                   raises != NULL_TREE);
12424             }
12425       }
12426     else if (TREE_CODE (type) == FUNCTION_TYPE
12427                || TREE_CODE (type) == METHOD_TYPE)
12428       {
12429           tree original_name;
12430           int publicp = 0;
12431 
12432           if (!unqualified_id)
12433             return error_mark_node;
12434 
12435           if (TREE_CODE (unqualified_id) == TEMPLATE_ID_EXPR)
12436             original_name = dname;
12437           else
12438             original_name = unqualified_id;
12439           // FIXME:gcc_assert (original_name == dname);
12440 
12441           if (storage_class == sc_auto)
12442             error ("storage class %<auto%> invalid for function %qs", name);
12443           else if (storage_class == sc_register)
12444             error ("storage class %<register%> invalid for function %qs", name);
12445           else if (thread_p)
12446             {
12447               if (declspecs->gnu_thread_keyword_p)
12448                 error ("storage class %<__thread%> invalid for function %qs",
12449                          name);
12450               else
12451                 error ("storage class %<thread_local%> invalid for function %qs",
12452                          name);
12453             }
12454 
12455         if (virt_specifiers)
12456           error ("virt-specifiers in %qs not allowed outside a class definition", name);
12457           /* Function declaration not at top level.
12458              Storage classes other than `extern' are not allowed
12459              and `extern' makes no difference.  */
12460           if (! toplevel_bindings_p ()
12461               && (storage_class == sc_static
12462                     || decl_spec_seq_has_spec_p (declspecs, ds_inline))
12463               && pedantic)
12464             {
12465               if (storage_class == sc_static)
12466                 pedwarn (input_location, OPT_Wpedantic,
12467                            "%<static%> specifier invalid for function %qs "
12468                            "declared out of global scope", name);
12469               else
12470                 pedwarn (input_location, OPT_Wpedantic,
12471                            "%<inline%> specifier invalid for function %qs "
12472                            "declared out of global scope", name);
12473             }
12474 
12475           if (ctype == NULL_TREE)
12476             {
12477               if (virtualp)
12478                 {
12479                     error ("virtual non-class function %qs", name);
12480                     virtualp = 0;
12481                 }
12482               else if (sfk == sfk_constructor
12483                          || sfk == sfk_destructor)
12484                 {
12485                     error (funcdef_flag
12486                            ? G_("%qs defined in a non-class scope")
12487                            : G_("%qs declared in a non-class scope"), name);
12488                     sfk = sfk_none;
12489                 }
12490             }
12491 
12492           /* Record whether the function is public.  */
12493           publicp = (ctype != NULL_TREE
12494                        || storage_class != sc_static);
12495 
12496           if (late_return_type_p)
12497             TYPE_HAS_LATE_RETURN_TYPE (type) = 1;
12498 
12499           decl = grokfndecl (ctype, type, original_name, parms, unqualified_id,
12500                            reqs, virtualp, flags, memfn_quals, rqual, raises,
12501                                  1, friendp,
12502                                  publicp,
12503                            inlinep | (2 * constexpr_p) | (4 * concept_p),
12504                                  initialized == SD_DELETED,
12505                            sfk,
12506                            funcdef_flag,
12507                                  template_count, in_namespace, attrlist,
12508                                  declarator->id_loc);
12509           if (decl == NULL_TREE)
12510             return error_mark_node;
12511 
12512           if (explicitp == 2)
12513             DECL_NONCONVERTING_P (decl) = 1;
12514           if (staticp == 1)
12515             {
12516               int invalid_static = 0;
12517 
12518               /* Don't allow a static member function in a class, and forbid
12519                  declaring main to be static.  */
12520               if (TREE_CODE (type) == METHOD_TYPE)
12521                 {
12522                     permerror (input_location, "cannot declare member function %qD to have "
12523                                  "static linkage", decl);
12524                     invalid_static = 1;
12525                 }
12526               else if (current_function_decl)
12527                 {
12528                     /* 7.1.1: There can be no static function declarations within a
12529                        block.  */
12530                     error ("cannot declare static function inside another function");
12531                     invalid_static = 1;
12532                 }
12533 
12534               if (invalid_static)
12535                 {
12536                     staticp = 0;
12537                     storage_class = sc_none;
12538                 }
12539             }
12540       }
12541     else
12542       {
12543           /* It's a variable.  */
12544 
12545           /* An uninitialized decl with `extern' is a reference.  */
12546           decl = grokvardecl (type, dname, unqualified_id,
12547                                   declspecs,
12548                                   initialized,
12549                                   type_quals,
12550                                   inlinep,
12551                                   concept_p,
12552                                   template_count,
12553                                   ctype ? ctype : in_namespace);
12554           if (decl == NULL_TREE)
12555             return error_mark_node;
12556 
12557           bad_specifiers (decl, BSP_VAR, virtualp,
12558                               memfn_quals != TYPE_UNQUALIFIED,
12559                               inlinep, friendp, raises != NULL_TREE);
12560 
12561           if (ctype)
12562             {
12563               DECL_CONTEXT (decl) = ctype;
12564               if (staticp == 1)
12565                 {
12566                     permerror (input_location, "%<static%> may not be used when defining "
12567                                  "(as opposed to declaring) a static data member");
12568                     staticp = 0;
12569                     storage_class = sc_none;
12570                 }
12571               if (storage_class == sc_register && TREE_STATIC (decl))
12572                 {
12573                     error ("static member %qD declared %<register%>", decl);
12574                     storage_class = sc_none;
12575                 }
12576               if (storage_class == sc_extern && pedantic)
12577                 {
12578                     pedwarn (input_location, OPT_Wpedantic,
12579                                "cannot explicitly declare member %q#D to have "
12580                                "extern linkage", decl);
12581                     storage_class = sc_none;
12582                 }
12583             }
12584           else if (constexpr_p && DECL_EXTERNAL (decl))
12585             {
12586               error ("declaration of %<constexpr%> variable %qD "
12587                        "is not a definition", decl);
12588               constexpr_p = false;
12589             }
12590 
12591           if (inlinep)
12592             mark_inline_variable (decl);
12593           if (innermost_code == cdk_decomp)
12594             {
12595               gcc_assert (declarator && declarator->kind == cdk_decomp);
12596               DECL_SOURCE_LOCATION (decl) = declarator->id_loc;
12597               DECL_ARTIFICIAL (decl) = 1;
12598               fit_decomposition_lang_decl (decl, NULL_TREE);
12599             }
12600       }
12601 
12602     if (VAR_P (decl) && !initialized)
12603       if (tree auto_node = type_uses_auto (type))
12604           if (!CLASS_PLACEHOLDER_TEMPLATE (auto_node))
12605             {
12606               location_t loc = declspecs->locations[ds_type_spec];
12607               error_at (loc, "declaration of %q#D has no initializer", decl);
12608               TREE_TYPE (decl) = error_mark_node;
12609             }
12610 
12611     if (storage_class == sc_extern && initialized && !funcdef_flag)
12612       {
12613           if (toplevel_bindings_p ())
12614             {
12615               /* It's common practice (and completely valid) to have a const
12616                  be initialized and declared extern.  */
12617               if (!(type_quals & TYPE_QUAL_CONST))
12618                 warning (0, "%qs initialized and declared %<extern%>", name);
12619             }
12620           else
12621             {
12622               error ("%qs has both %<extern%> and initializer", name);
12623               return error_mark_node;
12624             }
12625       }
12626 
12627     /* Record `register' declaration for warnings on &
12628        and in case doing stupid register allocation.  */
12629 
12630     if (storage_class == sc_register)
12631       {
12632           DECL_REGISTER (decl) = 1;
12633           /* Warn about register storage specifiers on PARM_DECLs.  */
12634           if (TREE_CODE (decl) == PARM_DECL)
12635             {
12636               if (cxx_dialect >= cxx17)
12637                 pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12638                            "ISO C++17 does not allow %<register%> storage "
12639                            "class specifier");
12640               else
12641                 warning_at (DECL_SOURCE_LOCATION (decl), OPT_Wregister,
12642                                 "%<register%> storage class specifier used");
12643             }
12644       }
12645     else if (storage_class == sc_extern)
12646       DECL_THIS_EXTERN (decl) = 1;
12647     else if (storage_class == sc_static)
12648       DECL_THIS_STATIC (decl) = 1;
12649 
12650     /* Set constexpr flag on vars (functions got it in grokfndecl).  */
12651     if (constexpr_p && VAR_P (decl))
12652       DECL_DECLARED_CONSTEXPR_P (decl) = true;
12653 
12654     /* Record constancy and volatility on the DECL itself .  There's
12655        no need to do this when processing a template; we'll do this
12656        for the instantiated declaration based on the type of DECL.  */
12657     if (!processing_template_decl)
12658       cp_apply_type_quals_to_decl (type_quals, decl);
12659 
12660     return decl;
12661   }
12662 }
12663 
12664 /* Subroutine of start_function.  Ensure that each of the parameter
12665    types (as listed in PARMS) is complete, as is required for a
12666    function definition.  */
12667 
12668 static void
require_complete_types_for_parms(tree parms)12669 require_complete_types_for_parms (tree parms)
12670 {
12671   for (; parms; parms = DECL_CHAIN (parms))
12672     {
12673       if (dependent_type_p (TREE_TYPE (parms)))
12674           continue;
12675       if (!VOID_TYPE_P (TREE_TYPE (parms))
12676             && complete_type_or_else (TREE_TYPE (parms), parms))
12677           {
12678             relayout_decl (parms);
12679             DECL_ARG_TYPE (parms) = type_passed_as (TREE_TYPE (parms));
12680 
12681             maybe_warn_parm_abi (TREE_TYPE (parms),
12682                                      DECL_SOURCE_LOCATION (parms));
12683           }
12684       else
12685           /* grokparms or complete_type_or_else will have already issued
12686              an error.  */
12687           TREE_TYPE (parms) = error_mark_node;
12688     }
12689 }
12690 
12691 /* Returns nonzero if T is a local variable.  */
12692 
12693 int
local_variable_p(const_tree t)12694 local_variable_p (const_tree t)
12695 {
12696   if ((VAR_P (t)
12697        /* A VAR_DECL with a context that is a _TYPE is a static data
12698             member.  */
12699        && !TYPE_P (CP_DECL_CONTEXT (t))
12700        /* Any other non-local variable must be at namespace scope.  */
12701        && !DECL_NAMESPACE_SCOPE_P (t))
12702       || (TREE_CODE (t) == PARM_DECL))
12703     return 1;
12704 
12705   return 0;
12706 }
12707 
12708 /* Like local_variable_p, but suitable for use as a tree-walking
12709    function.  */
12710 
12711 static tree
local_variable_p_walkfn(tree * tp,int * walk_subtrees,void *)12712 local_variable_p_walkfn (tree *tp, int *walk_subtrees,
12713                                void * /*data*/)
12714 {
12715   if (local_variable_p (*tp)
12716       && (!DECL_ARTIFICIAL (*tp) || DECL_NAME (*tp) == this_identifier))
12717     return *tp;
12718   else if (TYPE_P (*tp))
12719     *walk_subtrees = 0;
12720 
12721   return NULL_TREE;
12722 }
12723 
12724 /* Check that ARG, which is a default-argument expression for a
12725    parameter DECL, is valid.  Returns ARG, or ERROR_MARK_NODE, if
12726    something goes wrong.  DECL may also be a _TYPE node, rather than a
12727    DECL, if there is no DECL available.  */
12728 
12729 tree
check_default_argument(tree decl,tree arg,tsubst_flags_t complain)12730 check_default_argument (tree decl, tree arg, tsubst_flags_t complain)
12731 {
12732   tree var;
12733   tree decl_type;
12734 
12735   if (TREE_CODE (arg) == DEFAULT_ARG)
12736     /* We get a DEFAULT_ARG when looking at an in-class declaration
12737        with a default argument.  Ignore the argument for now; we'll
12738        deal with it after the class is complete.  */
12739     return arg;
12740 
12741   if (TYPE_P (decl))
12742     {
12743       decl_type = decl;
12744       decl = NULL_TREE;
12745     }
12746   else
12747     decl_type = TREE_TYPE (decl);
12748 
12749   if (arg == error_mark_node
12750       || decl == error_mark_node
12751       || TREE_TYPE (arg) == error_mark_node
12752       || decl_type == error_mark_node)
12753     /* Something already went wrong.  There's no need to check
12754        further.  */
12755     return error_mark_node;
12756 
12757   /* [dcl.fct.default]
12758 
12759      A default argument expression is implicitly converted to the
12760      parameter type.  */
12761   ++cp_unevaluated_operand;
12762   /* Avoid digest_init clobbering the initializer.  */
12763   tree carg = BRACE_ENCLOSED_INITIALIZER_P (arg) ? unshare_expr (arg): arg;
12764   perform_implicit_conversion_flags (decl_type, carg, complain,
12765                                              LOOKUP_IMPLICIT);
12766   --cp_unevaluated_operand;
12767 
12768   /* Avoid redundant -Wzero-as-null-pointer-constant warnings at
12769      the call sites.  */
12770   if (TYPE_PTR_OR_PTRMEM_P (decl_type)
12771       && null_ptr_cst_p (arg))
12772     return nullptr_node;
12773 
12774   /* [dcl.fct.default]
12775 
12776      Local variables shall not be used in default argument
12777      expressions.
12778 
12779      The keyword `this' shall not be used in a default argument of a
12780      member function.  */
12781   var = cp_walk_tree_without_duplicates (&arg, local_variable_p_walkfn, NULL);
12782   if (var)
12783     {
12784       if (complain & tf_warning_or_error)
12785           {
12786             if (DECL_NAME (var) == this_identifier)
12787               permerror (input_location, "default argument %qE uses %qD",
12788                            arg, var);
12789             else
12790               error ("default argument %qE uses local variable %qD", arg, var);
12791           }
12792       return error_mark_node;
12793     }
12794 
12795   /* All is well.  */
12796   return arg;
12797 }
12798 
12799 /* Returns a deprecated type used within TYPE, or NULL_TREE if none.  */
12800 
12801 static tree
type_is_deprecated(tree type)12802 type_is_deprecated (tree type)
12803 {
12804   enum tree_code code;
12805   if (TREE_DEPRECATED (type))
12806     return type;
12807   if (TYPE_NAME (type))
12808     {
12809       if (TREE_DEPRECATED (TYPE_NAME (type)))
12810           return type;
12811       else
12812           return NULL_TREE;
12813     }
12814 
12815   /* Do warn about using typedefs to a deprecated class.  */
12816   if (OVERLOAD_TYPE_P (type) && type != TYPE_MAIN_VARIANT (type))
12817     return type_is_deprecated (TYPE_MAIN_VARIANT (type));
12818 
12819   code = TREE_CODE (type);
12820 
12821   if (code == POINTER_TYPE || code == REFERENCE_TYPE
12822       || code == OFFSET_TYPE || code == FUNCTION_TYPE
12823       || code == METHOD_TYPE || code == ARRAY_TYPE)
12824     return type_is_deprecated (TREE_TYPE (type));
12825 
12826   if (TYPE_PTRMEMFUNC_P (type))
12827     return type_is_deprecated
12828       (TREE_TYPE (TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (type))));
12829 
12830   return NULL_TREE;
12831 }
12832 
12833 /* Decode the list of parameter types for a function type.
12834    Given the list of things declared inside the parens,
12835    return a list of types.
12836 
12837    If this parameter does not end with an ellipsis, we append
12838    void_list_node.
12839 
12840    *PARMS is set to the chain of PARM_DECLs created.  */
12841 
12842 tree
grokparms(tree parmlist,tree * parms)12843 grokparms (tree parmlist, tree *parms)
12844 {
12845   tree result = NULL_TREE;
12846   tree decls = NULL_TREE;
12847   tree parm;
12848   int any_error = 0;
12849 
12850   for (parm = parmlist; parm != NULL_TREE; parm = TREE_CHAIN (parm))
12851     {
12852       tree type = NULL_TREE;
12853       tree init = TREE_PURPOSE (parm);
12854       tree decl = TREE_VALUE (parm);
12855 
12856       if (parm == void_list_node)
12857           break;
12858 
12859       if (! decl || TREE_TYPE (decl) == error_mark_node)
12860           continue;
12861 
12862       type = TREE_TYPE (decl);
12863       if (VOID_TYPE_P (type))
12864           {
12865             if (same_type_p (type, void_type_node)
12866                 && !init
12867                 && !DECL_NAME (decl) && !result
12868                 && TREE_CHAIN (parm) == void_list_node)
12869               /* DR 577: A parameter list consisting of a single
12870                  unnamed parameter of non-dependent type 'void'.  */
12871               break;
12872             else if (cv_qualified_p (type))
12873               error_at (DECL_SOURCE_LOCATION (decl),
12874                           "invalid use of cv-qualified type %qT in "
12875                           "parameter declaration", type);
12876             else
12877               error_at (DECL_SOURCE_LOCATION (decl),
12878                           "invalid use of type %<void%> in parameter "
12879                           "declaration");
12880             /* It's not a good idea to actually create parameters of
12881                type `void'; other parts of the compiler assume that a
12882                void type terminates the parameter list.  */
12883             type = error_mark_node;
12884             TREE_TYPE (decl) = error_mark_node;
12885           }
12886 
12887       if (type != error_mark_node)
12888           {
12889             if (deprecated_state != DEPRECATED_SUPPRESS)
12890               {
12891                 tree deptype = type_is_deprecated (type);
12892                 if (deptype)
12893                     cp_warn_deprecated_use (deptype);
12894               }
12895 
12896             /* Top-level qualifiers on the parameters are
12897                ignored for function types.  */
12898             type = cp_build_qualified_type (type, 0);
12899             if (TREE_CODE (type) == METHOD_TYPE)
12900               {
12901                 error ("parameter %qD invalidly declared method type", decl);
12902                 type = build_pointer_type (type);
12903                 TREE_TYPE (decl) = type;
12904               }
12905             else if (abstract_virtuals_error (decl, type))
12906               any_error = 1;  /* Seems like a good idea.  */
12907             else if (cxx_dialect < cxx17 && POINTER_TYPE_P (type))
12908               {
12909                 /* Before C++17 DR 393:
12910                      [dcl.fct]/6, parameter types cannot contain pointers
12911                      (references) to arrays of unknown bound.  */
12912                 tree t = TREE_TYPE (type);
12913                 int ptr = TYPE_PTR_P (type);
12914 
12915                 while (1)
12916                     {
12917                       if (TYPE_PTR_P (t))
12918                         ptr = 1;
12919                       else if (TREE_CODE (t) != ARRAY_TYPE)
12920                         break;
12921                       else if (!TYPE_DOMAIN (t))
12922                         break;
12923                       t = TREE_TYPE (t);
12924                     }
12925                 if (TREE_CODE (t) == ARRAY_TYPE)
12926                     pedwarn (DECL_SOURCE_LOCATION (decl), OPT_Wpedantic,
12927                                ptr
12928                                ? G_("parameter %qD includes pointer to array of "
12929                                     "unknown bound %qT")
12930                                : G_("parameter %qD includes reference to array of "
12931                                     "unknown bound %qT"),
12932                                decl, t);
12933               }
12934 
12935             if (any_error)
12936               init = NULL_TREE;
12937             else if (init && !processing_template_decl)
12938               init = check_default_argument (decl, init, tf_warning_or_error);
12939           }
12940 
12941       DECL_CHAIN (decl) = decls;
12942       decls = decl;
12943       result = tree_cons (init, type, result);
12944     }
12945   decls = nreverse (decls);
12946   result = nreverse (result);
12947   if (parm)
12948     result = chainon (result, void_list_node);
12949   *parms = decls;
12950 
12951   return result;
12952 }
12953 
12954 
12955 /* D is a constructor or overloaded `operator='.
12956 
12957    Let T be the class in which D is declared. Then, this function
12958    returns:
12959 
12960    -1 if D's is an ill-formed constructor or copy assignment operator
12961       whose first parameter is of type `T'.
12962    0  if D is not a copy constructor or copy assignment
12963       operator.
12964    1  if D is a copy constructor or copy assignment operator whose
12965       first parameter is a reference to non-const qualified T.
12966    2  if D is a copy constructor or copy assignment operator whose
12967       first parameter is a reference to const qualified T.
12968 
12969    This function can be used as a predicate. Positive values indicate
12970    a copy constructor and nonzero values indicate a copy assignment
12971    operator.  */
12972 
12973 int
copy_fn_p(const_tree d)12974 copy_fn_p (const_tree d)
12975 {
12976   tree args;
12977   tree arg_type;
12978   int result = 1;
12979 
12980   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
12981 
12982   if (TREE_CODE (d) == TEMPLATE_DECL
12983       || (DECL_TEMPLATE_INFO (d)
12984             && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
12985     /* Instantiations of template member functions are never copy
12986        functions.  Note that member functions of templated classes are
12987        represented as template functions internally, and we must
12988        accept those as copy functions.  */
12989     return 0;
12990 
12991   args = FUNCTION_FIRST_USER_PARMTYPE (d);
12992   if (!args)
12993     return 0;
12994 
12995   arg_type = TREE_VALUE (args);
12996   if (arg_type == error_mark_node)
12997     return 0;
12998 
12999   if (TYPE_MAIN_VARIANT (arg_type) == DECL_CONTEXT (d))
13000     {
13001       /* Pass by value copy assignment operator.  */
13002       result = -1;
13003     }
13004   else if (TREE_CODE (arg_type) == REFERENCE_TYPE
13005              && !TYPE_REF_IS_RVALUE (arg_type)
13006              && TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)) == DECL_CONTEXT (d))
13007     {
13008       if (CP_TYPE_CONST_P (TREE_TYPE (arg_type)))
13009           result = 2;
13010     }
13011   else
13012     return 0;
13013 
13014   args = TREE_CHAIN (args);
13015 
13016   if (args && args != void_list_node && !TREE_PURPOSE (args))
13017     /* There are more non-optional args.  */
13018     return 0;
13019 
13020   return result;
13021 }
13022 
13023 /* D is a constructor or overloaded `operator='.
13024 
13025    Let T be the class in which D is declared. Then, this function
13026    returns true when D is a move constructor or move assignment
13027    operator, false otherwise.  */
13028 
13029 bool
move_fn_p(const_tree d)13030 move_fn_p (const_tree d)
13031 {
13032   gcc_assert (DECL_FUNCTION_MEMBER_P (d));
13033 
13034   if (cxx_dialect == cxx98)
13035     /* There are no move constructors if we are in C++98 mode.  */
13036     return false;
13037 
13038   if (TREE_CODE (d) == TEMPLATE_DECL
13039       || (DECL_TEMPLATE_INFO (d)
13040          && DECL_MEMBER_TEMPLATE_P (DECL_TI_TEMPLATE (d))))
13041     /* Instantiations of template member functions are never move
13042        functions.  Note that member functions of templated classes are
13043        represented as template functions internally, and we must
13044        accept those as move functions.  */
13045     return 0;
13046 
13047   return move_signature_fn_p (d);
13048 }
13049 
13050 /* D is a constructor or overloaded `operator='.
13051 
13052    Then, this function returns true when D has the same signature as a move
13053    constructor or move assignment operator (because either it is such a
13054    ctor/op= or it is a template specialization with the same signature),
13055    false otherwise.  */
13056 
13057 bool
move_signature_fn_p(const_tree d)13058 move_signature_fn_p (const_tree d)
13059 {
13060   tree args;
13061   tree arg_type;
13062   bool result = false;
13063 
13064   args = FUNCTION_FIRST_USER_PARMTYPE (d);
13065   if (!args)
13066     return 0;
13067 
13068   arg_type = TREE_VALUE (args);
13069   if (arg_type == error_mark_node)
13070     return 0;
13071 
13072   if (TREE_CODE (arg_type) == REFERENCE_TYPE
13073       && TYPE_REF_IS_RVALUE (arg_type)
13074       && same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (arg_type)),
13075                       DECL_CONTEXT (d)))
13076     result = true;
13077 
13078   args = TREE_CHAIN (args);
13079 
13080   if (args && args != void_list_node && !TREE_PURPOSE (args))
13081     /* There are more non-optional args.  */
13082     return false;
13083 
13084   return result;
13085 }
13086 
13087 /* Remember any special properties of member function DECL.  */
13088 
13089 void
grok_special_member_properties(tree decl)13090 grok_special_member_properties (tree decl)
13091 {
13092   tree class_type;
13093 
13094   if (!DECL_NONSTATIC_MEMBER_FUNCTION_P (decl))
13095     return;
13096 
13097   class_type = DECL_CONTEXT (decl);
13098   if (IDENTIFIER_CTOR_P (DECL_NAME (decl)))
13099     {
13100       int ctor = copy_fn_p (decl);
13101 
13102       if (!DECL_ARTIFICIAL (decl))
13103           TYPE_HAS_USER_CONSTRUCTOR (class_type) = 1;
13104 
13105       if (ctor > 0)
13106           {
13107             /* [class.copy]
13108 
13109                A non-template constructor for class X is a copy
13110                constructor if its first parameter is of type X&, const
13111                X&, volatile X& or const volatile X&, and either there
13112                are no other parameters or else all other parameters have
13113                default arguments.  */
13114             TYPE_HAS_COPY_CTOR (class_type) = 1;
13115             if (user_provided_p (decl))
13116               TYPE_HAS_COMPLEX_COPY_CTOR (class_type) = 1;
13117             if (ctor > 1)
13118               TYPE_HAS_CONST_COPY_CTOR (class_type) = 1;
13119           }
13120       else if (sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (decl)))
13121           TYPE_HAS_DEFAULT_CONSTRUCTOR (class_type) = 1;
13122       else if (move_fn_p (decl) && user_provided_p (decl))
13123           TYPE_HAS_COMPLEX_MOVE_CTOR (class_type) = 1;
13124       else if (is_list_ctor (decl))
13125           TYPE_HAS_LIST_CTOR (class_type) = 1;
13126 
13127       if (DECL_DECLARED_CONSTEXPR_P (decl)
13128             && !ctor && !move_fn_p (decl))
13129           TYPE_HAS_CONSTEXPR_CTOR (class_type) = 1;
13130     }
13131   else if (DECL_NAME (decl) == assign_op_identifier)
13132     {
13133       /* [class.copy]
13134 
13135            A non-template assignment operator for class X is a copy
13136            assignment operator if its parameter is of type X, X&, const
13137            X&, volatile X& or const volatile X&.  */
13138 
13139       int assop = copy_fn_p (decl);
13140 
13141       if (assop)
13142           {
13143             TYPE_HAS_COPY_ASSIGN (class_type) = 1;
13144             if (user_provided_p (decl))
13145               TYPE_HAS_COMPLEX_COPY_ASSIGN (class_type) = 1;
13146             if (assop != 1)
13147               TYPE_HAS_CONST_COPY_ASSIGN (class_type) = 1;
13148           }
13149       else if (move_fn_p (decl) && user_provided_p (decl))
13150           TYPE_HAS_COMPLEX_MOVE_ASSIGN (class_type) = 1;
13151     }
13152   else if (IDENTIFIER_CONV_OP_P (DECL_NAME (decl)))
13153     TYPE_HAS_CONVERSION (class_type) = true;
13154 
13155   /* Destructors are handled in check_methods.  */
13156 }
13157 
13158 /* Check a constructor DECL has the correct form.  Complains
13159    if the class has a constructor of the form X(X).  */
13160 
13161 bool
grok_ctor_properties(const_tree ctype,const_tree decl)13162 grok_ctor_properties (const_tree ctype, const_tree decl)
13163 {
13164   int ctor_parm = copy_fn_p (decl);
13165 
13166   if (ctor_parm < 0)
13167     {
13168       /* [class.copy]
13169 
13170            A declaration of a constructor for a class X is ill-formed if
13171            its first parameter is of type (optionally cv-qualified) X
13172            and either there are no other parameters or else all other
13173            parameters have default arguments.
13174 
13175            We *don't* complain about member template instantiations that
13176            have this form, though; they can occur as we try to decide
13177            what constructor to use during overload resolution.  Since
13178            overload resolution will never prefer such a constructor to
13179            the non-template copy constructor (which is either explicitly
13180            or implicitly defined), there's no need to worry about their
13181            existence.  Theoretically, they should never even be
13182            instantiated, but that's hard to forestall.  */
13183       error ("invalid constructor; you probably meant %<%T (const %T&)%>",
13184                     ctype, ctype);
13185       return false;
13186     }
13187 
13188   return true;
13189 }
13190 
13191 /* DECL is a declaration for an overloaded or conversion operator.  If
13192    COMPLAIN is true, errors are issued for invalid declarations.  */
13193 
13194 bool
grok_op_properties(tree decl,bool complain)13195 grok_op_properties (tree decl, bool complain)
13196 {
13197   tree argtypes = TYPE_ARG_TYPES (TREE_TYPE (decl));
13198   bool methodp = TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE;
13199   tree name = DECL_NAME (decl);
13200 
13201   tree class_type = DECL_CONTEXT (decl);
13202   if (class_type && !CLASS_TYPE_P (class_type))
13203     class_type = NULL_TREE;
13204 
13205   tree_code operator_code;
13206   unsigned op_flags;
13207   if (IDENTIFIER_CONV_OP_P (name))
13208     {
13209       /* Conversion operators are TYPE_EXPR for the purposes of this
13210            function.  */
13211       operator_code = TYPE_EXPR;
13212       op_flags = OVL_OP_FLAG_UNARY;
13213     }
13214   else
13215     {
13216       const ovl_op_info_t *ovl_op = IDENTIFIER_OVL_OP_INFO (name);
13217 
13218       operator_code = ovl_op->tree_code;
13219       op_flags = ovl_op->flags;
13220       gcc_checking_assert (operator_code != ERROR_MARK);
13221       DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13222     }
13223 
13224   if (op_flags & OVL_OP_FLAG_ALLOC)
13225     {
13226       /* operator new and operator delete are quite special.  */
13227       if (class_type)
13228           switch (op_flags)
13229             {
13230             case OVL_OP_FLAG_ALLOC:
13231               TYPE_HAS_NEW_OPERATOR (class_type) = 1;
13232               break;
13233 
13234             case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE:
13235               TYPE_GETS_DELETE (class_type) |= 1;
13236               break;
13237 
13238             case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_VEC:
13239               TYPE_HAS_ARRAY_NEW_OPERATOR (class_type) = 1;
13240               break;
13241 
13242             case OVL_OP_FLAG_ALLOC | OVL_OP_FLAG_DELETE | OVL_OP_FLAG_VEC:
13243               TYPE_GETS_DELETE (class_type) |= 2;
13244               break;
13245 
13246             default:
13247               gcc_unreachable ();
13248             }
13249 
13250       /* [basic.std.dynamic.allocation]/1:
13251 
13252            A program is ill-formed if an allocation function is declared
13253            in a namespace scope other than global scope or declared
13254            static in global scope.
13255 
13256            The same also holds true for deallocation functions.  */
13257       if (DECL_NAMESPACE_SCOPE_P (decl))
13258           {
13259             if (CP_DECL_CONTEXT (decl) != global_namespace)
13260               {
13261                 error ("%qD may not be declared within a namespace", decl);
13262                 return false;
13263               }
13264 
13265             if (!TREE_PUBLIC (decl))
13266               {
13267                 error ("%qD may not be declared as static", decl);
13268                 return false;
13269               }
13270           }
13271 
13272       if (op_flags & OVL_OP_FLAG_DELETE)
13273           TREE_TYPE (decl) = coerce_delete_type (TREE_TYPE (decl));
13274       else
13275           {
13276             DECL_IS_OPERATOR_NEW (decl) = 1;
13277             TREE_TYPE (decl) = coerce_new_type (TREE_TYPE (decl));
13278           }
13279 
13280       return true;
13281     }
13282 
13283   /* An operator function must either be a non-static member function
13284      or have at least one parameter of a class, a reference to a class,
13285      an enumeration, or a reference to an enumeration.  13.4.0.6 */
13286   if (! methodp || DECL_STATIC_FUNCTION_P (decl))
13287     {
13288       if (operator_code == TYPE_EXPR
13289             || operator_code == CALL_EXPR
13290             || operator_code == COMPONENT_REF
13291             || operator_code == ARRAY_REF
13292             || operator_code == NOP_EXPR)
13293           {
13294             error ("%qD must be a nonstatic member function", decl);
13295             return false;
13296           }
13297 
13298       if (DECL_STATIC_FUNCTION_P (decl))
13299           {
13300             error ("%qD must be either a non-static member "
13301                      "function or a non-member function", decl);
13302             return false;
13303           }
13304 
13305       for (tree arg = argtypes; ; arg = TREE_CHAIN (arg))
13306           {
13307             if (!arg || arg == void_list_node)
13308               {
13309                 if (complain)
13310                     error ("%qD must have an argument of class or "
13311                            "enumerated type", decl);
13312                 return false;
13313               }
13314 
13315             tree type = non_reference (TREE_VALUE (arg));
13316             if (type == error_mark_node)
13317               return false;
13318 
13319             /* MAYBE_CLASS_TYPE_P, rather than CLASS_TYPE_P, is used
13320                because these checks are performed even on template
13321                functions.  */
13322             if (MAYBE_CLASS_TYPE_P (type)
13323                 || TREE_CODE (type) == ENUMERAL_TYPE)
13324               break;
13325           }
13326     }
13327 
13328   if (operator_code == CALL_EXPR)
13329     /* There are no further restrictions on the arguments to an overloaded
13330        "operator ()".  */
13331     return true;
13332 
13333   if (operator_code == COND_EXPR)
13334     {
13335       /* 13.4.0.3 */
13336       error ("ISO C++ prohibits overloading operator ?:");
13337       return false;
13338     }
13339 
13340   /* Count the number of arguments and check for ellipsis.  */
13341   int arity = 0;
13342   for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13343     {
13344       if (!arg)
13345           {
13346             /* Variadic.  */
13347             error ("%qD must not have variable number of arguments", decl);
13348             return false;
13349           }
13350       ++arity;
13351     }
13352 
13353   /* Verify correct number of arguments.  */
13354   switch (op_flags)
13355     {
13356     case OVL_OP_FLAG_AMBIARY:
13357       if (arity == 1)
13358           {
13359             /* We have a unary instance of an ambi-ary op.  Remap to the
13360                unary one.  */
13361             unsigned alt = ovl_op_alternate[ovl_op_mapping [operator_code]];
13362             const ovl_op_info_t *ovl_op = &ovl_op_info[false][alt];
13363             gcc_checking_assert (ovl_op->flags == OVL_OP_FLAG_UNARY);
13364             operator_code = ovl_op->tree_code;
13365             DECL_OVERLOADED_OPERATOR_CODE_RAW (decl) = ovl_op->ovl_op_code;
13366           }
13367       else if (arity != 2)
13368           {
13369             /* This was an ambiguous operator but is invalid. */
13370             error (methodp
13371                      ? G_("%qD must have either zero or one argument")
13372                      : G_("%qD must have either one or two arguments"), decl);
13373             return false;
13374           }
13375       else if ((operator_code == POSTINCREMENT_EXPR
13376                     || operator_code == POSTDECREMENT_EXPR)
13377                  && ! processing_template_decl
13378                  /* x++ and x--'s second argument must be an int.  */
13379                  && ! same_type_p (TREE_VALUE (TREE_CHAIN (argtypes)),
13380                                          integer_type_node))
13381           {
13382             error (methodp
13383                      ? G_("postfix %qD must have %<int%> as its argument")
13384                      : G_("postfix %qD must have %<int%> as its second argument"),
13385                      decl);
13386             return false;
13387           }
13388       break;
13389 
13390     case OVL_OP_FLAG_UNARY:
13391       if (arity != 1)
13392           {
13393             error (methodp
13394                      ? G_("%qD must have no arguments")
13395                      : G_("%qD must have exactly one argument"), decl);
13396             return false;
13397           }
13398       break;
13399 
13400     case OVL_OP_FLAG_BINARY:
13401       if (arity != 2)
13402           {
13403             error (methodp
13404                      ? G_("%qD must have exactly one argument")
13405                      : G_("%qD must have exactly two arguments"), decl);
13406             return false;
13407           }
13408       break;
13409 
13410     default:
13411       gcc_unreachable ();
13412     }
13413 
13414   /* There can be no default arguments.  */
13415   for (tree arg = argtypes; arg != void_list_node; arg = TREE_CHAIN (arg))
13416     if (TREE_PURPOSE (arg))
13417       {
13418           TREE_PURPOSE (arg) = NULL_TREE;
13419           if (operator_code == POSTINCREMENT_EXPR
13420               || operator_code == POSTDECREMENT_EXPR)
13421             pedwarn (input_location, OPT_Wpedantic,
13422                        "%qD cannot have default arguments", decl);
13423           else
13424             {
13425               error ("%qD cannot have default arguments", decl);
13426               return false;
13427             }
13428       }
13429 
13430   /* At this point the declaration is well-formed.  It may not be
13431      sensible though.  */
13432 
13433   /* Check member function warnings only on the in-class declaration.
13434      There's no point warning on an out-of-class definition.  */
13435   if (class_type && class_type != current_class_type)
13436     return true;
13437 
13438   /* Warn about conversion operators that will never be used.  */
13439   if (IDENTIFIER_CONV_OP_P (name)
13440       && ! DECL_TEMPLATE_INFO (decl)
13441       && warn_conversion)
13442     {
13443       tree t = TREE_TYPE (name);
13444       int ref = (TREE_CODE (t) == REFERENCE_TYPE);
13445 
13446       if (ref)
13447           t = TYPE_MAIN_VARIANT (TREE_TYPE (t));
13448 
13449       if (VOID_TYPE_P (t))
13450           warning (OPT_Wconversion,
13451                      ref
13452                      ? G_("conversion to a reference to void "
13453                           "will never use a type conversion operator")
13454                      : G_("conversion to void "
13455                           "will never use a type conversion operator"));
13456       else if (class_type)
13457           {
13458             if (t == class_type)
13459               warning (OPT_Wconversion,
13460                      ref
13461                      ? G_("conversion to a reference to the same type "
13462                           "will never use a type conversion operator")
13463                      : G_("conversion to the same type "
13464                           "will never use a type conversion operator"));
13465             /* Don't force t to be complete here.  */
13466             else if (MAYBE_CLASS_TYPE_P (t)
13467                        && COMPLETE_TYPE_P (t)
13468                        && DERIVED_FROM_P (t, class_type))
13469               warning (OPT_Wconversion,
13470                          ref
13471                          ? G_("conversion to a reference to a base class "
13472                                 "will never use a type conversion operator")
13473                          : G_("conversion to a base class "
13474                                 "will never use a type conversion operator"));
13475           }
13476     }
13477 
13478   if (!warn_ecpp)
13479     return true;
13480 
13481   /* Effective C++ rules below.  */
13482 
13483   /* More Effective C++ rule 7.  */
13484   if (operator_code == TRUTH_ANDIF_EXPR
13485       || operator_code == TRUTH_ORIF_EXPR
13486       || operator_code == COMPOUND_EXPR)
13487     warning (OPT_Weffc__,
13488                "user-defined %qD always evaluates both arguments", decl);
13489 
13490   /* More Effective C++ rule 6.  */
13491   if (operator_code == POSTINCREMENT_EXPR
13492       || operator_code == POSTDECREMENT_EXPR
13493       || operator_code == PREINCREMENT_EXPR
13494       || operator_code == PREDECREMENT_EXPR)
13495     {
13496       tree arg = TREE_VALUE (argtypes);
13497       tree ret = TREE_TYPE (TREE_TYPE (decl));
13498       if (methodp || TREE_CODE (arg) == REFERENCE_TYPE)
13499           arg = TREE_TYPE (arg);
13500       arg = TYPE_MAIN_VARIANT (arg);
13501 
13502       if (operator_code == PREINCREMENT_EXPR
13503             || operator_code == PREDECREMENT_EXPR)
13504           {
13505             if (TREE_CODE (ret) != REFERENCE_TYPE
13506                 || !same_type_p (TYPE_MAIN_VARIANT (TREE_TYPE (ret)), arg))
13507               warning (OPT_Weffc__, "prefix %qD should return %qT", decl,
13508                          build_reference_type (arg));
13509           }
13510       else
13511           {
13512             if (!same_type_p (TYPE_MAIN_VARIANT (ret), arg))
13513               warning (OPT_Weffc__, "postfix %qD should return %qT", decl, arg);
13514           }
13515     }
13516 
13517   /* Effective C++ rule 23.  */
13518   if (!DECL_ASSIGNMENT_OPERATOR_P (decl)
13519       && (operator_code == PLUS_EXPR
13520             || operator_code == MINUS_EXPR
13521             || operator_code == TRUNC_DIV_EXPR
13522             || operator_code == MULT_EXPR
13523             || operator_code == TRUNC_MOD_EXPR)
13524       && TREE_CODE (TREE_TYPE (TREE_TYPE (decl))) == REFERENCE_TYPE)
13525     warning (OPT_Weffc__, "%qD should return by value", decl);
13526 
13527   return true;
13528 }
13529 
13530 /* Return a string giving the keyword associate with CODE.  */
13531 
13532 static const char *
tag_name(enum tag_types code)13533 tag_name (enum tag_types code)
13534 {
13535   switch (code)
13536     {
13537     case record_type:
13538       return "struct";
13539     case class_type:
13540       return "class";
13541     case union_type:
13542       return "union";
13543     case enum_type:
13544       return "enum";
13545     case typename_type:
13546       return "typename";
13547     default:
13548       gcc_unreachable ();
13549     }
13550 }
13551 
13552 /* Name lookup in an elaborated-type-specifier (after the keyword
13553    indicated by TAG_CODE) has found the TYPE_DECL DECL.  If the
13554    elaborated-type-specifier is invalid, issue a diagnostic and return
13555    error_mark_node; otherwise, return the *_TYPE to which it referred.
13556    If ALLOW_TEMPLATE_P is true, TYPE may be a class template.  */
13557 
13558 tree
check_elaborated_type_specifier(enum tag_types tag_code,tree decl,bool allow_template_p)13559 check_elaborated_type_specifier (enum tag_types tag_code,
13560                                          tree decl,
13561                                          bool allow_template_p)
13562 {
13563   tree type;
13564 
13565   /* In the case of:
13566 
13567        struct S { struct S *p; };
13568 
13569      name lookup will find the TYPE_DECL for the implicit "S::S"
13570      typedef.  Adjust for that here.  */
13571   if (DECL_SELF_REFERENCE_P (decl))
13572     decl = TYPE_NAME (TREE_TYPE (decl));
13573 
13574   type = TREE_TYPE (decl);
13575 
13576   /* Check TEMPLATE_TYPE_PARM first because DECL_IMPLICIT_TYPEDEF_P
13577      is false for this case as well.  */
13578   if (TREE_CODE (type) == TEMPLATE_TYPE_PARM)
13579     {
13580       error ("using template type parameter %qT after %qs",
13581                type, tag_name (tag_code));
13582       return error_mark_node;
13583     }
13584   /* Accept template template parameters.  */
13585   else if (allow_template_p
13586              && (TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM
13587                  || TREE_CODE (type) == TEMPLATE_TEMPLATE_PARM))
13588     ;
13589   /*   [dcl.type.elab]
13590 
13591        If the identifier resolves to a typedef-name or the
13592        simple-template-id resolves to an alias template
13593        specialization, the elaborated-type-specifier is ill-formed.
13594 
13595      In other words, the only legitimate declaration to use in the
13596      elaborated type specifier is the implicit typedef created when
13597      the type is declared.  */
13598   else if (!DECL_IMPLICIT_TYPEDEF_P (decl)
13599              && !DECL_SELF_REFERENCE_P (decl)
13600              && tag_code != typename_type)
13601     {
13602       if (alias_template_specialization_p (type))
13603           error ("using alias template specialization %qT after %qs",
13604                  type, tag_name (tag_code));
13605       else
13606           error ("using typedef-name %qD after %qs", decl, tag_name (tag_code));
13607       inform (DECL_SOURCE_LOCATION (decl),
13608                 "%qD has a previous declaration here", decl);
13609       return error_mark_node;
13610     }
13611   else if (TREE_CODE (type) != RECORD_TYPE
13612              && TREE_CODE (type) != UNION_TYPE
13613              && tag_code != enum_type
13614              && tag_code != typename_type)
13615     {
13616       error ("%qT referred to as %qs", type, tag_name (tag_code));
13617       inform (location_of (type), "%qT has a previous declaration here", type);
13618       return error_mark_node;
13619     }
13620   else if (TREE_CODE (type) != ENUMERAL_TYPE
13621              && tag_code == enum_type)
13622     {
13623       error ("%qT referred to as enum", type);
13624       inform (location_of (type), "%qT has a previous declaration here", type);
13625       return error_mark_node;
13626     }
13627   else if (!allow_template_p
13628              && TREE_CODE (type) == RECORD_TYPE
13629              && CLASSTYPE_IS_TEMPLATE (type))
13630     {
13631       /* If a class template appears as elaborated type specifier
13632            without a template header such as:
13633 
13634              template <class T> class C {};
13635              void f(class C);           // No template header here
13636 
13637            then the required template argument is missing.  */
13638       error ("template argument required for %<%s %T%>",
13639                tag_name (tag_code),
13640                DECL_NAME (CLASSTYPE_TI_TEMPLATE (type)));
13641       return error_mark_node;
13642     }
13643 
13644   return type;
13645 }
13646 
13647 /* Lookup NAME in elaborate type specifier in scope according to
13648    SCOPE and issue diagnostics if necessary.
13649    Return *_TYPE node upon success, NULL_TREE when the NAME is not
13650    found, and ERROR_MARK_NODE for type error.  */
13651 
13652 static tree
lookup_and_check_tag(enum tag_types tag_code,tree name,tag_scope scope,bool template_header_p)13653 lookup_and_check_tag (enum tag_types tag_code, tree name,
13654                           tag_scope scope, bool template_header_p)
13655 {
13656   tree t;
13657   tree decl;
13658   if (scope == ts_global)
13659     {
13660       /* First try ordinary name lookup, ignoring hidden class name
13661            injected via friend declaration.  */
13662       decl = lookup_name_prefer_type (name, 2);
13663       decl = strip_using_decl (decl);
13664       /* If that fails, the name will be placed in the smallest
13665            non-class, non-function-prototype scope according to 3.3.1/5.
13666            We may already have a hidden name declared as friend in this
13667            scope.  So lookup again but not ignoring hidden names.
13668            If we find one, that name will be made visible rather than
13669            creating a new tag.  */
13670       if (!decl)
13671           decl = lookup_type_scope (name, ts_within_enclosing_non_class);
13672     }
13673   else
13674     decl = lookup_type_scope (name, scope);
13675 
13676   if (decl
13677       && (DECL_CLASS_TEMPLATE_P (decl)
13678             /* If scope is ts_current we're defining a class, so ignore a
13679                template template parameter.  */
13680             || (scope != ts_current
13681                 && DECL_TEMPLATE_TEMPLATE_PARM_P (decl))))
13682     decl = DECL_TEMPLATE_RESULT (decl);
13683 
13684   if (decl && TREE_CODE (decl) == TYPE_DECL)
13685     {
13686       /* Look for invalid nested type:
13687              class C {
13688                class C {};
13689              };  */
13690       if (scope == ts_current && DECL_SELF_REFERENCE_P (decl))
13691           {
13692             error ("%qD has the same name as the class in which it is "
13693                      "declared",
13694                      decl);
13695             return error_mark_node;
13696           }
13697 
13698       /* Two cases we need to consider when deciding if a class
13699            template is allowed as an elaborated type specifier:
13700            1. It is a self reference to its own class.
13701            2. It comes with a template header.
13702 
13703            For example:
13704 
13705              template <class T> class C {
13706                class C *c1;             // DECL_SELF_REFERENCE_P is true
13707                class D;
13708              };
13709              template <class U> class C; // template_header_p is true
13710              template <class T> class C<T>::D {
13711                class C *c2;             // DECL_SELF_REFERENCE_P is true
13712              };  */
13713 
13714       t = check_elaborated_type_specifier (tag_code,
13715                                                      decl,
13716                                                      template_header_p
13717                                                      | DECL_SELF_REFERENCE_P (decl));
13718       if (template_header_p && t && CLASS_TYPE_P (t)
13719             && (!CLASSTYPE_TEMPLATE_INFO (t)
13720                 || (!PRIMARY_TEMPLATE_P (CLASSTYPE_TI_TEMPLATE (t)))))
13721           {
13722             error ("%qT is not a template", t);
13723             inform (location_of (t), "previous declaration here");
13724             if (TYPE_CLASS_SCOPE_P (t)
13725                 && CLASSTYPE_TEMPLATE_INFO (TYPE_CONTEXT (t)))
13726               inform (input_location,
13727                         "perhaps you want to explicitly add %<%T::%>",
13728                         TYPE_CONTEXT (t));
13729             t = error_mark_node;
13730           }
13731 
13732       return t;
13733     }
13734   else if (decl && TREE_CODE (decl) == TREE_LIST)
13735     {
13736       error ("reference to %qD is ambiguous", name);
13737       print_candidates (decl);
13738       return error_mark_node;
13739     }
13740   else
13741     return NULL_TREE;
13742 }
13743 
13744 /* Get the struct, enum or union (TAG_CODE says which) with tag NAME.
13745    Define the tag as a forward-reference if it is not defined.
13746 
13747    If a declaration is given, process it here, and report an error if
13748    multiple declarations are not identical.
13749 
13750    SCOPE is TS_CURRENT when this is also a definition.  Only look in
13751    the current frame for the name (since C++ allows new names in any
13752    scope.)  It is TS_WITHIN_ENCLOSING_NON_CLASS if this is a friend
13753    declaration.  Only look beginning from the current scope outward up
13754    till the nearest non-class scope.  Otherwise it is TS_GLOBAL.
13755 
13756    TEMPLATE_HEADER_P is true when this declaration is preceded by
13757    a set of template parameters.  */
13758 
13759 static tree
xref_tag_1(enum tag_types tag_code,tree name,tag_scope scope,bool template_header_p)13760 xref_tag_1 (enum tag_types tag_code, tree name,
13761             tag_scope scope, bool template_header_p)
13762 {
13763   enum tree_code code;
13764   tree context = NULL_TREE;
13765 
13766   gcc_assert (identifier_p (name));
13767 
13768   switch (tag_code)
13769     {
13770     case record_type:
13771     case class_type:
13772       code = RECORD_TYPE;
13773       break;
13774     case union_type:
13775       code = UNION_TYPE;
13776       break;
13777     case enum_type:
13778       code = ENUMERAL_TYPE;
13779       break;
13780     default:
13781       gcc_unreachable ();
13782     }
13783 
13784   /* In case of anonymous name, xref_tag is only called to
13785      make type node and push name.  Name lookup is not required.  */
13786   tree t = NULL_TREE;
13787   if (scope != ts_lambda && !anon_aggrname_p (name))
13788     t = lookup_and_check_tag  (tag_code, name, scope, template_header_p);
13789 
13790   if (t == error_mark_node)
13791     return error_mark_node;
13792 
13793   if (scope != ts_current && t && current_class_type
13794       && template_class_depth (current_class_type)
13795       && template_header_p)
13796     {
13797       if (TREE_CODE (t) == TEMPLATE_TEMPLATE_PARM)
13798           return t;
13799 
13800       /* Since SCOPE is not TS_CURRENT, we are not looking at a
13801            definition of this tag.  Since, in addition, we are currently
13802            processing a (member) template declaration of a template
13803            class, we must be very careful; consider:
13804 
13805              template <class X> struct S1
13806 
13807              template <class U> struct S2
13808              {
13809                template <class V> friend struct S1;
13810              };
13811 
13812            Here, the S2::S1 declaration should not be confused with the
13813            outer declaration.  In particular, the inner version should
13814            have a template parameter of level 2, not level 1.
13815 
13816            On the other hand, when presented with:
13817 
13818              template <class T> struct S1
13819              {
13820                template <class U> struct S2 {};
13821                template <class U> friend struct S2;
13822              };
13823 
13824            the friend must find S1::S2 eventually.  We accomplish this
13825            by making sure that the new type we create to represent this
13826            declaration has the right TYPE_CONTEXT.  */
13827       context = TYPE_CONTEXT (t);
13828       t = NULL_TREE;
13829     }
13830 
13831   if (! t)
13832     {
13833       /* If no such tag is yet defined, create a forward-reference node
13834            and record it as the "definition".
13835            When a real declaration of this type is found,
13836            the forward-reference will be altered into a real type.  */
13837       if (code == ENUMERAL_TYPE)
13838           {
13839             error ("use of enum %q#D without previous declaration", name);
13840             return error_mark_node;
13841           }
13842       else
13843           {
13844             t = make_class_type (code);
13845             TYPE_CONTEXT (t) = context;
13846             if (scope == ts_lambda)
13847               {
13848                 /* Mark it as a lambda type.  */
13849                 CLASSTYPE_LAMBDA_EXPR (t) = error_mark_node;
13850                 /* And push it into current scope.  */
13851                 scope = ts_current;
13852               }
13853             t = pushtag (name, t, scope);
13854           }
13855     }
13856   else
13857     {
13858       if (template_header_p && MAYBE_CLASS_TYPE_P (t))
13859         {
13860           /* Check that we aren't trying to overload a class with different
13861              constraints.  */
13862           tree constr = NULL_TREE;
13863           if (current_template_parms)
13864             {
13865               tree reqs = TEMPLATE_PARMS_CONSTRAINTS (current_template_parms);
13866               constr = build_constraints (reqs, NULL_TREE);
13867             }
13868             if (!redeclare_class_template (t, current_template_parms, constr))
13869               return error_mark_node;
13870         }
13871       else if (!processing_template_decl
13872                  && CLASS_TYPE_P (t)
13873                  && CLASSTYPE_IS_TEMPLATE (t))
13874           {
13875             error ("redeclaration of %qT as a non-template", t);
13876             inform (location_of (t), "previous declaration %qD", t);
13877             return error_mark_node;
13878           }
13879 
13880       if (scope != ts_within_enclosing_non_class && TYPE_HIDDEN_P (t))
13881           {
13882             /* This is no longer an invisible friend.  Make it
13883                visible.  */
13884             tree decl = TYPE_NAME (t);
13885 
13886             DECL_ANTICIPATED (decl) = false;
13887             DECL_FRIEND_P (decl) = false;
13888 
13889             if (TYPE_TEMPLATE_INFO (t))
13890               {
13891                 tree tmpl = TYPE_TI_TEMPLATE (t);
13892                 DECL_ANTICIPATED (tmpl) = false;
13893                 DECL_FRIEND_P (tmpl) = false;
13894               }
13895           }
13896     }
13897 
13898   return t;
13899 }
13900 
13901 /* Wrapper for xref_tag_1.  */
13902 
13903 tree
xref_tag(enum tag_types tag_code,tree name,tag_scope scope,bool template_header_p)13904 xref_tag (enum tag_types tag_code, tree name,
13905           tag_scope scope, bool template_header_p)
13906 {
13907   tree ret;
13908   bool subtime;
13909   subtime = timevar_cond_start (TV_NAME_LOOKUP);
13910   ret = xref_tag_1 (tag_code, name, scope, template_header_p);
13911   timevar_cond_stop (TV_NAME_LOOKUP, subtime);
13912   return ret;
13913 }
13914 
13915 
13916 tree
xref_tag_from_type(tree old,tree id,tag_scope scope)13917 xref_tag_from_type (tree old, tree id, tag_scope scope)
13918 {
13919   enum tag_types tag_kind;
13920 
13921   if (TREE_CODE (old) == RECORD_TYPE)
13922     tag_kind = (CLASSTYPE_DECLARED_CLASS (old) ? class_type : record_type);
13923   else
13924     tag_kind  = union_type;
13925 
13926   if (id == NULL_TREE)
13927     id = TYPE_IDENTIFIER (old);
13928 
13929   return xref_tag (tag_kind, id, scope, false);
13930 }
13931 
13932 /* Create the binfo hierarchy for REF with (possibly NULL) base list
13933    BASE_LIST.  For each element on BASE_LIST the TREE_PURPOSE is an
13934    access_* node, and the TREE_VALUE is the type of the base-class.
13935    Non-NULL TREE_TYPE indicates virtual inheritance.  */
13936 
13937 void
xref_basetypes(tree ref,tree base_list)13938 xref_basetypes (tree ref, tree base_list)
13939 {
13940   tree *basep;
13941   tree binfo, base_binfo;
13942   unsigned max_vbases = 0; /* Maximum direct & indirect virtual bases.  */
13943   unsigned max_bases = 0;  /* Maximum direct bases.  */
13944   unsigned max_dvbases = 0; /* Maximum direct virtual bases.  */
13945   int i;
13946   tree default_access;
13947   tree igo_prev; /* Track Inheritance Graph Order.  */
13948 
13949   if (ref == error_mark_node)
13950     return;
13951 
13952   /* The base of a derived class is private by default, all others are
13953      public.  */
13954   default_access = (TREE_CODE (ref) == RECORD_TYPE
13955                         && CLASSTYPE_DECLARED_CLASS (ref)
13956                         ? access_private_node : access_public_node);
13957 
13958   /* First, make sure that any templates in base-classes are
13959      instantiated.  This ensures that if we call ourselves recursively
13960      we do not get confused about which classes are marked and which
13961      are not.  */
13962   basep = &base_list;
13963   while (*basep)
13964     {
13965       tree basetype = TREE_VALUE (*basep);
13966 
13967       /* The dependent_type_p call below should really be dependent_scope_p
13968            so that we give a hard error about using an incomplete type as a
13969            base, but we allow it with a pedwarn for backward
13970            compatibility.  */
13971       if (processing_template_decl
13972             && CLASS_TYPE_P (basetype) && TYPE_BEING_DEFINED (basetype))
13973           cxx_incomplete_type_diagnostic (NULL_TREE, basetype, DK_PEDWARN);
13974       if (!dependent_type_p (basetype)
13975             && !complete_type_or_else (basetype, NULL))
13976           /* An incomplete type.  Remove it from the list.  */
13977           *basep = TREE_CHAIN (*basep);
13978       else
13979           {
13980             max_bases++;
13981             if (TREE_TYPE (*basep))
13982               max_dvbases++;
13983             if (CLASS_TYPE_P (basetype))
13984               max_vbases += vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
13985             basep = &TREE_CHAIN (*basep);
13986           }
13987     }
13988   max_vbases += max_dvbases;
13989 
13990   TYPE_MARKED_P (ref) = 1;
13991 
13992   /* The binfo slot should be empty, unless this is an (ill-formed)
13993      redefinition.  */
13994   gcc_assert (!TYPE_BINFO (ref) || TYPE_SIZE (ref));
13995 
13996   gcc_assert (TYPE_MAIN_VARIANT (ref) == ref);
13997 
13998   binfo = make_tree_binfo (max_bases);
13999 
14000   TYPE_BINFO (ref) = binfo;
14001   BINFO_OFFSET (binfo) = size_zero_node;
14002   BINFO_TYPE (binfo) = ref;
14003 
14004   /* Apply base-class info set up to the variants of this type.  */
14005   fixup_type_variants (ref);
14006 
14007   if (max_bases)
14008     {
14009       vec_alloc (BINFO_BASE_ACCESSES (binfo), max_bases);
14010       /* A C++98 POD cannot have base classes.  */
14011       CLASSTYPE_NON_LAYOUT_POD_P (ref) = true;
14012 
14013       if (TREE_CODE (ref) == UNION_TYPE)
14014           {
14015             error ("derived union %qT invalid", ref);
14016             return;
14017           }
14018     }
14019 
14020   if (max_bases > 1)
14021     warning (OPT_Wmultiple_inheritance,
14022                "%qT defined with multiple direct bases", ref);
14023 
14024   if (max_vbases)
14025     {
14026       /* An aggregate can't have virtual base classes.  */
14027       CLASSTYPE_NON_AGGREGATE (ref) = true;
14028 
14029       vec_alloc (CLASSTYPE_VBASECLASSES (ref), max_vbases);
14030 
14031       if (max_dvbases)
14032           warning (OPT_Wvirtual_inheritance,
14033                      "%qT defined with direct virtual base", ref);
14034     }
14035 
14036   for (igo_prev = binfo; base_list; base_list = TREE_CHAIN (base_list))
14037     {
14038       tree access = TREE_PURPOSE (base_list);
14039       int via_virtual = TREE_TYPE (base_list) != NULL_TREE;
14040       tree basetype = TREE_VALUE (base_list);
14041 
14042       if (access == access_default_node)
14043           access = default_access;
14044 
14045       /* Before C++17, an aggregate cannot have base classes.  In C++17, an
14046            aggregate can't have virtual, private, or protected base classes.  */
14047       if (cxx_dialect < cxx17
14048             || access != access_public_node
14049             || via_virtual)
14050           CLASSTYPE_NON_AGGREGATE (ref) = true;
14051 
14052       if (PACK_EXPANSION_P (basetype))
14053         basetype = PACK_EXPANSION_PATTERN (basetype);
14054       if (TREE_CODE (basetype) == TYPE_DECL)
14055           basetype = TREE_TYPE (basetype);
14056       if (!MAYBE_CLASS_TYPE_P (basetype) || TREE_CODE (basetype) == UNION_TYPE)
14057           {
14058             error ("base type %qT fails to be a struct or class type",
14059                      basetype);
14060             goto dropped_base;
14061           }
14062 
14063       base_binfo = NULL_TREE;
14064       if (CLASS_TYPE_P (basetype) && !dependent_scope_p (basetype))
14065           {
14066             base_binfo = TYPE_BINFO (basetype);
14067             /* The original basetype could have been a typedef'd type.  */
14068             basetype = BINFO_TYPE (base_binfo);
14069 
14070             /* Inherit flags from the base.  */
14071             TYPE_HAS_NEW_OPERATOR (ref)
14072               |= TYPE_HAS_NEW_OPERATOR (basetype);
14073             TYPE_HAS_ARRAY_NEW_OPERATOR (ref)
14074               |= TYPE_HAS_ARRAY_NEW_OPERATOR (basetype);
14075             TYPE_GETS_DELETE (ref) |= TYPE_GETS_DELETE (basetype);
14076             TYPE_HAS_CONVERSION (ref) |= TYPE_HAS_CONVERSION (basetype);
14077             CLASSTYPE_DIAMOND_SHAPED_P (ref)
14078               |= CLASSTYPE_DIAMOND_SHAPED_P (basetype);
14079             CLASSTYPE_REPEATED_BASE_P (ref)
14080               |= CLASSTYPE_REPEATED_BASE_P (basetype);
14081           }
14082 
14083       /* We must do this test after we've seen through a typedef
14084            type.  */
14085       if (TYPE_MARKED_P (basetype))
14086           {
14087             if (basetype == ref)
14088               error ("recursive type %qT undefined", basetype);
14089             else
14090               error ("duplicate base type %qT invalid", basetype);
14091             goto dropped_base;
14092           }
14093 
14094       if (PACK_EXPANSION_P (TREE_VALUE (base_list)))
14095         /* Regenerate the pack expansion for the bases. */
14096         basetype = make_pack_expansion (basetype);
14097 
14098       TYPE_MARKED_P (basetype) = 1;
14099 
14100       base_binfo = copy_binfo (base_binfo, basetype, ref,
14101                                      &igo_prev, via_virtual);
14102       if (!BINFO_INHERITANCE_CHAIN (base_binfo))
14103           BINFO_INHERITANCE_CHAIN (base_binfo) = binfo;
14104 
14105       BINFO_BASE_APPEND (binfo, base_binfo);
14106       BINFO_BASE_ACCESS_APPEND (binfo, access);
14107       continue;
14108 
14109     dropped_base:
14110       /* Update max_vbases to reflect the reality that we are dropping
14111            this base:  if it reaches zero we want to undo the vec_alloc
14112            above to avoid inconsistencies during error-recovery: eg, in
14113            build_special_member_call, CLASSTYPE_VBASECLASSES non null
14114            and vtt null (c++/27952).  */
14115       if (via_virtual)
14116           max_vbases--;
14117       if (CLASS_TYPE_P (basetype))
14118           max_vbases
14119             -= vec_safe_length (CLASSTYPE_VBASECLASSES (basetype));
14120     }
14121 
14122   if (CLASSTYPE_VBASECLASSES (ref)
14123       && max_vbases == 0)
14124     vec_free (CLASSTYPE_VBASECLASSES (ref));
14125 
14126   if (vec_safe_length (CLASSTYPE_VBASECLASSES (ref)) < max_vbases)
14127     /* If we didn't get max_vbases vbases, we must have shared at
14128        least one of them, and are therefore diamond shaped.  */
14129     CLASSTYPE_DIAMOND_SHAPED_P (ref) = 1;
14130 
14131   /* Unmark all the types.  */
14132   for (i = 0; BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
14133     TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14134   TYPE_MARKED_P (ref) = 0;
14135 
14136   /* Now see if we have a repeated base type.  */
14137   if (!CLASSTYPE_REPEATED_BASE_P (ref))
14138     {
14139       for (base_binfo = binfo; base_binfo;
14140              base_binfo = TREE_CHAIN (base_binfo))
14141           {
14142             if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14143               {
14144                 CLASSTYPE_REPEATED_BASE_P (ref) = 1;
14145                 break;
14146               }
14147             TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 1;
14148           }
14149       for (base_binfo = binfo; base_binfo;
14150              base_binfo = TREE_CHAIN (base_binfo))
14151           if (TYPE_MARKED_P (BINFO_TYPE (base_binfo)))
14152             TYPE_MARKED_P (BINFO_TYPE (base_binfo)) = 0;
14153           else
14154             break;
14155     }
14156 }
14157 
14158 
14159 /* Copies the enum-related properties from type SRC to type DST.
14160    Used with the underlying type of an enum and the enum itself.  */
14161 static void
copy_type_enum(tree dst,tree src)14162 copy_type_enum (tree dst, tree src)
14163 {
14164   tree t;
14165   for (t = dst; t; t = TYPE_NEXT_VARIANT (t))
14166     {
14167       TYPE_MIN_VALUE (t) = TYPE_MIN_VALUE (src);
14168       TYPE_MAX_VALUE (t) = TYPE_MAX_VALUE (src);
14169       TYPE_SIZE (t) = TYPE_SIZE (src);
14170       TYPE_SIZE_UNIT (t) = TYPE_SIZE_UNIT (src);
14171       SET_TYPE_MODE (dst, TYPE_MODE (src));
14172       TYPE_PRECISION (t) = TYPE_PRECISION (src);
14173       unsigned valign = TYPE_ALIGN (src);
14174       if (TYPE_USER_ALIGN (t))
14175           valign = MAX (valign, TYPE_ALIGN (t));
14176       else
14177           TYPE_USER_ALIGN (t) = TYPE_USER_ALIGN (src);
14178       SET_TYPE_ALIGN (t, valign);
14179       TYPE_UNSIGNED (t) = TYPE_UNSIGNED (src);
14180     }
14181 }
14182 
14183 /* Begin compiling the definition of an enumeration type.
14184    NAME is its name,
14185 
14186    if ENUMTYPE is not NULL_TREE then the type has alredy been found.
14187 
14188    UNDERLYING_TYPE is the type that will be used as the storage for
14189    the enumeration type. This should be NULL_TREE if no storage type
14190    was specified.
14191 
14192    ATTRIBUTES are any attributes specified after the enum-key.
14193 
14194    SCOPED_ENUM_P is true if this is a scoped enumeration type.
14195 
14196    if IS_NEW is not NULL, gets TRUE iff a new type is created.
14197 
14198    Returns the type object, as yet incomplete.
14199    Also records info about it so that build_enumerator
14200    may be used to declare the individual values as they are read.  */
14201 
14202 tree
start_enum(tree name,tree enumtype,tree underlying_type,tree attributes,bool scoped_enum_p,bool * is_new)14203 start_enum (tree name, tree enumtype, tree underlying_type,
14204               tree attributes, bool scoped_enum_p, bool *is_new)
14205 {
14206   tree prevtype = NULL_TREE;
14207   gcc_assert (identifier_p (name));
14208 
14209   if (is_new)
14210     *is_new = false;
14211   /* [C++0x dcl.enum]p5:
14212 
14213     If not explicitly specified, the underlying type of a scoped
14214     enumeration type is int.  */
14215   if (!underlying_type && scoped_enum_p)
14216     underlying_type = integer_type_node;
14217 
14218   if (underlying_type)
14219     underlying_type = cv_unqualified (underlying_type);
14220 
14221   /* If this is the real definition for a previous forward reference,
14222      fill in the contents in the same object that used to be the
14223      forward reference.  */
14224   if (!enumtype)
14225     enumtype = lookup_and_check_tag (enum_type, name,
14226                                              /*tag_scope=*/ts_current,
14227                                              /*template_header_p=*/false);
14228 
14229   /* In case of a template_decl, the only check that should be deferred
14230      to instantiation time is the comparison of underlying types.  */
14231   if (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE)
14232     {
14233       if (scoped_enum_p != SCOPED_ENUM_P (enumtype))
14234           {
14235             error_at (input_location, "scoped/unscoped mismatch "
14236                         "in enum %q#T", enumtype);
14237             inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14238                       "previous definition here");
14239             enumtype = error_mark_node;
14240           }
14241       else if (ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) != !! underlying_type)
14242           {
14243             error_at (input_location, "underlying type mismatch "
14244                         "in enum %q#T", enumtype);
14245             inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14246                       "previous definition here");
14247             enumtype = error_mark_node;
14248           }
14249       else if (underlying_type && ENUM_UNDERLYING_TYPE (enumtype)
14250                  && !dependent_type_p (underlying_type)
14251                  && !dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))
14252                  && !same_type_p (underlying_type,
14253                                         ENUM_UNDERLYING_TYPE (enumtype)))
14254           {
14255             error_at (input_location, "different underlying type "
14256                         "in enum %q#T", enumtype);
14257             inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (enumtype)),
14258                       "previous definition here");
14259             underlying_type = NULL_TREE;
14260           }
14261     }
14262 
14263   if (!enumtype || TREE_CODE (enumtype) != ENUMERAL_TYPE
14264       || processing_template_decl)
14265     {
14266       /* In case of error, make a dummy enum to allow parsing to
14267            continue.  */
14268       if (enumtype == error_mark_node)
14269           {
14270             name = make_anon_name ();
14271             enumtype = NULL_TREE;
14272           }
14273 
14274       /* enumtype may be an ENUMERAL_TYPE if this is a redefinition
14275          of an opaque enum, or an opaque enum of an already defined
14276            enumeration (C++0x only).
14277            In any other case, it'll be NULL_TREE. */
14278       if (!enumtype)
14279           {
14280             if (is_new)
14281               *is_new = true;
14282           }
14283       prevtype = enumtype;
14284 
14285       /* Do not push the decl more than once, unless we need to
14286            compare underlying types at instantiation time */
14287       if (!enumtype
14288             || TREE_CODE (enumtype) != ENUMERAL_TYPE
14289             || (underlying_type
14290                 && dependent_type_p (underlying_type))
14291             || (ENUM_UNDERLYING_TYPE (enumtype)
14292                 && dependent_type_p (ENUM_UNDERLYING_TYPE (enumtype))))
14293           {
14294             enumtype = cxx_make_type (ENUMERAL_TYPE);
14295             enumtype = pushtag (name, enumtype, /*tag_scope=*/ts_current);
14296 
14297             /* std::byte aliases anything.  */
14298             if (enumtype != error_mark_node
14299                 && TYPE_CONTEXT (enumtype) == std_node
14300                 && !strcmp ("byte", TYPE_NAME_STRING (enumtype)))
14301               TYPE_ALIAS_SET (enumtype) = 0;
14302           }
14303       else
14304             enumtype = xref_tag (enum_type, name, /*tag_scope=*/ts_current,
14305                                      false);
14306 
14307       if (enumtype == error_mark_node)
14308           return error_mark_node;
14309 
14310       /* The enum is considered opaque until the opening '{' of the
14311            enumerator list.  */
14312       SET_OPAQUE_ENUM_P (enumtype, true);
14313       ENUM_FIXED_UNDERLYING_TYPE_P (enumtype) = !! underlying_type;
14314     }
14315 
14316   SET_SCOPED_ENUM_P (enumtype, scoped_enum_p);
14317 
14318   cplus_decl_attributes (&enumtype, attributes, (int)ATTR_FLAG_TYPE_IN_PLACE);
14319 
14320   if (underlying_type)
14321     {
14322       if (ENUM_UNDERLYING_TYPE (enumtype))
14323           /* We already checked that it matches, don't change it to a different
14324              typedef variant.  */;
14325       else if (CP_INTEGRAL_TYPE_P (underlying_type))
14326         {
14327             copy_type_enum (enumtype, underlying_type);
14328           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14329         }
14330       else if (dependent_type_p (underlying_type))
14331           ENUM_UNDERLYING_TYPE (enumtype) = underlying_type;
14332       else
14333         error ("underlying type %qT of %qT must be an integral type",
14334                underlying_type, enumtype);
14335     }
14336 
14337   /* If into a template class, the returned enum is always the first
14338      declaration (opaque or not) seen. This way all the references to
14339      this type will be to the same declaration. The following ones are used
14340      only to check for definition errors.  */
14341   if (prevtype && processing_template_decl)
14342     return prevtype;
14343   else
14344     return enumtype;
14345 }
14346 
14347 /* After processing and defining all the values of an enumeration type,
14348    install their decls in the enumeration type.
14349    ENUMTYPE is the type object.  */
14350 
14351 void
finish_enum_value_list(tree enumtype)14352 finish_enum_value_list (tree enumtype)
14353 {
14354   tree values;
14355   tree underlying_type;
14356   tree decl;
14357   tree value;
14358   tree minnode, maxnode;
14359   tree t;
14360 
14361   bool fixed_underlying_type_p
14362     = ENUM_UNDERLYING_TYPE (enumtype) != NULL_TREE;
14363 
14364   /* We built up the VALUES in reverse order.  */
14365   TYPE_VALUES (enumtype) = nreverse (TYPE_VALUES (enumtype));
14366 
14367   /* For an enum defined in a template, just set the type of the values;
14368      all further processing is postponed until the template is
14369      instantiated.  We need to set the type so that tsubst of a CONST_DECL
14370      works.  */
14371   if (processing_template_decl)
14372     {
14373       for (values = TYPE_VALUES (enumtype);
14374              values;
14375              values = TREE_CHAIN (values))
14376           TREE_TYPE (TREE_VALUE (values)) = enumtype;
14377       return;
14378     }
14379 
14380   /* Determine the minimum and maximum values of the enumerators.  */
14381   if (TYPE_VALUES (enumtype))
14382     {
14383       minnode = maxnode = NULL_TREE;
14384 
14385       for (values = TYPE_VALUES (enumtype);
14386              values;
14387              values = TREE_CHAIN (values))
14388           {
14389             decl = TREE_VALUE (values);
14390 
14391             /* [dcl.enum]: Following the closing brace of an enum-specifier,
14392                each enumerator has the type of its enumeration.  Prior to the
14393                closing brace, the type of each enumerator is the type of its
14394                initializing value.  */
14395             TREE_TYPE (decl) = enumtype;
14396 
14397             /* Update the minimum and maximum values, if appropriate.  */
14398             value = DECL_INITIAL (decl);
14399             if (value == error_mark_node)
14400               value = integer_zero_node;
14401             /* Figure out what the minimum and maximum values of the
14402                enumerators are.  */
14403             if (!minnode)
14404               minnode = maxnode = value;
14405             else if (tree_int_cst_lt (maxnode, value))
14406               maxnode = value;
14407             else if (tree_int_cst_lt (value, minnode))
14408               minnode = value;
14409           }
14410     }
14411   else
14412     /* [dcl.enum]
14413 
14414        If the enumerator-list is empty, the underlying type is as if
14415        the enumeration had a single enumerator with value 0.  */
14416     minnode = maxnode = integer_zero_node;
14417 
14418   if (!fixed_underlying_type_p)
14419     {
14420       /* Compute the number of bits require to represent all values of the
14421            enumeration.  We must do this before the type of MINNODE and
14422            MAXNODE are transformed, since tree_int_cst_min_precision relies
14423            on the TREE_TYPE of the value it is passed.  */
14424       signop sgn = tree_int_cst_sgn (minnode) >= 0 ? UNSIGNED : SIGNED;
14425       int lowprec = tree_int_cst_min_precision (minnode, sgn);
14426       int highprec = tree_int_cst_min_precision (maxnode, sgn);
14427       int precision = MAX (lowprec, highprec);
14428       unsigned int itk;
14429       bool use_short_enum;
14430 
14431       /* Determine the underlying type of the enumeration.
14432 
14433          [dcl.enum]
14434 
14435          The underlying type of an enumeration is an integral type that
14436          can represent all the enumerator values defined in the
14437          enumeration.  It is implementation-defined which integral type is
14438          used as the underlying type for an enumeration except that the
14439          underlying type shall not be larger than int unless the value of
14440          an enumerator cannot fit in an int or unsigned int.
14441 
14442          We use "int" or an "unsigned int" as the underlying type, even if
14443          a smaller integral type would work, unless the user has
14444          explicitly requested that we use the smallest possible type.  The
14445          user can request that for all enumerations with a command line
14446          flag, or for just one enumeration with an attribute.  */
14447 
14448       use_short_enum = flag_short_enums
14449         || lookup_attribute ("packed", TYPE_ATTRIBUTES (enumtype));
14450 
14451       /* If the precision of the type was specified with an attribute and it
14452            was too small, give an error.  Otherwise, use it.  */
14453       if (TYPE_PRECISION (enumtype))
14454           {
14455             if (precision > TYPE_PRECISION (enumtype))
14456               error ("specified mode too small for enumeral values");
14457             else
14458               {
14459                 use_short_enum = true;
14460                 precision = TYPE_PRECISION (enumtype);
14461               }
14462           }
14463 
14464       for (itk = (use_short_enum ? itk_char : itk_int);
14465            itk != itk_none;
14466            itk++)
14467         {
14468           underlying_type = integer_types[itk];
14469           if (underlying_type != NULL_TREE
14470                 && TYPE_PRECISION (underlying_type) >= precision
14471               && TYPE_SIGN (underlying_type) == sgn)
14472             break;
14473         }
14474       if (itk == itk_none)
14475         {
14476           /* DR 377
14477 
14478              IF no integral type can represent all the enumerator values, the
14479              enumeration is ill-formed.  */
14480           error ("no integral type can represent all of the enumerator values "
14481                  "for %qT", enumtype);
14482           precision = TYPE_PRECISION (long_long_integer_type_node);
14483           underlying_type = integer_types[itk_unsigned_long_long];
14484         }
14485 
14486       /* [dcl.enum]
14487 
14488          The value of sizeof() applied to an enumeration type, an object
14489          of an enumeration type, or an enumerator, is the value of sizeof()
14490          applied to the underlying type.  */
14491       copy_type_enum (enumtype, underlying_type);
14492 
14493       /* Compute the minimum and maximum values for the type.
14494 
14495            [dcl.enum]
14496 
14497            For an enumeration where emin is the smallest enumerator and emax
14498            is the largest, the values of the enumeration are the values of the
14499            underlying type in the range bmin to bmax, where bmin and bmax are,
14500            respectively, the smallest and largest values of the smallest bit-
14501            field that can store emin and emax.  */
14502 
14503       /* The middle-end currently assumes that types with TYPE_PRECISION
14504            narrower than their underlying type are suitably zero or sign
14505            extended to fill their mode.  Similarly, it assumes that the front
14506            end assures that a value of a particular type must be within
14507            TYPE_MIN_VALUE and TYPE_MAX_VALUE.
14508 
14509            We used to set these fields based on bmin and bmax, but that led
14510            to invalid assumptions like optimizing away bounds checking.  So
14511            now we just set the TYPE_PRECISION, TYPE_MIN_VALUE, and
14512            TYPE_MAX_VALUE to the values for the mode above and only restrict
14513            the ENUM_UNDERLYING_TYPE for the benefit of diagnostics.  */
14514       ENUM_UNDERLYING_TYPE (enumtype)
14515           = build_distinct_type_copy (underlying_type);
14516       TYPE_PRECISION (ENUM_UNDERLYING_TYPE (enumtype)) = precision;
14517       set_min_and_max_values_for_integral_type
14518         (ENUM_UNDERLYING_TYPE (enumtype), precision, sgn);
14519 
14520       /* If -fstrict-enums, still constrain TYPE_MIN/MAX_VALUE.  */
14521       if (flag_strict_enums)
14522           set_min_and_max_values_for_integral_type (enumtype, precision, sgn);
14523     }
14524   else
14525     underlying_type = ENUM_UNDERLYING_TYPE (enumtype);
14526 
14527   /* Convert each of the enumerators to the type of the underlying
14528      type of the enumeration.  */
14529   for (values = TYPE_VALUES (enumtype); values; values = TREE_CHAIN (values))
14530     {
14531       location_t saved_location;
14532 
14533       decl = TREE_VALUE (values);
14534       saved_location = input_location;
14535       input_location = DECL_SOURCE_LOCATION (decl);
14536       if (fixed_underlying_type_p)
14537         /* If the enumeration type has a fixed underlying type, we
14538            already checked all of the enumerator values.  */
14539         value = DECL_INITIAL (decl);
14540       else
14541         value = perform_implicit_conversion (underlying_type,
14542                                              DECL_INITIAL (decl),
14543                                              tf_warning_or_error);
14544       input_location = saved_location;
14545 
14546       /* Do not clobber shared ints.  */
14547       if (value != error_mark_node)
14548           {
14549             value = copy_node (value);
14550 
14551             TREE_TYPE (value) = enumtype;
14552           }
14553       DECL_INITIAL (decl) = value;
14554     }
14555 
14556   /* Fix up all variant types of this enum type.  */
14557   for (t = TYPE_MAIN_VARIANT (enumtype); t; t = TYPE_NEXT_VARIANT (t))
14558     TYPE_VALUES (t) = TYPE_VALUES (enumtype);
14559 
14560   if (at_class_scope_p ()
14561       && COMPLETE_TYPE_P (current_class_type)
14562       && UNSCOPED_ENUM_P (enumtype))
14563     {
14564       insert_late_enum_def_bindings (current_class_type, enumtype);
14565       /* TYPE_FIELDS needs fixup.  */
14566       fixup_type_variants (current_class_type);
14567     }
14568 
14569   /* Finish debugging output for this type.  */
14570   rest_of_type_compilation (enumtype, namespace_bindings_p ());
14571 
14572   /* Each enumerator now has the type of its enumeration.  Clear the cache
14573      so that this change in types doesn't confuse us later on.  */
14574   clear_cv_and_fold_caches ();
14575 }
14576 
14577 /* Finishes the enum type. This is called only the first time an
14578    enumeration is seen, be it opaque or odinary.
14579    ENUMTYPE is the type object.  */
14580 
14581 void
finish_enum(tree enumtype)14582 finish_enum (tree enumtype)
14583 {
14584   if (processing_template_decl)
14585     {
14586       if (at_function_scope_p ())
14587           add_stmt (build_min (TAG_DEFN, enumtype));
14588       return;
14589     }
14590 
14591   /* If this is a forward declaration, there should not be any variants,
14592      though we can get a variant in the middle of an enum-specifier with
14593      wacky code like 'enum E { e = sizeof(const E*) };'  */
14594   gcc_assert (enumtype == TYPE_MAIN_VARIANT (enumtype)
14595                 && (TYPE_VALUES (enumtype)
14596                       || !TYPE_NEXT_VARIANT (enumtype)));
14597 }
14598 
14599 /* Build and install a CONST_DECL for an enumeration constant of the
14600    enumeration type ENUMTYPE whose NAME and VALUE (if any) are provided.
14601    Apply ATTRIBUTES if available.  LOC is the location of NAME.
14602    Assignment of sequential values by default is handled here.  */
14603 
14604 void
build_enumerator(tree name,tree value,tree enumtype,tree attributes,location_t loc)14605 build_enumerator (tree name, tree value, tree enumtype, tree attributes,
14606                       location_t loc)
14607 {
14608   tree decl;
14609   tree context;
14610   tree type;
14611 
14612   /* scalar_constant_value will pull out this expression, so make sure
14613      it's folded as appropriate.  */
14614   if (processing_template_decl)
14615     value = fold_non_dependent_expr (value);
14616 
14617   /* If the VALUE was erroneous, pretend it wasn't there; that will
14618      result in the enum being assigned the next value in sequence.  */
14619   if (value == error_mark_node)
14620     value = NULL_TREE;
14621 
14622   /* Remove no-op casts from the value.  */
14623   if (value)
14624     STRIP_TYPE_NOPS (value);
14625 
14626   if (! processing_template_decl)
14627     {
14628       /* Validate and default VALUE.  */
14629       if (value != NULL_TREE)
14630           {
14631             if (!ENUM_UNDERLYING_TYPE (enumtype))
14632               {
14633                 tree tmp_value = build_expr_type_conversion (WANT_INT | WANT_ENUM,
14634                                                                          value, true);
14635                 if (tmp_value)
14636                     value = tmp_value;
14637               }
14638             else if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14639                        (TREE_TYPE (value)))
14640               value = perform_implicit_conversion_flags
14641                 (ENUM_UNDERLYING_TYPE (enumtype), value, tf_warning_or_error,
14642                  LOOKUP_IMPLICIT | LOOKUP_NO_NARROWING);
14643 
14644             if (value == error_mark_node)
14645               value = NULL_TREE;
14646 
14647             if (value != NULL_TREE)
14648               {
14649                 if (! INTEGRAL_OR_UNSCOPED_ENUMERATION_TYPE_P
14650                       (TREE_TYPE (value)))
14651                     {
14652                       error ("enumerator value for %qD must have integral or "
14653                                "unscoped enumeration type", name);
14654                       value = NULL_TREE;
14655                     }
14656                 else
14657                     {
14658                       value = cxx_constant_value (value);
14659 
14660                       if (TREE_CODE (value) != INTEGER_CST)
14661                         {
14662                           error ("enumerator value for %qD is not an integer "
14663                                    "constant", name);
14664                           value = NULL_TREE;
14665                         }
14666                     }
14667               }
14668           }
14669 
14670       /* Default based on previous value.  */
14671       if (value == NULL_TREE)
14672           {
14673             if (TYPE_VALUES (enumtype))
14674               {
14675                 tree prev_value;
14676                 bool overflowed;
14677 
14678                 /* C++03 7.2/4: If no initializer is specified for the first
14679                      enumerator, the type is an unspecified integral
14680                      type. Otherwise the type is the same as the type of the
14681                      initializing value of the preceding enumerator unless the
14682                      incremented value is not representable in that type, in
14683                      which case the type is an unspecified integral type
14684                      sufficient to contain the incremented value.  */
14685                 prev_value = DECL_INITIAL (TREE_VALUE (TYPE_VALUES (enumtype)));
14686                 if (error_operand_p (prev_value))
14687                     value = error_mark_node;
14688                 else
14689                     {
14690                       tree type = TREE_TYPE (prev_value);
14691                       signop sgn = TYPE_SIGN (type);
14692                       widest_int wi = wi::add (wi::to_widest (prev_value), 1, sgn,
14693                                                      &overflowed);
14694                       if (!overflowed)
14695                         {
14696                           bool pos = !wi::neg_p (wi, sgn);
14697                           if (!wi::fits_to_tree_p (wi, type))
14698                               {
14699                                 unsigned int itk;
14700                                 for (itk = itk_int; itk != itk_none; itk++)
14701                                   {
14702                                     type = integer_types[itk];
14703                                     if (type != NULL_TREE
14704                                           && (pos || !TYPE_UNSIGNED (type))
14705                                           && wi::fits_to_tree_p (wi, type))
14706                                         break;
14707                                   }
14708                                 if (type && cxx_dialect < cxx11
14709                                     && itk > itk_unsigned_long)
14710                                   pedwarn (input_location, OPT_Wlong_long,
14711                                              pos ? G_("\
14712 incremented enumerator value is too large for %<unsigned long%>") : G_("\
14713 incremented enumerator value is too large for %<long%>"));
14714                               }
14715                           if (type == NULL_TREE)
14716                               overflowed = true;
14717                           else
14718                               value = wide_int_to_tree (type, wi);
14719                         }
14720 
14721                       if (overflowed)
14722                         {
14723                           error ("overflow in enumeration values at %qD", name);
14724                           value = error_mark_node;
14725                         }
14726                     }
14727               }
14728             else
14729               value = integer_zero_node;
14730           }
14731 
14732       /* Remove no-op casts from the value.  */
14733       STRIP_TYPE_NOPS (value);
14734 
14735       /* If the underlying type of the enum is fixed, check whether
14736          the enumerator values fits in the underlying type.  If it
14737          does not fit, the program is ill-formed [C++0x dcl.enum].  */
14738       if (ENUM_UNDERLYING_TYPE (enumtype)
14739           && value
14740           && TREE_CODE (value) == INTEGER_CST)
14741         {
14742             if (!int_fits_type_p (value, ENUM_UNDERLYING_TYPE (enumtype)))
14743               error ("enumerator value %qE is outside the range of underlying "
14744                        "type %qT", value, ENUM_UNDERLYING_TYPE (enumtype));
14745 
14746           /* Convert the value to the appropriate type.  */
14747           value = fold_convert (ENUM_UNDERLYING_TYPE (enumtype), value);
14748         }
14749     }
14750 
14751   /* C++ associates enums with global, function, or class declarations.  */
14752   context = current_scope ();
14753 
14754   /* Build the actual enumeration constant.  Note that the enumeration
14755      constants have the underlying type of the enum (if it is fixed)
14756      or the type of their initializer (if the underlying type of the
14757      enum is not fixed):
14758 
14759       [ C++0x dcl.enum ]
14760 
14761         If the underlying type is fixed, the type of each enumerator
14762         prior to the closing brace is the underlying type; if the
14763         initializing value of an enumerator cannot be represented by
14764         the underlying type, the program is ill-formed. If the
14765         underlying type is not fixed, the type of each enumerator is
14766         the type of its initializing value.
14767 
14768     If the underlying type is not fixed, it will be computed by
14769     finish_enum and we will reset the type of this enumerator.  Of
14770     course, if we're processing a template, there may be no value.  */
14771   type = value ? TREE_TYPE (value) : NULL_TREE;
14772 
14773   decl = build_decl (loc, CONST_DECL, name, type);
14774 
14775   DECL_CONTEXT (decl) = enumtype;
14776   TREE_CONSTANT (decl) = 1;
14777   TREE_READONLY (decl) = 1;
14778   DECL_INITIAL (decl) = value;
14779 
14780   if (attributes)
14781     cplus_decl_attributes (&decl, attributes, 0);
14782 
14783   if (context && context == current_class_type && !SCOPED_ENUM_P (enumtype))
14784     {
14785       /* In something like `struct S { enum E { i = 7 }; };' we put `i'
14786            on the TYPE_FIELDS list for `S'.  (That's so that you can say
14787            things like `S::i' later.)  */
14788 
14789       /* The enumerator may be getting declared outside of its enclosing
14790            class, like so:
14791 
14792              class S { public: enum E : int; }; enum S::E : int { i = 7; };
14793 
14794            For which case we need to make sure that the access of `S::i'
14795            matches the access of `S::E'.  */
14796       tree saved_cas = current_access_specifier;
14797       if (TREE_PRIVATE (TYPE_NAME (enumtype)))
14798           current_access_specifier = access_private_node;
14799       else if (TREE_PROTECTED (TYPE_NAME (enumtype)))
14800           current_access_specifier = access_protected_node;
14801       else
14802           current_access_specifier = access_public_node;
14803 
14804       finish_member_declaration (decl);
14805 
14806       current_access_specifier = saved_cas;
14807     }
14808   else
14809     pushdecl (decl);
14810 
14811   /* Add this enumeration constant to the list for this type.  */
14812   TYPE_VALUES (enumtype) = tree_cons (name, decl, TYPE_VALUES (enumtype));
14813 }
14814 
14815 /* Look for an enumerator with the given NAME within the enumeration
14816    type ENUMTYPE.  This routine is used primarily for qualified name
14817    lookup into an enumerator in C++0x, e.g.,
14818 
14819      enum class Color { Red, Green, Blue };
14820 
14821      Color color = Color::Red;
14822 
14823    Returns the value corresponding to the enumerator, or
14824    NULL_TREE if no such enumerator was found.  */
14825 tree
lookup_enumerator(tree enumtype,tree name)14826 lookup_enumerator (tree enumtype, tree name)
14827 {
14828   tree e;
14829   gcc_assert (enumtype && TREE_CODE (enumtype) == ENUMERAL_TYPE);
14830 
14831   e = purpose_member (name, TYPE_VALUES (enumtype));
14832   return e? TREE_VALUE (e) : NULL_TREE;
14833 }
14834 
14835 
14836 /* We're defining DECL.  Make sure that its type is OK.  */
14837 
14838 static void
check_function_type(tree decl,tree current_function_parms)14839 check_function_type (tree decl, tree current_function_parms)
14840 {
14841   tree fntype = TREE_TYPE (decl);
14842   tree return_type = complete_type (TREE_TYPE (fntype));
14843 
14844   /* In a function definition, arg types must be complete.  */
14845   require_complete_types_for_parms (current_function_parms);
14846 
14847   if (dependent_type_p (return_type)
14848       || type_uses_auto (return_type))
14849     return;
14850   if (!COMPLETE_OR_VOID_TYPE_P (return_type))
14851     {
14852       tree args = TYPE_ARG_TYPES (fntype);
14853 
14854       error ("return type %q#T is incomplete", return_type);
14855 
14856       /* Make it return void instead.  */
14857       if (TREE_CODE (fntype) == METHOD_TYPE)
14858           fntype = build_method_type_directly (TREE_TYPE (TREE_VALUE (args)),
14859                                                        void_type_node,
14860                                                        TREE_CHAIN (args));
14861       else
14862           fntype = build_function_type (void_type_node, args);
14863       fntype
14864           = build_exception_variant (fntype,
14865                                            TYPE_RAISES_EXCEPTIONS (TREE_TYPE (decl)));
14866       fntype = (cp_build_type_attribute_variant
14867                     (fntype, TYPE_ATTRIBUTES (TREE_TYPE (decl))));
14868       TREE_TYPE (decl) = fntype;
14869     }
14870   else
14871     {
14872       abstract_virtuals_error (decl, TREE_TYPE (fntype));
14873       maybe_warn_parm_abi (TREE_TYPE (fntype),
14874                                  DECL_SOURCE_LOCATION (decl));
14875     }
14876 }
14877 
14878 /* True iff FN is an implicitly-defined default constructor.  */
14879 
14880 static bool
implicit_default_ctor_p(tree fn)14881 implicit_default_ctor_p (tree fn)
14882 {
14883   return (DECL_CONSTRUCTOR_P (fn)
14884             && !user_provided_p (fn)
14885             && sufficient_parms_p (FUNCTION_FIRST_USER_PARMTYPE (fn)));
14886 }
14887 
14888 /* Clobber the contents of *this to let the back end know that the object
14889    storage is dead when we enter the constructor or leave the destructor.  */
14890 
14891 static tree
build_clobber_this()14892 build_clobber_this ()
14893 {
14894   /* Clobbering an empty base is pointless, and harmful if its one byte
14895      TYPE_SIZE overlays real data.  */
14896   if (is_empty_class (current_class_type))
14897     return void_node;
14898 
14899   /* If we have virtual bases, clobber the whole object, but only if we're in
14900      charge.  If we don't have virtual bases, clobber the as-base type so we
14901      don't mess with tail padding.  */
14902   bool vbases = CLASSTYPE_VBASECLASSES (current_class_type);
14903 
14904   tree ctype = current_class_type;
14905   if (!vbases)
14906     ctype = CLASSTYPE_AS_BASE (ctype);
14907 
14908   tree clobber = build_constructor (ctype, NULL);
14909   TREE_THIS_VOLATILE (clobber) = true;
14910 
14911   tree thisref = current_class_ref;
14912   if (ctype != current_class_type)
14913     {
14914       thisref = build_nop (build_reference_type (ctype), current_class_ptr);
14915       thisref = convert_from_reference (thisref);
14916     }
14917 
14918   tree exprstmt = build2 (MODIFY_EXPR, void_type_node, thisref, clobber);
14919   if (vbases)
14920     exprstmt = build_if_in_charge (exprstmt);
14921 
14922   return exprstmt;
14923 }
14924 
14925 /* Create the FUNCTION_DECL for a function definition.
14926    DECLSPECS and DECLARATOR are the parts of the declaration;
14927    they describe the function's name and the type it returns,
14928    but twisted together in a fashion that parallels the syntax of C.
14929 
14930    FLAGS is a bitwise or of SF_PRE_PARSED (indicating that the
14931    DECLARATOR is really the DECL for the function we are about to
14932    process and that DECLSPECS should be ignored), SF_INCLASS_INLINE
14933    indicating that the function is an inline defined in-class.
14934 
14935    This function creates a binding context for the function body
14936    as well as setting up the FUNCTION_DECL in current_function_decl.
14937 
14938    For C++, we must first check whether that datum makes any sense.
14939    For example, "class A local_a(1,2);" means that variable local_a
14940    is an aggregate of type A, which should have a constructor
14941    applied to it with the argument list [1, 2].
14942 
14943    On entry, DECL_INITIAL (decl1) should be NULL_TREE or error_mark_node,
14944    or may be a BLOCK if the function has been defined previously
14945    in this translation unit.  On exit, DECL_INITIAL (decl1) will be
14946    error_mark_node if the function has never been defined, or
14947    a BLOCK if the function has been defined somewhere.  */
14948 
14949 bool
start_preparsed_function(tree decl1,tree attrs,int flags)14950 start_preparsed_function (tree decl1, tree attrs, int flags)
14951 {
14952   tree ctype = NULL_TREE;
14953   tree fntype;
14954   tree restype;
14955   int doing_friend = 0;
14956   cp_binding_level *bl;
14957   tree current_function_parms;
14958   struct c_fileinfo *finfo
14959     = get_fileinfo (LOCATION_FILE (DECL_SOURCE_LOCATION (decl1)));
14960   bool honor_interface;
14961 
14962   /* Sanity check.  */
14963   gcc_assert (VOID_TYPE_P (TREE_VALUE (void_list_node)));
14964   gcc_assert (TREE_CHAIN (void_list_node) == NULL_TREE);
14965 
14966   fntype = TREE_TYPE (decl1);
14967   if (TREE_CODE (fntype) == METHOD_TYPE)
14968     ctype = TYPE_METHOD_BASETYPE (fntype);
14969 
14970   /* ISO C++ 11.4/5.  A friend function defined in a class is in
14971      the (lexical) scope of the class in which it is defined.  */
14972   if (!ctype && DECL_FRIEND_P (decl1))
14973     {
14974       ctype = DECL_FRIEND_CONTEXT (decl1);
14975 
14976       /* CTYPE could be null here if we're dealing with a template;
14977            for example, `inline friend float foo()' inside a template
14978            will have no CTYPE set.  */
14979       if (ctype && TREE_CODE (ctype) != RECORD_TYPE)
14980           ctype = NULL_TREE;
14981       else
14982           doing_friend = 1;
14983     }
14984 
14985   if (DECL_DECLARED_INLINE_P (decl1)
14986       && lookup_attribute ("noinline", attrs))
14987     warning_at (DECL_SOURCE_LOCATION (decl1), 0,
14988                     "inline function %qD given attribute noinline", decl1);
14989 
14990   /* Handle gnu_inline attribute.  */
14991   if (GNU_INLINE_P (decl1))
14992     {
14993       DECL_EXTERNAL (decl1) = 1;
14994       DECL_NOT_REALLY_EXTERN (decl1) = 0;
14995       DECL_INTERFACE_KNOWN (decl1) = 1;
14996       DECL_DISREGARD_INLINE_LIMITS (decl1) = 1;
14997     }
14998 
14999   if (DECL_MAYBE_IN_CHARGE_CONSTRUCTOR_P (decl1))
15000     /* This is a constructor, we must ensure that any default args
15001        introduced by this definition are propagated to the clones
15002        now. The clones are used directly in overload resolution.  */
15003     adjust_clone_args (decl1);
15004 
15005   /* Sometimes we don't notice that a function is a static member, and
15006      build a METHOD_TYPE for it.  Fix that up now.  */
15007   gcc_assert (!(ctype != NULL_TREE && DECL_STATIC_FUNCTION_P (decl1)
15008                     && TREE_CODE (TREE_TYPE (decl1)) == METHOD_TYPE));
15009 
15010   /* Set up current_class_type, and enter the scope of the class, if
15011      appropriate.  */
15012   if (ctype)
15013     push_nested_class (ctype);
15014   else if (DECL_STATIC_FUNCTION_P (decl1))
15015     push_nested_class (DECL_CONTEXT (decl1));
15016 
15017   /* Now that we have entered the scope of the class, we must restore
15018      the bindings for any template parameters surrounding DECL1, if it
15019      is an inline member template.  (Order is important; consider the
15020      case where a template parameter has the same name as a field of
15021      the class.)  It is not until after this point that
15022      PROCESSING_TEMPLATE_DECL is guaranteed to be set up correctly.  */
15023   if (flags & SF_INCLASS_INLINE)
15024     maybe_begin_member_template_processing (decl1);
15025 
15026   /* Effective C++ rule 15.  */
15027   if (warn_ecpp
15028       && DECL_ASSIGNMENT_OPERATOR_P (decl1)
15029       && DECL_OVERLOADED_OPERATOR_IS (decl1, NOP_EXPR)
15030       && VOID_TYPE_P (TREE_TYPE (fntype)))
15031     warning (OPT_Weffc__,
15032                "%<operator=%> should return a reference to %<*this%>");
15033 
15034   /* Make the init_value nonzero so pushdecl knows this is not tentative.
15035      error_mark_node is replaced below (in poplevel) with the BLOCK.  */
15036   if (!DECL_INITIAL (decl1))
15037     DECL_INITIAL (decl1) = error_mark_node;
15038 
15039   /* This function exists in static storage.
15040      (This does not mean `static' in the C sense!)  */
15041   TREE_STATIC (decl1) = 1;
15042 
15043   /* We must call push_template_decl after current_class_type is set
15044      up.  (If we are processing inline definitions after exiting a
15045      class scope, current_class_type will be NULL_TREE until set above
15046      by push_nested_class.)  */
15047   if (processing_template_decl)
15048     {
15049       tree newdecl1 = push_template_decl (decl1);
15050       if (newdecl1 == error_mark_node)
15051           {
15052             if (ctype || DECL_STATIC_FUNCTION_P (decl1))
15053               pop_nested_class ();
15054             return false;
15055           }
15056       decl1 = newdecl1;
15057     }
15058 
15059   /* Make sure the parameter and return types are reasonable.  When
15060      you declare a function, these types can be incomplete, but they
15061      must be complete when you define the function.  */
15062   check_function_type (decl1, DECL_ARGUMENTS (decl1));
15063 
15064   /* Build the return declaration for the function.  */
15065   restype = TREE_TYPE (fntype);
15066 
15067   if (DECL_RESULT (decl1) == NULL_TREE)
15068     {
15069       tree resdecl;
15070 
15071       resdecl = build_decl (input_location, RESULT_DECL, 0, restype);
15072       DECL_ARTIFICIAL (resdecl) = 1;
15073       DECL_IGNORED_P (resdecl) = 1;
15074       DECL_RESULT (decl1) = resdecl;
15075 
15076       cp_apply_type_quals_to_decl (cp_type_quals (restype), resdecl);
15077     }
15078 
15079   /* Record the decl so that the function name is defined.
15080      If we already have a decl for this name, and it is a FUNCTION_DECL,
15081      use the old decl.  */
15082   if (!processing_template_decl && !(flags & SF_PRE_PARSED))
15083     {
15084       /* A specialization is not used to guide overload resolution.  */
15085       if (!DECL_FUNCTION_MEMBER_P (decl1)
15086             && !(DECL_USE_TEMPLATE (decl1) &&
15087                  PRIMARY_TEMPLATE_P (DECL_TI_TEMPLATE (decl1))))
15088           {
15089             tree olddecl = pushdecl (decl1);
15090 
15091             if (olddecl == error_mark_node)
15092               /* If something went wrong when registering the declaration,
15093                  use DECL1; we have to have a FUNCTION_DECL to use when
15094                  parsing the body of the function.  */
15095               ;
15096             else
15097               {
15098                 /* Otherwise, OLDDECL is either a previous declaration
15099                      of the same function or DECL1 itself.  */
15100 
15101                 if (warn_missing_declarations
15102                       && olddecl == decl1
15103                       && !DECL_MAIN_P (decl1)
15104                       && TREE_PUBLIC (decl1)
15105                       && !DECL_DECLARED_INLINE_P (decl1))
15106                     {
15107                       tree context;
15108 
15109                       /* Check whether DECL1 is in an anonymous
15110                          namespace.  */
15111                       for (context = DECL_CONTEXT (decl1);
15112                            context;
15113                            context = DECL_CONTEXT (context))
15114                         {
15115                           if (TREE_CODE (context) == NAMESPACE_DECL
15116                                 && DECL_NAME (context) == NULL_TREE)
15117                               break;
15118                         }
15119 
15120                       if (context == NULL)
15121                         warning_at (DECL_SOURCE_LOCATION (decl1),
15122                                         OPT_Wmissing_declarations,
15123                                         "no previous declaration for %qD", decl1);
15124                     }
15125 
15126                 decl1 = olddecl;
15127               }
15128           }
15129       else
15130           {
15131             /* We need to set the DECL_CONTEXT.  */
15132             if (!DECL_CONTEXT (decl1) && DECL_TEMPLATE_INFO (decl1))
15133               DECL_CONTEXT (decl1) = DECL_CONTEXT (DECL_TI_TEMPLATE (decl1));
15134           }
15135       fntype = TREE_TYPE (decl1);
15136       restype = TREE_TYPE (fntype);
15137 
15138       /* If #pragma weak applies, mark the decl appropriately now.
15139            The pragma only applies to global functions.  Because
15140            determining whether or not the #pragma applies involves
15141            computing the mangled name for the declaration, we cannot
15142            apply the pragma until after we have merged this declaration
15143            with any previous declarations; if the original declaration
15144            has a linkage specification, that specification applies to
15145            the definition as well, and may affect the mangled name.  */
15146       if (DECL_FILE_SCOPE_P (decl1))
15147           maybe_apply_pragma_weak (decl1);
15148     }
15149 
15150   /* We are now in the scope of the function being defined.  */
15151   current_function_decl = decl1;
15152 
15153   /* Save the parm names or decls from this function's declarator
15154      where store_parm_decls will find them.  */
15155   current_function_parms = DECL_ARGUMENTS (decl1);
15156 
15157   /* Let the user know we're compiling this function.  */
15158   announce_function (decl1);
15159 
15160   gcc_assert (DECL_INITIAL (decl1));
15161 
15162   /* This function may already have been parsed, in which case just
15163      return; our caller will skip over the body without parsing.  */
15164   if (DECL_INITIAL (decl1) != error_mark_node)
15165     return true;
15166 
15167   /* Initialize RTL machinery.  We cannot do this until
15168      CURRENT_FUNCTION_DECL and DECL_RESULT are set up.  We do this
15169      even when processing a template; this is how we get
15170      CFUN set up, and our per-function variables initialized.
15171      FIXME factor out the non-RTL stuff.  */
15172   bl = current_binding_level;
15173   allocate_struct_function (decl1, processing_template_decl);
15174 
15175   /* Initialize the language data structures.  Whenever we start
15176      a new function, we destroy temporaries in the usual way.  */
15177   cfun->language = ggc_cleared_alloc<language_function> ();
15178   current_stmt_tree ()->stmts_are_full_exprs_p = 1;
15179   current_binding_level = bl;
15180 
15181   if (!processing_template_decl && type_uses_auto (restype))
15182     {
15183       FNDECL_USED_AUTO (decl1) = true;
15184       current_function_auto_return_pattern = restype;
15185     }
15186 
15187   /* Start the statement-tree, start the tree now.  */
15188   DECL_SAVED_TREE (decl1) = push_stmt_list ();
15189 
15190   /* If we are (erroneously) defining a function that we have already
15191      defined before, wipe out what we knew before.  */
15192   if (!DECL_PENDING_INLINE_P (decl1))
15193     DECL_SAVED_FUNCTION_DATA (decl1) = NULL;
15194 
15195   if (ctype && !doing_friend && !DECL_STATIC_FUNCTION_P (decl1))
15196     {
15197       /* We know that this was set up by `grokclassfn'.  We do not
15198            wait until `store_parm_decls', since evil parse errors may
15199            never get us to that point.  Here we keep the consistency
15200            between `current_class_type' and `current_class_ptr'.  */
15201       tree t = DECL_ARGUMENTS (decl1);
15202 
15203       gcc_assert (t != NULL_TREE && TREE_CODE (t) == PARM_DECL);
15204       gcc_assert (TYPE_PTR_P (TREE_TYPE (t)));
15205 
15206       cp_function_chain->x_current_class_ref
15207           = cp_build_fold_indirect_ref (t);
15208       /* Set this second to avoid shortcut in cp_build_indirect_ref.  */
15209       cp_function_chain->x_current_class_ptr = t;
15210 
15211       /* Constructors and destructors need to know whether they're "in
15212            charge" of initializing virtual base classes.  */
15213       t = DECL_CHAIN (t);
15214       if (DECL_HAS_IN_CHARGE_PARM_P (decl1))
15215           {
15216             current_in_charge_parm = t;
15217             t = DECL_CHAIN (t);
15218           }
15219       if (DECL_HAS_VTT_PARM_P (decl1))
15220           {
15221             gcc_assert (DECL_NAME (t) == vtt_parm_identifier);
15222             current_vtt_parm = t;
15223           }
15224     }
15225 
15226   honor_interface = (!DECL_TEMPLATE_INSTANTIATION (decl1)
15227                          /* Implicitly-defined methods (like the
15228                               destructor for a class in which no destructor
15229                               is explicitly declared) must not be defined
15230                               until their definition is needed.  So, we
15231                               ignore interface specifications for
15232                               compiler-generated functions.  */
15233                          && !DECL_ARTIFICIAL (decl1));
15234 
15235   if (processing_template_decl)
15236     /* Don't mess with interface flags.  */;
15237   else if (DECL_INTERFACE_KNOWN (decl1))
15238     {
15239       tree ctx = decl_function_context (decl1);
15240 
15241       if (DECL_NOT_REALLY_EXTERN (decl1))
15242           DECL_EXTERNAL (decl1) = 0;
15243 
15244       if (ctx != NULL_TREE && vague_linkage_p (ctx))
15245           /* This is a function in a local class in an extern inline
15246              or template function.  */
15247           comdat_linkage (decl1);
15248     }
15249   /* If this function belongs to an interface, it is public.
15250      If it belongs to someone else's interface, it is also external.
15251      This only affects inlines and template instantiations.  */
15252   else if (!finfo->interface_unknown && honor_interface)
15253     {
15254       if (DECL_DECLARED_INLINE_P (decl1)
15255             || DECL_TEMPLATE_INSTANTIATION (decl1))
15256           {
15257             DECL_EXTERNAL (decl1)
15258               = (finfo->interface_only
15259                  || (DECL_DECLARED_INLINE_P (decl1)
15260                        && ! flag_implement_inlines
15261                        && !DECL_VINDEX (decl1)));
15262 
15263             /* For WIN32 we also want to put these in linkonce sections.  */
15264             maybe_make_one_only (decl1);
15265           }
15266       else
15267           DECL_EXTERNAL (decl1) = 0;
15268       DECL_INTERFACE_KNOWN (decl1) = 1;
15269       /* If this function is in an interface implemented in this file,
15270            make sure that the back end knows to emit this function
15271            here.  */
15272       if (!DECL_EXTERNAL (decl1))
15273           mark_needed (decl1);
15274     }
15275   else if (finfo->interface_unknown && finfo->interface_only
15276              && honor_interface)
15277     {
15278       /* If MULTIPLE_SYMBOL_SPACES is defined and we saw a #pragma
15279            interface, we will have both finfo->interface_unknown and
15280            finfo->interface_only set.  In that case, we don't want to
15281            use the normal heuristics because someone will supply a
15282            #pragma implementation elsewhere, and deducing it here would
15283            produce a conflict.  */
15284       comdat_linkage (decl1);
15285       DECL_EXTERNAL (decl1) = 0;
15286       DECL_INTERFACE_KNOWN (decl1) = 1;
15287       DECL_DEFER_OUTPUT (decl1) = 1;
15288     }
15289   else
15290     {
15291       /* This is a definition, not a reference.
15292            So clear DECL_EXTERNAL, unless this is a GNU extern inline.  */
15293       if (!GNU_INLINE_P (decl1))
15294           DECL_EXTERNAL (decl1) = 0;
15295 
15296       if ((DECL_DECLARED_INLINE_P (decl1)
15297              || DECL_TEMPLATE_INSTANTIATION (decl1))
15298             && ! DECL_INTERFACE_KNOWN (decl1))
15299           DECL_DEFER_OUTPUT (decl1) = 1;
15300       else
15301           DECL_INTERFACE_KNOWN (decl1) = 1;
15302     }
15303 
15304   /* Determine the ELF visibility attribute for the function.  We must not
15305      do this before calling "pushdecl", as we must allow "duplicate_decls"
15306      to merge any attributes appropriately.  We also need to wait until
15307      linkage is set.  */
15308   if (!DECL_CLONED_FUNCTION_P (decl1))
15309     determine_visibility (decl1);
15310 
15311   if (!processing_template_decl)
15312     maybe_instantiate_noexcept (decl1);
15313 
15314   begin_scope (sk_function_parms, decl1);
15315 
15316   ++function_depth;
15317 
15318   if (DECL_DESTRUCTOR_P (decl1)
15319       || (DECL_CONSTRUCTOR_P (decl1)
15320             && targetm.cxx.cdtor_returns_this ()))
15321     {
15322       cdtor_label = create_artificial_label (input_location);
15323       LABEL_DECL_CDTOR (cdtor_label) = true;
15324     }
15325 
15326   start_fname_decls ();
15327 
15328   store_parm_decls (current_function_parms);
15329 
15330   if (!processing_template_decl
15331       && (flag_lifetime_dse > 1)
15332       && DECL_CONSTRUCTOR_P (decl1)
15333       && !DECL_CLONED_FUNCTION_P (decl1)
15334       /* Clobbering an empty base is harmful if it overlays real data.  */
15335       && !is_empty_class (current_class_type)
15336       /* We can't clobber safely for an implicitly-defined default constructor
15337            because part of the initialization might happen before we enter the
15338            constructor, via AGGR_INIT_ZERO_FIRST (c++/68006).  */
15339       && !implicit_default_ctor_p (decl1))
15340     finish_expr_stmt (build_clobber_this ());
15341 
15342   if (!processing_template_decl
15343       && DECL_CONSTRUCTOR_P (decl1)
15344       && sanitize_flags_p (SANITIZE_VPTR)
15345       && !DECL_CLONED_FUNCTION_P (decl1)
15346       && !implicit_default_ctor_p (decl1))
15347     cp_ubsan_maybe_initialize_vtbl_ptrs (current_class_ptr);
15348 
15349   start_lambda_scope (decl1);
15350 
15351   return true;
15352 }
15353 
15354 
15355 /* Like start_preparsed_function, except that instead of a
15356    FUNCTION_DECL, this function takes DECLSPECS and DECLARATOR.
15357 
15358    Returns true on success.  If the DECLARATOR is not suitable
15359    for a function, we return false, which tells the parser to
15360    skip the entire function.  */
15361 
15362 bool
start_function(cp_decl_specifier_seq * declspecs,const cp_declarator * declarator,tree attrs)15363 start_function (cp_decl_specifier_seq *declspecs,
15364                     const cp_declarator *declarator,
15365                     tree attrs)
15366 {
15367   tree decl1;
15368 
15369   decl1 = grokdeclarator (declarator, declspecs, FUNCDEF, 1, &attrs);
15370   invoke_plugin_callbacks (PLUGIN_START_PARSE_FUNCTION, decl1);
15371   if (decl1 == error_mark_node)
15372     return false;
15373   /* If the declarator is not suitable for a function definition,
15374      cause a syntax error.  */
15375   if (decl1 == NULL_TREE || TREE_CODE (decl1) != FUNCTION_DECL)
15376     {
15377       error ("invalid function declaration");
15378       return false;
15379     }
15380 
15381   if (DECL_MAIN_P (decl1))
15382     /* main must return int.  grokfndecl should have corrected it
15383        (and issued a diagnostic) if the user got it wrong.  */
15384     gcc_assert (same_type_p (TREE_TYPE (TREE_TYPE (decl1)),
15385                                    integer_type_node));
15386 
15387   return start_preparsed_function (decl1, attrs, /*flags=*/SF_DEFAULT);
15388 }
15389 
15390 /* Returns true iff an EH_SPEC_BLOCK should be created in the body of
15391    FN.  */
15392 
15393 static bool
use_eh_spec_block(tree fn)15394 use_eh_spec_block (tree fn)
15395 {
15396   return (flag_exceptions && flag_enforce_eh_specs
15397             && !processing_template_decl
15398             && !type_throw_all_p (TREE_TYPE (fn))
15399             /* We insert the EH_SPEC_BLOCK only in the original
15400                function; then, it is copied automatically to the
15401                clones.  */
15402             && !DECL_CLONED_FUNCTION_P (fn)
15403             /* Implicitly-generated constructors and destructors have
15404                exception specifications.  However, those specifications
15405                are the union of the possible exceptions specified by the
15406                constructors/destructors for bases and members, so no
15407                unallowed exception will ever reach this function.  By
15408                not creating the EH_SPEC_BLOCK we save a little memory,
15409                and we avoid spurious warnings about unreachable
15410                code.  */
15411             && !DECL_DEFAULTED_FN (fn));
15412 }
15413 
15414 /* Store the parameter declarations into the current function declaration.
15415    This is called after parsing the parameter declarations, before
15416    digesting the body of the function.
15417 
15418    Also install to binding contour return value identifier, if any.  */
15419 
15420 static void
store_parm_decls(tree current_function_parms)15421 store_parm_decls (tree current_function_parms)
15422 {
15423   tree fndecl = current_function_decl;
15424   tree parm;
15425 
15426   /* This is a chain of any other decls that came in among the parm
15427      declarations.  If a parm is declared with  enum {foo, bar} x;
15428      then CONST_DECLs for foo and bar are put here.  */
15429   tree nonparms = NULL_TREE;
15430 
15431   if (current_function_parms)
15432     {
15433       /* This case is when the function was defined with an ANSI prototype.
15434            The parms already have decls, so we need not do anything here
15435            except record them as in effect
15436            and complain if any redundant old-style parm decls were written.  */
15437 
15438       tree specparms = current_function_parms;
15439       tree next;
15440 
15441       /* Must clear this because it might contain TYPE_DECLs declared
15442                at class level.  */
15443       current_binding_level->names = NULL;
15444 
15445       /* If we're doing semantic analysis, then we'll call pushdecl
15446                for each of these.  We must do them in reverse order so that
15447                they end in the correct forward order.  */
15448       specparms = nreverse (specparms);
15449 
15450       for (parm = specparms; parm; parm = next)
15451           {
15452             next = DECL_CHAIN (parm);
15453             if (TREE_CODE (parm) == PARM_DECL)
15454               pushdecl (parm);
15455             else
15456               {
15457                 /* If we find an enum constant or a type tag,
15458                      put it aside for the moment.  */
15459                 TREE_CHAIN (parm) = NULL_TREE;
15460                 nonparms = chainon (nonparms, parm);
15461               }
15462           }
15463 
15464       /* Get the decls in their original chain order and record in the
15465            function.  This is all and only the PARM_DECLs that were
15466            pushed into scope by the loop above.  */
15467       DECL_ARGUMENTS (fndecl) = get_local_decls ();
15468     }
15469   else
15470     DECL_ARGUMENTS (fndecl) = NULL_TREE;
15471 
15472   /* Now store the final chain of decls for the arguments
15473      as the decl-chain of the current lexical scope.
15474      Put the enumerators in as well, at the front so that
15475      DECL_ARGUMENTS is not modified.  */
15476   current_binding_level->names = chainon (nonparms, DECL_ARGUMENTS (fndecl));
15477 
15478   if (use_eh_spec_block (current_function_decl))
15479     current_eh_spec_block = begin_eh_spec_block ();
15480 }
15481 
15482 
15483 /* We have finished doing semantic analysis on DECL, but have not yet
15484    generated RTL for its body.  Save away our current state, so that
15485    when we want to generate RTL later we know what to do.  */
15486 
15487 static void
save_function_data(tree decl)15488 save_function_data (tree decl)
15489 {
15490   struct language_function *f;
15491 
15492   /* Save the language-specific per-function data so that we can
15493      get it back when we really expand this function.  */
15494   gcc_assert (!DECL_PENDING_INLINE_P (decl));
15495 
15496   /* Make a copy.  */
15497   f = ggc_alloc<language_function> ();
15498   memcpy (f, cp_function_chain, sizeof (struct language_function));
15499   DECL_SAVED_FUNCTION_DATA (decl) = f;
15500 
15501   /* Clear out the bits we don't need.  */
15502   f->base.x_stmt_tree.x_cur_stmt_list = NULL;
15503   f->bindings = NULL;
15504   f->x_local_names = NULL;
15505   f->base.local_typedefs = NULL;
15506 }
15507 
15508 
15509 /* Set the return value of the constructor (if present).  */
15510 
15511 static void
finish_constructor_body(void)15512 finish_constructor_body (void)
15513 {
15514   tree val;
15515   tree exprstmt;
15516 
15517   if (targetm.cxx.cdtor_returns_this ())
15518     {
15519       /* Any return from a constructor will end up here.  */
15520       add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15521 
15522       val = DECL_ARGUMENTS (current_function_decl);
15523       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15524                         DECL_RESULT (current_function_decl), val);
15525       /* Return the address of the object.  */
15526       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15527       add_stmt (exprstmt);
15528     }
15529 }
15530 
15531 /* Do all the processing for the beginning of a destructor; set up the
15532    vtable pointers and cleanups for bases and members.  */
15533 
15534 static void
begin_destructor_body(void)15535 begin_destructor_body (void)
15536 {
15537   tree compound_stmt;
15538 
15539   /* If the CURRENT_CLASS_TYPE is incomplete, we will have already
15540      issued an error message.  We still want to try to process the
15541      body of the function, but initialize_vtbl_ptrs will crash if
15542      TYPE_BINFO is NULL.  */
15543   if (COMPLETE_TYPE_P (current_class_type))
15544     {
15545       compound_stmt = begin_compound_stmt (0);
15546       /* Make all virtual function table pointers in non-virtual base
15547            classes point to CURRENT_CLASS_TYPE's virtual function
15548            tables.  */
15549       initialize_vtbl_ptrs (current_class_ptr);
15550       finish_compound_stmt (compound_stmt);
15551 
15552       if (flag_lifetime_dse
15553             /* Clobbering an empty base is harmful if it overlays real data.  */
15554             && !is_empty_class (current_class_type))
15555       {
15556           if (sanitize_flags_p (SANITIZE_VPTR)
15557               && (flag_sanitize_recover & SANITIZE_VPTR) == 0
15558               && TYPE_CONTAINS_VPTR_P (current_class_type))
15559             {
15560               tree binfo = TYPE_BINFO (current_class_type);
15561               tree ref
15562                 = cp_build_fold_indirect_ref (current_class_ptr);
15563 
15564               tree vtbl_ptr = build_vfield_ref (ref, TREE_TYPE (binfo));
15565               tree vtbl = build_zero_cst (TREE_TYPE (vtbl_ptr));
15566               tree stmt = cp_build_modify_expr (input_location, vtbl_ptr,
15567                                                         NOP_EXPR, vtbl,
15568                                                         tf_warning_or_error);
15569               /* If the vptr is shared with some virtual nearly empty base,
15570                  don't clear it if not in charge, the dtor of the virtual
15571                  nearly empty base will do that later.  */
15572               if (CLASSTYPE_VBASECLASSES (current_class_type)
15573                     && CLASSTYPE_PRIMARY_BINFO (current_class_type)
15574                     && BINFO_VIRTUAL_P
15575                                 (CLASSTYPE_PRIMARY_BINFO (current_class_type)))
15576                 {
15577                     stmt = convert_to_void (stmt, ICV_STATEMENT,
15578                                                   tf_warning_or_error);
15579                     stmt = build_if_in_charge (stmt);
15580                 }
15581               finish_decl_cleanup (NULL_TREE, stmt);
15582             }
15583           else
15584             finish_decl_cleanup (NULL_TREE, build_clobber_this ());
15585       }
15586 
15587       /* And insert cleanups for our bases and members so that they
15588            will be properly destroyed if we throw.  */
15589       push_base_cleanups ();
15590     }
15591 }
15592 
15593 /* At the end of every destructor we generate code to delete the object if
15594    necessary.  Do that now.  */
15595 
15596 static void
finish_destructor_body(void)15597 finish_destructor_body (void)
15598 {
15599   tree exprstmt;
15600 
15601   /* Any return from a destructor will end up here; that way all base
15602      and member cleanups will be run when the function returns.  */
15603   add_stmt (build_stmt (input_location, LABEL_EXPR, cdtor_label));
15604 
15605   if (targetm.cxx.cdtor_returns_this ())
15606     {
15607       tree val;
15608 
15609       val = DECL_ARGUMENTS (current_function_decl);
15610       val = build2 (MODIFY_EXPR, TREE_TYPE (val),
15611                         DECL_RESULT (current_function_decl), val);
15612       /* Return the address of the object.  */
15613       exprstmt = build_stmt (input_location, RETURN_EXPR, val);
15614       add_stmt (exprstmt);
15615     }
15616 }
15617 
15618 /* Do the necessary processing for the beginning of a function body, which
15619    in this case includes member-initializers, but not the catch clauses of
15620    a function-try-block.  Currently, this means opening a binding level
15621    for the member-initializers (in a ctor), member cleanups (in a dtor),
15622    and capture proxies (in a lambda operator()).  */
15623 
15624 tree
begin_function_body(void)15625 begin_function_body (void)
15626 {
15627   tree stmt;
15628 
15629   if (! FUNCTION_NEEDS_BODY_BLOCK (current_function_decl))
15630     return NULL_TREE;
15631 
15632   if (processing_template_decl)
15633     /* Do nothing now.  */;
15634   else
15635     /* Always keep the BLOCK node associated with the outermost pair of
15636        curly braces of a function.  These are needed for correct
15637        operation of dwarfout.c.  */
15638     keep_next_level (true);
15639 
15640   stmt = begin_compound_stmt (BCS_FN_BODY);
15641 
15642   if (processing_template_decl)
15643     /* Do nothing now.  */;
15644   else if (DECL_DESTRUCTOR_P (current_function_decl))
15645     begin_destructor_body ();
15646 
15647   return stmt;
15648 }
15649 
15650 /* Do the processing for the end of a function body.  Currently, this means
15651    closing out the cleanups for fully-constructed bases and members, and in
15652    the case of the destructor, deleting the object if desired.  Again, this
15653    is only meaningful for [cd]tors, since they are the only functions where
15654    there is a significant distinction between the main body and any
15655    function catch clauses.  Handling, say, main() return semantics here
15656    would be wrong, as flowing off the end of a function catch clause for
15657    main() would also need to return 0.  */
15658 
15659 void
finish_function_body(tree compstmt)15660 finish_function_body (tree compstmt)
15661 {
15662   if (compstmt == NULL_TREE)
15663     return;
15664 
15665   /* Close the block.  */
15666   finish_compound_stmt (compstmt);
15667 
15668   if (processing_template_decl)
15669     /* Do nothing now.  */;
15670   else if (DECL_CONSTRUCTOR_P (current_function_decl))
15671     finish_constructor_body ();
15672   else if (DECL_DESTRUCTOR_P (current_function_decl))
15673     finish_destructor_body ();
15674 }
15675 
15676 /* Given a function, returns the BLOCK corresponding to the outermost level
15677    of curly braces, skipping the artificial block created for constructor
15678    initializers.  */
15679 
15680 tree
outer_curly_brace_block(tree fndecl)15681 outer_curly_brace_block (tree fndecl)
15682 {
15683   tree block = DECL_INITIAL (fndecl);
15684   if (BLOCK_OUTER_CURLY_BRACE_P (block))
15685     return block;
15686   block = BLOCK_SUBBLOCKS (block);
15687   if (BLOCK_OUTER_CURLY_BRACE_P (block))
15688     return block;
15689   block = BLOCK_SUBBLOCKS (block);
15690   gcc_assert (BLOCK_OUTER_CURLY_BRACE_P (block));
15691   return block;
15692 }
15693 
15694 /* If FNDECL is a class's key method, add the class to the list of
15695    keyed classes that should be emitted.  */
15696 
15697 static void
record_key_method_defined(tree fndecl)15698 record_key_method_defined (tree fndecl)
15699 {
15700   if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fndecl)
15701       && DECL_VIRTUAL_P (fndecl)
15702       && !processing_template_decl)
15703     {
15704       tree fnclass = DECL_CONTEXT (fndecl);
15705       if (fndecl == CLASSTYPE_KEY_METHOD (fnclass))
15706           vec_safe_push (keyed_classes, fnclass);
15707     }
15708 }
15709 
15710 /* Subroutine of finish_function.
15711    Save the body of constexpr functions for possible
15712    future compile time evaluation.  */
15713 
15714 static void
maybe_save_function_definition(tree fun)15715 maybe_save_function_definition (tree fun)
15716 {
15717   if (!processing_template_decl
15718       && DECL_DECLARED_CONSTEXPR_P (fun)
15719       && !cp_function_chain->invalid_constexpr
15720       && !DECL_CLONED_FUNCTION_P (fun))
15721     register_constexpr_fundef (fun, DECL_SAVED_TREE (fun));
15722 }
15723 
15724 /* Finish up a function declaration and compile that function
15725    all the way to assembler language output.  The free the storage
15726    for the function definition. INLINE_P is TRUE if we just
15727    finished processing the body of an in-class inline function
15728    definition.  (This processing will have taken place after the
15729    class definition is complete.)  */
15730 
15731 tree
finish_function(bool inline_p)15732 finish_function (bool inline_p)
15733 {
15734   tree fndecl = current_function_decl;
15735   tree fntype, ctype = NULL_TREE;
15736 
15737   /* When we get some parse errors, we can end up without a
15738      current_function_decl, so cope.  */
15739   if (fndecl == NULL_TREE)
15740     return error_mark_node;
15741 
15742   finish_lambda_scope ();
15743 
15744   if (c_dialect_objc ())
15745     objc_finish_function ();
15746 
15747   record_key_method_defined (fndecl);
15748 
15749   fntype = TREE_TYPE (fndecl);
15750 
15751   /*  TREE_READONLY (fndecl) = 1;
15752       This caused &foo to be of type ptr-to-const-function
15753       which then got a warning when stored in a ptr-to-function variable.  */
15754 
15755   gcc_assert (building_stmt_list_p ());
15756   /* The current function is being defined, so its DECL_INITIAL should
15757      be set, and unless there's a multiple definition, it should be
15758      error_mark_node.  */
15759   gcc_assert (DECL_INITIAL (fndecl) == error_mark_node);
15760 
15761   /* For a cloned function, we've already got all the code we need;
15762      there's no need to add any extra bits.  */
15763   if (!DECL_CLONED_FUNCTION_P (fndecl))
15764     {
15765       /* Make it so that `main' always returns 0 by default.  */
15766       if (DECL_MAIN_P (current_function_decl))
15767           finish_return_stmt (integer_zero_node);
15768 
15769       if (use_eh_spec_block (current_function_decl))
15770           finish_eh_spec_block (TYPE_RAISES_EXCEPTIONS
15771                                     (TREE_TYPE (current_function_decl)),
15772                                     current_eh_spec_block);
15773     }
15774 
15775   /* If we're saving up tree structure, tie off the function now.  */
15776   DECL_SAVED_TREE (fndecl) = pop_stmt_list (DECL_SAVED_TREE (fndecl));
15777 
15778   finish_fname_decls ();
15779 
15780   /* If this function can't throw any exceptions, remember that.  */
15781   if (!processing_template_decl
15782       && !cp_function_chain->can_throw
15783       && !flag_non_call_exceptions
15784       && !decl_replaceable_p (fndecl))
15785     TREE_NOTHROW (fndecl) = 1;
15786 
15787   /* This must come after expand_function_end because cleanups might
15788      have declarations (from inline functions) that need to go into
15789      this function's blocks.  */
15790 
15791   /* If the current binding level isn't the outermost binding level
15792      for this function, either there is a bug, or we have experienced
15793      syntax errors and the statement tree is malformed.  */
15794   if (current_binding_level->kind != sk_function_parms)
15795     {
15796       /* Make sure we have already experienced errors.  */
15797       gcc_assert (errorcount);
15798 
15799       /* Throw away the broken statement tree and extra binding
15800            levels.  */
15801       DECL_SAVED_TREE (fndecl) = alloc_stmt_list ();
15802 
15803       while (current_binding_level->kind != sk_function_parms)
15804           {
15805             if (current_binding_level->kind == sk_class)
15806               pop_nested_class ();
15807             else
15808               poplevel (0, 0, 0);
15809           }
15810     }
15811   poplevel (1, 0, 1);
15812 
15813   /* Statements should always be full-expressions at the outermost set
15814      of curly braces for a function.  */
15815   gcc_assert (stmts_are_full_exprs_p ());
15816 
15817   /* If there are no return statements in a function with auto return type,
15818      the return type is void.  But if the declared type is something like
15819      auto*, this is an error.  */
15820   if (!processing_template_decl && FNDECL_USED_AUTO (fndecl)
15821       && TREE_TYPE (fntype) == current_function_auto_return_pattern)
15822     {
15823       if (is_auto (current_function_auto_return_pattern))
15824           {
15825             apply_deduced_return_type (fndecl, void_type_node);
15826             fntype = TREE_TYPE (fndecl);
15827           }
15828       else if (!current_function_returns_value
15829                  && !current_function_returns_null)
15830           {
15831             error ("no return statements in function returning %qT",
15832                      current_function_auto_return_pattern);
15833             inform (input_location, "only plain %<auto%> return type can be "
15834                       "deduced to %<void%>");
15835           }
15836     }
15837 
15838   // If this is a concept, check that the definition is reasonable.
15839   if (DECL_DECLARED_CONCEPT_P (fndecl))
15840     check_function_concept (fndecl);
15841 
15842   /* Lambda closure members are implicitly constexpr if possible.  */
15843   if (cxx_dialect >= cxx17
15844       && LAMBDA_TYPE_P (CP_DECL_CONTEXT (fndecl)))
15845     DECL_DECLARED_CONSTEXPR_P (fndecl)
15846       = ((processing_template_decl
15847             || is_valid_constexpr_fn (fndecl, /*complain*/false))
15848            && potential_constant_expression (DECL_SAVED_TREE (fndecl)));
15849 
15850   /* Save constexpr function body before it gets munged by
15851      the NRV transformation.   */
15852   maybe_save_function_definition (fndecl);
15853 
15854   /* Invoke the pre-genericize plugin before we start munging things.  */
15855   if (!processing_template_decl)
15856     invoke_plugin_callbacks (PLUGIN_PRE_GENERICIZE, fndecl);
15857 
15858   /* Perform delayed folding before NRV transformation.  */
15859   if (!processing_template_decl)
15860     cp_fold_function (fndecl);
15861 
15862   /* Set up the named return value optimization, if we can.  Candidate
15863      variables are selected in check_return_expr.  */
15864   if (current_function_return_value)
15865     {
15866       tree r = current_function_return_value;
15867       tree outer;
15868 
15869       if (r != error_mark_node
15870             /* This is only worth doing for fns that return in memory--and
15871                simpler, since we don't have to worry about promoted modes.  */
15872             && aggregate_value_p (TREE_TYPE (TREE_TYPE (fndecl)), fndecl)
15873             /* Only allow this for variables declared in the outer scope of
15874                the function so we know that their lifetime always ends with a
15875                return; see g++.dg/opt/nrv6.C.  We could be more flexible if
15876                we were to do this optimization in tree-ssa.  */
15877             && (outer = outer_curly_brace_block (fndecl))
15878             && chain_member (r, BLOCK_VARS (outer)))
15879           finalize_nrv (&DECL_SAVED_TREE (fndecl), r, DECL_RESULT (fndecl));
15880 
15881       current_function_return_value = NULL_TREE;
15882     }
15883 
15884   /* Remember that we were in class scope.  */
15885   if (current_class_name)
15886     ctype = current_class_type;
15887 
15888   /* Must mark the RESULT_DECL as being in this function.  */
15889   DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
15890 
15891   /* Set the BLOCK_SUPERCONTEXT of the outermost function scope to point
15892      to the FUNCTION_DECL node itself.  */
15893   BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
15894 
15895   /* Save away current state, if appropriate.  */
15896   if (!processing_template_decl)
15897     save_function_data (fndecl);
15898 
15899   /* Complain if there's just no return statement.  */
15900   if (warn_return_type
15901       && !VOID_TYPE_P (TREE_TYPE (fntype))
15902       && !dependent_type_p (TREE_TYPE (fntype))
15903       && !current_function_returns_value && !current_function_returns_null
15904       /* Don't complain if we abort or throw.  */
15905       && !current_function_returns_abnormally
15906       /* Don't complain if there's an infinite loop.  */
15907       && !current_function_infinite_loop
15908       /* Don't complain if we are declared noreturn.  */
15909       && !TREE_THIS_VOLATILE (fndecl)
15910       && !DECL_NAME (DECL_RESULT (fndecl))
15911       && !TREE_NO_WARNING (fndecl)
15912       /* Structor return values (if any) are set by the compiler.  */
15913       && !DECL_CONSTRUCTOR_P (fndecl)
15914       && !DECL_DESTRUCTOR_P (fndecl)
15915       && targetm.warn_func_return (fndecl))
15916     {
15917       warning (OPT_Wreturn_type,
15918                  "no return statement in function returning non-void");
15919       TREE_NO_WARNING (fndecl) = 1;
15920     }
15921 
15922   /* Store the end of the function, so that we get good line number
15923      info for the epilogue.  */
15924   cfun->function_end_locus = input_location;
15925 
15926   /* Complain about parameters that are only set, but never otherwise used.  */
15927   if (warn_unused_but_set_parameter
15928       && !processing_template_decl
15929       && errorcount == unused_but_set_errorcount
15930       && !DECL_CLONED_FUNCTION_P (fndecl))
15931     {
15932       tree decl;
15933 
15934       for (decl = DECL_ARGUMENTS (fndecl);
15935              decl;
15936              decl = DECL_CHAIN (decl))
15937           if (TREE_USED (decl)
15938               && TREE_CODE (decl) == PARM_DECL
15939               && !DECL_READ_P (decl)
15940               && DECL_NAME (decl)
15941               && !DECL_ARTIFICIAL (decl)
15942               && !TREE_NO_WARNING (decl)
15943               && !DECL_IN_SYSTEM_HEADER (decl)
15944               && TREE_TYPE (decl) != error_mark_node
15945               && TREE_CODE (TREE_TYPE (decl)) != REFERENCE_TYPE
15946               && (!CLASS_TYPE_P (TREE_TYPE (decl))
15947                   || !TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (decl))))
15948             warning_at (DECL_SOURCE_LOCATION (decl),
15949                           OPT_Wunused_but_set_parameter,
15950                           "parameter %qD set but not used", decl);
15951       unused_but_set_errorcount = errorcount;
15952     }
15953 
15954   /* Complain about locally defined typedefs that are not used in this
15955      function.  */
15956   maybe_warn_unused_local_typedefs ();
15957 
15958   /* Possibly warn about unused parameters.  */
15959   if (warn_unused_parameter
15960       && !processing_template_decl
15961       && !DECL_CLONED_FUNCTION_P (fndecl))
15962     do_warn_unused_parameter (fndecl);
15963 
15964   /* Genericize before inlining.  */
15965   if (!processing_template_decl)
15966     {
15967       struct language_function *f = DECL_SAVED_FUNCTION_DATA (fndecl);
15968       cp_genericize (fndecl);
15969       /* Clear out the bits we don't need.  */
15970       f->x_current_class_ptr = NULL;
15971       f->x_current_class_ref = NULL;
15972       f->x_eh_spec_block = NULL;
15973       f->x_in_charge_parm = NULL;
15974       f->x_vtt_parm = NULL;
15975       f->x_return_value = NULL;
15976       f->bindings = NULL;
15977       f->extern_decl_map = NULL;
15978       f->infinite_loops = NULL;
15979     }
15980   /* Clear out the bits we don't need.  */
15981   local_names = NULL;
15982 
15983   /* We're leaving the context of this function, so zap cfun.  It's still in
15984      DECL_STRUCT_FUNCTION, and we'll restore it in tree_rest_of_compilation.  */
15985   set_cfun (NULL);
15986   current_function_decl = NULL;
15987 
15988   /* If this is an in-class inline definition, we may have to pop the
15989      bindings for the template parameters that we added in
15990      maybe_begin_member_template_processing when start_function was
15991      called.  */
15992   if (inline_p)
15993     maybe_end_member_template_processing ();
15994 
15995   /* Leave the scope of the class.  */
15996   if (ctype)
15997     pop_nested_class ();
15998 
15999   --function_depth;
16000 
16001   /* Clean up.  */
16002   current_function_decl = NULL_TREE;
16003 
16004   invoke_plugin_callbacks (PLUGIN_FINISH_PARSE_FUNCTION, fndecl);
16005   return fndecl;
16006 }
16007 
16008 /* Create the FUNCTION_DECL for a function definition.
16009    DECLSPECS and DECLARATOR are the parts of the declaration;
16010    they describe the return type and the name of the function,
16011    but twisted together in a fashion that parallels the syntax of C.
16012 
16013    This function creates a binding context for the function body
16014    as well as setting up the FUNCTION_DECL in current_function_decl.
16015 
16016    Returns a FUNCTION_DECL on success.
16017 
16018    If the DECLARATOR is not suitable for a function (it defines a datum
16019    instead), we return 0, which tells yyparse to report a parse error.
16020 
16021    May return void_type_node indicating that this method is actually
16022    a friend.  See grokfield for more details.
16023 
16024    Came here with a `.pushlevel' .
16025 
16026    DO NOT MAKE ANY CHANGES TO THIS CODE WITHOUT MAKING CORRESPONDING
16027    CHANGES TO CODE IN `grokfield'.  */
16028 
16029 tree
grokmethod(cp_decl_specifier_seq * declspecs,const cp_declarator * declarator,tree attrlist)16030 grokmethod (cp_decl_specifier_seq *declspecs,
16031               const cp_declarator *declarator, tree attrlist)
16032 {
16033   tree fndecl = grokdeclarator (declarator, declspecs, MEMFUNCDEF, 0,
16034                                         &attrlist);
16035 
16036   if (fndecl == error_mark_node)
16037     return error_mark_node;
16038 
16039   if (fndecl == NULL || TREE_CODE (fndecl) != FUNCTION_DECL)
16040     {
16041       error ("invalid member function declaration");
16042       return error_mark_node;
16043     }
16044 
16045   if (attrlist)
16046     cplus_decl_attributes (&fndecl, attrlist, 0);
16047 
16048   /* Pass friends other than inline friend functions back.  */
16049   if (fndecl == void_type_node)
16050     return fndecl;
16051 
16052   if (DECL_IN_AGGR_P (fndecl))
16053     {
16054       if (DECL_CLASS_SCOPE_P (fndecl))
16055           error ("%qD is already defined in class %qT", fndecl,
16056                  DECL_CONTEXT (fndecl));
16057       return error_mark_node;
16058     }
16059 
16060   check_template_shadow (fndecl);
16061 
16062   if (TREE_PUBLIC (fndecl))
16063     DECL_COMDAT (fndecl) = 1;
16064   DECL_DECLARED_INLINE_P (fndecl) = 1;
16065   DECL_NO_INLINE_WARNING_P (fndecl) = 1;
16066 
16067   /* We process method specializations in finish_struct_1.  */
16068   if (processing_template_decl && !DECL_TEMPLATE_SPECIALIZATION (fndecl))
16069     {
16070       fndecl = push_template_decl (fndecl);
16071       if (fndecl == error_mark_node)
16072           return fndecl;
16073     }
16074 
16075   if (! DECL_FRIEND_P (fndecl))
16076     {
16077       if (DECL_CHAIN (fndecl))
16078           {
16079             fndecl = copy_node (fndecl);
16080             TREE_CHAIN (fndecl) = NULL_TREE;
16081           }
16082     }
16083 
16084   cp_finish_decl (fndecl, NULL_TREE, false, NULL_TREE, 0);
16085 
16086   DECL_IN_AGGR_P (fndecl) = 1;
16087   return fndecl;
16088 }
16089 
16090 
16091 /* VAR is a VAR_DECL.  If its type is incomplete, remember VAR so that
16092    we can lay it out later, when and if its type becomes complete.
16093 
16094    Also handle constexpr variables where the initializer involves
16095    an unlowered PTRMEM_CST because the class isn't complete yet.  */
16096 
16097 void
maybe_register_incomplete_var(tree var)16098 maybe_register_incomplete_var (tree var)
16099 {
16100   gcc_assert (VAR_P (var));
16101 
16102   /* Keep track of variables with incomplete types.  */
16103   if (!processing_template_decl && TREE_TYPE (var) != error_mark_node
16104       && DECL_EXTERNAL (var))
16105     {
16106       tree inner_type = TREE_TYPE (var);
16107 
16108       while (TREE_CODE (inner_type) == ARRAY_TYPE)
16109           inner_type = TREE_TYPE (inner_type);
16110       inner_type = TYPE_MAIN_VARIANT (inner_type);
16111 
16112       if ((!COMPLETE_TYPE_P (inner_type) && CLASS_TYPE_P (inner_type))
16113             /* RTTI TD entries are created while defining the type_info.  */
16114             || (TYPE_LANG_SPECIFIC (inner_type)
16115                 && TYPE_BEING_DEFINED (inner_type)))
16116           {
16117             incomplete_var iv = {var, inner_type};
16118             vec_safe_push (incomplete_vars, iv);
16119           }
16120       else if (!(DECL_LANG_SPECIFIC (var) && DECL_TEMPLATE_INFO (var))
16121                  && decl_constant_var_p (var)
16122                  && (TYPE_PTRMEM_P (inner_type) || CLASS_TYPE_P (inner_type)))
16123           {
16124             /* When the outermost open class is complete we can resolve any
16125                pointers-to-members.  */
16126             tree context = outermost_open_class ();
16127             incomplete_var iv = {var, context};
16128             vec_safe_push (incomplete_vars, iv);
16129           }
16130     }
16131 }
16132 
16133 /* Called when a class type (given by TYPE) is defined.  If there are
16134    any existing VAR_DECLs whose type has been completed by this
16135    declaration, update them now.  */
16136 
16137 void
complete_vars(tree type)16138 complete_vars (tree type)
16139 {
16140   unsigned ix;
16141   incomplete_var *iv;
16142 
16143   for (ix = 0; vec_safe_iterate (incomplete_vars, ix, &iv); )
16144     {
16145       if (same_type_p (type, iv->incomplete_type))
16146           {
16147             tree var = iv->decl;
16148             tree type = TREE_TYPE (var);
16149 
16150             if (type != error_mark_node
16151                 && (TYPE_MAIN_VARIANT (strip_array_types (type))
16152                       == iv->incomplete_type))
16153               {
16154                 /* Complete the type of the variable.  The VAR_DECL itself
16155                      will be laid out in expand_expr.  */
16156                 complete_type (type);
16157                 cp_apply_type_quals_to_decl (cp_type_quals (type), var);
16158               }
16159 
16160             /* Remove this entry from the list.  */
16161             incomplete_vars->unordered_remove (ix);
16162           }
16163       else
16164           ix++;
16165     }
16166 
16167   /* Check for pending declarations which may have abstract type.  */
16168   complete_type_check_abstract (type);
16169 }
16170 
16171 /* If DECL is of a type which needs a cleanup, build and return an
16172    expression to perform that cleanup here.  Return NULL_TREE if no
16173    cleanup need be done.  DECL can also be a _REF when called from
16174    split_nonconstant_init_1.  */
16175 
16176 tree
cxx_maybe_build_cleanup(tree decl,tsubst_flags_t complain)16177 cxx_maybe_build_cleanup (tree decl, tsubst_flags_t complain)
16178 {
16179   tree type;
16180   tree attr;
16181   tree cleanup;
16182 
16183   /* Assume no cleanup is required.  */
16184   cleanup = NULL_TREE;
16185 
16186   if (error_operand_p (decl))
16187     return cleanup;
16188 
16189   /* Handle "__attribute__((cleanup))".  We run the cleanup function
16190      before the destructor since the destructor is what actually
16191      terminates the lifetime of the object.  */
16192   if (DECL_P (decl))
16193     attr = lookup_attribute ("cleanup", DECL_ATTRIBUTES (decl));
16194   else
16195     attr = NULL_TREE;
16196   if (attr)
16197     {
16198       tree id;
16199       tree fn;
16200       tree arg;
16201 
16202       /* Get the name specified by the user for the cleanup function.  */
16203       id = TREE_VALUE (TREE_VALUE (attr));
16204       /* Look up the name to find the cleanup function to call.  It is
16205            important to use lookup_name here because that is what is
16206            used in c-common.c:handle_cleanup_attribute when performing
16207            initial checks on the attribute.  Note that those checks
16208            include ensuring that the function found is not an overloaded
16209            function, or an object with an overloaded call operator,
16210            etc.; we can rely on the fact that the function found is an
16211            ordinary FUNCTION_DECL.  */
16212       fn = lookup_name (id);
16213       arg = build_address (decl);
16214       if (!mark_used (decl, complain) && !(complain & tf_error))
16215           return error_mark_node;
16216       cleanup = cp_build_function_call_nary (fn, complain, arg, NULL_TREE);
16217       if (cleanup == error_mark_node)
16218           return error_mark_node;
16219     }
16220   /* Handle ordinary C++ destructors.  */
16221   type = TREE_TYPE (decl);
16222   if (type_build_dtor_call (type))
16223     {
16224       int flags = LOOKUP_NORMAL|LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR;
16225       tree addr;
16226       tree call;
16227 
16228       if (TREE_CODE (type) == ARRAY_TYPE)
16229           addr = decl;
16230       else
16231           addr = build_address (decl);
16232 
16233       call = build_delete (TREE_TYPE (addr), addr,
16234                                  sfk_complete_destructor, flags, 0, complain);
16235       if (call == error_mark_node)
16236           cleanup = error_mark_node;
16237       else if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
16238           /* Discard the call.  */;
16239       else if (cleanup)
16240           cleanup = cp_build_compound_expr (cleanup, call, complain);
16241       else
16242           cleanup = call;
16243     }
16244 
16245   /* build_delete sets the location of the destructor call to the
16246      current location, even though the destructor is going to be
16247      called later, at the end of the current scope.  This can lead to
16248      a "jumpy" behavior for users of debuggers when they step around
16249      the end of the block.  So let's unset the location of the
16250      destructor call instead.  */
16251   protected_set_expr_location (cleanup, UNKNOWN_LOCATION);
16252 
16253   if (cleanup
16254       && DECL_P (decl)
16255       && !lookup_attribute ("warn_unused", TYPE_ATTRIBUTES (TREE_TYPE (decl)))
16256       /* Treat objects with destructors as used; the destructor may do
16257            something substantive.  */
16258       && !mark_used (decl, complain) && !(complain & tf_error))
16259     return error_mark_node;
16260 
16261   return cleanup;
16262 }
16263 
16264 
16265 /* Return the FUNCTION_TYPE that corresponds to MEMFNTYPE, which can be a
16266    FUNCTION_DECL, METHOD_TYPE, FUNCTION_TYPE, pointer or reference to
16267    METHOD_TYPE or FUNCTION_TYPE, or pointer to member function.  */
16268 
16269 tree
static_fn_type(tree memfntype)16270 static_fn_type (tree memfntype)
16271 {
16272   tree fntype;
16273   tree args;
16274 
16275   if (TYPE_PTRMEMFUNC_P (memfntype))
16276     memfntype = TYPE_PTRMEMFUNC_FN_TYPE (memfntype);
16277   if (POINTER_TYPE_P (memfntype)
16278       || TREE_CODE (memfntype) == FUNCTION_DECL)
16279     memfntype = TREE_TYPE (memfntype);
16280   if (TREE_CODE (memfntype) == FUNCTION_TYPE)
16281     return memfntype;
16282   gcc_assert (TREE_CODE (memfntype) == METHOD_TYPE);
16283   args = TYPE_ARG_TYPES (memfntype);
16284   cp_ref_qualifier rqual = type_memfn_rqual (memfntype);
16285   fntype = build_function_type (TREE_TYPE (memfntype), TREE_CHAIN (args));
16286   fntype = apply_memfn_quals (fntype, type_memfn_quals (memfntype), rqual);
16287   fntype = (cp_build_type_attribute_variant
16288               (fntype, TYPE_ATTRIBUTES (memfntype)));
16289   fntype = (build_exception_variant
16290               (fntype, TYPE_RAISES_EXCEPTIONS (memfntype)));
16291   if (TYPE_HAS_LATE_RETURN_TYPE (memfntype))
16292     TYPE_HAS_LATE_RETURN_TYPE (fntype) = 1;
16293   return fntype;
16294 }
16295 
16296 /* DECL was originally constructed as a non-static member function,
16297    but turned out to be static.  Update it accordingly.  */
16298 
16299 void
revert_static_member_fn(tree decl)16300 revert_static_member_fn (tree decl)
16301 {
16302   tree stype = static_fn_type (decl);
16303   cp_cv_quals quals = type_memfn_quals (stype);
16304   cp_ref_qualifier rqual = type_memfn_rqual (stype);
16305 
16306   if (quals != TYPE_UNQUALIFIED || rqual != REF_QUAL_NONE)
16307     stype = apply_memfn_quals (stype, TYPE_UNQUALIFIED, REF_QUAL_NONE);
16308 
16309   TREE_TYPE (decl) = stype;
16310 
16311   if (DECL_ARGUMENTS (decl))
16312     DECL_ARGUMENTS (decl) = DECL_CHAIN (DECL_ARGUMENTS (decl));
16313   DECL_STATIC_FUNCTION_P (decl) = 1;
16314 }
16315 
16316 /* Return which tree structure is used by T, or TS_CP_GENERIC if T is
16317    one of the language-independent trees.  */
16318 
16319 enum cp_tree_node_structure_enum
cp_tree_node_structure(union lang_tree_node * t)16320 cp_tree_node_structure (union lang_tree_node * t)
16321 {
16322   switch (TREE_CODE (&t->generic))
16323     {
16324     case DEFAULT_ARG:                   return TS_CP_DEFAULT_ARG;
16325     case DEFERRED_NOEXCEPT:   return TS_CP_DEFERRED_NOEXCEPT;
16326     case IDENTIFIER_NODE:     return TS_CP_IDENTIFIER;
16327     case OVERLOAD:            return TS_CP_OVERLOAD;
16328     case TEMPLATE_PARM_INDEX: return TS_CP_TPI;
16329     case PTRMEM_CST:                    return TS_CP_PTRMEM;
16330     case BASELINK:            return TS_CP_BASELINK;
16331     case TEMPLATE_DECL:                 return TS_CP_TEMPLATE_DECL;
16332     case STATIC_ASSERT:                 return TS_CP_STATIC_ASSERT;
16333     case ARGUMENT_PACK_SELECT:  return TS_CP_ARGUMENT_PACK_SELECT;
16334     case TRAIT_EXPR:                    return TS_CP_TRAIT_EXPR;
16335     case LAMBDA_EXPR:                   return TS_CP_LAMBDA_EXPR;
16336     case TEMPLATE_INFO:                 return TS_CP_TEMPLATE_INFO;
16337     case CONSTRAINT_INFO:       return TS_CP_CONSTRAINT_INFO;
16338     case USERDEF_LITERAL:     return TS_CP_USERDEF_LITERAL;
16339     default:                            return TS_CP_GENERIC;
16340     }
16341 }
16342 
16343 /* Build the void_list_node (void_type_node having been created).  */
16344 tree
build_void_list_node(void)16345 build_void_list_node (void)
16346 {
16347   tree t = build_tree_list (NULL_TREE, void_type_node);
16348   return t;
16349 }
16350 
16351 bool
cp_missing_noreturn_ok_p(tree decl)16352 cp_missing_noreturn_ok_p (tree decl)
16353 {
16354   /* A missing noreturn is ok for the `main' function.  */
16355   return DECL_MAIN_P (decl);
16356 }
16357 
16358 /* Return the decl used to identify the COMDAT group into which DECL should
16359    be placed.  */
16360 
16361 tree
cxx_comdat_group(tree decl)16362 cxx_comdat_group (tree decl)
16363 {
16364   /* Virtual tables, construction virtual tables, and virtual table
16365      tables all go in a single COMDAT group, named after the primary
16366      virtual table.  */
16367   if (VAR_P (decl) && DECL_VTABLE_OR_VTT_P (decl))
16368     decl = CLASSTYPE_VTABLES (DECL_CONTEXT (decl));
16369   /* For all other DECLs, the COMDAT group is the mangled name of the
16370      declaration itself.  */
16371   else
16372     {
16373       while (DECL_THUNK_P (decl))
16374           {
16375             /* If TARGET_USE_LOCAL_THUNK_ALIAS_P, use_thunk puts the thunk
16376                into the same section as the target function.  In that case
16377                we must return target's name.  */
16378             tree target = THUNK_TARGET (decl);
16379             if (TARGET_USE_LOCAL_THUNK_ALIAS_P (target)
16380                 && DECL_SECTION_NAME (target) != NULL
16381                 && DECL_ONE_ONLY (target))
16382               decl = target;
16383             else
16384               break;
16385           }
16386     }
16387 
16388   return decl;
16389 }
16390 
16391 /* Returns the return type for FN as written by the user, which may include
16392    a placeholder for a deduced return type.  */
16393 
16394 tree
fndecl_declared_return_type(tree fn)16395 fndecl_declared_return_type (tree fn)
16396 {
16397   fn = STRIP_TEMPLATE (fn);
16398   if (FNDECL_USED_AUTO (fn))
16399     {
16400       struct language_function *f = NULL;
16401       if (DECL_STRUCT_FUNCTION (fn))
16402           f = DECL_STRUCT_FUNCTION (fn)->language;
16403       if (f == NULL)
16404           f = DECL_SAVED_FUNCTION_DATA (fn);
16405       return f->x_auto_return_pattern;
16406     }
16407   return TREE_TYPE (TREE_TYPE (fn));
16408 }
16409 
16410 /* Returns true iff DECL is a variable or function declared with an auto type
16411    that has not yet been deduced to a real type.  */
16412 
16413 bool
undeduced_auto_decl(tree decl)16414 undeduced_auto_decl (tree decl)
16415 {
16416   if (cxx_dialect < cxx11)
16417     return false;
16418   return ((VAR_OR_FUNCTION_DECL_P (decl)
16419              || TREE_CODE (decl) == TEMPLATE_DECL)
16420             && type_uses_auto (TREE_TYPE (decl)));
16421 }
16422 
16423 /* Complain if DECL has an undeduced return type.  */
16424 
16425 bool
require_deduced_type(tree decl,tsubst_flags_t complain)16426 require_deduced_type (tree decl, tsubst_flags_t complain)
16427 {
16428   if (undeduced_auto_decl (decl))
16429     {
16430       if (complain & tf_error)
16431           error ("use of %qD before deduction of %<auto%>", decl);
16432       return false;
16433     }
16434   return true;
16435 }
16436 
16437 #include "gt-cp-decl.h"
16438